Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/CardDataProvider.java')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/CardDataProvider.java76
1 files changed, 57 insertions, 19 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/CardDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/CardDataProvider.java
index 03e02bd70..0ceac2cd8 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/CardDataProvider.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/CardDataProvider.java
@@ -1,12 +1,15 @@
package it.niedermann.nextcloud.deck.persistence.sync.helpers.providers;
+import android.annotation.SuppressLint;
+
+import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Date;
import java.util.List;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.api.IResponseCallback;
+import it.niedermann.nextcloud.deck.exceptions.DeckException;
import it.niedermann.nextcloud.deck.exceptions.OfflineException;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.Attachment;
@@ -37,7 +40,7 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
}
@Override
- public void getAllFromServer(ServerAdapter serverAdapter, long accountId, IResponseCallback<List<FullCard>> responder, Date lastSync) {
+ public void getAllFromServer(ServerAdapter serverAdapter, long accountId, IResponseCallback<List<FullCard>> responder, Instant lastSync) {
List<FullCard> result = new ArrayList<>();
if (stack.getCards() == null || stack.getCards().isEmpty()) {
@@ -54,6 +57,7 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
}
}
+ @SuppressLint("MissingSuperCall")
@Override
public void onError(Throwable throwable) {
responder.onError(throwable);
@@ -70,7 +74,7 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
@Override
public long createInDB(DataBaseAdapter dataBaseAdapter, long accountId, FullCard entity) {
fixRelations(dataBaseAdapter, accountId, entity);
- return dataBaseAdapter.createCard(accountId, entity.getCard());
+ return dataBaseAdapter.createCardDirectly(accountId, entity.getCard());
}
protected CardUpdate toCardUpdate(FullCard card) {
@@ -144,10 +148,17 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
} else {
DeckLog.verbose("Comments - Version is too low, DONT SYNC");
}
+ syncHelper.doSyncFor(new OcsProjectDataProvider(this, existingEntity.getCard()));
}
@Override
public void createOnServer(ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, long accountId, IResponseCallback<FullCard> responder, FullCard entity) {
+ if (stack.getId() == null) {
+ responder.onError(new DeckException(DeckException.Hint.DEPENDENCY_NOT_SYNCED_YET, "Stack \"" +
+ stack.getStack().getTitle() + "\" for Card \"" + entity.getCard().getTitle() +
+ "\" is not synced yet. Perform a full sync (pull to refresh) as soon as you are online again."));
+ return;
+ }
entity.getCard().setStackId(stack.getId());
serverAdapter.createCard(board.getId(), stack.getId(), entity.getCard(), responder);
}
@@ -170,7 +181,7 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
}
@Override
- public List<FullCard> getAllChangedFromDB(DataBaseAdapter dataBaseAdapter, long accountId, Date lastSync) {
+ public List<FullCard> getAllChangedFromDB(DataBaseAdapter dataBaseAdapter, long accountId, Instant lastSync) {
if (board == null || stack == null) {
// no cards changed!
// (see call from StackDataProvider: goDeeperForUpSync called with null for board.)
@@ -184,8 +195,13 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
public void goDeeperForUpSync(SyncHelper syncHelper, ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, IResponseCallback<Boolean> callback) {
FullStack stack;
Board board;
+ List<JoinCardWithLabel> changedLabels;
+ if (this.stack == null) {
+ changedLabels = dataBaseAdapter.getAllChangedLabelJoins();
+ } else {
+ changedLabels = dataBaseAdapter.getAllChangedLabelJoinsForStack(this.stack.getLocalId());
+ }
- List<JoinCardWithLabel> changedLabels = dataBaseAdapter.getAllChangedJoins();
Account account = callback.getAccount();
for (JoinCardWithLabel changedLabelLocal : changedLabels) {
Card card = dataBaseAdapter.getCardByLocalIdDirectly(account.getId(), changedLabelLocal.getCardId());
@@ -201,7 +217,7 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
board = this.board;
}
- JoinCardWithLabel changedLabel = dataBaseAdapter.getRemoteIdsForJoin(changedLabelLocal.getCardId(), changedLabelLocal.getLabelId());
+ JoinCardWithLabel changedLabel = dataBaseAdapter.getAllChangedLabelJoinsWithRemoteIDs(changedLabelLocal.getCardId(), changedLabelLocal.getLabelId());
if (changedLabel.getStatusEnum() == DBStatus.LOCAL_DELETED) {
if (changedLabel.getLabelId() == null || changedLabel.getCardId() == null) {
dataBaseAdapter.deleteJoinedLabelForCardPhysicallyByRemoteIDs(account.getId(), changedLabel.getCardId(), changedLabel.getLabelId());
@@ -229,11 +245,22 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
}
}
- List<JoinCardWithUser> deletedUsers = dataBaseAdapter.getAllDeletedUserJoinsWithRemoteIDs();
- for (JoinCardWithUser deletedUser : deletedUsers) {
- Card card = dataBaseAdapter.getCardByRemoteIdDirectly(account.getId(), deletedUser.getCardId());
+
+ List<JoinCardWithUser> changedUsers;
+ if (this.stack == null) {
+ changedUsers = dataBaseAdapter.getAllChangedUserJoinsWithRemoteIDs();
+ } else {
+ changedUsers = dataBaseAdapter.getAllChangedUserJoinsWithRemoteIDsForStack(this.stack.getLocalId());
+ }
+ for (JoinCardWithUser changedUser : changedUsers) {
+ // not already known to server?
+ if (changedUser.getCardId() == null) {
+ //skip for now
+ continue;
+ }
+ Card card = dataBaseAdapter.getCardByRemoteIdDirectly(account.getId(), changedUser.getCardId());
if (this.stack == null) {
- stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getLocalId());
+ stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getStackId());
} else {
stack = this.stack;
}
@@ -243,16 +270,16 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
} else {
board = this.board;
}
- User user = dataBaseAdapter.getUserByLocalIdDirectly(deletedUser.getUserId());
- if (deletedUser.getStatusEnum() == DBStatus.LOCAL_DELETED) {
- serverAdapter.unassignUserFromCard(board.getId(), stack.getId(), deletedUser.getCardId(), user.getUid(), new IResponseCallback<Void>(account) {
+ User user = dataBaseAdapter.getUserByLocalIdDirectly(changedUser.getUserId());
+ if (changedUser.getStatusEnum() == DBStatus.LOCAL_DELETED) {
+ serverAdapter.unassignUserFromCard(board.getId(), stack.getId(), changedUser.getCardId(), user.getUid(), new IResponseCallback<Void>(account) {
@Override
public void onResponse(Void response) {
- dataBaseAdapter.deleteJoinedUserForCardPhysicallyByRemoteIDs(account.getId(), deletedUser.getCardId(), user.getUid());
+ dataBaseAdapter.deleteJoinedUserForCardPhysicallyByRemoteIDs(account.getId(), changedUser.getCardId(), user.getUid());
}
});
- } else if (deletedUser.getStatusEnum() == DBStatus.LOCAL_EDITED) {
- serverAdapter.assignUserToCard(board.getId(), stack.getId(), deletedUser.getCardId(), user.getUid(), new IResponseCallback<Void>(account) {
+ } else if (changedUser.getStatusEnum() == DBStatus.LOCAL_EDITED) {
+ serverAdapter.assignUserToCard(board.getId(), stack.getId(), changedUser.getCardId(), user.getUid(), new IResponseCallback<Void>(account) {
@Override
public void onResponse(Void response) {
dataBaseAdapter.setStatusForJoinCardWithUser(card.getLocalId(), user.getLocalId(), DBStatus.UP_TO_DATE.getId());
@@ -261,7 +288,12 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
}
}
- List<Attachment> attachments = dataBaseAdapter.getLocallyChangedAttachmentsDirectly(account.getId());
+ List<Attachment> attachments;
+ if (this.stack == null) {
+ attachments = dataBaseAdapter.getLocallyChangedAttachmentsDirectly(account.getId());
+ } else {
+ attachments = dataBaseAdapter.getLocallyChangedAttachmentsForStackDirectly(this.stack.getLocalId());
+ }
for (Attachment attachment : attachments) {
FullCard card = dataBaseAdapter.getFullCardByLocalIdDirectly(account.getId(), attachment.getCardId());
stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getCard().getStackId());
@@ -269,7 +301,12 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
syncHelper.doUpSyncFor(new AttachmentDataProvider(this, board, stack.getStack(), card, Collections.singletonList(attachment)));
}
- List<Card> cardsWithChangedComments = dataBaseAdapter.getCardsWithLocallyChangedCommentsDirectly(account.getId());
+ List<Card> cardsWithChangedComments;
+ if (this.stack == null) {
+ cardsWithChangedComments = dataBaseAdapter.getCardsWithLocallyChangedCommentsDirectly(account.getId());
+ } else {
+ cardsWithChangedComments = dataBaseAdapter.getCardsWithLocallyChangedCommentsForStackDirectly(this.stack.getLocalId());
+ }
for (Card card : cardsWithChangedComments) {
syncHelper.doUpSyncFor(new DeckCommentsDataProvider(this, card));
}
@@ -279,7 +316,7 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
@Override
public void handleDeletes(ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, long accountId, List<FullCard> entitiesFromServer) {
- List<FullCard> localCards = dataBaseAdapter.getFullCardsForStackDirectly(accountId, stack.getLocalId());
+ List<FullCard> localCards = dataBaseAdapter.getFullCardsForStackDirectly(accountId, stack.getLocalId(), null);
List<FullCard> delta = findDelta(entitiesFromServer, localCards);
for (FullCard cardToDelete : delta) {
if (cardToDelete.getId() == null) {
@@ -294,6 +331,7 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> {
// do not delete, it's still there and was just moved!
}
+ @SuppressLint("MissingSuperCall")
@Override
public void onError(Throwable throwable) {
if (!(throwable instanceof OfflineException)) {