add some smaller helper functions for getting directories

This commit is contained in:
tibbi 2017-01-12 23:29:15 +01:00
parent c09e472a14
commit ae5113b1f0
1 changed files with 25 additions and 15 deletions

View File

@ -12,6 +12,7 @@ import com.simplemobiletools.gallery.extensions.getHumanizedFilename
import com.simplemobiletools.gallery.extensions.getStringValue import com.simplemobiletools.gallery.extensions.getStringValue
import com.simplemobiletools.gallery.helpers.Config import com.simplemobiletools.gallery.helpers.Config
import com.simplemobiletools.gallery.helpers.IMAGES import com.simplemobiletools.gallery.helpers.IMAGES
import com.simplemobiletools.gallery.helpers.SORT_BY_DATE_MODIFIED
import com.simplemobiletools.gallery.helpers.VIDEOS import com.simplemobiletools.gallery.helpers.VIDEOS
import com.simplemobiletools.gallery.models.Directory import com.simplemobiletools.gallery.models.Directory
import com.simplemobiletools.gallery.models.Medium import com.simplemobiletools.gallery.models.Medium
@ -47,25 +48,38 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
} }
} }
override fun doInBackground(vararg params: Void): ArrayList<Directory> { private fun getParents(): ArrayList<String> {
val directories = LinkedHashMap<String, Directory>()
val media = ArrayList<Medium>()
val showMedia = mConfig.showMedia
val uri = MediaStore.Files.getContentUri("external") val uri = MediaStore.Files.getContentUri("external")
val where = getWhereCondition() + " GROUP BY ( ${MediaStore.Files.FileColumns.PARENT} " val where = "${getWhereCondition()} GROUP BY ( ${MediaStore.Files.FileColumns.PARENT} "
val args = getArgs() val args = getArgs()
val columns = arrayOf(MediaStore.Files.FileColumns.PARENT, MediaStore.Images.Media.DATA) val columns = arrayOf(MediaStore.Files.FileColumns.PARENT, MediaStore.Images.Media.DATA)
var cursor: Cursor? = null var cursor: Cursor? = null
val parents = ArrayList<String>()
try { try {
cursor = context.contentResolver.query(uri, columns, where, args, null) cursor = context.contentResolver.query(uri, columns, where, args, null)
if (cursor?.moveToFirst() == true) { if (cursor?.moveToFirst() == true) {
do { do {
val curPath = cursor.getStringValue(MediaStore.Images.Media.DATA) val curPath = cursor.getStringValue(MediaStore.Images.Media.DATA)
val dirPath = File(curPath).parent parents.add(File(curPath).parent)
val dir = File(dirPath).listFiles() ?: continue } while (cursor.moveToNext())
}
} finally {
cursor?.close()
}
return parents
}
for (file in dir) { override fun doInBackground(vararg params: Void): ArrayList<Directory> {
val directories = LinkedHashMap<String, Directory>()
val media = ArrayList<Medium>()
val showMedia = mConfig.showMedia
val fileSorting = mConfig.fileSorting
val parents = getParents()
parents.mapNotNull { File(it).listFiles() }
.forEach {
for (file in it) {
val isImage = file.isImageFast() || file.isGif() val isImage = file.isImageFast() || file.isGif()
val isVideo = file.isVideoFast() val isVideo = file.isVideoFast()
@ -84,16 +98,12 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
val name = file.name val name = file.name
val path = file.absolutePath val path = file.absolutePath
val dateModified = file.lastModified() val dateModified = if (fileSorting and SORT_BY_DATE_MODIFIED != 0) file.lastModified() else 0
media.add(Medium(name, path, isVideo, dateModified, dateModified, size)) media.add(Medium(name, path, isVideo, dateModified, dateModified, size))
} }
} while (cursor.moveToNext()) }
}
} finally {
cursor?.close()
}
Medium.sorting = mConfig.fileSorting Medium.sorting = fileSorting
media.sort() media.sort()
for ((name, path, isVideo, dateModified, dateTaken, size) in media) { for ((name, path, isVideo, dateModified, dateTaken, size) in media) {