display images thumbnail

This commit is contained in:
m
2026-09-15 10:27:52 +02:00
parent 194fd26693
commit 3499a3e356
5 changed files with 16 additions and 5 deletions
@@ -10,6 +10,7 @@ import com.vaultdrop.mobile.data.local.entity.FileEntity
import com.vaultdrop.mobile.data.local.entity.FileStatus import com.vaultdrop.mobile.data.local.entity.FileStatus
import com.vaultdrop.mobile.data.repository.FileRepository import com.vaultdrop.mobile.data.repository.FileRepository
import com.vaultdrop.mobile.data.repository.OutboxRepository import com.vaultdrop.mobile.data.repository.OutboxRepository
import com.vaultdrop.mobile.features.thumbnails.ThumbnailStore
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@@ -33,6 +34,7 @@ class FileDeleter @Inject constructor(
private val fileRepository: FileRepository, private val fileRepository: FileRepository,
private val outboxRepository: OutboxRepository, private val outboxRepository: OutboxRepository,
private val appDatabase: AppDatabase, private val appDatabase: AppDatabase,
private val thumbnailStore: ThumbnailStore,
) { ) {
private val resolver: ContentResolver get() = context.contentResolver private val resolver: ContentResolver get() = context.contentResolver
@@ -68,6 +70,7 @@ class FileDeleter @Inject constructor(
}.onSuccess { deleted -> }.onSuccess { deleted ->
if (deleted) { if (deleted) {
fileRepository.markMissing(file.resourceId, System.currentTimeMillis()) fileRepository.markMissing(file.resourceId, System.currentTimeMillis())
thumbnailStore.delete(file.resourceId)
Timber.d("deleted locally %s", uri) Timber.d("deleted locally %s", uri)
} else { } else {
Timber.w("deleteDocument returned false for %s", uri) Timber.w("deleteDocument returned false for %s", uri)
@@ -115,6 +118,7 @@ class FileDeleter @Inject constructor(
} }
} }
Timber.d("deleted full %s", uri) Timber.d("deleted full %s", uri)
thumbnailStore.delete(file.resourceId)
} else { } else {
Timber.w("deleteDocument returned false for %s", uri) Timber.w("deleteDocument returned false for %s", uri)
} }
@@ -11,6 +11,7 @@ import com.vaultdrop.mobile.data.local.entity.FolderEntity
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
import com.vaultdrop.mobile.data.repository.OutboxRepository import com.vaultdrop.mobile.data.repository.OutboxRepository
import com.vaultdrop.mobile.features.thumbnails.ThumbnailStore
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@@ -39,6 +40,7 @@ class FolderDeleter @Inject constructor(
private val fileRepository: FileRepository, private val fileRepository: FileRepository,
private val outboxRepository: OutboxRepository, private val outboxRepository: OutboxRepository,
private val appDatabase: AppDatabase, private val appDatabase: AppDatabase,
private val thumbnailStore: ThumbnailStore,
) { ) {
private val resolver: ContentResolver get() = context.contentResolver private val resolver: ContentResolver get() = context.contentResolver
@@ -77,6 +79,7 @@ class FolderDeleter @Inject constructor(
tree.files.forEach { fileRepository.markMissing(it.resourceId, now) } tree.files.forEach { fileRepository.markMissing(it.resourceId, now) }
tree.folders.forEach { folderRepository.markMissing(it.resourceId, now) } tree.folders.forEach { folderRepository.markMissing(it.resourceId, now) }
folderRepository.markMissing(folder.resourceId, now) folderRepository.markMissing(folder.resourceId, now)
tree.files.forEach { thumbnailStore.delete(it.resourceId) }
Timber.d("deleted folder locally %s", uri) Timber.d("deleted folder locally %s", uri)
return true return true
} }
@@ -109,6 +112,7 @@ class FolderDeleter @Inject constructor(
appDatabase.withTransaction { appDatabase.withTransaction {
treeMarkMissing(folder, tree, now) treeMarkMissing(folder, tree, now)
} }
tree.files.forEach { thumbnailStore.delete(it.resourceId) }
Timber.d("deleted folder full %s", uri) Timber.d("deleted folder full %s", uri)
return true return true
} }
@@ -9,6 +9,7 @@ import com.vaultdrop.mobile.data.local.AppDatabase
import com.vaultdrop.mobile.data.local.entity.FileEntity import com.vaultdrop.mobile.data.local.entity.FileEntity
import com.vaultdrop.mobile.data.repository.FileRepository import com.vaultdrop.mobile.data.repository.FileRepository
import com.vaultdrop.mobile.data.repository.OutboxRepository import com.vaultdrop.mobile.data.repository.OutboxRepository
import com.vaultdrop.mobile.features.thumbnails.ThumbnailStore
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@@ -35,6 +36,7 @@ class SafFileDeleter @Inject constructor(
private val fileRepository: FileRepository, private val fileRepository: FileRepository,
private val outboxRepository: OutboxRepository, private val outboxRepository: OutboxRepository,
private val appDatabase: AppDatabase, private val appDatabase: AppDatabase,
private val thumbnailStore: ThumbnailStore,
) { ) {
private val resolver: ContentResolver get() = context.contentResolver private val resolver: ContentResolver get() = context.contentResolver
@@ -58,6 +60,7 @@ class SafFileDeleter @Inject constructor(
} }
} }
Timber.d("deleted %s", uri) Timber.d("deleted %s", uri)
thumbnailStore.delete(file.resourceId)
} else { } else {
Timber.w("deleteDocument returned false for %s", uri) Timber.w("deleteDocument returned false for %s", uri)
} }
@@ -53,9 +53,9 @@ import com.vaultdrop.mobile.data.local.entity.FileEntity
import com.vaultdrop.mobile.data.local.entity.FolderEntity import com.vaultdrop.mobile.data.local.entity.FolderEntity
import com.vaultdrop.mobile.features.connection.ConnectionStatusViewModel import com.vaultdrop.mobile.features.connection.ConnectionStatusViewModel
import com.vaultdrop.mobile.features.sync.SyncViewModel import com.vaultdrop.mobile.features.sync.SyncViewModel
import com.vaultdrop.mobile.ui.components.FileCategoryIcon
import com.vaultdrop.mobile.ui.components.FilePendingReviewBadge import com.vaultdrop.mobile.ui.components.FilePendingReviewBadge
import com.vaultdrop.mobile.ui.components.FileSyncStatusIcon import com.vaultdrop.mobile.ui.components.FileSyncStatusIcon
import com.vaultdrop.mobile.ui.components.FileThumbnail
import com.vaultdrop.mobile.ui.components.FolderNameDialog import com.vaultdrop.mobile.ui.components.FolderNameDialog
import com.vaultdrop.mobile.ui.components.MoveFolderPickerDialog import com.vaultdrop.mobile.ui.components.MoveFolderPickerDialog
import com.vaultdrop.mobile.ui.components.SelectionState import com.vaultdrop.mobile.ui.components.SelectionState
@@ -457,7 +457,7 @@ private fun FileRow(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(12.dp), horizontalArrangement = Arrangement.spacedBy(12.dp),
) { ) {
FileCategoryIcon(file = file, size = 24.dp) FileThumbnail(file = file, size = 40.dp)
Column(modifier = Modifier.weight(1f)) { Column(modifier = Modifier.weight(1f)) {
Text( Text(
text = file.name, text = file.name,
@@ -89,9 +89,9 @@ import com.vaultdrop.mobile.features.saf.FileDeleter
import com.vaultdrop.mobile.ui.components.DeleteConfirmDialog import com.vaultdrop.mobile.ui.components.DeleteConfirmDialog
import com.vaultdrop.mobile.ui.components.DeleteReview import com.vaultdrop.mobile.ui.components.DeleteReview
import com.vaultdrop.mobile.ui.components.DeleteWarningDialog import com.vaultdrop.mobile.ui.components.DeleteWarningDialog
import com.vaultdrop.mobile.ui.components.FileCategoryIcon
import com.vaultdrop.mobile.ui.components.FilePendingReviewBadge import com.vaultdrop.mobile.ui.components.FilePendingReviewBadge
import com.vaultdrop.mobile.ui.components.FileSyncStatusIcon import com.vaultdrop.mobile.ui.components.FileSyncStatusIcon
import com.vaultdrop.mobile.ui.components.FileThumbnail
import com.vaultdrop.mobile.ui.components.FolderNameDialog import com.vaultdrop.mobile.ui.components.FolderNameDialog
import com.vaultdrop.mobile.ui.components.SelectionState import com.vaultdrop.mobile.ui.components.SelectionState
@@ -1059,7 +1059,7 @@ private fun FileCard(
) { ) {
Column(modifier = Modifier.padding(12.dp)) { Column(modifier = Modifier.padding(12.dp)) {
Row(verticalAlignment = androidx.compose.ui.Alignment.CenterVertically) { Row(verticalAlignment = androidx.compose.ui.Alignment.CenterVertically) {
FileCategoryIcon(file = file, size = 36.dp) FileThumbnail(file = file, size = 56.dp)
Spacer(Modifier.weight(1f)) Spacer(Modifier.weight(1f))
if (selection.active) { if (selection.active) {
SelectionStatusIcon(selected = selected) SelectionStatusIcon(selected = selected)
@@ -1122,7 +1122,7 @@ private fun BrowseFileRow(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(12.dp), horizontalArrangement = Arrangement.spacedBy(12.dp),
) { ) {
FileCategoryIcon(file = file, size = 26.dp) FileThumbnail(file = file, size = 40.dp)
Column(modifier = Modifier.weight(1f)) { Column(modifier = Modifier.weight(1f)) {
Text( Text(
text = file.name, text = file.name,