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
|
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. */
|
/** Date de référence d'un fichier : modification SAF quand dispo, sinon ajout local. */
|
||||||
fun List<FileEntity>.orderedByAddedAtDesc(): List<FileEntity> = sortedByDescending { it.addedAt }
|
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")
|
@Query("SELECT * FROM files WHERE folder_resource_id = :folderResourceId AND \"exists\" = 1 ORDER BY name ASC")
|
||||||
fun observeByFolder(folderResourceId: String): Flow<List<FileEntity>>
|
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>>
|
fun observeAllVisible(): Flow<List<FileEntity>>
|
||||||
|
|
||||||
@Query("SELECT * FROM files WHERE resource_id = :resourceId LIMIT 1")
|
@Query("SELECT * FROM files WHERE resource_id = :resourceId LIMIT 1")
|
||||||
@@ -37,7 +37,7 @@ interface FileDao {
|
|||||||
SELECT * FROM files
|
SELECT * FROM files
|
||||||
WHERE "exists" = 1
|
WHERE "exists" = 1
|
||||||
AND (:category IS NULL OR category = :category)
|
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
|
LIMIT :limit
|
||||||
""")
|
""")
|
||||||
fun recentFiles(category: String?, limit: Int): Flow<List<FileEntity>>
|
fun recentFiles(category: String?, limit: Int): Flow<List<FileEntity>>
|
||||||
|
|||||||
+1
-1
@@ -39,7 +39,7 @@ class FileRepository @Inject constructor(
|
|||||||
category = category,
|
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>> =
|
fun recentFiles(category: String?, limit: Int = RECENT_LIMIT): Flow<List<FileEntity>> =
|
||||||
fileDao.recentFiles(category = category, limit = limit)
|
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.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.vaultdrop.mobile.data.local.entity.FileEntity
|
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 com.vaultdrop.mobile.data.repository.FileRepository
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
@@ -27,7 +27,7 @@ class DocumentViewerViewModel @Inject constructor(
|
|||||||
init {
|
init {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
fileRepository.observeAllVisible().collect { files ->
|
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 androidx.lifecycle.viewModelScope
|
||||||
import com.vaultdrop.mobile.auth.TokenProvider
|
import com.vaultdrop.mobile.auth.TokenProvider
|
||||||
import com.vaultdrop.mobile.data.local.entity.FileEntity
|
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.remote.ApiException
|
||||||
import com.vaultdrop.mobile.data.repository.FileRepository
|
import com.vaultdrop.mobile.data.repository.FileRepository
|
||||||
import com.vaultdrop.mobile.data.repository.FolderRepository
|
import com.vaultdrop.mobile.data.repository.FolderRepository
|
||||||
@@ -36,7 +37,7 @@ class FolderListViewModel @Inject constructor(
|
|||||||
refresh()
|
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() {
|
private fun observeFiles() {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
fileRepository.observeAllVisible().collect { files ->
|
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
|
/** Sections triées du plus récent au plus vieux, fichiers d'un jour triés par date
|
||||||
* au plus vieux, fichiers d'un jour triés par date décroissante, en paires. */
|
* décroissante, en paires. La date de référence = modification SAF, sinon ajout. */
|
||||||
private fun groupFilesByDay(files: List<FileEntity>): List<FileSection> {
|
private fun groupFilesByDay(files: List<FileEntity>): List<FileSection> {
|
||||||
val zone = ZoneId.systemDefault()
|
val zone = ZoneId.systemDefault()
|
||||||
return files
|
return files
|
||||||
.groupBy { startOfDay(it.addedAt, zone) }
|
.groupBy { startOfDay(it.referenceDate, zone) }
|
||||||
.entries
|
.entries
|
||||||
.sortedByDescending { it.key }
|
.sortedByDescending { it.key }
|
||||||
.map { (day, list) ->
|
.map { (day, list) ->
|
||||||
val rows = list.sortedByDescending { it.addedAt }
|
val rows = list.sortedByDescending { it.referenceDate }
|
||||||
.chunked(2)
|
.chunked(2)
|
||||||
.map { pair ->
|
.map { pair ->
|
||||||
FilePair(
|
FilePair(
|
||||||
|
|||||||
Reference in New Issue
Block a user