mirror of
https://github.com/FossifyOrg/Gallery.git
synced 2025-01-18 14:28:00 +01:00
fixing some thumbnail and sorting related glitches
This commit is contained in:
parent
3cd303ddde
commit
0e01026774
7 changed files with 70 additions and 27 deletions
|
@ -472,7 +472,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
||||||
private fun showSortingDialog() {
|
private fun showSortingDialog() {
|
||||||
ChangeSortingDialog(this, true, false) {
|
ChangeSortingDialog(this, true, false) {
|
||||||
directories_grid.adapter = null
|
directories_grid.adapter = null
|
||||||
if (config.directorySorting and SORT_BY_DATE_MODIFIED > 0 || config.directorySorting and SORT_BY_DATE_TAKEN > 0) {
|
if (config.directorySorting and SORT_BY_DATE_MODIFIED != 0 || config.directorySorting and SORT_BY_DATE_TAKEN != 0) {
|
||||||
getDirectories()
|
getDirectories()
|
||||||
} else {
|
} else {
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
|
@ -893,7 +893,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
||||||
val tempFolderPath = config.tempFolderPath
|
val tempFolderPath = config.tempFolderPath
|
||||||
val isSortingAscending = config.directorySorting and SORT_DESCENDING == 0
|
val isSortingAscending = config.directorySorting and SORT_DESCENDING == 0
|
||||||
val getProperDateTaken = config.directorySorting and SORT_BY_DATE_TAKEN != 0
|
val getProperDateTaken = config.directorySorting and SORT_BY_DATE_TAKEN != 0
|
||||||
val getProperLastModified = config.directorySorting and SORT_BY_DATE_MODIFIED != 0
|
var getProperLastModified = config.directorySorting and SORT_BY_DATE_MODIFIED != 0
|
||||||
val getProperFileSize = config.directorySorting and SORT_BY_SIZE != 0
|
val getProperFileSize = config.directorySorting and SORT_BY_SIZE != 0
|
||||||
val favoritePaths = getFavoritePaths()
|
val favoritePaths = getFavoritePaths()
|
||||||
val dirPathsToRemove = ArrayList<String>()
|
val dirPathsToRemove = ArrayList<String>()
|
||||||
|
@ -904,6 +904,10 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!getProperLastModified) {
|
||||||
|
getProperLastModified = config.getFileSorting(directory.path) and SORT_BY_DATE_MODIFIED != 0
|
||||||
|
}
|
||||||
|
|
||||||
val curMedia = mLastMediaFetcher!!.getFilesFrom(directory.path, getImagesOnly, getVideosOnly, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, false)
|
val curMedia = mLastMediaFetcher!!.getFilesFrom(directory.path, getImagesOnly, getVideosOnly, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, false)
|
||||||
val newDir = if (curMedia.isEmpty()) {
|
val newDir = if (curMedia.isEmpty()) {
|
||||||
if (directory.path != tempFolderPath) {
|
if (directory.path != tempFolderPath) {
|
||||||
|
@ -927,6 +931,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
||||||
taken = newDir.taken
|
taken = newDir.taken
|
||||||
this@apply.size = newDir.size
|
this@apply.size = newDir.size
|
||||||
types = newDir.types
|
types = newDir.types
|
||||||
|
sortValue = getDirectorySortingValue(curMedia)
|
||||||
}
|
}
|
||||||
|
|
||||||
setupAdapter(dirs)
|
setupAdapter(dirs)
|
||||||
|
@ -977,6 +982,10 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!getProperLastModified) {
|
||||||
|
getProperLastModified = config.getFileSorting(folder) and SORT_BY_DATE_MODIFIED != 0
|
||||||
|
}
|
||||||
|
|
||||||
val newMedia = mLastMediaFetcher!!.getFilesFrom(folder, getImagesOnly, getVideosOnly, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, false)
|
val newMedia = mLastMediaFetcher!!.getFilesFrom(folder, getImagesOnly, getVideosOnly, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, false)
|
||||||
if (newMedia.isEmpty()) {
|
if (newMedia.isEmpty()) {
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -36,7 +36,7 @@ class GetMediaAsynctask(val context: Context, val mPath: String, val isPickImage
|
||||||
val foldersToScan = mediaFetcher.getFoldersToScan().filter { it != RECYCLE_BIN && it != FAVORITES && !context.config.isFolderProtected(it) }
|
val foldersToScan = mediaFetcher.getFoldersToScan().filter { it != RECYCLE_BIN && it != FAVORITES && !context.config.isFolderProtected(it) }
|
||||||
val media = ArrayList<Medium>()
|
val media = ArrayList<Medium>()
|
||||||
foldersToScan.forEach {
|
foldersToScan.forEach {
|
||||||
val newMedia = mediaFetcher.getFilesFrom(it, isPickImage, isPickVideo, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, getVideoDurations, false)
|
val newMedia = mediaFetcher.getFilesFrom(it, isPickImage, isPickVideo, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, getVideoDurations)
|
||||||
media.addAll(newMedia)
|
media.addAll(newMedia)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -165,25 +165,26 @@ fun Context.getSortedDirectories(source: ArrayList<Directory>): ArrayList<Direct
|
||||||
dirs.sortWith(Comparator { o1, o2 ->
|
dirs.sortWith(Comparator { o1, o2 ->
|
||||||
o1 as Directory
|
o1 as Directory
|
||||||
o2 as Directory
|
o2 as Directory
|
||||||
|
|
||||||
var result = when {
|
var result = when {
|
||||||
sorting and SORT_BY_NAME != 0 -> {
|
sorting and SORT_BY_NAME != 0 -> {
|
||||||
if (sorting and SORT_USE_NUMERIC_VALUE != 0) {
|
if (sorting and SORT_USE_NUMERIC_VALUE != 0) {
|
||||||
AlphanumericComparator().compare(o1.name.toLowerCase(), o2.name.toLowerCase())
|
AlphanumericComparator().compare(o1.sortValue.toLowerCase(), o2.sortValue.toLowerCase())
|
||||||
} else {
|
} else {
|
||||||
o1.name.toLowerCase().compareTo(o2.name.toLowerCase())
|
o1.sortValue.toLowerCase().compareTo(o2.sortValue.toLowerCase())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sorting and SORT_BY_PATH != 0 -> {
|
sorting and SORT_BY_PATH != 0 -> {
|
||||||
if (sorting and SORT_USE_NUMERIC_VALUE != 0) {
|
if (sorting and SORT_USE_NUMERIC_VALUE != 0) {
|
||||||
AlphanumericComparator().compare(o1.path.toLowerCase(), o2.path.toLowerCase())
|
AlphanumericComparator().compare(o1.sortValue.toLowerCase(), o2.sortValue.toLowerCase())
|
||||||
} else {
|
} else {
|
||||||
o1.path.toLowerCase().compareTo(o2.path.toLowerCase())
|
o1.sortValue.toLowerCase().compareTo(o2.sortValue.toLowerCase())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sorting and SORT_BY_PATH != 0 -> AlphanumericComparator().compare(o1.path.toLowerCase(), o2.path.toLowerCase())
|
sorting and SORT_BY_PATH != 0 -> AlphanumericComparator().compare(o1.sortValue.toLowerCase(), o2.sortValue.toLowerCase())
|
||||||
sorting and SORT_BY_SIZE != 0 -> o1.size.compareTo(o2.size)
|
sorting and SORT_BY_SIZE != 0 -> (o1.sortValue.toLong()).compareTo(o2.sortValue.toLong())
|
||||||
sorting and SORT_BY_DATE_MODIFIED != 0 -> o1.modified.compareTo(o2.modified)
|
sorting and SORT_BY_DATE_MODIFIED != 0 -> (o1.sortValue.toLong()).compareTo(o2.sortValue.toLong())
|
||||||
else -> o1.taken.compareTo(o2.taken)
|
else -> (o1.sortValue.toLong()).compareTo(o2.sortValue.toLong())
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sorting and SORT_DESCENDING != 0) {
|
if (sorting and SORT_DESCENDING != 0) {
|
||||||
|
@ -252,7 +253,7 @@ fun Context.getDirectParentSubfolders(dirs: ArrayList<Directory>, currentPathPre
|
||||||
val parent = File(path).parent
|
val parent = File(path).parent
|
||||||
if (parent != null && !folders.contains(parent) && dirs.none { it.path == parent }) {
|
if (parent != null && !folders.contains(parent) && dirs.none { it.path == parent }) {
|
||||||
currentPaths.add(parent)
|
currentPaths.add(parent)
|
||||||
val isSortingAscending = config.sorting and SORT_DESCENDING == 0
|
val isSortingAscending = config.sorting.isSortingAscending()
|
||||||
val subDirs = dirs.filter { File(it.path).parent.equals(File(path).parent, true) } as ArrayList<Directory>
|
val subDirs = dirs.filter { File(it.path).parent.equals(File(path).parent, true) } as ArrayList<Directory>
|
||||||
if (subDirs.isNotEmpty()) {
|
if (subDirs.isNotEmpty()) {
|
||||||
val lastModified = if (isSortingAscending) {
|
val lastModified = if (isSortingAscending) {
|
||||||
|
@ -281,7 +282,8 @@ fun Context.getDirectParentSubfolders(dirs: ArrayList<Directory>, currentPathPre
|
||||||
dateTaken,
|
dateTaken,
|
||||||
subDirs.sumByLong { it.size },
|
subDirs.sumByLong { it.size },
|
||||||
getPathLocation(parent),
|
getPathLocation(parent),
|
||||||
mediaTypes)
|
mediaTypes,
|
||||||
|
"")
|
||||||
|
|
||||||
directory.containsMediaFilesDirectly = false
|
directory.containsMediaFilesDirectly = false
|
||||||
dirs.add(directory)
|
dirs.add(directory)
|
||||||
|
@ -479,7 +481,7 @@ fun Context.addTempFolderIfNeeded(dirs: ArrayList<Directory>): ArrayList<Directo
|
||||||
val tempFolderPath = config.tempFolderPath
|
val tempFolderPath = config.tempFolderPath
|
||||||
return if (tempFolderPath.isNotEmpty()) {
|
return if (tempFolderPath.isNotEmpty()) {
|
||||||
val directories = ArrayList<Directory>()
|
val directories = ArrayList<Directory>()
|
||||||
val newFolder = Directory(null, tempFolderPath, "", tempFolderPath.getFilenameFromPath(), 0, 0, 0, 0L, getPathLocation(tempFolderPath), 0)
|
val newFolder = Directory(null, tempFolderPath, "", tempFolderPath.getFilenameFromPath(), 0, 0, 0, 0L, getPathLocation(tempFolderPath), 0, "")
|
||||||
directories.add(newFolder)
|
directories.add(newFolder)
|
||||||
directories.addAll(dirs)
|
directories.addAll(dirs)
|
||||||
directories
|
directories
|
||||||
|
@ -706,7 +708,7 @@ fun Context.updateDBMediaPath(oldPath: String, newPath: String) {
|
||||||
|
|
||||||
fun Context.updateDBDirectory(directory: Directory) {
|
fun Context.updateDBDirectory(directory: Directory) {
|
||||||
try {
|
try {
|
||||||
directoryDao.updateDirectory(directory.path, directory.tmb, directory.mediaCnt, directory.modified, directory.taken, directory.size, directory.types)
|
directoryDao.updateDirectory(directory.path, directory.tmb, directory.mediaCnt, directory.modified, directory.taken, directory.size, directory.types, directory.sortValue)
|
||||||
} catch (ignored: Exception) {
|
} catch (ignored: Exception) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -858,6 +860,7 @@ fun Context.createDirectoryFromMedia(path: String, curMedia: ArrayList<Medium>,
|
||||||
includedFolders: MutableSet<String>, isSortingAscending: Boolean, getProperFileSize: Boolean): Directory {
|
includedFolders: MutableSet<String>, isSortingAscending: Boolean, getProperFileSize: Boolean): Directory {
|
||||||
val OTGPath = config.OTGPath
|
val OTGPath = config.OTGPath
|
||||||
var thumbnail = curMedia.firstOrNull { getDoesFilePathExist(it.path, OTGPath) }?.path ?: ""
|
var thumbnail = curMedia.firstOrNull { getDoesFilePathExist(it.path, OTGPath) }?.path ?: ""
|
||||||
|
|
||||||
albumCovers.forEach {
|
albumCovers.forEach {
|
||||||
if (it.path == path && getDoesFilePathExist(it.tmb, OTGPath)) {
|
if (it.path == path && getDoesFilePathExist(it.tmb, OTGPath)) {
|
||||||
thumbnail = it.tmb
|
thumbnail = it.tmb
|
||||||
|
@ -876,7 +879,36 @@ fun Context.createDirectoryFromMedia(path: String, curMedia: ArrayList<Medium>,
|
||||||
val dateTaken = if (isSortingAscending) Math.min(firstItem.taken, lastItem.taken) else Math.max(firstItem.taken, lastItem.taken)
|
val dateTaken = if (isSortingAscending) Math.min(firstItem.taken, lastItem.taken) else Math.max(firstItem.taken, lastItem.taken)
|
||||||
val size = if (getProperFileSize) curMedia.sumByLong { it.size } else 0L
|
val size = if (getProperFileSize) curMedia.sumByLong { it.size } else 0L
|
||||||
val mediaTypes = curMedia.getDirMediaTypes()
|
val mediaTypes = curMedia.getDirMediaTypes()
|
||||||
return Directory(null, path, thumbnail, dirName, curMedia.size, lastModified, dateTaken, size, getPathLocation(path), mediaTypes)
|
return Directory(null, path, thumbnail, dirName, curMedia.size, lastModified, dateTaken, size, getPathLocation(path), mediaTypes, getDirectorySortingValue(curMedia))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Context.getDirectorySortingValue(media: ArrayList<Medium>): String {
|
||||||
|
val sorting = config.directorySorting
|
||||||
|
val sorted = when {
|
||||||
|
sorting and SORT_BY_NAME != 0 -> media.sortedBy { it.name }
|
||||||
|
sorting and SORT_BY_PATH != 0 -> media.sortedBy { it.path }
|
||||||
|
sorting and SORT_BY_SIZE != 0 -> media.sortedBy { it.size }
|
||||||
|
sorting and SORT_BY_DATE_MODIFIED != 0 -> media.sortedBy { it.modified }
|
||||||
|
sorting and SORT_BY_DATE_TAKEN != 0 -> media.sortedBy { it.taken }
|
||||||
|
else -> media
|
||||||
|
}
|
||||||
|
|
||||||
|
val relevantMedium = if (sorting.isSortingAscending()) {
|
||||||
|
sorted.first()
|
||||||
|
} else {
|
||||||
|
sorted.last()
|
||||||
|
}
|
||||||
|
|
||||||
|
val result: Any = when {
|
||||||
|
sorting and SORT_BY_NAME != 0 -> relevantMedium.name
|
||||||
|
sorting and SORT_BY_PATH != 0 -> relevantMedium.path
|
||||||
|
sorting and SORT_BY_SIZE != 0 -> relevantMedium.size
|
||||||
|
sorting and SORT_BY_DATE_MODIFIED != 0 -> relevantMedium.modified
|
||||||
|
sorting and SORT_BY_DATE_TAKEN != 0 -> relevantMedium.taken
|
||||||
|
else -> 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.updateDirectoryPath(path: String) {
|
fun Context.updateDirectoryPath(path: String) {
|
||||||
|
@ -886,7 +918,7 @@ fun Context.updateDirectoryPath(path: String) {
|
||||||
val hiddenString = getString(R.string.hidden)
|
val hiddenString = getString(R.string.hidden)
|
||||||
val albumCovers = config.parseAlbumCovers()
|
val albumCovers = config.parseAlbumCovers()
|
||||||
val includedFolders = config.includedFolders
|
val includedFolders = config.includedFolders
|
||||||
val isSortingAscending = config.directorySorting and SORT_DESCENDING == 0
|
val isSortingAscending = config.directorySorting.isSortingAscending()
|
||||||
val getProperDateTaken = config.directorySorting and SORT_BY_DATE_TAKEN != 0
|
val getProperDateTaken = config.directorySorting and SORT_BY_DATE_TAKEN != 0
|
||||||
val getProperLastModified = config.directorySorting and SORT_BY_DATE_MODIFIED != 0
|
val getProperLastModified = config.directorySorting and SORT_BY_DATE_MODIFIED != 0
|
||||||
val getProperFileSize = config.directorySorting and SORT_BY_SIZE != 0
|
val getProperFileSize = config.directorySorting and SORT_BY_SIZE != 0
|
||||||
|
@ -919,5 +951,3 @@ fun Context.getFileDateTaken(path: String): Long {
|
||||||
|
|
||||||
return 0L
|
return 0L
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.isChromebook() = packageManager.hasSystemFeature("org.chromium.arc.device_management")
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package com.simplemobiletools.gallery.pro.extensions
|
||||||
|
|
||||||
|
import com.simplemobiletools.commons.helpers.SORT_DESCENDING
|
||||||
|
|
||||||
|
fun Int.isSortingAscending() = this and SORT_DESCENDING == 0
|
|
@ -21,7 +21,7 @@ class MediaFetcher(val context: Context) {
|
||||||
var shouldStop = false
|
var shouldStop = false
|
||||||
|
|
||||||
fun getFilesFrom(curPath: String, isPickImage: Boolean, isPickVideo: Boolean, getProperDateTaken: Boolean, getProperLastModified: Boolean,
|
fun getFilesFrom(curPath: String, isPickImage: Boolean, isPickVideo: Boolean, getProperDateTaken: Boolean, getProperLastModified: Boolean,
|
||||||
getProperFileSize: Boolean, favoritePaths: ArrayList<String>, getVideoDurations: Boolean, sortMedia: Boolean = true): ArrayList<Medium> {
|
getProperFileSize: Boolean, favoritePaths: ArrayList<String>, getVideoDurations: Boolean): ArrayList<Medium> {
|
||||||
val filterMedia = context.config.filterMedia
|
val filterMedia = context.config.filterMedia
|
||||||
if (filterMedia == 0) {
|
if (filterMedia == 0) {
|
||||||
return ArrayList()
|
return ArrayList()
|
||||||
|
@ -38,9 +38,7 @@ class MediaFetcher(val context: Context) {
|
||||||
curMedia.addAll(newMedia)
|
curMedia.addAll(newMedia)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sortMedia) {
|
|
||||||
sortMedia(curMedia, context.config.getFileSorting(curPath))
|
sortMedia(curMedia, context.config.getFileSorting(curPath))
|
||||||
}
|
|
||||||
|
|
||||||
return curMedia
|
return curMedia
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ import com.simplemobiletools.gallery.pro.models.Directory
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
interface DirectoryDao {
|
interface DirectoryDao {
|
||||||
@Query("SELECT path, thumbnail, filename, media_count, last_modified, date_taken, size, location, media_types FROM directories")
|
@Query("SELECT path, thumbnail, filename, media_count, last_modified, date_taken, size, location, media_types, sort_value FROM directories")
|
||||||
fun getAll(): List<Directory>
|
fun getAll(): List<Directory>
|
||||||
|
|
||||||
@Insert(onConflict = REPLACE)
|
@Insert(onConflict = REPLACE)
|
||||||
|
@ -21,8 +21,8 @@ interface DirectoryDao {
|
||||||
@Query("DELETE FROM directories WHERE path = :path COLLATE NOCASE")
|
@Query("DELETE FROM directories WHERE path = :path COLLATE NOCASE")
|
||||||
fun deleteDirPath(path: String)
|
fun deleteDirPath(path: String)
|
||||||
|
|
||||||
@Query("UPDATE OR REPLACE directories SET thumbnail = :thumbnail, media_count = :mediaCnt, last_modified = :lastModified, date_taken = :dateTaken, size = :size, media_types = :mediaTypes WHERE path = :path COLLATE NOCASE")
|
@Query("UPDATE OR REPLACE directories SET thumbnail = :thumbnail, media_count = :mediaCnt, last_modified = :lastModified, date_taken = :dateTaken, size = :size, media_types = :mediaTypes, sort_value = :sortValue WHERE path = :path COLLATE NOCASE")
|
||||||
fun updateDirectory(path: String, thumbnail: String, mediaCnt: Int, lastModified: Long, dateTaken: Long, size: Long, mediaTypes: Int)
|
fun updateDirectory(path: String, thumbnail: String, mediaCnt: Int, lastModified: Long, dateTaken: Long, size: Long, mediaTypes: Int, sortValue: String)
|
||||||
|
|
||||||
@Query("UPDATE directories SET thumbnail = :thumbnail, filename = :name, path = :newPath WHERE path = :oldPath COLLATE NOCASE")
|
@Query("UPDATE directories SET thumbnail = :thumbnail, filename = :name, path = :newPath WHERE path = :oldPath COLLATE NOCASE")
|
||||||
fun updateDirectoryAfterRename(thumbnail: String, name: String, newPath: String, oldPath: String)
|
fun updateDirectoryAfterRename(thumbnail: String, name: String, newPath: String, oldPath: String)
|
||||||
|
|
|
@ -23,13 +23,14 @@ data class Directory(
|
||||||
@ColumnInfo(name = "size") var size: Long,
|
@ColumnInfo(name = "size") var size: Long,
|
||||||
@ColumnInfo(name = "location") var location: Int,
|
@ColumnInfo(name = "location") var location: Int,
|
||||||
@ColumnInfo(name = "media_types") var types: Int,
|
@ColumnInfo(name = "media_types") var types: Int,
|
||||||
|
@ColumnInfo(name = "sort_value") var sortValue: String,
|
||||||
|
|
||||||
// used with "Group direct subfolders" enabled
|
// used with "Group direct subfolders" enabled
|
||||||
@Ignore var subfoldersCount: Int = 0,
|
@Ignore var subfoldersCount: Int = 0,
|
||||||
@Ignore var subfoldersMediaCount: Int = 0,
|
@Ignore var subfoldersMediaCount: Int = 0,
|
||||||
@Ignore var containsMediaFilesDirectly: Boolean = true) {
|
@Ignore var containsMediaFilesDirectly: Boolean = true) {
|
||||||
|
|
||||||
constructor() : this(null, "", "", "", 0, 0L, 0L, 0L, 0, 0, 0, 0)
|
constructor() : this(null, "", "", "", 0, 0L, 0L, 0L, 0, 0, "", 0, 0)
|
||||||
|
|
||||||
fun getBubbleText(sorting: Int, context: Context) = when {
|
fun getBubbleText(sorting: Int, context: Context) = when {
|
||||||
sorting and SORT_BY_NAME != 0 -> name
|
sorting and SORT_BY_NAME != 0 -> name
|
||||||
|
|
Loading…
Reference in a new issue