diff --git a/app/src/main/java/org/tasks/widget/TasksWidgetViewFactory.kt b/app/src/main/java/org/tasks/widget/TasksWidgetViewFactory.kt index 19767bcce..059b91a2e 100644 --- a/app/src/main/java/org/tasks/widget/TasksWidgetViewFactory.kt +++ b/app/src/main/java/org/tasks/widget/TasksWidgetViewFactory.kt @@ -300,7 +300,8 @@ internal class TasksWidgetViewFactory( private suspend fun getQuery(filter: Filter): String { subtasksHelper.applySubtasksToWidgetFilter(filter, widgetPreferences) - return getQuery(widgetPreferences, filter) + val limit = if (taskLimit == Int.MAX_VALUE) null else taskLimit + return getQuery(widgetPreferences, filter, limit) } private fun formatDueDate(row: RemoteViews, task: TaskContainer) = with(row) { diff --git a/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQuery.kt b/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQuery.kt index 659e2233b..44822b104 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQuery.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQuery.kt @@ -40,19 +40,20 @@ object TaskListQuery { fun getQuery( preferences: QueryPreferences, filter: Filter, + limit: Int? = null, ): String { val start = currentTimeMillis() return when { filter.supportsManualSort() && preferences.isManualSort -> - getRecursiveQuery(filter, preferences) + getRecursiveQuery(filter, preferences, limit) filter is AstridOrderingFilter && preferences.isAstridSort -> - getNonRecursiveQuery(filter, preferences) + getNonRecursiveQuery(filter, preferences, limit) filter.supportsSorting() -> - getRecursiveQuery(filter, preferences) + getRecursiveQuery(filter, preferences, limit) - else -> getNonRecursiveQuery(filter, preferences) + else -> getNonRecursiveQuery(filter, preferences, limit) }.also { Logger.v("TaskListQuery") { "Building query took ${currentTimeMillis() - start}ms" } } } } diff --git a/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryNonRecursive.kt b/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryNonRecursive.kt index b298d30cf..9be2db827 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryNonRecursive.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryNonRecursive.kt @@ -29,7 +29,7 @@ internal object TaskListQueryNonRecursive { field("tasks.completed > 0").`as`("parentComplete") )).toTypedArray() - fun getNonRecursiveQuery(filter: Filter, preferences: QueryPreferences): String { + fun getNonRecursiveQuery(filter: Filter, preferences: QueryPreferences, limit: Int? = null): String { val joinedQuery = JOINS + if (filter is AstridOrderingFilter) filter.getSqlQuery() else filter.sql!! val sortMode = preferences.sortMode val groupMode = preferences.groupMode @@ -52,9 +52,10 @@ internal object TaskListQueryNonRecursive { else -> "$query GROUP BY ${Task.ID}" } - return Query.select(*FIELDS.plus(sortGroup)) + val result = Query.select(*FIELDS.plus(sortGroup)) .withQueryTemplate(PermaSql.replacePlaceholdersForQuery(groupedQuery)) .from(Task.TABLE) .toString() + return if (limit != null) "$result LIMIT $limit" else result } } diff --git a/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryRecursive.kt b/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryRecursive.kt index 105bb34b7..a4f496167 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryRecursive.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryRecursive.kt @@ -19,6 +19,7 @@ internal object TaskListQueryRecursive { fun getRecursiveQuery( filter: Filter, preferences: QueryPreferences, + limit: Int? = null, ): String { val parentQuery = when (filter) { is CaldavFilter -> newCaldavQuery(filter.uuid) @@ -165,6 +166,7 @@ internal object TaskListQueryRecursive { ${TaskListQuery.JOINS} GROUP BY tasks._id ORDER BY sequence + ${limit?.let { "LIMIT $it" } ?: ""} """.trimIndent() return SortHelper.adjustQueryForFlags(preferences, query)