diff options
author | desperateCoder <echotodevnull@gmail.com> | 2019-01-13 17:07:58 +0300 |
---|---|---|
committer | desperateCoder <echotodevnull@gmail.com> | 2019-01-13 17:07:58 +0300 |
commit | ac59e26f1681e12edd0792658db6fb92fbbace2d (patch) | |
tree | b54683fedce682de5082fcd48a370ed93087f3b3 /app | |
parent | 400c40d96072b9c5393c048554ac783ce8b0978a (diff) |
fixed bunch of bugs (still WIP)
Diffstat (limited to 'app')
11 files changed, 143 insertions, 31 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 1096e4bad..477a87a36 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 @@ -8,6 +8,7 @@ import it.niedermann.nextcloud.deck.model.Board; import it.niedermann.nextcloud.deck.model.Card; import it.niedermann.nextcloud.deck.model.Label; import it.niedermann.nextcloud.deck.model.Stack; +import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.full.FullStack; import retrofit2.http.Body; @@ -30,7 +31,7 @@ public interface DeckAPI { Observable<Board> getBoard(@Path("id") long id, @Header(MODIFIED_SINCE_HEADER) String lastSync); @GET("boards") - Observable<List<Board>> getBoards(@Header(MODIFIED_SINCE_HEADER) String lastSync); + Observable<List<FullBoard>> getBoards(@Header(MODIFIED_SINCE_HEADER) String lastSync); // ### Stacks diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI_SSO.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI_SSO.java index e889ae2eb..babc46118 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI_SSO.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI_SSO.java @@ -20,6 +20,7 @@ import it.niedermann.nextcloud.deck.model.Board; import it.niedermann.nextcloud.deck.model.Card; import it.niedermann.nextcloud.deck.model.Label; import it.niedermann.nextcloud.deck.model.Stack; +import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.full.FullStack; @@ -77,7 +78,7 @@ public class DeckAPI_SSO implements DeckAPI { } @Override - public Observable<List<Board>> getBoards(String lastSync) { + public Observable<List<FullBoard>> getBoards(String lastSync) { NextcloudRequest request = buildRequest(GET, "boards", lastSync).build(); return nextcloudAPI.performRequestObservable(TypeToken.getParameterized(List.class, Board.class).getType(), request); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java index bf4ac2a3f..d372112aa 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java @@ -7,8 +7,8 @@ import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.List; -import it.niedermann.nextcloud.deck.model.Board; import it.niedermann.nextcloud.deck.model.Label; +import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.full.FullStack; @@ -19,8 +19,8 @@ import it.niedermann.nextcloud.deck.model.full.FullStack; public class GsonConfig { public static Gson GetGson() { - Type boardList = new TypeToken<List<Board>>() {}.getType(); - Type board = new TypeToken<Board>() {}.getType(); + Type boardList = new TypeToken<List<FullBoard>>() {}.getType(); + Type board = new TypeToken<FullBoard>() {}.getType(); Type cardList = new TypeToken<FullCard>() {}.getType(); Type card = new TypeToken<FullCard>() {}.getType(); Type labelList = new TypeToken<Label>() {}.getType(); @@ -30,8 +30,8 @@ public class GsonConfig { return new GsonBuilder() .setLenient() - .registerTypeAdapter(boardList, new NextcloudArrayDeserializer<>("boards", Board.class)) - .registerTypeAdapter(board, new NextcloudArrayDeserializer<>("board", Board.class)) + .registerTypeAdapter(boardList, new NextcloudArrayDeserializer<>("boards", FullBoard.class)) + .registerTypeAdapter(board, new NextcloudArrayDeserializer<>("board", FullBoard.class)) .registerTypeAdapter(cardList, new NextcloudArrayDeserializer<>("cards", FullCard.class)) .registerTypeAdapter(card, new NextcloudDeserializer<>("card", FullCard.class)) .registerTypeAdapter(labelList, new NextcloudArrayDeserializer<>("labels", Label.class)) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java index 62121a91a..9ce3ba9ff 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java @@ -20,6 +20,7 @@ import it.niedermann.nextcloud.deck.model.Card; import it.niedermann.nextcloud.deck.model.Label; import it.niedermann.nextcloud.deck.model.Stack; import it.niedermann.nextcloud.deck.model.User; +import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.full.FullStack; @@ -31,11 +32,11 @@ public class JsonToEntityParser { } protected static <T> T parseJsonObject(JsonObject obj, Class<T> mType) { - if (mType == Board.class) { + if (mType == FullBoard.class) { return (T) parseBoard(obj); - } else if (mType == Card.class) { + } else if (mType == FullCard.class) { return (T) parseCard(obj); - } else if (mType == Stack.class) { + } else if (mType == FullStack.class) { return (T) parseStack(obj); } else if (mType == Label.class) { return (T) parseLabel(obj); @@ -44,12 +45,33 @@ public class JsonToEntityParser { } - protected static Board parseBoard(JsonObject e) { + protected static FullBoard parseBoard(JsonObject e) { + FullBoard fullBoard = new FullBoard(); + DeckLog.log(e.toString()); Board board = new Board(); board.setTitle(getNullAsEmptyString(e.get("title"))); board.setId(e.get("id").getAsLong()); - return board; + fullBoard.setBoard(board); + + if (e.has("labels") && !e.get("labels").isJsonNull()) { + JsonArray labelsJson = e.getAsJsonArray("labels"); + List<Label> labels = new ArrayList<>(); + for (JsonElement labelJson : labelsJson) { + labels.add(parseLabel(labelJson.getAsJsonObject())); + } + fullBoard.setLabels(labels); + } + //todo e.get "participants" / acl + + JsonElement owner = e.get("owner"); + if (owner != null) { + if (owner.isJsonPrimitive()) {//TODO: remove if, let only else! + Log.d(DeckConsts.DEBUG_TAG, "owner is Primitive, skipping"); + } else + fullBoard.setOwner(parseUser(owner.getAsJsonObject())); + } + return fullBoard; } protected static FullCard parseCard(JsonObject e) { @@ -74,8 +96,8 @@ public class JsonToEntityParser { } fullCard.setLabels(labels); } - //e.get "assignedUsers" - //e.get "attachments" + //todo e.get "participants" / acl + //todo e.get "attachments" card.setStackId(e.get("attachmentCount").getAsInt()); card.setOrder(e.get("order").getAsInt()); card.setOverdue(e.get("overdue").getAsInt()); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/full/FullBoard.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/full/FullBoard.java new file mode 100644 index 000000000..0e66e4027 --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/full/FullBoard.java @@ -0,0 +1,60 @@ +package it.niedermann.nextcloud.deck.model.full; + +import android.arch.persistence.room.Embedded; +import android.arch.persistence.room.Ignore; +import android.arch.persistence.room.Relation; + +import java.util.ArrayList; +import java.util.List; + +import it.niedermann.nextcloud.deck.model.Board; +import it.niedermann.nextcloud.deck.model.Label; +import it.niedermann.nextcloud.deck.model.User; +import it.niedermann.nextcloud.deck.model.interfaces.IRemoteEntity; + +public class FullBoard implements IRemoteEntity { + @Embedded + public Board board; + + @Relation(entity = Label.class, parentColumn = "localId", entityColumn = "localId") + public List<Label> labels; + + @Relation(parentColumn = "ownerId", entityColumn = "localId") + public List<User> owner; + + @Relation(entity = User.class, parentColumn = "localId", entityColumn = "localId") + public List<User> participants; + + + public List<User> getOwner() { + return owner; + } + + public void setOwner(User owner) { + List<User> user = new ArrayList<>(); + user.add(owner); + this.owner = user; + } + + public Board getBoard() { + return board; + } + + public void setBoard(Board board) { + this.board = board; + } + + public List<Label> getLabels() { + return labels; + } + + public void setLabels(List<Label> labels) { + this.labels = labels; + } + + @Ignore + @Override + public IRemoteEntity getEntity() { + return board; + } +} 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 a5395711b..878a67e95 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 @@ -16,6 +16,7 @@ import it.niedermann.nextcloud.deck.api.RequestHelper; import it.niedermann.nextcloud.deck.model.Board; import it.niedermann.nextcloud.deck.model.Card; import it.niedermann.nextcloud.deck.model.Stack; +import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.full.FullStack; @@ -57,7 +58,7 @@ public class ServerAdapter { // return lastSync; } - public void getBoards(long accountId, IResponseCallback<List<Board>> responseCallback) { + public void getBoards(long accountId, IResponseCallback<List<FullBoard>> responseCallback) { RequestHelper.request(sourceActivity, provider, () -> provider.getAPI().getBoards(getLastSyncDateFormatted()), 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 8a2e297b7..3ef0619fd 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 @@ -15,6 +15,7 @@ import it.niedermann.nextcloud.deck.model.JoinStackWithCard; import it.niedermann.nextcloud.deck.model.Label; import it.niedermann.nextcloud.deck.model.Stack; import it.niedermann.nextcloud.deck.model.User; +import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.full.FullStack; @@ -48,6 +49,9 @@ public class DataBaseAdapter { public Board getBoardByRemoteIdDirectly(long accountId, long remoteId) { return db.getBoardDao().getBoardByRemoteIdDirectly(accountId, remoteId); } + public FullBoard getFullBoardByRemoteIdDirectly(long accountId, long remoteId) { + return db.getBoardDao().getFullBoardByRemoteIdDirectly(accountId, remoteId); + } public LiveData<Stack> getStackByRemoteId(long accountId, long localBoardId, long remoteId) { @@ -78,7 +82,10 @@ public class DataBaseAdapter { } public User getUserByRemoteIdDirectly(long accountId, long remoteId) { - return db.getUserDao().getUsersByRemoteIdDirectly(accountId, remoteId); + return db.getUserDao().getUserByRemoteIdDirectly(accountId, remoteId); + } + public User getUserByUidDirectly(long accountId, String uid) { + return db.getUserDao().getUserByUidDirectly(accountId, uid); } 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 12e884d31..0d1737d02 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 @@ -3,10 +3,12 @@ package it.niedermann.nextcloud.deck.persistence.sync.adapters.db.dao; import android.arch.lifecycle.LiveData; import android.arch.persistence.room.Dao; import android.arch.persistence.room.Query; +import android.arch.persistence.room.Transaction; import java.util.List; import it.niedermann.nextcloud.deck.model.Board; +import it.niedermann.nextcloud.deck.model.full.FullBoard; @Dao public interface BoardDao extends GenericDao<Board> { @@ -19,4 +21,8 @@ public interface BoardDao extends GenericDao<Board> { @Query("SELECT * FROM board WHERE accountId = :accountId and id = :remoteId") Board getBoardByRemoteIdDirectly(long accountId, long remoteId); + + @Transaction + @Query("SELECT * FROM board WHERE accountId = :accountId and id = :remoteId") + FullBoard getFullBoardByRemoteIdDirectly(long accountId, long remoteId); }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDao.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDao.java index d54f318e7..c3ffa96ad 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDao.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDao.java @@ -18,6 +18,9 @@ public interface UserDao extends GenericDao<User> { LiveData<User> getUsersByRemoteId(final long accountId, final long remoteId); @Query("SELECT * FROM user WHERE accountId = :accountId and id = :remoteId") - User getUsersByRemoteIdDirectly(final long accountId, final long remoteId); + User getUserByRemoteIdDirectly(final long accountId, final long remoteId); + + @Query("SELECT * FROM user WHERE accountId = :accountId and uid = :uid") + User getUserByUidDirectly(final long accountId, final String uid); }
\ No newline at end of file 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 5d5cee46a..44dfb0879 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 @@ -3,34 +3,45 @@ package it.niedermann.nextcloud.deck.persistence.sync.helpers.providers; import java.util.List; import it.niedermann.nextcloud.deck.api.IResponseCallback; -import it.niedermann.nextcloud.deck.model.Board; +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; import it.niedermann.nextcloud.deck.persistence.sync.helpers.SyncHelper; -public class BoardDataProvider implements IDataProvider<Board> { +public class BoardDataProvider implements IDataProvider<FullBoard> { @Override - public void getAllFromServer(ServerAdapter serverAdapter, long accountId, IResponseCallback<List<Board>> responder) { + public void getAllFromServer(ServerAdapter serverAdapter, long accountId, IResponseCallback<List<FullBoard>> responder) { serverAdapter.getBoards(accountId, responder); } @Override - public Board getSingleFromDB(DataBaseAdapter dataBaseAdapter, long accountId, long remoteId) { - return dataBaseAdapter.getBoardByRemoteIdDirectly(accountId, remoteId); + public FullBoard getSingleFromDB(DataBaseAdapter dataBaseAdapter, long accountId, long remoteId) { + return dataBaseAdapter.getFullBoardByRemoteIdDirectly(accountId, remoteId); } @Override - public void createInDB(DataBaseAdapter dataBaseAdapter, long accountId, Board entity) { - dataBaseAdapter.createBoard(accountId, entity); + public void createInDB(DataBaseAdapter dataBaseAdapter, long accountId, FullBoard entity) { + if (entity.getOwner()!=null && entity.getOwner().size() == 1) { + User remoteOwner = entity.getOwner().get(0); + User owner = dataBaseAdapter.getUserByUidDirectly(accountId, remoteOwner.getUid()); + if (owner == null){ + dataBaseAdapter.createUser(accountId, remoteOwner); + } + owner = dataBaseAdapter.getUserByUidDirectly(accountId, remoteOwner.getUid()); + entity.getBoard().setOwnerId(owner.getLocalId()); + } + + dataBaseAdapter.createBoard(accountId, entity.getBoard()); } @Override - public void updateInDB(DataBaseAdapter dataBaseAdapter, long accountId, Board entity) { - dataBaseAdapter.updateBoard(entity); + public void updateInDB(DataBaseAdapter dataBaseAdapter, long accountId, FullBoard entity) { + dataBaseAdapter.updateBoard(entity.getBoard()); } @Override - public void goDeeper(SyncHelper syncHelper, Board entityFromServer) { + public void goDeeper(SyncHelper syncHelper, FullBoard entityFromServer) { syncHelper.doSyncFor(new StackDataProvider(entityFromServer)); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/StackDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/StackDataProvider.java index 219b62b62..663a952fb 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/StackDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/StackDataProvider.java @@ -3,16 +3,16 @@ package it.niedermann.nextcloud.deck.persistence.sync.helpers.providers; import java.util.List; import it.niedermann.nextcloud.deck.api.IResponseCallback; -import it.niedermann.nextcloud.deck.model.Board; +import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.model.full.FullStack; 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.helpers.SyncHelper; public class StackDataProvider implements IDataProvider<FullStack> { - private Board board; + private FullBoard board; - public StackDataProvider(Board board) { + public StackDataProvider(FullBoard board) { this.board = board; } @@ -38,6 +38,6 @@ public class StackDataProvider implements IDataProvider<FullStack> { @Override public void goDeeper(SyncHelper syncHelper, FullStack entityFromServer) { - syncHelper.doSyncFor(new CardDataProvider(board, entityFromServer)); + syncHelper.doSyncFor(new CardDataProvider(board.getBoard(), entityFromServer)); } } |