Skip to content

Commit 49ce39b

Browse files
committed
fix: json syntax exceptions
Signed-off-by: alperozturk <[email protected]>
1 parent aa09ee6 commit 49ce39b

File tree

3 files changed

+30
-9
lines changed

3 files changed

+30
-9
lines changed

app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,9 @@
1313
import androidx.annotation.Nullable;
1414
import androidx.annotation.WorkerThread;
1515

16-
import com.nextcloud.android.sso.api.ParsedResponse;
1716
import com.nextcloud.android.sso.model.SingleSignOnAccount;
1817

19-
import java.util.Map;
20-
21-
import it.niedermann.owncloud.notes.persistence.sync.OcsAPI;
2218
import it.niedermann.owncloud.notes.shared.model.Capabilities;
23-
import it.niedermann.owncloud.notes.shared.model.OcsResponse;
24-
import it.niedermann.owncloud.notes.shared.model.OcsUser;
25-
import retrofit2.Response;
2619

2720
@WorkerThread
2821
public class CapabilitiesClient {

app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesServerSyncTask.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import androidx.annotation.NonNull;
1919

20+
import com.google.gson.JsonSyntaxException;
2021
import com.nextcloud.android.sso.AccountImporter;
2122
import com.nextcloud.android.sso.exceptions.NextcloudApiNotRespondingException;
2223
import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
@@ -34,6 +35,7 @@
3435
import java.util.List;
3536
import java.util.Map;
3637

38+
import io.reactivex.Observable;
3739
import it.niedermann.owncloud.notes.BuildConfig;
3840
import it.niedermann.owncloud.notes.persistence.entity.Account;
3941
import it.niedermann.owncloud.notes.persistence.entity.Note;
@@ -226,7 +228,21 @@ private boolean pullRemoteChanges() {
226228
return false;
227229
}
228230

229-
final var fetchResponse = notesAPI.getNotes(modified, localAccount.getETag()).blockingSingle();
231+
final var fetchResponse = notesAPI.getNotes(modified, localAccount.getETag())
232+
.onErrorResumeNext(error -> {
233+
if (error instanceof JsonSyntaxException ||
234+
(error.getCause() != null && error.getCause() instanceof JsonSyntaxException)) {
235+
Log.w(TAG, "JSON parse error, likely 304 Not Modified");
236+
return Observable.empty();
237+
}
238+
return Observable.error(error);
239+
})
240+
.blockingFirst(null);
241+
242+
if (fetchResponse == null) {
243+
Log.d(TAG, "No changes from server");
244+
return true;
245+
}
230246
final var remoteNotes = fetchResponse.getResponse();
231247
final var remoteIDs = new HashSet<Long>();
232248
// pull remote changes: update or create each remote note

app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/CapabilitiesDeserializer.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import com.google.gson.JsonParseException;
1818

1919
import java.lang.reflect.Type;
20+
import java.util.ArrayList;
21+
import java.util.List;
2022

2123
import it.niedermann.android.util.ColorUtil;
2224
import it.niedermann.owncloud.notes.shared.model.Capabilities;
@@ -89,9 +91,19 @@ public Capabilities deserialize(JsonElement json, Type typeOfT, JsonDeserializat
8991
if (capabilities.has(CAPABILITIES_NOTES)) {
9092
final var notes = capabilities.getAsJsonObject(CAPABILITIES_NOTES);
9193
if (notes.has(CAPABILITIES_NOTES_API_VERSION)) {
92-
response.setApiVersion(notes.get(CAPABILITIES_NOTES_API_VERSION).toString());
94+
final var apiVersionElem = notes.get(CAPABILITIES_NOTES_API_VERSION);
95+
if (apiVersionElem.isJsonArray()) {
96+
List<String> versions = new ArrayList<>();
97+
for (JsonElement e : apiVersionElem.getAsJsonArray()) {
98+
versions.add(e.getAsString());
99+
}
100+
response.setApiVersion(String.join(",", versions));
101+
} else if (apiVersionElem.isJsonPrimitive()) {
102+
response.setApiVersion(apiVersionElem.getAsString());
103+
}
93104
}
94105
}
106+
95107
if (capabilities.has(CAPABILITIES_THEMING)) {
96108
final var theming = capabilities.getAsJsonObject(CAPABILITIES_THEMING);
97109
if (theming.has(CAPABILITIES_THEMING_COLOR)) {

0 commit comments

Comments
 (0)