Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2021-11-26 15:24:18 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2021-11-29 17:28:10 +0300
commit0133039d63532e73b8619f30a105ef6fd522d997 (patch)
tree947f2c7553f39122f81c53fcfe36727ee023d478 /app/src/main
parentda470bf0cfc27478476fccb7954dc3601e69f499 (diff)
#1165 Add further paths to extract fallback URI
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationViewModel.java45
1 files changed, 41 insertions, 4 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationViewModel.java
index 170af1a4a..1ab8ecc74 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationViewModel.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PushNotificationViewModel.java
@@ -18,6 +18,8 @@ import androidx.lifecycle.MutableLiveData;
import com.nextcloud.android.sso.helper.SingleAccountHelper;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.Optional;
import it.niedermann.nextcloud.deck.DeckLog;
@@ -174,10 +176,10 @@ public class PushNotificationViewModel extends AndroidViewModel {
* will be invoked, otherwise {@link PushNotificationCallback#onError(Throwable)}.
*/
private void publishErrorToCallback(@NonNull String message, @Nullable Throwable cause, @NonNull PushNotificationCallback callback, @NonNull Bundle bundle) {
- try {
- // TODO check behavior of Uri.parse for an empty string
- callback.fallbackToBrowser(Uri.parse(bundle.getString(KEY_LINK)));
- } catch (Throwable t) {
+ final var fallbackUri = extractFallbackUri(bundle);
+ if (fallbackUri.isPresent()) {
+ callback.fallbackToBrowser(fallbackUri.get());
+ } else {
final var info = "Error while receiving push notification:\n"
+ message + "\n"
+ KEY_SUBJECT + ": [" + bundle.getString(KEY_SUBJECT) + "]\n"
@@ -191,6 +193,41 @@ public class PushNotificationViewModel extends AndroidViewModel {
}
}
+ private Optional<Uri> extractFallbackUri(@NonNull Bundle bundle) {
+ final var link = bundle.getString(KEY_LINK, "");
+ if (link.trim().length() == 0) {
+ DeckLog.warn(KEY_LINK, "is blank");
+ return Optional.empty();
+ }
+ try {
+ return Optional.of(Uri.parse(new URL(link).toString()));
+ } catch (MalformedURLException e) {
+ DeckLog.warn(KEY_LINK, "is not a valid URL");
+ final var account = extractAccount(bundle);
+ if (account.isPresent()) {
+ return account.flatMap(value -> link.startsWith("/")
+ ? Optional.of(Uri.parse(value.getUrl() + link))
+ : Optional.of(Uri.parse(value.getUrl() + "/" + link)));
+ } else {
+ DeckLog.warn("Could not extract account");
+ final var accountName = Optional.ofNullable(bundle.getString(KEY_ACCOUNT));
+ //noinspection SimplifyOptionalCallChains
+ if (!accountName.isPresent()) {
+ DeckLog.warn(KEY_ACCOUNT, "is empty");
+ return Optional.empty();
+ }
+ final var parts = accountName.get().split("@");
+ if (parts.length != 2) {
+ DeckLog.warn("Could not split host part from given account", KEY_ACCOUNT);
+ return Optional.empty();
+ }
+ return link.startsWith("/")
+ ? Optional.of(Uri.parse("https://" + parts[1] + link))
+ : Optional.of(Uri.parse("https://" + parts[1] + "/" + link));
+ }
+ }
+ }
+
private Optional<Long> extractCardRemoteId(@NonNull Bundle bundle) {
try {
final String cardRemoteIdString = bundle.getString(KEY_CARD_REMOTE_ID);