Skip to content

Commit

Permalink
Refactor file metadata types
Browse files Browse the repository at this point in the history
  • Loading branch information
MM2-0 committed Oct 29, 2023
1 parent 97fca2d commit 0a508a3
Show file tree
Hide file tree
Showing 11 changed files with 166 additions and 81 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ import androidx.compose.ui.unit.roundToIntRect
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import de.mm20.launcher2.search.File
import de.mm20.launcher2.search.FileMetaType
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.animation.animateTextStyleAsState
import de.mm20.launcher2.ui.component.DefaultToolbarAction
Expand Down Expand Up @@ -136,7 +137,7 @@ fun FileItem(
)
for ((k, v) in file.metaData) {
Text(
text = stringResource(k, v),
text = stringResource(k.labelRes, v),
style = MaterialTheme.typography.bodySmall
)
}
Expand Down Expand Up @@ -365,4 +366,22 @@ private fun formatFileSize(size: Long): String {
size < 1000000000000L -> "${DecimalFormat("#,##0.#").format(size / 1000000000.0)} GB"
else -> "${DecimalFormat("#,##0.#").format(size / 1000000000000.0)} TB"
}
}
}

private val FileMetaType.labelRes: Int
get() {
return when (this) {
FileMetaType.Title -> R.string.file_meta_title
FileMetaType.Artist -> R.string.file_meta_artist
FileMetaType.Album -> R.string.file_meta_album
FileMetaType.Duration -> R.string.file_meta_duration
FileMetaType.Year -> R.string.file_meta_year
FileMetaType.Dimensions -> R.string.file_meta_dimensions
FileMetaType.Location -> R.string.file_meta_location
FileMetaType.AppName -> R.string.file_meta_app_name
FileMetaType.AppVersion -> R.string.file_meta_app_version
FileMetaType.AppMinSdk -> R.string.file_meta_app_min_sdk
FileMetaType.AppPackageName -> R.string.file_meta_app_pkgname
FileMetaType.Owner -> R.string.file_meta_owner
}
}
18 changes: 17 additions & 1 deletion core/base/src/main/java/de/mm20/launcher2/search/File.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@ import de.mm20.launcher2.base.R
import de.mm20.launcher2.icons.ColorLayer
import de.mm20.launcher2.icons.StaticLauncherIcon
import de.mm20.launcher2.icons.TintedIconLayer
import kotlinx.collections.immutable.ImmutableMap
import java.util.Locale

