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/database')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/database/DataBaseAdapter.java39
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/database/DeckDatabase.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/database/dao/CardDao.java3
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/database/migration/Migration_32_33.java25
4 files changed, 57 insertions, 14 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/database/DataBaseAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/database/DataBaseAdapter.java
index 5d3b28950..a95ab7a8c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/database/DataBaseAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/database/DataBaseAdapter.java
@@ -60,6 +60,7 @@ import it.niedermann.nextcloud.deck.model.Stack;
import it.niedermann.nextcloud.deck.model.User;
import it.niedermann.nextcloud.deck.model.appwidgets.StackWidgetModel;
import it.niedermann.nextcloud.deck.model.enums.DBStatus;
+import it.niedermann.nextcloud.deck.model.enums.EDoneType;
import it.niedermann.nextcloud.deck.model.enums.EDueType;
import it.niedermann.nextcloud.deck.model.full.FullBoard;
import it.niedermann.nextcloud.deck.model.full.FullCard;
@@ -259,9 +260,9 @@ public class DataBaseAdapter {
public LiveData<List<FullCard>> getFullCardsForStack(long accountId, long localStackId, @Nullable FilterInformation filter) {
return new ReactiveLiveData<>(
- filter == null
- ? db.getCardDao().getFullCardsForStack(accountId, localStackId)
- : db.getCardDao().getFilteredFullCardsForStack(getQueryForFilter(filter, accountId, localStackId)))
+ FilterInformation.hasActiveFilter(filter)
+ ? db.getCardDao().getFilteredFullCardsForStack(getQueryForFilter(filter, accountId, localStackId))
+ : db.getCardDao().getFullCardsForStack(accountId, localStackId))
.tap(this::filterRelationsForCard, executor)
.distinctUntilChanged();
@@ -284,9 +285,9 @@ public class DataBaseAdapter {
@WorkerThread
public List<FullCard> getFullCardsForStackDirectly(long accountId, long localStackId, @Nullable FilterInformation filter) {
- return filter == null
- ? db.getCardDao().getFullCardsForStackDirectly(accountId, localStackId)
- : db.getCardDao().getFilteredFullCardsForStackDirectly(getQueryForFilter(filter, accountId, localStackId));
+ return FilterInformation.hasActiveFilter(filter)
+ ? db.getCardDao().getFilteredFullCardsForStackDirectly(getQueryForFilter(filter, accountId, localStackId))
+ : db.getCardDao().getFullCardsForStackDirectly(accountId, localStackId);
}
@AnyThread
@@ -351,24 +352,38 @@ public class DataBaseAdapter {
if (filter.getDueType() != EDueType.NO_FILTER) {
switch (filter.getDueType()) {
case NO_DUE:
- query.append("and c.dueDate is null");
+ query.append("and c.dueDate is null ");
break;
case OVERDUE:
- query.append("and datetime(c.duedate/1000, 'unixepoch', 'localtime') <= datetime('now', 'localtime')");
+ query.append("and datetime(c.duedate/1000, 'unixepoch', 'localtime') <= datetime('now', 'localtime') ");
break;
case TODAY:
- query.append("and datetime(c.duedate/1000, 'unixepoch', 'localtime') between datetime('now', 'localtime') and datetime('now', '+24 hour', 'localtime')");
+ query.append("and datetime(c.duedate/1000, 'unixepoch', 'localtime') between datetime('now', 'localtime') and datetime('now', '+24 hour', 'localtime') ");
break;
case WEEK:
- query.append("and datetime(c.duedate/1000, 'unixepoch', 'localtime') between datetime('now', 'localtime') and datetime('now', '+7 day', 'localtime')");
+ query.append("and datetime(c.duedate/1000, 'unixepoch', 'localtime') between datetime('now', 'localtime') and datetime('now', '+7 day', 'localtime') ");
break;
case MONTH:
- query.append("and datetime(c.duedate/1000, 'unixepoch', 'localtime') between datetime('now', 'localtime') and datetime('now', '+30 day', 'localtime')");
+ query.append("and datetime(c.duedate/1000, 'unixepoch', 'localtime') between datetime('now', 'localtime') and datetime('now', '+30 day', 'localtime') ");
break;
default:
- throw new IllegalArgumentException("You need to add your new EDueType value\"" + filter.getDueType() + "\" here!");
+ throw new IllegalArgumentException("You need to add your new " + EDueType.class.getSimpleName() + " value\"" + filter.getDueType() + "\" here!");
}
}
+
+ if (filter.getDoneType() != EDoneType.NO_FILTER) {
+ switch (filter.getDoneType()) {
+ case DONE:
+ query.append("and (c.done is not null and c.done != 0) ");
+ break;
+ case UNDONE:
+ query.append("and (c.done is null or c.done = 0) ");
+ break;
+ default:
+ throw new IllegalArgumentException("You need to add your new " + EDoneType.class.getSimpleName() + " value\"" + filter.getDueType() + "\" here!");
+ }
+ }
+
if (!TextUtils.isEmpty(filter.getFilterText())) {
query.append(" and (c.description like ? or c.title like ?) ");
String filterText = "%" + filter.getFilterText() + "%";
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/database/DeckDatabase.java b/app/src/main/java/it/niedermann/nextcloud/deck/database/DeckDatabase.java
index b71abece1..a41379e8d 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/database/DeckDatabase.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/database/DeckDatabase.java
@@ -65,6 +65,7 @@ import it.niedermann.nextcloud.deck.database.migration.Migration_28_29;
import it.niedermann.nextcloud.deck.database.migration.Migration_29_30;
import it.niedermann.nextcloud.deck.database.migration.Migration_30_31;
import it.niedermann.nextcloud.deck.database.migration.Migration_31_32;
+import it.niedermann.nextcloud.deck.database.migration.Migration_32_33;
import it.niedermann.nextcloud.deck.database.migration.Migration_8_9;
import it.niedermann.nextcloud.deck.database.migration.Migration_9_10;
import it.niedermann.nextcloud.deck.model.AccessControl;
@@ -135,7 +136,7 @@ import it.niedermann.nextcloud.deck.remote.api.LastSyncUtil;
FilterWidgetSort.class,
},
exportSchema = false,
- version = 32
+ version = 33
)
@TypeConverters({DateTypeConverter.class, EnumConverter.class})
public abstract class DeckDatabase extends RoomDatabase {
@@ -188,6 +189,7 @@ public abstract class DeckDatabase extends RoomDatabase {
.addMigrations(new Migration_29_30(context))
.addMigrations(new Migration_30_31())
.addMigrations(new Migration_31_32(context))
+ .addMigrations(new Migration_32_33())
.fallbackToDestructiveMigration()
.addCallback(ON_CREATE_CALLBACK)
.build();
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/database/dao/CardDao.java b/app/src/main/java/it/niedermann/nextcloud/deck/database/dao/CardDao.java
index 5d25f943f..0f067381e 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/database/dao/CardDao.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/database/dao/CardDao.java
@@ -23,7 +23,8 @@ public interface CardDao extends GenericDao<Card> {
"and (c.deletedAt is null or c.deletedAt = 0) " +
"and (s.deletedAt is null or s.deletedAt = 0) " +
"and (b.deletedAt is null or b.deletedAt = 0) " +
- // FUll Logic: (hasDueDate AND isIn_PRIVATE_Board) OR (isInSharedBoard AND (assignedToMe OR (hasDueDate AND noAssignees)))
+ "and (c.done is null or c.done = 0) " +
+ // Full Logic: (hasDueDate AND isIn_PRIVATE_Board) OR (isInSharedBoard AND (assignedToMe OR (hasDueDate AND noAssignees)))
"and (" +
"(c.dueDate is not null AND NOT exists(select 1 from AccessControl ac where ac.boardId = b.localId and ac.status <> 3))" + //(hasDueDate AND isInPrivateBoard)
"OR (" +
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/database/migration/Migration_32_33.java b/app/src/main/java/it/niedermann/nextcloud/deck/database/migration/Migration_32_33.java
new file mode 100644
index 000000000..d6938dda6
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/database/migration/Migration_32_33.java
@@ -0,0 +1,25 @@
+package it.niedermann.nextcloud.deck.database.migration;
+
+import androidx.annotation.NonNull;
+import androidx.room.migration.Migration;
+import androidx.sqlite.db.SupportSQLiteDatabase;
+
+/**
+ * Adds support for marking a card as done: https://github.com/stefan-niedermann/nextcloud-deck/issues/1556
+ */
+public class Migration_32_33 extends Migration {
+
+ public Migration_32_33() {
+ super(32, 33);
+ }
+
+ @Override
+ public void migrate(@NonNull SupportSQLiteDatabase database) {
+ database.execSQL("ALTER TABLE `Card` add column done INTEGER");
+ // Reset ETags: Refetch all cards to support Done state which did not change ETags
+ database.execSQL("UPDATE `Account` SET `boardsEtag` = NULL");
+ database.execSQL("UPDATE `Board` SET `etag` = NULL");
+ database.execSQL("UPDATE `Stack` SET `etag` = NULL");
+ database.execSQL("UPDATE `Card` SET `etag` = NULL");
+ }
+}