user modification date
This commit is contained in:
@@ -2,5 +2,10 @@ package com.vaultdrop.mobile.data.local
|
||||
|
||||
import com.vaultdrop.mobile.data.local.entity.FileEntity
|
||||
|
||||
/** Fil documents : même ordre que la grille d'accueil, du plus récent au plus vieux. */
|
||||
fun List<FileEntity>.orderedByAddedAtDesc(): List<FileEntity> = sortedByDescending { it.addedAt }
|
||||
/** Date de référence d'un fichier : modification SAF quand dispo, sinon ajout local. */
|
||||
val FileEntity.referenceDate: Long
|
||||
get() = lastModified ?: addedAt
|
||||
|
||||
/** Tri documents : même ordre que la grille d'accueil, du plus récent au plus vieux. */
|
||||
fun List<FileEntity>.orderedByReferenceDateDesc(): List<FileEntity> =
|
||||
sortedByDescending { it.referenceDate }
|
||||
@@ -15,7 +15,7 @@ interface FileDao {
|
||||
@Query("SELECT * FROM files WHERE folder_resource_id = :folderResourceId AND \"exists\" = 1 ORDER BY name ASC")
|
||||
fun observeByFolder(folderResourceId: String): Flow<List<FileEntity>>
|
||||
|
||||
@Query("SELECT * FROM files WHERE \"exists\" = 1 ORDER BY added_at DESC, name ASC")
|
||||
@Query("SELECT * FROM files WHERE \"exists\" = 1 ORDER BY COALESCE(last_modified, added_at) DESC, name ASC")
|
||||
fun observeAllVisible(): Flow<List<FileEntity>>
|
||||
|
||||
@Query("SELECT * FROM files WHERE resource_id = :resourceId LIMIT 1")
|
||||
@@ -37,7 +37,7 @@ interface FileDao {
|
||||
SELECT * FROM files
|
||||
WHERE "exists" = 1
|
||||
AND (:category IS NULL OR category = :category)
|
||||
ORDER BY added_at DESC, name ASC
|
||||
ORDER BY COALESCE(last_modified, added_at) DESC, name ASC
|
||||
LIMIT :limit
|
||||
""")
|
||||
fun recentFiles(category: String?, limit: Int): Flow<List<FileEntity>>
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ class FileRepository @Inject constructor(
|
||||
category = category,
|
||||
)
|
||||
|
||||
/** Les `limit` fichiers les plus récemment ajoutés, filtrés par catégorie. */
|
||||
/** Les `limit` fichiers les plus récents (date de référence), filtrés par catégorie. */
|
||||
fun recentFiles(category: String?, limit: Int = RECENT_LIMIT): Flow<List<FileEntity>> =
|
||||
fileDao.recentFiles(category = category, limit = limit)
|
||||
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ package com.vaultdrop.mobile.ui.document
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.vaultdrop.mobile.data.local.entity.FileEntity
|
||||
import com.vaultdrop.mobile.data.local.orderedByAddedAtDesc
|
||||
import com.vaultdrop.mobile.data.local.orderedByReferenceDateDesc
|
||||
import com.vaultdrop.mobile.data.repository.FileRepository
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
@@ -27,7 +27,7 @@ class DocumentViewerViewModel @Inject constructor(
|
||||
init {
|
||||
viewModelScope.launch {
|
||||
fileRepository.observeAllVisible().collect { files ->
|
||||
_documents.value = files.orderedByAddedAtDesc()
|
||||
_documents.value = files.orderedByReferenceDateDesc()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
-5
@@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.vaultdrop.mobile.auth.TokenProvider
|
||||
import com.vaultdrop.mobile.data.local.entity.FileEntity
|
||||
import com.vaultdrop.mobile.data.local.referenceDate
|
||||
import com.vaultdrop.mobile.data.remote.ApiException
|
||||
import com.vaultdrop.mobile.data.repository.FileRepository
|
||||
import com.vaultdrop.mobile.data.repository.FolderRepository
|
||||
@@ -36,7 +37,7 @@ class FolderListViewModel @Inject constructor(
|
||||
refresh()
|
||||
}
|
||||
|
||||
/** Grille d'accueil : tous les fichiers visibles, groupés par jour (addedAt). */
|
||||
/** Grille d'accueil : tous les fichiers visibles, groupés par jour (date de référence). */
|
||||
private fun observeFiles() {
|
||||
viewModelScope.launch {
|
||||
fileRepository.observeAllVisible().collect { files ->
|
||||
@@ -45,16 +46,16 @@ class FolderListViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
/** Miroir de `groupFilesByDay` (app/index.tsx) : sections triées du plus récent
|
||||
* au plus vieux, fichiers d'un jour triés par date décroissante, en paires. */
|
||||
/** Sections triées du plus récent au plus vieux, fichiers d'un jour triés par date
|
||||
* décroissante, en paires. La date de référence = modification SAF, sinon ajout. */
|
||||
private fun groupFilesByDay(files: List<FileEntity>): List<FileSection> {
|
||||
val zone = ZoneId.systemDefault()
|
||||
return files
|
||||
.groupBy { startOfDay(it.addedAt, zone) }
|
||||
.groupBy { startOfDay(it.referenceDate, zone) }
|
||||
.entries
|
||||
.sortedByDescending { it.key }
|
||||
.map { (day, list) ->
|
||||
val rows = list.sortedByDescending { it.addedAt }
|
||||
val rows = list.sortedByDescending { it.referenceDate }
|
||||
.chunked(2)
|
||||
.map { pair ->
|
||||
FilePair(
|
||||
|
||||
Reference in New Issue
Block a user