diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-04-28 21:04:30 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-04-28 21:04:30 +0300 |
commit | b0caa3acd78a395625d742ad959ce003cda2c73e (patch) | |
tree | 5d07de22542dfae539d5d78a9d1b5143e782dbd5 /app/src | |
parent | 4b416116d5017d8e571135bedc0409a75a87e9f5 (diff) |
#1167 Use retrofit also for capabilities endpoint
Use Observable to get headers
Diffstat (limited to 'app/src')
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); } |