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
path: root/app/src
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2021-04-28 21:04:30 +0300
committerStefan Niedermann <info@niedermann.it>2021-04-28 21:04:30 +0300
commitb0caa3acd78a395625d742ad959ce003cda2c73e (patch)
tree5d07de22542dfae539d5d78a9d1b5143e782dbd5 /app/src
parent4b416116d5017d8e571135bedc0409a75a87e9f5 (diff)
#1167 Use retrofit also for capabilities endpoint
Use Observable to get headers
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java6
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesServerSyncTask.java103
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI.java3
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI_0_2.java3
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI_1_0.java3
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/OcsAPI.java3
6 files changed, 60 insertions, 61 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java
index ecf9dfcf..29df3110 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java
@@ -34,10 +34,10 @@ public class CapabilitiesClient {
public static Capabilities getCapabilities(@NonNull Context context, @NonNull SingleSignOnAccount ssoAccount, @Nullable String lastETag) throws NextcloudHttpRequestFailedException, IOException {
final NextcloudAPI nextcloudAPI = SSOClient.getNextcloudAPI(context.getApplicationContext(), ssoAccount);
final OcsAPI ocsAPI = new NextcloudRetrofitApiBuilder(nextcloudAPI, API_ENDPOINT_OCS).create(OcsAPI.class);
- final Response<ParsedResponse<Capabilities>> response = ocsAPI.getCapabilities(lastETag).execute();
+ final ParsedResponse<Capabilities> response = ocsAPI.getCapabilities(lastETag).blockingSingle();
try {
- final Capabilities capabilities = response.body().getResponse();
- final Map<String, String> headers = response.body().getHeaders();
+ final Capabilities capabilities = response.getResponse();
+ final Map<String, String> headers = response.getHeaders();
if (headers != null) {
capabilities.setETag(headers.get(HEADER_KEY_ETAG));
} else {
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesServerSyncTask.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesServerSyncTask.java
index 79e844ae..9a4cdb5f 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesServerSyncTask.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesServerSyncTask.java
@@ -202,72 +202,67 @@ abstract class NotesServerSyncTask extends Thread {
localAccount.setModified(accountFromDatabase.getModified());
localAccount.setETag(accountFromDatabase.getETag());
- final Response<ParsedResponse<List<Note>>> fetchResponse = notesAPI.getNotes(localAccount.getModified().getTimeInMillis() / 1_000, localAccount.getETag()).execute();
- if (fetchResponse.isSuccessful()) {
- final List<Note> remoteNotes = fetchResponse.body().getResponse();
- final Set<Long> remoteIDs = new HashSet<>();
- // pull remote changes: update or create each remote note
- for (Note remoteNote : remoteNotes) {
- Log.v(TAG, " Process Remote Note: " + remoteNote);
- remoteIDs.add(remoteNote.getRemoteId());
- if (remoteNote.getModified() == null) {
- Log.v(TAG, " ... unchanged");
- } else if (idMap.containsKey(remoteNote.getRemoteId())) {
- Log.v(TAG, " ... found → Update");
- Long localId = idMap.get(remoteNote.getRemoteId());
- if (localId != null) {
- repo.updateIfNotModifiedLocallyAndAnyRemoteColumnHasChanged(
- localId, remoteNote.getModified().getTimeInMillis(), remoteNote.getTitle(), remoteNote.getFavorite(), remoteNote.getCategory(), remoteNote.getETag(), remoteNote.getContent(), generateNoteExcerpt(remoteNote.getContent(), remoteNote.getTitle()));
- } else {
- Log.e(TAG, "Tried to update note from server, but local id of note is null. " + remoteNote);
- }
+ final ParsedResponse<List<Note>> fetchResponse = notesAPI.getNotes(localAccount.getModified().getTimeInMillis() / 1_000, localAccount.getETag()).blockingSingle();
+ final List<Note> remoteNotes = fetchResponse.getResponse();
+ final Set<Long> remoteIDs = new HashSet<>();
+ // pull remote changes: update or create each remote note
+ for (Note remoteNote : remoteNotes) {
+ Log.v(TAG, " Process Remote Note: " + remoteNote);
+ remoteIDs.add(remoteNote.getRemoteId());
+ if (remoteNote.getModified() == null) {
+ Log.v(TAG, " ... unchanged");
+ } else if (idMap.containsKey(remoteNote.getRemoteId())) {
+ Log.v(TAG, " ... found → Update");
+ Long localId = idMap.get(remoteNote.getRemoteId());
+ if (localId != null) {
+ repo.updateIfNotModifiedLocallyAndAnyRemoteColumnHasChanged(
+ localId, remoteNote.getModified().getTimeInMillis(), remoteNote.getTitle(), remoteNote.getFavorite(), remoteNote.getCategory(), remoteNote.getETag(), remoteNote.getContent(), generateNoteExcerpt(remoteNote.getContent(), remoteNote.getTitle()));
} else {
- Log.v(TAG, " ... create");
- repo.addNote(localAccount.getId(), remoteNote);
+ Log.e(TAG, "Tried to update note from server, but local id of note is null. " + remoteNote);
}
+ } else {
+ Log.v(TAG, " ... create");
+ repo.addNote(localAccount.getId(), remoteNote);
}
- Log.d(TAG, " Remove remotely deleted Notes (only those without local changes)");
- // remove remotely deleted notes (only those without local changes)
- for (Map.Entry<Long, Long> entry : idMap.entrySet()) {
- if (!remoteIDs.contains(entry.getKey())) {
- Log.v(TAG, " ... remove " + entry.getValue());
- repo.deleteByNoteId(entry.getValue(), DBStatus.VOID);
- }
+ }
+ Log.d(TAG, " Remove remotely deleted Notes (only those without local changes)");
+ // remove remotely deleted notes (only those without local changes)
+ for (Map.Entry<Long, Long> entry : idMap.entrySet()) {
+ if (!remoteIDs.contains(entry.getKey())) {
+ Log.v(TAG, " ... remove " + entry.getValue());
+ repo.deleteByNoteId(entry.getValue(), DBStatus.VOID);
}
+ }
- // update ETag and Last-Modified in order to reduce size of next response
- localAccount.setETag(fetchResponse.body().getHeaders().get(HEADER_KEY_ETAG));
+ // update ETag and Last-Modified in order to reduce size of next response
+ localAccount.setETag(fetchResponse.getHeaders().get(HEADER_KEY_ETAG));
- final Calendar lastModified = Calendar.getInstance();
- lastModified.setTimeInMillis(0);
- final String lastModifiedHeader = fetchResponse.body().getHeaders().get(HEADER_KEY_LAST_MODIFIED);
- if (lastModifiedHeader != null)
- lastModified.setTimeInMillis(Date.parse(lastModifiedHeader));
- Log.d(TAG, "ETag: " + fetchResponse.body().getHeaders().get(HEADER_KEY_ETAG) + "; Last-Modified: " + lastModified + " (" + lastModified + ")");
+ final Calendar lastModified = Calendar.getInstance();
+ lastModified.setTimeInMillis(0);
+ final String lastModifiedHeader = fetchResponse.getHeaders().get(HEADER_KEY_LAST_MODIFIED);
+ if (lastModifiedHeader != null)
+ lastModified.setTimeInMillis(Date.parse(lastModifiedHeader));
+ Log.d(TAG, "ETag: " + fetchResponse.getHeaders().get(HEADER_KEY_ETAG) + "; Last-Modified: " + lastModified + " (" + lastModified + ")");
- localAccount.setModified(lastModified);
+ localAccount.setModified(lastModified);
- repo.updateETag(localAccount.getId(), localAccount.getETag());
- repo.updateModified(localAccount.getId(), localAccount.getModified().getTimeInMillis());
+ repo.updateETag(localAccount.getId(), localAccount.getETag());
+ repo.updateModified(localAccount.getId(), localAccount.getModified().getTimeInMillis());
- String supportedApiVersions = null;
- final String supportedApiVersionsHeader = fetchResponse.body().getHeaders().get(HEADER_KEY_X_NOTES_API_VERSIONS);
- if (supportedApiVersionsHeader != null) {
- supportedApiVersions = "[" + Objects.requireNonNull(supportedApiVersionsHeader) + "]";
- }
- try {
- if (repo.updateApiVersion(localAccount.getId(), supportedApiVersions)) {
- localAccount.setApiVersion(supportedApiVersions);
- }
- } catch (Exception e) {
- exceptions.add(e);
+ String supportedApiVersions = null;
+ final String supportedApiVersionsHeader = fetchResponse.getHeaders().get(HEADER_KEY_X_NOTES_API_VERSIONS);
+ if (supportedApiVersionsHeader != null) {
+ supportedApiVersions = "[" + Objects.requireNonNull(supportedApiVersionsHeader) + "]";
+ }
+ try {
+ if (repo.updateApiVersion(localAccount.getId(), supportedApiVersions)) {
+ localAccount.setApiVersion(supportedApiVersions);
}
- return true;
- } else {
- exceptions.add(new Exception(fetchResponse.errorBody().string()));
- return false;
+ } catch (Exception e) {
+ exceptions.add(e);
}
+ return true;
// } catch (NextcloudHttpRequestFailedException e) {
// Log.d(TAG, "Server returned HTTP Status Code " + e.getStatusCode() + " - " + e.getMessage());
// if (e.getStatusCode() == HTTP_NOT_MODIFIED) {
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI.java
index 29f3119c..846a96ff 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI.java
@@ -11,6 +11,7 @@ import com.nextcloud.android.sso.api.ParsedResponse;
import java.util.List;
+import io.reactivex.Observable;
import it.niedermann.owncloud.notes.persistence.entity.Note;
import it.niedermann.owncloud.notes.shared.model.ApiVersion;
import retrofit2.Call;
@@ -55,7 +56,7 @@ public class NotesAPI {
}
}
- public Call<ParsedResponse<List<Note>>> getNotes(long lastModified, String lastETag) {
+ public Observable<ParsedResponse<List<Note>>> getNotes(long lastModified, String lastETag) {
if (ApiVersion.API_VERSION_1_0.equals(usedApiVersion)) {
return notesAPI_1_0.getNotes(lastModified, lastETag);
} else if (ApiVersion.API_VERSION_0_2.equals(usedApiVersion)) {
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI_0_2.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI_0_2.java
index 9a77f8c4..e7c2260e 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI_0_2.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI_0_2.java
@@ -7,6 +7,7 @@ import com.nextcloud.android.sso.api.ParsedResponse;
import java.util.Calendar;
import java.util.List;
+import io.reactivex.Observable;
import it.niedermann.owncloud.notes.persistence.entity.Note;
import retrofit2.Call;
import retrofit2.http.Body;
@@ -23,7 +24,7 @@ import retrofit2.http.Query;
public interface NotesAPI_0_2 {
@GET("notes")
- Call<ParsedResponse<List<Note>>> getNotes(@Query(value = "pruneBefore") long lastModified, @Query("If-None-Match") String lastETag);
+ Observable<ParsedResponse<List<Note>>> getNotes(@Query(value = "pruneBefore") long lastModified, @Query("If-None-Match") String lastETag);
default Call<Note> createNote(@Body Note note) {
return createNote(new Note_0_2(note));
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI_1_0.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI_1_0.java
index 1c738ca7..5db5d18e 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI_1_0.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI_1_0.java
@@ -5,6 +5,7 @@ import com.nextcloud.android.sso.api.ParsedResponse;
import java.util.List;
+import io.reactivex.Observable;
import it.niedermann.owncloud.notes.persistence.entity.Note;
import retrofit2.Call;
import retrofit2.http.Body;
@@ -21,7 +22,7 @@ import retrofit2.http.Query;
public interface NotesAPI_1_0 {
@GET("notes")
- Call<ParsedResponse<List<Note>>> getNotes(@Query(value = "pruneBefore") long lastModified, @Query("If-None-Match") String lastETag);
+ Observable<ParsedResponse<List<Note>>> getNotes(@Query(value = "pruneBefore") long lastModified, @Query("If-None-Match") String lastETag);
@POST("notes")
Call<Note> createNote(@Body Note note);
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/OcsAPI.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/OcsAPI.java
index 8923d50f..de8f9e82 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/OcsAPI.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/OcsAPI.java
@@ -3,6 +3,7 @@ package it.niedermann.owncloud.notes.persistence.sync;
import com.nextcloud.android.sso.api.ParsedResponse;
+import io.reactivex.Observable;
import it.niedermann.owncloud.notes.shared.model.Capabilities;
import retrofit2.Call;
import retrofit2.http.GET;
@@ -14,5 +15,5 @@ import retrofit2.http.Query;
public interface OcsAPI {
@GET("capabilities?format=json")
- Call<ParsedResponse<Capabilities>> getCapabilities(@Query("If-None-Match") String eTag);
+ Observable<ParsedResponse<Capabilities>> getCapabilities(@Query("If-None-Match") String eTag);
}