optimize Portrait photo checking for better performance
This commit is contained in:
parent
3db5db5569
commit
13a3f90595
1 changed files with 23 additions and 39 deletions
|
@ -214,7 +214,6 @@ class MediaFetcher(val context: Context) {
|
||||||
private fun getMediaInFolder(folder: String, isPickImage: Boolean, isPickVideo: Boolean, filterMedia: Int, getProperDateTaken: Boolean,
|
private fun getMediaInFolder(folder: String, isPickImage: Boolean, isPickVideo: Boolean, filterMedia: Int, getProperDateTaken: Boolean,
|
||||||
getProperFileSize: Boolean, favoritePaths: ArrayList<String>, getVideoDurations: Boolean): ArrayList<Medium> {
|
getProperFileSize: Boolean, favoritePaths: ArrayList<String>, getVideoDurations: Boolean): ArrayList<Medium> {
|
||||||
val media = ArrayList<Medium>()
|
val media = ArrayList<Medium>()
|
||||||
|
|
||||||
val isRecycleBin = folder == RECYCLE_BIN
|
val isRecycleBin = folder == RECYCLE_BIN
|
||||||
val deletedMedia = if (isRecycleBin) {
|
val deletedMedia = if (isRecycleBin) {
|
||||||
context.getUpdatedDeletedMedia(context.galleryDB.MediumDao())
|
context.getUpdatedDeletedMedia(context.galleryDB.MediumDao())
|
||||||
|
@ -229,54 +228,39 @@ class MediaFetcher(val context: Context) {
|
||||||
val showPortraits = filterMedia and TYPE_PORTRAITS != 0
|
val showPortraits = filterMedia and TYPE_PORTRAITS != 0
|
||||||
val dateTakens = if (getProperDateTaken && folder != FAVORITES && !isRecycleBin) getFolderDateTakens(folder) else HashMap()
|
val dateTakens = if (getProperDateTaken && folder != FAVORITES && !isRecycleBin) getFolderDateTakens(folder) else HashMap()
|
||||||
|
|
||||||
// used only for Portrait photos starting with "IMG_" for now
|
|
||||||
val subdirs = ArrayList<File>()
|
|
||||||
val covers = ArrayList<String>()
|
|
||||||
|
|
||||||
val files = when (folder) {
|
val files = when (folder) {
|
||||||
FAVORITES -> favoritePaths.filter { showHidden || !it.contains("/.") }.map { File(it) }.toMutableList() as ArrayList<File>
|
FAVORITES -> favoritePaths.filter { showHidden || !it.contains("/.") }.map { File(it) }.toMutableList() as ArrayList<File>
|
||||||
RECYCLE_BIN -> deletedMedia.map { File(it.path) }.toMutableList() as ArrayList<File>
|
RECYCLE_BIN -> deletedMedia.map { File(it.path) }.toMutableList() as ArrayList<File>
|
||||||
else -> {
|
else -> File(folder).listFiles()?.toMutableList() ?: return media
|
||||||
val allFiles = File(folder).listFiles() ?: return media
|
|
||||||
val notDirs = ArrayList<File>()
|
|
||||||
allFiles.forEach {
|
|
||||||
if (it.isDirectory) {
|
|
||||||
if (showPortraits && it.name.startsWith("img_", true)) {
|
|
||||||
subdirs.add(it)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
notDirs.add(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
notDirs
|
for (curFile in files) {
|
||||||
}
|
var file = curFile
|
||||||
}
|
|
||||||
|
|
||||||
for (subdir in subdirs) {
|
|
||||||
val portraitFiles = subdir.listFiles() ?: continue
|
|
||||||
val cover = portraitFiles.firstOrNull { it.name.contains("cover", true) } ?: portraitFiles.firstOrNull()
|
|
||||||
if (cover != null) {
|
|
||||||
files.add(cover)
|
|
||||||
covers.add(cover.absolutePath)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (file in files) {
|
|
||||||
if (shouldStop) {
|
if (shouldStop) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
val path = file.absolutePath
|
var path = file.absolutePath
|
||||||
val isPortrait = covers.contains(path)
|
var isPortrait = false
|
||||||
val isImage = if (isPortrait) false else path.isImageFast()
|
val isImage = path.isImageFast()
|
||||||
val isVideo = if (isPortrait || isImage) false else path.isVideoFast()
|
val isVideo = if (isImage) false else path.isVideoFast()
|
||||||
val isGif = if (isPortrait || isImage || isVideo) false else path.isGif()
|
val isGif = if (isImage || isVideo) false else path.isGif()
|
||||||
val isRaw = if (isPortrait || isImage || isVideo || isGif) false else path.isRawFast()
|
val isRaw = if (isImage || isVideo || isGif) false else path.isRawFast()
|
||||||
val isSvg = if (isPortrait || isImage || isVideo || isGif || isRaw) false else path.isSvg()
|
val isSvg = if (isImage || isVideo || isGif || isRaw) false else path.isSvg()
|
||||||
|
|
||||||
if (!isPortrait && !isImage && !isVideo && !isGif && !isRaw && !isSvg)
|
if (!isImage && !isVideo && !isGif && !isRaw && !isSvg) {
|
||||||
|
if (showPortraits && file.isDirectory && file.name.startsWith("img_", true)) {
|
||||||
|
val portraitFiles = file.listFiles() ?: continue
|
||||||
|
val cover = portraitFiles.firstOrNull { it.name.contains("cover", true) } ?: portraitFiles.firstOrNull()
|
||||||
|
if (cover != null && !files.contains(cover)) {
|
||||||
|
file = cover
|
||||||
|
path = cover.absolutePath
|
||||||
|
isPortrait = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
continue
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (isVideo && (isPickImage || filterMedia and TYPE_VIDEOS == 0))
|
if (isVideo && (isPickImage || filterMedia and TYPE_VIDEOS == 0))
|
||||||
continue
|
continue
|
||||||
|
|
Loading…
Reference in a new issue