package com.vgmlr.varnish
import android.graphics.Bitmap
object VarnishConfig {
const val BTN_RADIUS = 6
const val FOOTER_MS = 2_000L
const val MENU_IDLE_MS = 5_000L
const val DEBOUNCE_MS = 1_200L
const val TITLE_MS = 2_000L
const val ARM_MS = 3_000L
const val ZOOM_MAX = 10f
const val ZOOM_TAP = 3f
const val FOLDER_IMG_DEFAULT = 100
const val FOLDER_IMG_MIN = 24
const val FOLDER_IMG_MAX = 200
const val GRID_DEFAULT = 3
val GRID_OPTIONS = (2..6).toList()
const val QUALITY_DEFAULT = 95
val QUALITY_OPTIONS = (10..100 step 5).toList()
const val CHOOSER = "Default"
const val FOLDER_UNNAMED = "Unnamed"
const val FAV_PATH = "varnish:favorites"
const val FAV_NAME = "Favorites"
val SYSTEM_DIRS = setOf(
"Android", "DCIM", "Pictures", "Movies", "Download", "Documents", "Music",
"Alarms", "Notifications", "Ringtones", "Podcasts", "Audiobooks", "Recordings"
)
val IMAGE_EXT = setOf("jpg", "jpeg", "png", "gif", "webp", "bmp", "heic", "heif", "avif")
val VIDEO_EXT = setOf("mp4", "m4v", "mkv", "webm", "3gp", "mov", "avi", "ts")
}
enum class ScanMode(val label: String) { FILES("Files"), FOLDERS("Folders") }
enum class FileTypes(val label: String) { IMAGES("images"), VIDEOS("videos"), BOTH("images/videos") }
enum class OutFormat(val label: String, val ext: String, val compress: Bitmap.CompressFormat) {
JPG("jpg", "jpg", Bitmap.CompressFormat.JPEG),
PNG("png", "png", Bitmap.CompressFormat.PNG)
}
enum class SortMode(val label: String) {
AZ("A to Z"),
ZA("Z to A"),
NEW("Date"),
OLD("Date");
fun byAlpha() = if (this == AZ) ZA else AZ
fun byDate() = if (this == NEW) OLD else NEW
}
object NaturalOrder : Comparator<String> {
override fun compare(a: String, b: String): Int {
var i = 0
var j = 0
while (i < a.length && j < b.length) {
val ca = a[i]
val cb = b[j]
if (ca in '0'..'9' && cb in '0'..'9') {
val si = i
while (i < a.length && a[i] in '0'..'9') i++
val sj = j
while (j < b.length && b[j] in '0'..'9') j++
val na = a.substring(si, i).trimStart('0')
val nb = b.substring(sj, j).trimStart('0')
if (na.length != nb.length) return na.length - nb.length
val c = na.compareTo(nb)
if (c != 0) return c
} else {
val c = ca.lowercaseChar().compareTo(cb.lowercaseChar())
if (c != 0) return c
i++
j++
}
}
return (a.length - i) - (b.length - j)
}
}