Browse Source

Fix null media on playback

It was caused by listing media at playback time
with includeMissing set to true while there was
missing media on unmounted storages

(cherry picked from commit f804363db0)
3.4.x
Nicolas Pomepuy 5 years ago
parent
commit
57a6134717
  1. 4
      application/television/src/main/java/org/videolan/television/ui/TvUtil.kt
  2. 45
      application/vlc-android/src/org/videolan/vlc/PlaybackService.kt
  3. 16
      application/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt
  4. 22
      application/vlc-android/src/org/videolan/vlc/providers/medialibrary/AlbumsProvider.kt
  5. 8
      application/vlc-android/src/org/videolan/vlc/providers/medialibrary/ArtistsProvider.kt
  6. 8
      application/vlc-android/src/org/videolan/vlc/providers/medialibrary/FoldersProvider.kt
  7. 8
      application/vlc-android/src/org/videolan/vlc/providers/medialibrary/GenresProvider.kt
  8. 8
      application/vlc-android/src/org/videolan/vlc/providers/medialibrary/MedialibraryProvider.kt
  9. 8
      application/vlc-android/src/org/videolan/vlc/providers/medialibrary/PlaylistsProvider.kt
  10. 24
      application/vlc-android/src/org/videolan/vlc/providers/medialibrary/TracksProvider.kt
  11. 8
      application/vlc-android/src/org/videolan/vlc/providers/medialibrary/VideoGroupsProvider.kt
  12. 22
      application/vlc-android/src/org/videolan/vlc/providers/medialibrary/VideosProvider.kt

4
application/television/src/main/java/org/videolan/television/ui/TvUtil.kt

