Skip to content
Snippets Groups Projects
Commit 386b17a0 authored by Geoffrey Métais's avatar Geoffrey Métais
Browse files

Make browser provider reusable

parent 11dcb0c9
No related branches found
No related tags found
No related merge requests found
......@@ -53,7 +53,7 @@ abstract class BrowserProvider(val dataset: LiveDataset<MediaLibraryItem>, val u
init {
fetch()
}
protected lateinit var mediabrowser: MediaBrowser
protected var mediabrowser: MediaBrowser? = null
private val foldersContentMap = SimpleArrayMap<MediaLibraryItem, MutableList<MediaLibraryItem>>()
private lateinit var browserChannel : Channel<Media>
......@@ -63,7 +63,7 @@ abstract class BrowserProvider(val dataset: LiveDataset<MediaLibraryItem>, val u
internal val medialibrary = Medialibrary.getInstance()
protected open fun initBrowser() {
if (!this::mediabrowser.isInitialized) mediabrowser = MediaBrowser(VLCInstance.get(), this, browserHandler)
if (mediabrowser == null) mediabrowser = MediaBrowser(VLCInstance.get(), this, browserHandler)
}
open fun fetch() {
......@@ -86,7 +86,10 @@ abstract class BrowserProvider(val dataset: LiveDataset<MediaLibraryItem>, val u
browserChannel = Channel(Channel.UNLIMITED)
requestBrowsing(url)
job = uiJob(false) {
for (media in browserChannel) addMedia(findMedia(media))
for (media in browserChannel) {
if (isActive) addMedia(findMedia(media))
else return@uiJob
}
parseSubDirectories()
}
}
......@@ -106,7 +109,7 @@ abstract class BrowserProvider(val dataset: LiveDataset<MediaLibraryItem>, val u
return true
}
private suspend fun parseSubDirectories() {
internal open suspend fun parseSubDirectories() {
if (dataset.value.isEmpty()) return
val currentMediaList = dataset.value.toList()
launch(browserContext, parent = job) {
......@@ -133,7 +136,7 @@ abstract class BrowserProvider(val dataset: LiveDataset<MediaLibraryItem>, val u
}
// request parsing
browserChannel = Channel(Channel.UNLIMITED)
mediabrowser.browse(current.uri, 0)
mediabrowser?.browse(current.uri, 0)
// retrieve subitems
for (media in browserChannel) {
val type = media.type
......@@ -193,13 +196,21 @@ abstract class BrowserProvider(val dataset: LiveDataset<MediaLibraryItem>, val u
private fun requestBrowsing(url: String?) = launch(browserContext) {
initBrowser()
if (url != null) mediabrowser.browse(Uri.parse(url), getFlags())
else mediabrowser.discoverNetworkShares()
mediabrowser?.let {
if (url != null) it.browse(Uri.parse(url), getFlags())
else it.discoverNetworkShares()
}
}
fun stop() = job?.cancel()
fun release() = launch(BrowserProvider.browserContext) { if (this@BrowserProvider::mediabrowser.isInitialized) mediabrowser.release() }
fun release() = launch(BrowserProvider.browserContext) {
if (this@BrowserProvider::browserChannel.isInitialized) browserChannel.close()
mediabrowser?.let {
it.release()
mediabrowser = null
}
}
fun saveList(media: MediaWrapper) = foldersContentMap[media]?.let { if (!it.isEmpty()) prefetchLists[media.location] = it }
......
......@@ -34,7 +34,7 @@ class FilePickerProvider(dataset: LiveDataset<MediaLibraryItem>, url: String?) :
override fun initBrowser() {
super.initBrowser()
mediabrowser.setIgnoreFileTypes("db,nfo,ini,jpg,jpeg,ljpg,gif,png,pgm,pgmyuv,pbm,pam,tga,bmp,pnm,xpm,xcf,pcx,tif,tiff,lbm,sfv")
mediabrowser?.setIgnoreFileTypes("db,nfo,ini,jpg,jpeg,ljpg,gif,png,pgm,pgmyuv,pbm,pam,tga,bmp,pnm,xpm,xcf,pcx,tif,tiff,lbm,sfv")
}
override fun addMedia(media: MediaLibraryItem) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment