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:
authordesperateCoder <echotodevnull@gmail.com>2019-10-20 01:40:49 +0300
committerdesperateCoder <echotodevnull@gmail.com>2019-10-20 01:57:33 +0300
commit6a779b429ee8c5b7867d79727ed5d214d9a6bbaf (patch)
treeede309bf9b120d7c50eb85e175337be7d7a4a902 /app/src/main
parent6291c3321558582cfd7a85db6749bcd2b9b773ec (diff)
#148: WIP: propagate ACL modifications to the server
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/model/AccessControl.java55
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java50
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java17
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java8
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccessControlDao.java3
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AccessControlDataProvider.java15
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java2
8 files changed, 147 insertions, 13 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI.java
index d5d30478a..907f4ee3d 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI.java
@@ -4,6 +4,7 @@ package it.niedermann.nextcloud.deck.api;
import java.util.List;
import io.reactivex.Observable;
+import it.niedermann.nextcloud.deck.model.AccessControl;
import it.niedermann.nextcloud.deck.model.Attachment;
import it.niedermann.nextcloud.deck.model.Board;
import it.niedermann.nextcloud.deck.model.Card;
@@ -132,4 +133,13 @@ public interface DeckAPI {
@PUT("board/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}/restore")
Observable<Attachment> restoreAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId);
+ // ### ACL
+ @POST("board/{boardId}/acl")
+ Observable<AccessControl> createAccessControl(@Path("boardId") long boardId, @Body AccessControl acl);
+
+ @PUT("board/{boardId}/acl/{aclId}")
+ Observable<AccessControl> updateAccessControl(@Path("boardId") long boardId, @Path("aclId") long aclId, @Body AccessControl acl);
+
+ @DELETE("board/{boardId}/acl/{aclId}")
+ Observable<Void> deleteAccessControl(@Path("boardId") long boardId, @Path("aclId") long aclId, @Body AccessControl acl);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/AccessControl.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/AccessControl.java
index 5b4b2a749..f28258698 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/model/AccessControl.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/AccessControl.java
@@ -5,6 +5,8 @@ import androidx.room.ForeignKey;
import androidx.room.Ignore;
import androidx.room.Index;
+import com.google.gson.annotations.SerializedName;
+
import it.niedermann.nextcloud.deck.model.interfaces.AbstractRemoteEntity;
@Entity(inheritSuperIndices = true,
@@ -31,6 +33,7 @@ public class AccessControl extends AbstractRemoteEntity {
private Long userId;
@Ignore
+ @SerializedName("participant")
private User user;
public Long getType() {
@@ -96,4 +99,56 @@ public class AccessControl extends AbstractRemoteEntity {
public void setUser(User user) {
this.user = user;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ if (!super.equals(o)) return false;
+
+ AccessControl that = (AccessControl) o;
+
+ if (owner != that.owner) return false;
+ if (permissionEdit != that.permissionEdit) return false;
+ if (permissionShare != that.permissionShare) return false;
+ if (permissionManage != that.permissionManage) return false;
+ if (type != null ? !type.equals(that.type) : that.type != null) return false;
+ if (boardId != null ? !boardId.equals(that.boardId) : that.boardId != null) return false;
+ if (userId != null ? !userId.equals(that.userId) : that.userId != null) return false;
+ return user != null ? user.equals(that.user) : that.user == null;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (type != null ? type.hashCode() : 0);
+ result = 31 * result + (boardId != null ? boardId.hashCode() : 0);
+ result = 31 * result + (owner ? 1 : 0);
+ result = 31 * result + (permissionEdit ? 1 : 0);
+ result = 31 * result + (permissionShare ? 1 : 0);
+ result = 31 * result + (permissionManage ? 1 : 0);
+ result = 31 * result + (userId != null ? userId.hashCode() : 0);
+ result = 31 * result + (user != null ? user.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ return "AccessControl{" +
+ "type=" + type +
+ ", boardId=" + boardId +
+ ", owner=" + owner +
+ ", permissionEdit=" + permissionEdit +
+ ", permissionShare=" + permissionShare +
+ ", permissionManage=" + permissionManage +
+ ", userId=" + userId +
+ ", user=" + user +
+ ", localId=" + localId +
+ ", accountId=" + accountId +
+ ", id=" + id +
+ ", status=" + status +
+ ", lastModified=" + lastModified +
+ ", lastModifiedLocal=" + lastModifiedLocal +
+ "} " + super.toString();
+ }
}
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 4a0e9e243..bb38977f1 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
@@ -35,6 +35,7 @@ import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiv
import it.niedermann.nextcloud.deck.persistence.sync.helpers.DataPropagationHelper;
import it.niedermann.nextcloud.deck.persistence.sync.helpers.SyncHelper;
import it.niedermann.nextcloud.deck.persistence.sync.helpers.providers.AbstractSyncDataProvider;
+import it.niedermann.nextcloud.deck.persistence.sync.helpers.providers.AccessControlDataProvider;
import it.niedermann.nextcloud.deck.persistence.sync.helpers.providers.ActivityDataProvider;
import it.niedermann.nextcloud.deck.persistence.sync.helpers.providers.BoardDataProvider;
import it.niedermann.nextcloud.deck.persistence.sync.helpers.providers.CardDataProvider;
@@ -233,7 +234,7 @@ public class SyncManager {
});
}
- public void updateBoard(FullBoard board) {
+ public LiveData<FullBoard> updateBoard(FullBoard board) {
MutableLiveData<FullBoard> liveData = new MutableLiveData<>();
long accountId = board.getAccountId();
doAsync(() -> {
@@ -245,6 +246,7 @@ public class SyncManager {
}
});
});
+ return liveData;
}
public LiveData<List<FullStack>> getStacksForBoard(long accountId, long localBoardId) {
@@ -255,9 +257,20 @@ public class SyncManager {
return dataBaseAdapter.getStack(accountId, localStackId);
}
- public void createAccessControl(long accountId, AccessControl entity) {
- // TODO - is... here... anything to do?...
- doAsync(() -> dataBaseAdapter.createAccessControl(accountId, entity));
+ public LiveData<AccessControl> createAccessControl(long accountId, AccessControl entity) {
+ MutableLiveData<AccessControl> liveData = new MutableLiveData<>();
+ doAsync(() -> {
+ Account account = dataBaseAdapter.getAccountByIdDirectly(accountId);
+ FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, entity.getBoardId());
+ new DataPropagationHelper(serverAdapter, dataBaseAdapter).createEntity(
+ new AccessControlDataProvider(null, board, Collections.singletonList(entity)), entity, new IResponseCallback<AccessControl>(account) {
+ @Override
+ public void onResponse(AccessControl response) {
+ liveData.postValue(response);
+ }
+ });
+ });
+ return liveData;
}
public AccessControl getAccessControlByRemoteIdDirectly(long accountId, Long id) {
@@ -268,10 +281,35 @@ public class SyncManager {
return dataBaseAdapter.getAccessControlByLocalBoardId(accountId, id);
}
- public void updateAccessControl(AccessControl entity) {
+ public MutableLiveData<AccessControl> updateAccessControl(AccessControl entity) {
+ MutableLiveData<AccessControl> 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<AccessControl>(account) {
+ @Override
+ public void onResponse(AccessControl response) {
+ liveData.postValue(response);
+ }
+ });
+ });
+ return liveData;
+ }
+ public MutableLiveData<AccessControl> deleteAccessControl(AccessControl entity) {
+ MutableLiveData<AccessControl> liveData = new MutableLiveData<>();
doAsync(() -> {
- dataBaseAdapter.updateAccessControl(entity, true);
+ 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<AccessControl>(account) {
+ @Override
+ public void onResponse(AccessControl response) {
+ liveData.postValue(response);
+ }
+ });
});
+ return liveData;
}
public LiveData<FullBoard> getFullBoardById(Long accountId, Long localId) {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java
index 95fe0ef47..45e007559 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java
@@ -27,6 +27,7 @@ import it.niedermann.nextcloud.deck.api.IResponseCallback;
import it.niedermann.nextcloud.deck.api.LastSyncUtil;
import it.niedermann.nextcloud.deck.api.RequestHelper;
import it.niedermann.nextcloud.deck.exceptions.OfflineException;
+import it.niedermann.nextcloud.deck.model.AccessControl;
import it.niedermann.nextcloud.deck.model.Board;
import it.niedermann.nextcloud.deck.model.Card;
import it.niedermann.nextcloud.deck.model.Label;
@@ -150,6 +151,7 @@ public class ServerAdapter {
RequestHelper.request(sourceActivity, provider, () -> provider.getDeckAPI().createBoard(board), responseCallback);
}
+
public void deleteBoard(Board board, IResponseCallback<Void> responseCallback) {
ensureInternetConnection();
RequestHelper.request(sourceActivity, provider, () -> provider.getDeckAPI().deleteBoard(board.getId()), responseCallback);
@@ -161,6 +163,21 @@ public class ServerAdapter {
}
+ public void createAccessControl(long remoteBoardId, AccessControl acl, IResponseCallback<AccessControl> responseCallback) {
+ ensureInternetConnection();
+ RequestHelper.request(sourceActivity, provider, () -> provider.getDeckAPI().createAccessControl(remoteBoardId, acl), responseCallback);
+ }
+
+ public void updateAccessControl(long remoteBoardId, AccessControl acl, IResponseCallback<AccessControl> responseCallback) {
+ ensureInternetConnection();
+ RequestHelper.request(sourceActivity, provider, () -> provider.getDeckAPI().updateAccessControl(remoteBoardId, acl.getId(), acl), responseCallback);
+ }
+
+ public void deleteAccessControl(long remoteBoardId, AccessControl acl, IResponseCallback<Void> responseCallback) {
+ ensureInternetConnection();
+ RequestHelper.request(sourceActivity, provider, () -> provider.getDeckAPI().deleteAccessControl(remoteBoardId, acl.getId(), acl), responseCallback);
+ }
+
public void getStacks(long boardId, IResponseCallback<List<FullStack>> responseCallback) {
ensureInternetConnection();
RequestHelper.request(sourceActivity, provider, () -> provider.getDeckAPI().getStacks(boardId, getLastSyncDateFormatted(responseCallback.getAccount().getId())), responseCallback);
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 655c83db7..ddfa06dfb 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
@@ -406,6 +406,11 @@ public class DataBaseAdapter {
db.getAccessControlDao().update(entity);
}
+ public void deleteAccessControl(AccessControl entity, boolean setStatus) {
+ markAsEditedIfNeeded(entity, setStatus);
+ db.getAccessControlDao().update(entity);
+ }
+
public LiveData<FullBoard> getFullBoardById(Long accountId, Long localId) {
return db.getBoardDao().getFullBoardById(accountId, localId);
}
@@ -570,4 +575,7 @@ public class DataBaseAdapter {
db.getActivityDao().delete(activity);
}
+ public List<AccessControl> getLocallyChangedAccessControl(long accountId, long boardId) {
+ return db.getAccessControlDao().getLocallyChangedAccessControl(accountId, boardId);
+ }
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccessControlDao.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccessControlDao.java
index 4a42cf88b..928b8177c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccessControlDao.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccessControlDao.java
@@ -19,4 +19,7 @@ public interface AccessControlDao extends GenericDao<AccessControl> {
@Query("SELECT * FROM AccessControl WHERE accountId = :accountId and id = :remoteId")
AccessControl getAccessControlByRemoteIdDirectly(final long accountId, final long remoteId);
+
+ @Query("SELECT * FROM AccessControl WHERE accountId = :accountId and boardId = :boardId and (status<>1 or id is null or lastModified <> lastModifiedLocal)")
+ List<AccessControl> getLocallyChangedAccessControl(long accountId, long boardId);
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AccessControlDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AccessControlDataProvider.java
index 6c4d30fee..7fa1ca914 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AccessControlDataProvider.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AccessControlDataProvider.java
@@ -6,15 +6,18 @@ import java.util.List;
import it.niedermann.nextcloud.deck.api.IResponseCallback;
import it.niedermann.nextcloud.deck.model.AccessControl;
import it.niedermann.nextcloud.deck.model.User;
+import it.niedermann.nextcloud.deck.model.full.FullBoard;
import it.niedermann.nextcloud.deck.persistence.sync.adapters.ServerAdapter;
import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DataBaseAdapter;
public class AccessControlDataProvider extends AbstractSyncDataProvider<AccessControl> {
private List<AccessControl> acl;
+ private FullBoard board;
- public AccessControlDataProvider(AbstractSyncDataProvider<?> parent, List<AccessControl> acl) {
+ public AccessControlDataProvider(AbstractSyncDataProvider<?> parent, FullBoard board, List<AccessControl> acl) {
super(parent);
+ this.board = board;
this.acl = acl;
}
@@ -59,26 +62,26 @@ public class AccessControlDataProvider extends AbstractSyncDataProvider<AccessCo
@Override
public void createOnServer(ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, long accountId, IResponseCallback<AccessControl> responder, AccessControl entity) {
- //TODO: implement
+ serverAdapter.createAccessControl(board.getBoard().getId(), entity, responder);
}
@Override
public void updateOnServer(ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, long accountId, IResponseCallback<AccessControl> callback, AccessControl entity) {
- //TODO: implement
+ serverAdapter.updateAccessControl(board.getBoard().getId(), entity, callback);
}
@Override
public void deleteInDB(DataBaseAdapter dataBaseAdapter, long accountId, AccessControl accessControl) {
- //TODO: implement
+ dataBaseAdapter.deleteAccessControl(accessControl, true);
}
@Override
public void deleteOnServer(ServerAdapter serverAdapter, long accountId, IResponseCallback<Void> callback, AccessControl entity, DataBaseAdapter dataBaseAdapter) {
- //TODO: implement
+ serverAdapter.deleteAccessControl(board.getBoard().getId(), entity, callback);
}
@Override
public List<AccessControl> getAllChangedFromDB(DataBaseAdapter dataBaseAdapter, long accountId, Date lastSync) {
- return null;
+ return dataBaseAdapter.getLocallyChangedAccessControl(accountId, board.getId());
}
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java
index 561cc5dd9..d19c950ec 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java
@@ -77,7 +77,7 @@ public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> {
for (AccessControl ac : acl){
ac.setBoardId(existingEntity.getLocalId());
}
- syncHelper.doSyncFor(new AccessControlDataProvider(this, acl));
+ syncHelper.doSyncFor(new AccessControlDataProvider(this, existingEntity, acl));
}
if (entityFromServer.getStacks() != null && !entityFromServer.getStacks().isEmpty()){