From d6bae2df41851b027f17d180fd54bdac497e2209 Mon Sep 17 00:00:00 2001 From: desperateCoder Date: Sat, 4 Jul 2020 17:03:39 +0200 Subject: #561: make bulletproof in offline case --- .../db/util/extrawurst/UserSearchLiveData.java | 65 ++++++++++++---------- 1 file changed, 35 insertions(+), 30 deletions(-) (limited to 'app/src/main') diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/extrawurst/UserSearchLiveData.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/extrawurst/UserSearchLiveData.java index 9f5d49bf5..b44ff29fd 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/extrawurst/UserSearchLiveData.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/extrawurst/UserSearchLiveData.java @@ -6,6 +6,7 @@ import java.util.List; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.api.IResponseCallback; +import it.niedermann.nextcloud.deck.exceptions.OfflineException; import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.User; import it.niedermann.nextcloud.deck.model.enums.DBStatus; @@ -49,39 +50,43 @@ public class UserSearchLiveData extends MediatorLiveData> implements postCurrentFromDB(term); - Account account = db.getAccountByIdDirectly(accountId); - server.searchUser(term, new IResponseCallback(account) { - @Override - public void onResponse(OcsUserList response) { - if (response == null || response.getUsers().isEmpty()){ - return; - } - for (OcsUser user : response.getUsers()) { - User existingUser = db.getUserByUidDirectly(accountId, user.getId()); - if (existingUser == null) { - User newUser = new User(); - newUser.setStatus(DBStatus.UP_TO_DATE.getId()); - newUser.setPrimaryKey(user.getId()); - newUser.setUid(user.getId()); - newUser.setDisplayname(user.getDisplayName()); - db.createUser(accountId, newUser); + if (server.hasInternetConnection()) { + try { + Account account = db.getAccountByIdDirectly(accountId); + server.searchUser(term, new IResponseCallback(account) { + @Override + public void onResponse(OcsUserList response) { + if (response == null || response.getUsers().isEmpty()){ + return; + } + for (OcsUser user : response.getUsers()) { + User existingUser = db.getUserByUidDirectly(accountId, user.getId()); + if (existingUser == null) { + User newUser = new User(); + newUser.setStatus(DBStatus.UP_TO_DATE.getId()); + newUser.setPrimaryKey(user.getId()); + newUser.setUid(user.getId()); + newUser.setDisplayname(user.getDisplayName()); + db.createUser(accountId, newUser); + } + } + if (!term.equals(searchTerm)) { + // TODO: remove log when stable + DeckLog.info("###DeckUserSearch: skip posting for term " + term + ": current searchTerm is " + searchTerm); + return; + } + postCurrentFromDB(term); } - } - if (!term.equals(searchTerm)) { - // TODO: remove log when stable - DeckLog.info("###DeckUserSearch: skip posting for term " + term + ": current searchTerm is " + searchTerm); - return; - } - postCurrentFromDB(term); - } - @Override - public void onError(Throwable throwable) { - super.onError(throwable); + @Override + public void onError(Throwable throwable) { + super.onError(throwable); + } + }); + } catch (OfflineException e) { + DeckLog.logError(e); } - }); - - + } } private void postCurrentFromDB(String term) { -- cgit v1.2.3