user modification date

This commit is contained in:
m
2026-09-12 01:16:47 +02:00
parent 0041a1a48a
commit aa139b6d33
5 changed files with 18 additions and 12 deletions
@@ -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>>
@@ -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)
@@ -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()
}
}
}
@@ -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(