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

github.com/stefan-niedermann/nextcloud-notes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2022-03-25 15:11:25 +0300
committerStefan Niedermann <info@niedermann.it>2022-03-25 15:11:25 +0300
commit828ba1c2ee5228dbed5e17bbcb5da83b01ba1372 (patch)
tree1cd98ebe19f937312fe656f83211e870839f0ff3
parent5b06023a51207b3703a0de88779808ca2f19f265 (diff)
- Fix #1475 Detect missing Notes app on server when importing an account
Signed-off-by: Stefan Niedermann <info@niedermann.it>
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java6
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountActivity.java2
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesImportTask.java57
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java37
4 files changed, 60 insertions, 42 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java b/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java
index 7be45752..33de3e81 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/exception/tips/TipsAdapter.java
@@ -73,11 +73,7 @@ public class TipsAdapter extends RecyclerView.Adapter<TipsViewHolder> {
} else if (throwable instanceof NextcloudFilesAppNotSupportedException) {
add(R.string.error_dialog_tip_files_outdated);
} else if (throwable instanceof NextcloudApiNotRespondingException) {
- if (VERSION.SDK_INT >= VERSION_CODES.M) {
- add(R.string.error_dialog_tip_disable_battery_optimizations, new Intent().setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS).putExtra(INTENT_EXTRA_BUTTON_TEXT, R.string.error_action_open_battery_settings));
- } else {
- add(R.string.error_dialog_tip_disable_battery_optimizations);
- }
+ add(R.string.error_dialog_tip_disable_battery_optimizations, new Intent().setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS).putExtra(INTENT_EXTRA_BUTTON_TEXT, R.string.error_action_open_battery_settings));
add(R.string.error_dialog_tip_files_force_stop);
add(R.string.error_dialog_tip_files_delete_storage);
final var intent = new Intent(ACTION_APPLICATION_DETAILS_SETTINGS)
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountActivity.java
index 54e92baf..05d06a78 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountActivity.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/importaccount/ImportAccountActivity.java
@@ -118,7 +118,7 @@ public class ImportAccountActivity extends AppCompatActivity {
@Override
public void onError(@NonNull Throwable t) {
runOnUiThread(() -> {
- binding.addButton.setEnabled(true);
+ restoreCleanState();
ExceptionDialogFragment.newInstance(t).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
});
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesImportTask.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesImportTask.java
index acdf1441..38172b94 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesImportTask.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesImportTask.java
@@ -53,30 +53,41 @@ public class NotesImportTask {
executor.submit(() -> {
Log.i(TAG, "… Fetching notes IDs");
final var status = new ImportStatus();
- final var remoteIds = notesAPI.getNotesIDs().blockingSingle();
- status.total = remoteIds.size();
- status$.postValue(status);
- Log.i(TAG, "… Total count: " + remoteIds.size());
- final var latch = new CountDownLatch(remoteIds.size());
- for (long id : remoteIds) {
- fetchExecutor.submit(() -> {
- try {
- repo.addNote(localAccount.getId(), notesAPI.getNote(id).blockingSingle().getResponse());
- } catch (Throwable t) {
- Log.w(TAG, "Could not import note with remoteId " + id + ": " + t.getMessage());
- status.warnings.add(t);
- }
- status.count++;
- status$.postValue(status);
- latch.countDown();
- });
- }
try {
- latch.await();
- Log.i(TAG, "IMPORT FINISHED");
- callback.onSuccess(null);
- } catch (InterruptedException e) {
- callback.onError(e);
+ final var remoteIds = notesAPI.getNotesIDs().blockingSingle();
+ status.total = remoteIds.size();
+ status$.postValue(status);
+ Log.i(TAG, "… Total count: " + remoteIds.size());
+ final var latch = new CountDownLatch(remoteIds.size());
+ for (long id : remoteIds) {
+ fetchExecutor.submit(() -> {
+ try {
+ repo.addNote(localAccount.getId(), notesAPI.getNote(id).blockingSingle().getResponse());
+ } catch (Throwable t) {
+ Log.w(TAG, "Could not import note with remoteId " + id + ": " + t.getMessage());
+ status.warnings.add(t);
+ }
+ status.count++;
+ status$.postValue(status);
+ latch.countDown();
+ });
+ }
+ try {
+ latch.await();
+ Log.i(TAG, "IMPORT FINISHED");
+ callback.onSuccess(null);
+ } catch (InterruptedException e) {
+ callback.onError(e);
+ }
+ } catch (Throwable t) {
+ final Throwable cause = t.getCause();
+ if (t.getClass() == RuntimeException.class && cause != null) {
+ Log.e(TAG, "Could not fetch list of note IDs: " + cause.getMessage());
+ callback.onError(cause);
+ } else {
+ Log.e(TAG, "Could not fetch list of note IDs: " + t.getMessage());
+ callback.onError(t);
+ }
}
});
return status$;
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java
index 3f5ba31e..27865a3b 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java
@@ -1,5 +1,15 @@
package it.niedermann.owncloud.notes.persistence;
+import static android.os.Build.VERSION.SDK_INT;
+import static android.os.Build.VERSION_CODES.O;
+import static androidx.lifecycle.Transformations.distinctUntilChanged;
+import static androidx.lifecycle.Transformations.map;
+import static java.util.stream.Collectors.toMap;
+import static it.niedermann.owncloud.notes.edit.EditNoteActivity.ACTION_SHORTCUT;
+import static it.niedermann.owncloud.notes.shared.util.NoteUtil.generateNoteExcerpt;
+import static it.niedermann.owncloud.notes.widget.notelist.NoteListWidget.updateNoteListWidgets;
+import static it.niedermann.owncloud.notes.widget.singlenote.SingleNoteWidget.updateSingleNoteWidgets;
+
import android.accounts.NetworkErrorException;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -31,7 +41,6 @@ import com.nextcloud.android.sso.model.SingleSignOnAccount;
import java.util.ArrayList;
import java.util.Calendar;
-import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -66,16 +75,6 @@ import it.niedermann.owncloud.notes.shared.util.NoteUtil;
import it.niedermann.owncloud.notes.shared.util.SSOUtil;
import retrofit2.Call;
-import static android.os.Build.VERSION.SDK_INT;
-import static android.os.Build.VERSION_CODES.O;
-import static androidx.lifecycle.Transformations.distinctUntilChanged;
-import static androidx.lifecycle.Transformations.map;
-import static it.niedermann.owncloud.notes.edit.EditNoteActivity.ACTION_SHORTCUT;
-import static it.niedermann.owncloud.notes.shared.util.NoteUtil.generateNoteExcerpt;
-import static it.niedermann.owncloud.notes.widget.notelist.NoteListWidget.updateNoteListWidgets;
-import static it.niedermann.owncloud.notes.widget.singlenote.SingleNoteWidget.updateSingleNoteWidgets;
-import static java.util.stream.Collectors.toMap;
-
@SuppressWarnings("UnusedReturnValue")
public class NotesRepository {
@@ -186,15 +185,27 @@ public class NotesRepository {
@Override
public void onError(@NonNull Throwable t) {
+ Log.e(TAG, "… Error while importing " + account.getAccountName() + ": " + t.getMessage());
+ deleteAccount(account);
+ SingleAccountHelper.setCurrentAccount(context, null);
callback.onError(t);
}
});
} catch (NextcloudFilesAppAccountNotFoundException e) {
Log.e(TAG, "… Could not find " + SingleSignOnAccount.class.getSimpleName() + " for account name " + account.getAccountName());
- callback.onError(e);
+ importExecutor.submit(() -> {
+ deleteAccount(account);
+ SingleAccountHelper.setCurrentAccount(context, null);
+ callback.onError(e);
+ });
}
} else {
- callback.onError(new NetworkErrorException());
+ Log.e(TAG, "… No network connection available to import " + account.getAccountName());
+ importExecutor.submit(() -> {
+ deleteAccount(account);
+ SingleAccountHelper.setCurrentAccount(context, null);
+ callback.onError(new NetworkErrorException());
+ });
}
}
return new MutableLiveData<>(new ImportStatus());