interface File : SavableSearchable {
val path: String
val mimeType: String
val size: Long
val isDirectory: Boolean
val metaData: List<Pair<Int, String>>
val metaData: ImmutableMap<FileMetaType, String>

val isStoredInCloud: Boolean

Expand Down Expand Up @@ -139,4 +140,19 @@ interface File : SavableSearchable {
fun share(context: Context) {}
suspend fun delete(context: Context) {}

}

enum class FileMetaType {
Title,
Artist,
Album,
Duration,
Year,
Dimensions,
Location,
AppName,
AppVersion,
AppMinSdk,
AppPackageName,
Owner,
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,12 @@ import de.mm20.launcher2.files.providers.OwncloudFile
import de.mm20.launcher2.ktx.jsonObjectOf
import de.mm20.launcher2.permissions.PermissionGroup
import de.mm20.launcher2.permissions.PermissionsManager
import de.mm20.launcher2.search.FileMetaType
import de.mm20.launcher2.search.SavableSearchable
import de.mm20.launcher2.search.SearchableDeserializer
import de.mm20.launcher2.search.SearchableSerializer
import kotlinx.collections.immutable.persistentMapOf
import kotlinx.collections.immutable.toImmutableMap
import org.json.JSONObject
import org.koin.core.component.KoinComponent
import org.koin.core.component.get
Expand Down Expand Up @@ -93,8 +96,8 @@ internal class GDriveFileSerializer : SearchableSerializer {
for ((k, v) in searchable.metaData) {
put(
when (k) {
R.string.file_meta_owner -> "owner"
R.string.file_meta_dimensions -> "dimensions"
FileMetaType.Owner -> "owner"
FileMetaType.Dimensions -> "dimensions"
else -> "other"
}, v
)
Expand All @@ -119,10 +122,10 @@ internal class GDriveFileDeserializer : SearchableDeserializer {
val uri = json.getString("uri")
val owner = json.optString("owner")
val dimensions = json.optString("dimensions")
val metaData = mutableListOf<Pair<Int, String>>()
owner.takeIf { it.isNotEmpty() }?.let { metaData.add(R.string.file_meta_owner to it) }
val metaData = mutableMapOf<FileMetaType, String>()
owner.takeIf { it.isNotEmpty() }?.let { metaData[FileMetaType.Owner] = it }
dimensions.takeIf { it.isNotEmpty() }
?.let { metaData.add(R.string.file_meta_dimensions to it) }
?.let { metaData[FileMetaType.Dimensions] = it }
return GDriveFile(
fileId = id,
label = label,
Expand All @@ -132,7 +135,7 @@ internal class GDriveFileDeserializer : SearchableDeserializer {
directoryColor = color,
isDirectory = directory,
viewUri = uri,
metaData = metaData
metaData = metaData.toImmutableMap()
)
}
}
Expand All @@ -151,8 +154,8 @@ internal class OneDriveFileSerializer : SearchableSerializer {
for ((k, v) in searchable.metaData) {
put(
when (k) {
R.string.file_meta_owner -> "owner"
R.string.file_meta_dimensions -> "dimensions"
FileMetaType.Owner -> "owner"
FileMetaType.Dimensions -> "dimensions"
else -> "other"
}, v
)
Expand All @@ -175,18 +178,18 @@ internal class OneDriveFileDeserializer : SearchableDeserializer {
val webUrl = json.getString("webUrl")
val owner = json.optString("owner")
val dimensions = json.optString("dimensions")
val metaData = mutableListOf<Pair<Int, String>>()
owner.takeIf { it.isNotEmpty() }?.let { metaData.add(R.string.file_meta_owner to it) }
val metaData = mutableMapOf<FileMetaType, String>()
owner.takeIf { it.isNotEmpty() }?.let { metaData[FileMetaType.Owner] = it }
dimensions.takeIf { it.isNotEmpty() }
?.let { metaData.add(R.string.file_meta_dimensions to it) }
?.let { metaData[FileMetaType.Dimensions] = it }
return OneDriveFile(
fileId = fileId,
label = label,
path = "",
mimeType = mimeType,
size = size,
isDirectory = isDirectory,
metaData = metaData,
metaData = metaData.toImmutableMap(),
webUrl = webUrl
)
}
Expand All @@ -207,7 +210,7 @@ internal class NextcloudFileSerializer : SearchableSerializer {
for ((k, v) in searchable.metaData) {
put(
when (k) {
R.string.file_meta_owner -> "owner"
FileMetaType.Owner -> "owner"
else -> "other"
}, v
)
Expand Down Expand Up @@ -239,7 +242,7 @@ internal class NextcloudFileDeserializer : SearchableDeserializer {
size = size,
isDirectory = isDirectory,
server = server,
metaData = owner?.let { listOf(R.string.file_meta_owner to it) } ?: emptyList()
metaData = owner?.let { persistentMapOf(FileMetaType.Owner to it) } ?: persistentMapOf()

)
}
Expand All @@ -260,7 +263,7 @@ internal class OwncloudFileSerializer : SearchableSerializer {
for ((k, v) in searchable.metaData) {
put(
when (k) {
R.string.file_meta_owner -> "owner"
FileMetaType.Owner -> "owner"
else -> "other"
}, v
)
Expand Down Expand Up @@ -292,7 +295,7 @@ internal class OwncloudFileDeserializer : SearchableDeserializer {
size = size,
isDirectory = isDirectory,
server = server,
metaData = owner?.let { listOf(R.string.file_meta_owner to it) } ?: emptyList()
metaData = owner?.let { persistentMapOf(FileMetaType.Owner to it) } ?: persistentMapOf()

)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ import de.mm20.launcher2.files.GDriveFileSerializer
import de.mm20.launcher2.files.R
import de.mm20.launcher2.ktx.tryStartActivity
import de.mm20.launcher2.search.File
import de.mm20.launcher2.search.FileMetaType
import de.mm20.launcher2.search.SearchableSerializer
import kotlinx.collections.immutable.ImmutableMap

internal data class GDriveFile(
val fileId: String,
Expand All @@ -17,7 +19,7 @@ internal data class GDriveFile(
override val mimeType: String,
override val size: Long,
override val isDirectory: Boolean,
override val metaData: List<Pair<Int, String>>,
override val metaData: ImmutableMap<FileMetaType, String>,
val directoryColor: String?,
val viewUri: String,
override val labelOverride: String? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ import de.mm20.launcher2.files.R
import de.mm20.launcher2.gservices.DriveFileMeta
import de.mm20.launcher2.gservices.GoogleApiHelper
import de.mm20.launcher2.search.File
import de.mm20.launcher2.search.FileMetaType
import kotlinx.collections.immutable.ImmutableMap
import kotlinx.collections.immutable.toImmutableMap

internal class GDriveFileProvider(
private val context: Context
Expand All @@ -27,13 +30,13 @@ internal class GDriveFileProvider(
}
}

private fun getMetadata(file: DriveFileMeta): List<Pair<Int, String>> {
val metaData = mutableListOf<Pair<Int, String>>()
private fun getMetadata(file: DriveFileMeta): ImmutableMap<FileMetaType, String> {
val metaData = mutableMapOf<FileMetaType, String>()
val owners = file.owners
metaData.add(R.string.file_meta_owner to owners.joinToString(separator = ", "))
val width = file.width ?: file.width
val height = file.height ?: file.height
if (width != null && height != null) metaData.add(R.string.file_meta_dimensions to "${width}x$height")
return metaData
metaData[FileMetaType.Owner] = owners.joinToString(separator = ", ")
val width = file.width
val height = file.height
if (width != null && height != null) metaData[FileMetaType.Dimensions] = "${width}x${height}"
return metaData.toImmutableMap()
}
}
Loading

0 comments on commit 0a508a3

Please sign in to comment.