@ -234,7 +234,7 @@ object TvUtil {
is MediaWrapper -> when (item.type) {
MediaWrapper.TYPE_AUDIO -> {
val list = withContext(Dispatchers.IO) {
(provider.getAll().toList()).filter { it.itemType != MediaWrapper.TYPE_DIR } as ArrayList<MediaWrapper>
(provider.getAll(false).toList()).filter { it.itemType != MediaWrapper.TYPE_DIR } as ArrayList<MediaWrapper>
}
val position = list.getposition(item)
playAudioList(activity, list, position)
@ -254,7 +254,7 @@ object TvUtil {
}
else -> {
val list = withContext(Dispatchers.IO) {
(provider.getAll().toList() as List<MediaWrapper>).filter { it.type != MediaWrapper.TYPE_DIR }
(provider.getAll(false).toList() as List<MediaWrapper>).filter { it.type != MediaWrapper.TYPE_DIR }
}
val position = list.getposition(item)
MediaUtils.openList(activity, list, position)

45
application/vlc-android/src/org/videolan/vlc/PlaybackService.kt

@ -1266,33 +1266,28 @@ class PlaybackService : MediaBrowserServiceCompat(), LifecycleOwner {
val queue = withContext(Dispatchers.Default) {
ArrayList<MediaSessionCompat.QueueItem>(toIndex - fromIndex).also {
for ((position, media) in mediaList.subList(fromIndex, toIndex).withIndex()) {
try {
val title: String = media.nowPlaying ?: media.title
val mediaId = MediaSessionBrowser.generateMediaId(media)
val iconUri = when {
isSchemeHttpOrHttps(media.artworkMrl) -> {
//ArtworkProvider will cache remote images
ArtworkProvider.buildUri(Uri.Builder()
.appendPath(ArtworkProvider.REMOTE)
.appendQueryParameter(ArtworkProvider.PATH, media.artworkMrl)
.build())
}
ThumbnailsProvider.isMediaVideo(media) -> ArtworkProvider.buildMediaUri(media)
else -> artworkMap[mediaId] ?: MediaSessionBrowser.DEFAULT_TRACK_ICON
val title: String = media.nowPlaying ?: media.title
val mediaId = MediaSessionBrowser.generateMediaId(media)
val iconUri = when {
isSchemeHttpOrHttps(media.artworkMrl) -> {
//ArtworkProvider will cache remote images
ArtworkProvider.buildUri(Uri.Builder()
.appendPath(ArtworkProvider.REMOTE)
.appendQueryParameter(ArtworkProvider.PATH, media.artworkMrl)
.build())
}
val mediaDesc = MediaDescriptionCompat.Builder()
.setTitle(title)
.setSubtitle(MediaUtils.getMediaArtist(ctx, media))
.setDescription(MediaUtils.getMediaAlbum(ctx, media))
.setIconUri(iconUri)
.setMediaUri(media.uri)
.setMediaId(mediaId)
.build()
it.add(MediaSessionCompat.QueueItem(mediaDesc, (fromIndex + position).toLong()))
} catch (e: NullPointerException) {
Log.e("PlaybackService", e.message, e)
VLCCrashHandler.saveLog(e, "NullPointerException in PlaybackService buildQueue")
ThumbnailsProvider.isMediaVideo(media) -> ArtworkProvider.buildMediaUri(media)
else -> artworkMap[mediaId] ?: MediaSessionBrowser.DEFAULT_TRACK_ICON
}
val mediaDesc = MediaDescriptionCompat.Builder()
.setTitle(title)
.setSubtitle(MediaUtils.getMediaArtist(ctx, media))
.setDescription(MediaUtils.getMediaAlbum(ctx, media))
.setIconUri(iconUri)
.setMediaUri(media.uri)
.setMediaId(mediaId)
.build()
it.add(MediaSessionCompat.QueueItem(mediaDesc, (fromIndex + position).toLong()))
}
}
}

16
application/vlc-android/src/org/videolan/vlc/media/MediaUtils.kt

@ -185,7 +185,7 @@ object MediaUtils {
0 -> null
in 1..MEDIALIBRARY_PAGE_SIZE -> withContext(Dispatchers.IO) {
mutableListOf<MediaWrapper>().apply {
for (album in provider.getAll()) album.tracks?.let { addAll(it) }
for (album in provider.getAll(false)) album.tracks?.let { addAll(it) }
}
}
else -> withContext(Dispatchers.IO) {
@ -193,7 +193,7 @@ object MediaUtils {
var index = 0
while (index < count) {
val pageCount = min(MEDIALIBRARY_PAGE_SIZE, count - index)
val albums = withContext(Dispatchers.IO) { provider.getPage(pageCount, index) }
val albums = withContext(Dispatchers.IO) { provider.getPage(pageCount, index, false) }
for (album in albums) addAll(album.tracks)
index += pageCount
}
@ -216,13 +216,13 @@ object MediaUtils {
}
when (count) {
0 -> return@SuspendDialogCallback
in 1..MEDIALIBRARY_PAGE_SIZE -> play(withContext(Dispatchers.IO) { provider.getAll().toList() })
in 1..MEDIALIBRARY_PAGE_SIZE -> play(withContext(Dispatchers.IO) { provider.getAll(false).toList() })
else -> {
var index = 0
val appendList = mutableListOf<MediaWrapper>()
while (index < count) {
val pageCount = min(MEDIALIBRARY_PAGE_SIZE, count - index)
val list = withContext(Dispatchers.IO) { provider.getPage(pageCount, index).toList() }
val list = withContext(Dispatchers.IO) { provider.getPage(pageCount, index, false).toList() }
if (index == 0) play(list)
else appendList.addAll(list)
index += pageCount
@ -245,7 +245,7 @@ object MediaUtils {
0 -> return@SuspendDialogCallback
in 1..MEDIALIBRARY_PAGE_SIZE -> {
val flatList = withContext(Dispatchers.IO) {
val allGroups = provider.getAll()
val allGroups = provider.getAll(false)
allGroups.flatMap {
it.media(Medialibrary.SORT_DEFAULT, false, Settings.includeMissing, it.mediaCount(), 0).toList()
}
@ -258,7 +258,7 @@ object MediaUtils {
withContext(Dispatchers.IO) {
while (index < count) {
val pageCount = min(MEDIALIBRARY_PAGE_SIZE, count - index)
val list = provider.getPage(pageCount, index).toList()
val list = provider.getPage(pageCount, index, false).toList()
completeList.addAll(list)
index += pageCount
}
@ -280,7 +280,7 @@ object MediaUtils {
when (count) {
0 -> return@SuspendDialogCallback
in 1..MEDIALIBRARY_PAGE_SIZE -> play(withContext(Dispatchers.IO) {
provider.getAll().flatMap {
provider.getAll(false).flatMap {
it.media(provider.type, Medialibrary.SORT_DEFAULT, false, Settings.includeMissing, it.mediaCount(provider.type), 0).toList()
}
})
@ -289,7 +289,7 @@ object MediaUtils {
while (index < count) {
val pageCount = min(MEDIALIBRARY_PAGE_SIZE, count - index)
val list = withContext(Dispatchers.IO) {
provider.getPage(pageCount, index).flatMap {
provider.getPage(pageCount, index, false).flatMap {
it.media(provider.type, Medialibrary.SORT_DEFAULT, false, Settings.includeMissing, it.mediaCount(provider.type), 0).toList()
}
}

22
application/vlc-android/src/org/videolan/vlc/providers/medialibrary/AlbumsProvider.kt

@ -46,21 +46,21 @@ class AlbumsProvider(val parent : MediaLibraryItem?, context: Context, model: So
desc = Settings.getInstance(context).getBoolean("${sortKey}_desc", false)
}
override fun getAll() : Array<Album> = when (parent) {
is Artist -> parent.getAlbums(sort, desc, Settings.includeMissing)
is Genre -> parent.getAlbums(sort, desc, Settings.includeMissing)
else -> medialibrary.getAlbums(sort, desc, Settings.includeMissing)
override fun getAll(includeMissing:Boolean) : Array<Album> = when (parent) {
is Artist -> parent.getAlbums(sort, desc, includeMissing)
is Genre -> parent.getAlbums(sort, desc, includeMissing)
else -> medialibrary.getAlbums(sort, desc, includeMissing)
}
override fun getPage(loadSize: Int, startposition: Int) : Array<Album> {
override fun getPage(loadSize: Int, startposition: Int, includeMissing:Boolean) : Array<Album> {
val list = if (model.filterQuery == null) when(parent) {
is Artist -> parent.getPagedAlbums(sort, desc, Settings.includeMissing, loadSize, startposition)
is Genre -> parent.getPagedAlbums(sort, desc, Settings.includeMissing, loadSize, startposition)
else -> medialibrary.getPagedAlbums(sort, desc, Settings.includeMissing, loadSize, startposition)
is Artist -> parent.getPagedAlbums(sort, desc, includeMissing, loadSize, startposition)
is Genre -> parent.getPagedAlbums(sort, desc, includeMissing, loadSize, startposition)
else -> medialibrary.getPagedAlbums(sort, desc, includeMissing, loadSize, startposition)
} else when(parent) {
is Artist -> parent.searchAlbums(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
is Genre -> parent.searchAlbums(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
else -> medialibrary.searchAlbum(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
is Artist -> parent.searchAlbums(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
is Genre -> parent.searchAlbums(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
else -> medialibrary.searchAlbum(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
}
model.viewModelScope.launch { completeHeaders(list, startposition) }
return list

8
application/vlc-android/src/org/videolan/vlc/providers/medialibrary/ArtistsProvider.kt

@ -32,11 +32,11 @@ import org.videolan.vlc.viewmodels.SortableModel
@ExperimentalCoroutinesApi
class ArtistsProvider(context: Context, model: SortableModel, var showAll: Boolean) : MedialibraryProvider<Artist>(context, model) {
override fun getAll() : Array<Artist> = medialibrary.getArtists(showAll, sort, desc, Settings.includeMissing)
override fun getAll(includeMissing:Boolean) : Array<Artist> = medialibrary.getArtists(showAll, sort, desc, includeMissing)
override fun getPage(loadSize: Int, startposition: Int): Array<Artist> {
val list = if (model.filterQuery == null) medialibrary.getPagedArtists(showAll, sort, desc, Settings.includeMissing, loadSize, startposition)
else medialibrary.searchArtist(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
override fun getPage(loadSize: Int, startposition: Int, includeMissing:Boolean): Array<Artist> {
val list = if (model.filterQuery == null) medialibrary.getPagedArtists(showAll, sort, desc, includeMissing, loadSize, startposition)
else medialibrary.searchArtist(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
model.viewModelScope.launch { completeHeaders(list, startposition) }
return list
}

8
application/vlc-android/src/org/videolan/vlc/providers/medialibrary/FoldersProvider.kt

@ -28,13 +28,13 @@ import org.videolan.vlc.viewmodels.SortableModel
@ExperimentalCoroutinesApi
class FoldersProvider(context: Context, model: SortableModel, val type: Int) : MedialibraryProvider<Folder>(context, model) {
override fun getAll() : Array<Folder> = medialibrary.getFolders(type, sort, desc, Settings.includeMissing, getTotalCount(), 0)
override fun getAll(includeMissing:Boolean) : Array<Folder> = medialibrary.getFolders(type, sort, desc, includeMissing, getTotalCount(), 0)
override fun getTotalCount() = if (model.filterQuery.isNullOrEmpty()) medialibrary.getFoldersCount(type) else medialibrary.getFoldersCount(model.filterQuery)
override fun getPage(loadSize: Int, startposition: Int) : Array<Folder> = if (model.filterQuery.isNullOrEmpty()) {
medialibrary.getFolders(type, sort, desc, Settings.includeMissing, loadSize, startposition).also { completeHeaders(it, startposition) }
override fun getPage(loadSize: Int, startposition: Int, includeMissing:Boolean) : Array<Folder> = if (model.filterQuery.isNullOrEmpty()) {
medialibrary.getFolders(type, sort, desc, includeMissing, loadSize, startposition).also { completeHeaders(it, startposition) }
} else {
medialibrary.searchFolders(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
medialibrary.searchFolders(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
}.also { if (Settings.showTvUi) completeHeaders(it, startposition) }
}

8
application/vlc-android/src/org/videolan/vlc/providers/medialibrary/GenresProvider.kt

@ -32,11 +32,11 @@ import org.videolan.vlc.viewmodels.SortableModel
@ExperimentalCoroutinesApi
class GenresProvider(context: Context, model: SortableModel) : MedialibraryProvider<Genre>(context, model) {
override fun getAll() : Array<Genre> = medialibrary.getGenres(sort, desc, Settings.includeMissing)
override fun getAll(includeMissing:Boolean) : Array<Genre> = medialibrary.getGenres(sort, desc, includeMissing)
override fun getPage(loadSize: Int, startposition: Int) : Array<Genre> {
val list = if (model.filterQuery == null) medialibrary.getPagedGenres(sort, desc, Settings.includeMissing, loadSize, startposition)
else medialibrary.searchGenre(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
override fun getPage(loadSize: Int, startposition: Int, includeMissing:Boolean) : Array<Genre> {
val list = if (model.filterQuery == null) medialibrary.getPagedGenres(sort, desc, includeMissing, loadSize, startposition)
else medialibrary.searchGenre(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
model.viewModelScope.launch { completeHeaders(list, startposition) }
return list
}

8
application/vlc-android/src/org/videolan/vlc/providers/medialibrary/MedialibraryProvider.kt

@ -72,8 +72,8 @@ abstract class MedialibraryProvider<T : MediaLibraryItem>(val context: Context,
val pagedList by lazy(LazyThreadSafetyMode.NONE) { MLDatasourceFactory().toLiveData(pagingConfig) }
abstract fun getTotalCount(): Int
abstract fun getPage(loadSize: Int, startposition: Int): Array<T>
abstract fun getAll(): Array<out T>
abstract fun getPage(loadSize: Int, startposition: Int, includeMissing:Boolean): Array<T>
abstract fun getAll(includeMissing:Boolean): Array<out T>
override fun sort(sort: Int) {
if (canSortBy(sort)) {
@ -125,7 +125,7 @@ abstract class MedialibraryProvider<T : MediaLibraryItem>(val context: Context,
inner class MLDataSource : PositionalDataSource<T>() {
override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<T>) {
val page = getPage(params.requestedLoadSize, params.requestedStartPosition)
val page = getPage(params.requestedLoadSize, params.requestedStartPosition, Settings.includeMissing)
val count = if (page.size < params.requestedLoadSize) page.size else getTotalCount()
try {
callback.onResult(page.toList(), params.requestedStartPosition, count)
@ -134,7 +134,7 @@ abstract class MedialibraryProvider<T : MediaLibraryItem>(val context: Context,
}
override fun loadRange(params: LoadRangeParams, callback: LoadRangeCallback<T>) {
val result = getPage(params.loadSize, params.startPosition).toList()
val result = getPage(params.loadSize, params.startPosition, Settings.includeMissing).toList()
callback.onResult(result)
}
}

8
application/vlc-android/src/org/videolan/vlc/providers/medialibrary/PlaylistsProvider.kt

@ -32,11 +32,11 @@ import org.videolan.vlc.viewmodels.SortableModel
@ExperimentalCoroutinesApi
class PlaylistsProvider(context: Context, model: SortableModel) : MedialibraryProvider<Playlist>(context, model) {
override fun getAll() : Array<Playlist> = medialibrary.getPlaylists(sort, desc, Settings.includeMissing)
override fun getAll(includeMissing:Boolean) : Array<Playlist> = medialibrary.getPlaylists(sort, desc, includeMissing)
override fun getPage(loadSize: Int, startposition: Int) : Array<Playlist> {
val list = if (model.filterQuery == null) medialibrary.getPagedPlaylists(sort, desc, Settings.includeMissing, loadSize, startposition)
else medialibrary.searchPlaylist(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
override fun getPage(loadSize: Int, startposition: Int, includeMissing:Boolean) : Array<Playlist> {
val list = if (model.filterQuery == null) medialibrary.getPagedPlaylists(sort, desc, includeMissing, loadSize, startposition)
else medialibrary.searchPlaylist(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
model.viewModelScope.launch { completeHeaders(list, startposition) }
return list
}

24
application/vlc-android/src/org/videolan/vlc/providers/medialibrary/TracksProvider.kt

@ -53,21 +53,21 @@ class TracksProvider(val parent : MediaLibraryItem?, context: Context, model: So
}
}
override fun getAll(): Array<MediaWrapper> = parent?.tracks ?: medialibrary.getAudio(sort, desc, Settings.includeMissing)
override fun getAll(includeMissing:Boolean): Array<MediaWrapper> = parent?.tracks ?: medialibrary.getAudio(sort, desc, includeMissing)
override fun getPage(loadSize: Int, startposition: Int) : Array<MediaWrapper> {
override fun getPage(loadSize: Int, startposition: Int, includeMissing:Boolean) : Array<MediaWrapper> {
val list = if (model.filterQuery == null) when(parent) {
is Artist -> parent.getPagedTracks(sort, desc, Settings.includeMissing, loadSize, startposition)
is Album -> parent.getPagedTracks(sort, desc, Settings.includeMissing, loadSize, startposition)
is Genre -> parent.getPagedTracks(sort, desc, Settings.includeMissing, loadSize, startposition)
is Playlist -> parent.getPagedTracks(loadSize, startposition, Settings.includeMissing)
else -> medialibrary.getPagedAudio(sort, desc, Settings.includeMissing, loadSize, startposition)
is Artist -> parent.getPagedTracks(sort, desc, includeMissing, loadSize, startposition)
is Album -> parent.getPagedTracks(sort, desc, includeMissing, loadSize, startposition)
is Genre -> parent.getPagedTracks(sort, desc, includeMissing, loadSize, startposition)
is Playlist -> parent.getPagedTracks(loadSize, startposition, includeMissing)
else -> medialibrary.getPagedAudio(sort, desc, includeMissing, loadSize, startposition)
} else when(parent) {
is Artist -> parent.searchTracks(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
is Album -> parent.searchTracks(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
is Genre -> parent.searchTracks(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
is Playlist -> parent.searchTracks(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
else -> medialibrary.searchAudio(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
is Artist -> parent.searchTracks(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
is Album -> parent.searchTracks(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
is Genre -> parent.searchTracks(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
is Playlist -> parent.searchTracks(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
else -> medialibrary.searchAudio(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
}
model.viewModelScope.launch { completeHeaders(list, startposition) }
return list

8
application/vlc-android/src/org/videolan/vlc/providers/medialibrary/VideoGroupsProvider.kt

@ -16,15 +16,15 @@ class VideoGroupsProvider(context: Context, model: SortableModel) : Medialibrary
override fun canSortByLastModified() = true
override fun canSortByMediaNumber() = true
override fun getAll() : Array<VideoGroup> = medialibrary.getVideoGroups(sort, desc, Settings.includeMissing, getTotalCount(), 0)
override fun getAll(includeMissing:Boolean) : Array<VideoGroup> = medialibrary.getVideoGroups(sort, desc, includeMissing, getTotalCount(), 0)
override fun getTotalCount() = medialibrary.getVideoGroupsCount(model.filterQuery)
override fun getPage(loadSize: Int, startposition: Int): Array<MediaLibraryItem> {
override fun getPage(loadSize: Int, startposition: Int, includeMissing:Boolean): Array<MediaLibraryItem> {
val medias = if (model.filterQuery.isNullOrEmpty()) {
medialibrary.getVideoGroups(sort, desc, Settings.includeMissing, loadSize, startposition)
medialibrary.getVideoGroups(sort, desc, includeMissing, loadSize, startposition)
} else {
medialibrary.searchVideoGroups(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
medialibrary.searchVideoGroups(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
}.sanitizeGroups().also { if (Settings.showTvUi) completeHeaders(it, startposition) }
model.viewModelScope.launch { completeHeaders(medias, startposition) }
return medias

22
application/vlc-android/src/org/videolan/vlc/providers/medialibrary/VideosProvider.kt

@ -49,23 +49,23 @@ class VideosProvider(val folder : Folder?, val group: VideoGroup?, context: Cont
else -> medialibrary.getVideoCount(model.filterQuery)
}
override fun getPage(loadSize: Int, startposition: Int): Array<MediaWrapper> {
override fun getPage(loadSize: Int, startposition: Int, includeMissing:Boolean): Array<MediaWrapper> {
val list = if (model.filterQuery == null) when {
folder !== null -> folder.media(Folder.TYPE_FOLDER_VIDEO, sort, desc, Settings.includeMissing, loadSize, startposition)
group !== null -> group.media(sort, desc, Settings.includeMissing, loadSize, startposition)
else -> medialibrary.getPagedVideos(sort, desc, Settings.includeMissing, loadSize, startposition)
folder !== null -> folder.media(Folder.TYPE_FOLDER_VIDEO, sort, desc, includeMissing, loadSize, startposition)
group !== null -> group.media(sort, desc, includeMissing, loadSize, startposition)
else -> medialibrary.getPagedVideos(sort, desc, includeMissing, loadSize, startposition)
} else when {
folder !== null -> folder.searchTracks(model.filterQuery, Folder.TYPE_FOLDER_VIDEO, sort, desc, Settings.includeMissing, loadSize, startposition)
group !== null -> group.searchTracks(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
else -> medialibrary.searchVideo(model.filterQuery, sort, desc, Settings.includeMissing, loadSize, startposition)
folder !== null -> folder.searchTracks(model.filterQuery, Folder.TYPE_FOLDER_VIDEO, sort, desc, includeMissing, loadSize, startposition)
group !== null -> group.searchTracks(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
else -> medialibrary.searchVideo(model.filterQuery, sort, desc, includeMissing, loadSize, startposition)
}
model.viewModelScope.launch { completeHeaders(list, startposition) }
return list
}
override fun getAll(): Array<MediaWrapper> = when {
folder !== null -> folder.getAll(Folder.TYPE_FOLDER_VIDEO, sort, desc, Settings.includeMissing).toTypedArray()
group !== null -> group.getAll(sort, desc, Settings.includeMissing).toTypedArray()
else -> medialibrary.getVideos(sort, desc, Settings.includeMissing)
override fun getAll(includeMissing:Boolean): Array<MediaWrapper> = when {
folder !== null -> folder.getAll(Folder.TYPE_FOLDER_VIDEO, sort, desc, includeMissing).toTypedArray()
group !== null -> group.getAll(sort, desc, includeMissing).toTypedArray()
else -> medialibrary.getVideos(sort, desc, includeMissing)
}
}

Loading…
Cancel
Save