From ffba4a8bfcb485ebf3713551300e1758be4e24ba Mon Sep 17 00:00:00 2001 From: stefan-niedermann Date: Fri, 6 Dec 2019 19:29:45 +0100 Subject: Fix #202 Crash opening not-yet-synced task --- .../deck/persistence/sync/SyncManager.java | 128 +++++++++++---------- .../deck/ui/card/CardActivityFragment.java | 29 +++-- 2 files changed, 81 insertions(+), 76 deletions(-) (limited to 'app/src') diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java index c9e630efb..d87d2c32d 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java @@ -55,7 +55,7 @@ public class SyncManager { private ServerAdapter serverAdapter; public SyncManager(Context context, @Nullable Activity sourceActivity) { - if(context == null) { + if (context == null) { throw new IllegalArgumentException("Provide a valid context."); } Context applicationContext = context.getApplicationContext(); @@ -159,7 +159,7 @@ public class SyncManager { return dataBaseAdapter.createAccount(accout); } - public boolean hasInternetConnection(){ + public boolean hasInternetConnection() { return serverAdapter.hasInternetConnection(); } @@ -199,7 +199,7 @@ public class SyncManager { doAsync(() -> { Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); User owner = dataBaseAdapter.getUserByUidDirectly(accountId, account.getUserName()); - if(owner == null) { + if (owner == null) { DeckLog.log("owner is null - this can be the case if the Deck app has never before been opened in the webinterface"); liveData.postValue(null); } else { @@ -223,13 +223,17 @@ public class SyncManager { public LiveData> syncActivitiesForCard(Card card) { doAsync(() -> { if (serverAdapter.hasInternetConnection()) { - new SyncHelper(serverAdapter, dataBaseAdapter, null) - .setResponseCallback(new IResponseCallback(dataBaseAdapter.getAccountByIdDirectly(card.getAccountId())) { - @Override - public void onResponse(Boolean response) { - // do nothing - } - }).doSyncFor(new ActivityDataProvider(null, card)); + if (card.getId() != null) { + new SyncHelper(serverAdapter, dataBaseAdapter, null) + .setResponseCallback(new IResponseCallback(dataBaseAdapter.getAccountByIdDirectly(card.getAccountId())) { + @Override + public void onResponse(Boolean response) { + // do nothing + } + }).doSyncFor(new ActivityDataProvider(null, card)); + } else { + DeckLog.log("Can not fetch activities for card \"" + card.getTitle() + "\" because this card does not have a remote id yet."); + } } }); return dataBaseAdapter.getActivitiesForCard(card.getLocalId()); @@ -279,15 +283,15 @@ public class SyncManager { FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, entity.getBoardId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter).createEntity( new AccessControlDataProvider(null, board, Collections.singletonList(entity)), entity, new IResponseCallback(account) { - @Override - public void onResponse(AccessControl response) { - liveData.postValue(response); - } - }, ((entity1, response) -> { - response.setBoardId(entity.getBoardId()); - response.setUserId(entity.getUser().getLocalId()); + @Override + public void onResponse(AccessControl response) { + liveData.postValue(response); + } + }, ((entity1, response) -> { + response.setBoardId(entity.getBoardId()); + response.setUserId(entity.getUser().getLocalId()); } - ) + ) ); }); return liveData; @@ -304,30 +308,31 @@ public class SyncManager { public MutableLiveData updateAccessControl(AccessControl entity) { MutableLiveData liveData = new MutableLiveData<>(); doAsync(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(entity.getAccountId()); - FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(entity.getAccountId(), entity.getBoardId()); - new DataPropagationHelper(serverAdapter, dataBaseAdapter).updateEntity( - new AccessControlDataProvider(null, board, Collections.singletonList(entity)), entity, new IResponseCallback(account) { - @Override - public void onResponse(AccessControl response) { - liveData.postValue(response); - } - }); + Account account = dataBaseAdapter.getAccountByIdDirectly(entity.getAccountId()); + FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(entity.getAccountId(), entity.getBoardId()); + new DataPropagationHelper(serverAdapter, dataBaseAdapter).updateEntity( + new AccessControlDataProvider(null, board, Collections.singletonList(entity)), entity, new IResponseCallback(account) { + @Override + public void onResponse(AccessControl response) { + liveData.postValue(response); + } + }); }); return liveData; } + public MutableLiveData deleteAccessControl(AccessControl entity) { MutableLiveData liveData = new MutableLiveData<>(); doAsync(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(entity.getAccountId()); - FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(entity.getAccountId(), entity.getBoardId()); - new DataPropagationHelper(serverAdapter, dataBaseAdapter).deleteEntity( - new AccessControlDataProvider(null, board, Collections.singletonList(entity)), entity, new IResponseCallback(account) { - @Override - public void onResponse(AccessControl response) { - liveData.postValue(response); - } - }); + Account account = dataBaseAdapter.getAccountByIdDirectly(entity.getAccountId()); + FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(entity.getAccountId(), entity.getBoardId()); + new DataPropagationHelper(serverAdapter, dataBaseAdapter).deleteEntity( + new AccessControlDataProvider(null, board, Collections.singletonList(entity)), entity, new IResponseCallback(account) { + @Override + public void onResponse(AccessControl response) { + liveData.postValue(response); + } + }); }); return liveData; } @@ -422,6 +427,7 @@ public class SyncManager { }); return liveData; } + public LiveData createFullCard(long accountId, long localBoardId, long localStackId, FullCard card) { MutableLiveData liveData = new MutableLiveData<>(); @@ -438,7 +444,7 @@ public class SyncManager { card.getCard().setLocalId(localCardId); List assignedUsers = card.getAssignedUsers(); - if (assignedUsers!= null) { + if (assignedUsers != null) { for (User assignedUser : assignedUsers) { dataBaseAdapter.createJoinCardWithUser(assignedUser.getLocalId(), localCardId, DBStatus.LOCAL_EDITED); } @@ -452,7 +458,7 @@ public class SyncManager { } liveData.postValue(card); - if (serverAdapter.hasInternetConnection()){ + if (serverAdapter.hasInternetConnection()) { new SyncHelper(serverAdapter, dataBaseAdapter, null) .setResponseCallback(IResponseCallback.getDefaultResponseCallback(account)) .doUpSyncFor(new CardDataProvider(null, board, stack)); @@ -518,7 +524,7 @@ public class SyncManager { fullCardFromDB.setCard(card.getCard()); card.getCard().setStatus(DBStatus.LOCAL_EDITED.getId()); dataBaseAdapter.updateCard(card.getCard(), false); - if (serverAdapter.hasInternetConnection()){ + if (serverAdapter.hasInternetConnection()) { Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); new SyncHelper(serverAdapter, dataBaseAdapter, null) .setResponseCallback(new IResponseCallback(account) { @@ -600,11 +606,11 @@ public class SyncManager { Board board = dataBaseAdapter.getBoardByLocalIdDirectly(label.getBoardId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter) .updateEntity(new LabelDataProvider(null, board, Collections.emptyList()), label, new IResponseCallback