diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveSheetActivity.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveSheetActivity.kt index 5786f261e..9648fdd25 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveSheetActivity.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveSheetActivity.kt @@ -39,12 +39,11 @@ abstract class SaveSheetActivityBase: AppCompatActivity() { Intent.ACTION_SEND -> { if (intent.type?.startsWith("text/plain") == true) { intent.getStringExtra(Intent.EXTRA_TEXT)?.let { - Log.d(ContentValues.TAG, "Extracted text: $extractedText") extractedText = it viewModel.saveURL(it) + Log.d(ContentValues.TAG, "Extracted text: $extractedText") } } - if (intent.type?.startsWith("text/html") == true) { intent.getStringExtra(Intent.EXTRA_HTML_TEXT)?.let { extractedText = it @@ -155,7 +154,9 @@ abstract class SaveSheetActivityBase: AppCompatActivity() { viewModel: SaveViewModel, modalBottomSheetState: ModalBottomSheetState ) { - Box(modifier = Modifier.height(300.dp).background(Color.White)) { + Box(modifier = Modifier + .height(300.dp) + .background(Color.White)) { SaveContent(viewModel, modalBottomSheetState, modifier = Modifier.fillMaxSize()) } } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveViewModel.kt index b02e92f59..05ad7b3d6 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/save/SaveViewModel.kt @@ -17,6 +17,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import java.util.* +import java.util.regex.Pattern import javax.inject.Inject @HiltViewModel @@ -36,6 +37,11 @@ class SaveViewModel @Inject constructor( datastoreRepo.getString(DatastoreKeys.omnivoreAuthToken) } + fun cleanUrl(url: String): String? { + return Regex("https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)") + .findAll(url).map { it.value }.first() + } + fun saveURL(url: String) { viewModelScope.launch { isLoading = true @@ -54,6 +60,9 @@ class SaveViewModel @Inject constructor( .addHttpHeader("Authorization", value = authToken) .build() + // Attempt to parse the URL out of the text, if that fails send the text + val cleanedUrl = cleanUrl(url) ?: url + try { clientRequestID = UUID.randomUUID().toString() @@ -62,7 +71,7 @@ class SaveViewModel @Inject constructor( SaveUrlInput( clientRequestId = clientRequestID!!, source = "android", - url = url + url = cleanedUrl ) ) ).execute()