From aa139b6d33362e48c74a98c654acfd294957ec10 Mon Sep 17 00:00:00 2001 From: m Date: Sat, 12 Sep 2026 01:16:47 +0200 Subject: [PATCH] user modification date --- .../com/vaultdrop/mobile/data/local/FileOrdering.kt | 9 +++++++-- .../com/vaultdrop/mobile/data/local/dao/FileDao.kt | 4 ++-- .../mobile/data/repository/FileRepository.kt | 2 +- .../mobile/ui/document/DocumentViewerViewModel.kt | 4 ++-- .../mobile/ui/folderlist/FolderListViewModel.kt | 11 ++++++----- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/local/FileOrdering.kt b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/local/FileOrdering.kt index 13481fe..95ef0fd 100644 --- a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/local/FileOrdering.kt +++ b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/local/FileOrdering.kt @@ -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.orderedByAddedAtDesc(): List = sortedByDescending { it.addedAt } \ No newline at end of file +/** 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.orderedByReferenceDateDesc(): List = + sortedByDescending { it.referenceDate } \ No newline at end of file diff --git a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/local/dao/FileDao.kt b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/local/dao/FileDao.kt index 00c5adf..f608c6c 100644 --- a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/local/dao/FileDao.kt +++ b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/local/dao/FileDao.kt @@ -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> - @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> @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> diff --git a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/repository/FileRepository.kt b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/repository/FileRepository.kt index 924e751..c11397b 100644 --- a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/repository/FileRepository.kt +++ b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/data/repository/FileRepository.kt @@ -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> = fileDao.recentFiles(category = category, limit = limit) diff --git a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/document/DocumentViewerViewModel.kt b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/document/DocumentViewerViewModel.kt index 14ac894..ed73c90 100644 --- a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/document/DocumentViewerViewModel.kt +++ b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/document/DocumentViewerViewModel.kt @@ -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() } } } diff --git a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderlist/FolderListViewModel.kt b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderlist/FolderListViewModel.kt index 2ebdcb9..397227b 100644 --- a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderlist/FolderListViewModel.kt +++ b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderlist/FolderListViewModel.kt @@ -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): List { 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(