Skip to content

Commit 06328e2

Browse files
committed
check empty response
Signed-off-by: alperozturk <[email protected]>
1 parent 46b7558 commit 06328e2

File tree

2 files changed

+17
-25
lines changed

2 files changed

+17
-25
lines changed

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

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

16-
import com.google.gson.JsonSyntaxException;
16+
import com.nextcloud.android.sso.api.EmptyResponse;
1717
import com.nextcloud.android.sso.model.SingleSignOnAccount;
1818

19-
import io.reactivex.Observable;
19+
import java.util.Objects;
20+
2021
import it.niedermann.owncloud.notes.shared.model.Capabilities;
2122

2223
@WorkerThread
@@ -42,19 +43,19 @@ public static Capabilities getCapabilities(@NonNull Context context, @NonNull Si
4243
}
4344

4445
repository.insertCapabilities(capabilities);
45-
return capabilities;
46-
} catch (RuntimeException e) {
47-
final var cause = e.getCause();
4846

49-
if (e instanceof JsonSyntaxException || (cause instanceof JsonSyntaxException)) {
50-
Log.w(TAG, "JSON parse error, likely 304 Not Modified");
47+
return capabilities;
48+
} catch (Throwable t) {
49+
if (t instanceof ClassCastException castException && Objects.requireNonNull(castException.getMessage()).contains(EmptyResponse.class.getSimpleName())) {
50+
Log.d(TAG, "Server returned empty response - Notes not modified.");
5151
return repository.getCapabilities();
5252
}
5353

54+
final var cause = t.getCause();
5455
if (cause != null) {
5556
throw cause;
5657
} else {
57-
throw e;
58+
throw t;
5859
}
5960
}
6061
}

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

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717

1818
import androidx.annotation.NonNull;
1919

20-
import com.google.gson.JsonSyntaxException;
2120
import com.nextcloud.android.sso.AccountImporter;
21+
import com.nextcloud.android.sso.api.EmptyResponse;
2222
import com.nextcloud.android.sso.exceptions.NextcloudApiNotRespondingException;
2323
import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
2424
import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException;
@@ -34,8 +34,8 @@
3434
import java.util.HashSet;
3535
import java.util.List;
3636
import java.util.Map;
37+
import java.util.Objects;
3738

38-
import io.reactivex.Observable;
3939
import it.niedermann.owncloud.notes.BuildConfig;
4040
import it.niedermann.owncloud.notes.persistence.entity.Account;
4141
import it.niedermann.owncloud.notes.persistence.entity.Note;
@@ -228,21 +228,7 @@ private boolean pullRemoteChanges() {
228228
return false;
229229
}
230230

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-
}
231+
final var fetchResponse = notesAPI.getNotes(modified, localAccount.getETag()).blockingSingle();
246232
final var remoteNotes = fetchResponse.getResponse();
247233
final var remoteIDs = new HashSet<Long>();
248234
// pull remote changes: update or create each remote note
@@ -296,6 +282,11 @@ private boolean pullRemoteChanges() {
296282
return true;
297283
} catch (Throwable t) {
298284
final Throwable cause = t.getCause();
285+
if (t instanceof ClassCastException castException && Objects.requireNonNull(castException.getMessage()).contains(EmptyResponse.class.getSimpleName())) {
286+
Log.d(TAG, "Server returned empty response - Notes not modified.");
287+
return true;
288+
}
289+
299290
if (t.getClass() == RuntimeException.class && cause != null) {
300291
if (cause.getClass() == NextcloudHttpRequestFailedException.class || cause instanceof NextcloudHttpRequestFailedException) {
301292
final NextcloudHttpRequestFailedException httpException = (NextcloudHttpRequestFailedException) cause;

0 commit comments

Comments
 (0)