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
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2021-04-28 11:27:18 +0300
committerStefan Niedermann <info@niedermann.it>2021-04-28 11:27:18 +0300
commit403cdecc8650af44ddec8b627826588e9c229142 (patch)
treef966d96fcf6d12dfa2177b42ff64ef06db86c032 /app
parent4676bb8b6bcb92e9b957b3457ee49601d6fea4e8 (diff)
Respect @Expose annotation for Notes to only (de)serialize the properties that are relevant for the API
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesServerSyncTask.java36
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/SSOClient.java36
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/ApiProvider.java5
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NextcloudAPI.java33
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NotesAPI.java2
5 files changed, 73 insertions, 39 deletions
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 bb22fc30..b3af4ab7 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
@@ -6,7 +6,6 @@ import android.util.Log;
import androidx.annotation.NonNull;
import com.nextcloud.android.sso.AccountImporter;
-import com.nextcloud.android.sso.api.NextcloudAPI;
import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException;
import com.nextcloud.android.sso.exceptions.TokenMismatchException;
@@ -79,31 +78,18 @@ abstract class NotesServerSyncTask extends Thread {
@Override
public void run() {
onPreExecute();
-
- notesClient = new ApiProvider(context, ssoAccount, new NextcloudAPI.ApiConnectedListener() {
- @Override
- public void onConnected() {
- new Thread(() -> {
- Log.i(TAG, "STARTING SYNCHRONIZATION");
- final SyncResultStatus status = new SyncResultStatus();
- status.pushSuccessful = pushLocalChanges();
- if (!onlyLocalChanges) {
- status.pullSuccessful = pullRemoteChanges();
- }
- Log.i(TAG, "SYNCHRONIZATION FINISHED");
-
- onPostExecute(status);
- }).start();
+ notesClient = new ApiProvider(context, ssoAccount);
+ new Thread(() -> {
+ Log.i(TAG, "STARTING SYNCHRONIZATION");
+ final SyncResultStatus status = new SyncResultStatus();
+ status.pushSuccessful = pushLocalChanges();
+ if (!onlyLocalChanges) {
+ status.pullSuccessful = pullRemoteChanges();
}
+ Log.i(TAG, "SYNCHRONIZATION FINISHED");
- @Override
- public void onError(Exception ex) {
- final SyncResultStatus status = new SyncResultStatus();
- status.pullSuccessful = false;
- status.pushSuccessful = false;
- onPostExecute(status);
- }
- });
+ onPostExecute(status);
+ }).start();
}
abstract void onPreExecute();
@@ -211,7 +197,7 @@ abstract class NotesServerSyncTask extends Thread {
localAccount.setModified(accountFromDatabase.getModified());
localAccount.setETag(accountFromDatabase.getETag());
- final Response<List<Note>> fetchResponse = notesClient.getNotesAPI().getNotes(localAccount.getModified(), localAccount.getETag()).execute();
+ final Response<List<Note>> fetchResponse = notesClient.getNotesAPI().getNotes(localAccount.getModified().getTimeInMillis() / 1_000, localAccount.getETag()).execute();
if (fetchResponse.isSuccessful()) {
final List<Note> remoteNotes = fetchResponse.body();
final Set<Long> remoteIDs = new HashSet<>();
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/SSOClient.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/SSOClient.java
index d3976617..d5901496 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/SSOClient.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/SSOClient.java
@@ -7,11 +7,15 @@ import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import com.google.gson.GsonBuilder;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializer;
import com.nextcloud.android.sso.aidl.NextcloudRequest;
import com.nextcloud.android.sso.api.NextcloudAPI;
import com.nextcloud.android.sso.api.Response;
import com.nextcloud.android.sso.model.SingleSignOnAccount;
+import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
@@ -27,22 +31,32 @@ public class SSOClient {
return getNextcloudAPI(context.getApplicationContext(), ssoAccount).performNetworkRequestV2(nextcloudRequest);
}
- private static NextcloudAPI getNextcloudAPI(Context appContext, SingleSignOnAccount ssoAccount) {
+ public static NextcloudAPI getNextcloudAPI(Context appContext, SingleSignOnAccount ssoAccount) {
if (mNextcloudAPIs.containsKey(ssoAccount.name)) {
return mNextcloudAPIs.get(ssoAccount.name);
} else {
Log.v(TAG, "NextcloudRequest account: " + ssoAccount.name);
- final NextcloudAPI nextcloudAPI = new NextcloudAPI(appContext, ssoAccount, new GsonBuilder().create(), new NextcloudAPI.ApiConnectedListener() {
- @Override
- public void onConnected() {
- Log.i(TAG, "SSO API connected for " + ssoAccount);
- }
+ final NextcloudAPI nextcloudAPI = new NextcloudAPI(appContext, ssoAccount,
+ new GsonBuilder()
+ .excludeFieldsWithoutExposeAnnotation()
+ .registerTypeHierarchyAdapter(Calendar.class, (JsonSerializer<Calendar>) (src, typeOfSrc, context) -> new JsonPrimitive(src.getTimeInMillis() / 1_000))
+ .registerTypeHierarchyAdapter(Calendar.class, (JsonDeserializer<Calendar>) (src, typeOfSrc, context) -> {
+ final Calendar calendar = Calendar.getInstance();
+ calendar.setTimeInMillis(src.getAsLong() * 1_000);
+ return calendar;
+ })
+ .create(),
+ new NextcloudAPI.ApiConnectedListener() {
+ @Override
+ public void onConnected() {
+ Log.i(TAG, "SSO API connected for " + ssoAccount);
+ }
- @Override
- public void onError(Exception ex) {
- ex.printStackTrace();
- }
- });
+ @Override
+ public void onError(Exception ex) {
+ ex.printStackTrace();
+ }
+ });
mNextcloudAPIs.put(ssoAccount.name, nextcloudAPI);
return nextcloudAPI;
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/ApiProvider.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/ApiProvider.java
index 63f10c99..cbb0687b 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/ApiProvider.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/ApiProvider.java
@@ -8,6 +8,7 @@ import com.google.gson.GsonBuilder;
import com.nextcloud.android.sso.api.NextcloudAPI;
import com.nextcloud.android.sso.model.SingleSignOnAccount;
+import it.niedermann.owncloud.notes.persistence.SSOClient;
import retrofit2.NextcloudRetrofitApiBuilder;
/**
@@ -19,8 +20,8 @@ public class ApiProvider {
private final NotesAPI notesAPI;
- public ApiProvider(@NonNull Context context, @NonNull SingleSignOnAccount ssoAccount, @NonNull final NextcloudAPI.ApiConnectedListener callback) {
- final NextcloudAPI nextcloudAPI = new NextcloudAPI(context, ssoAccount, new GsonBuilder().create(), callback);
+ public ApiProvider(@NonNull Context appContext, @NonNull SingleSignOnAccount ssoAccount) {
+ final NextcloudAPI nextcloudAPI = SSOClient.getNextcloudAPI(appContext, ssoAccount);
notesAPI = new NextcloudRetrofitApiBuilder(nextcloudAPI, API_ENDPOINT_NOTES).create(NotesAPI.class);
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NextcloudAPI.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NextcloudAPI.java
new file mode 100644
index 00000000..9ddb5941
--- /dev/null
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/NextcloudAPI.java
@@ -0,0 +1,33 @@
+package it.niedermann.owncloud.notes.persistence.sync;
+
+
+import java.util.List;
+
+import it.niedermann.owncloud.notes.persistence.entity.Note;
+import retrofit2.Call;
+import retrofit2.http.Body;
+import retrofit2.http.DELETE;
+import retrofit2.http.GET;
+import retrofit2.http.POST;
+import retrofit2.http.PUT;
+import retrofit2.http.Path;
+import retrofit2.http.Query;
+
+/**
+ * @link <a href="https://deck.readthedocs.io/en/latest/API/">Deck REST API</a>
+ */
+public interface NextcloudAPI {
+
+ @GET("notes")
+ Call<List<Note>> getNotes(@Query(value = "pruneBefore") long lastModified, @Query("If-None-Match") String lastETag);
+
+ @POST("notes")
+ Call<Note> createNote(@Body Note note);
+
+ @PUT("notes/{remoteId}")
+ Call<Note> editNote(@Body Note note, @Path("remoteId") long remoteId);
+
+ @DELETE("notes/{remoteId}")
+ Call<Note> deleteNote(@Path("remoteId") long noteId);
+
+}
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 d684a35c..92130664 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
@@ -20,7 +20,7 @@ import retrofit2.http.Query;
public interface NotesAPI {
@GET("notes")
- Call<List<Note>> getNotes(@Query("pruneBefore") Calendar lastModified, @Query("If-None-Match") String lastETag);
+ Call<List<Note>> getNotes(@Query(value = "pruneBefore") long lastModified, @Query("If-None-Match") String lastETag);
@POST("notes")
Call<Note> createNote(@Body Note note);