diff options
author | desperateCoder <echotodevnull@gmail.com> | 2020-06-28 01:37:55 +0300 |
---|---|---|
committer | desperateCoder <echotodevnull@gmail.com> | 2020-06-28 01:37:55 +0300 |
commit | f2b02909373b67a4a4dbb78b8d4a1f5e56e2125e (patch) | |
tree | b9b4fa7965adadf04ba56c1323d3b2d95245cb68 /app/src/main/java/it | |
parent | d6397c2449c15194eb0e9d645c44267f4b372502 (diff) |
#455 minor fixes, #453 WIP
Diffstat (limited to 'app/src/main/java/it')
3 files changed, 47 insertions, 4 deletions
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 fc12e0c37..b797536dd 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 @@ -51,6 +51,7 @@ import it.niedermann.nextcloud.deck.model.ocs.user.OcsUser; import it.niedermann.nextcloud.deck.model.ocs.user.OcsUserList; import it.niedermann.nextcloud.deck.persistence.sync.adapters.ServerAdapter; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DataBaseAdapter; +import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData; import it.niedermann.nextcloud.deck.persistence.sync.helpers.DataPropagationHelper; import it.niedermann.nextcloud.deck.persistence.sync.helpers.SyncHelper; @@ -472,8 +473,9 @@ public class SyncManager { * Does <strong>not</strong> clone any {@link Card} or {@link AccessControl} from the origin {@link Board}. */ @AnyThread - public LiveData<FullBoard> cloneBoard(long originAccountId, long originBoardLocalId, long targetAccountId, String targetBoardTitle, String targetBoardColor) { - MediatorLiveData<FullBoard> liveData = new MediatorLiveData<>(); + public WrappedLiveData<FullBoard> cloneBoard(long originAccountId, long originBoardLocalId, long targetAccountId, String targetBoardTitle, String targetBoardColor) { + WrappedLiveData<FullBoard> liveData = new WrappedLiveData<>(); + doAsync(() -> { Account originAccount = dataBaseAdapter.getAccountByIdDirectly(originAccountId); User newOwner = dataBaseAdapter.getUserByUidDirectly(originAccountId, originAccount.getUserName()); @@ -482,6 +484,7 @@ public class SyncManager { originalBoard.getBoard().setTitle(targetBoardTitle); originalBoard.getBoard().setColor(targetBoardColor); originalBoard.getBoard().setOwnerId(newOwner.getId()); + originalBoard.setStatusEnum(DBStatus.LOCAL_EDITED); originalBoard.setOwner(newOwner); originalBoard.setId(null); originalBoard.setLocalId(null); @@ -491,6 +494,7 @@ public class SyncManager { for (Stack stack : originalBoard.getStacks()) { stack.setLocalId(null); stack.setId(null); + stack.setStatusEnum(DBStatus.LOCAL_EDITED); stack.setAccountId(targetAccountId); stack.setBoardId(newBoardId); dataBaseAdapter.createStack(targetAccountId, stack); @@ -499,6 +503,7 @@ public class SyncManager { label.setLocalId(null); label.setId(null); label.setAccountId(targetAccountId); + label.setStatusEnum(DBStatus.LOCAL_EDITED); label.setBoardId(newBoardId); dataBaseAdapter.createLabel(targetAccountId, label); } @@ -513,7 +518,7 @@ public class SyncManager { @Override public void onError(Throwable throwable) { super.onError(throwable); - liveData.postValue(null); + liveData.postError(throwable); } }).doSyncFor(new BoardDataProvider()); @@ -1080,7 +1085,37 @@ public class SyncManager { @SuppressWarnings("JavadocReference") @AnyThread public WrappedLiveData<Void> moveCard(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId) { - throw new UnsupportedOperationException("Not yet implemented"); + return LiveDataHelper.wrapInLiveData(() -> { + FullCard originalCard = dataBaseAdapter.getFullCardByLocalIdDirectly(originAccountId, originCardLocalId); + int newIndex = dataBaseAdapter.getHighestCardOrderInStack(targetStackLocalId) + 1; + Board originalBoard = dataBaseAdapter.getBoardByLocalCardIdDirectly(originCardLocalId); + if (targetBoardLocalId == originalBoard.getLocalId()) { + reorder(originAccountId, originalCard, targetStackLocalId, newIndex); + return null; + } + Card originalInnerCard = originalCard.getCard(); + deleteCard(originalInnerCard); + // clone card itself + originalInnerCard.setAccountId(targetAccountId); + originalInnerCard.setId(null); + originalInnerCard.setLocalId(null); + originalInnerCard.setStatusEnum(DBStatus.LOCAL_EDITED); + originalInnerCard.setStackId(targetStackLocalId); + originalInnerCard.setOrder(newIndex); + long newCardId = dataBaseAdapter.createCard(targetAccountId, originalInnerCard); + originalInnerCard.setLocalId(newCardId); + + FullBoard targetBoard = dataBaseAdapter.getFullBoardByLocalCardIdDirectly(newCardId); + + // TODO: clone labels, assign them + + //TODO: Clone assigned users + + + + + return null; + }); } @AnyThread diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java index 582029612..962699565 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java @@ -698,6 +698,11 @@ public class DataBaseAdapter { return db.getBoardDao().getBoardByLocalCardIdDirectly(localCardId); } + @WorkerThread + public FullBoard getFullBoardByLocalCardIdDirectly(long localCardId) { + return db.getBoardDao().getFullBoardByLocalCardIdDirectly(localCardId); + } + public JoinCardWithLabel getJoinCardWithLabel(Long localLabelId, Long localCardId) { return db.getJoinCardWithLabelDao().getJoin(localLabelId, localCardId); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/BoardDao.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/BoardDao.java index 0f4117481..bd189e846 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/BoardDao.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/BoardDao.java @@ -52,6 +52,9 @@ public interface BoardDao extends GenericDao<Board> { @Query("SELECT b.* FROM board b JOIN stack s ON s.boardId = b.localId JOIN card c ON c.localId = :localCardId") Board getBoardByLocalCardIdDirectly(long localCardId); + @Query("SELECT b.* FROM board b JOIN stack s ON s.boardId = b.localId JOIN card c ON c.localId = :localCardId") + FullBoard getFullBoardByLocalCardIdDirectly(long localCardId); + @Transaction @Query("SELECT * FROM board WHERE accountId = :accountId") List<FullBoard> getAllFullBoards(long accountId); |