Browse Source

Medialibrary: implement search API changes

merge-requests/1614/head
Duncan McNamara 4 years ago
committed by Nicolas Pomepuy
parent
commit
0c9b96ba1a
  1. 3
      application/vlc-android/src/org/videolan/vlc/MediaSessionCallback.kt
  2. 2
      application/vlc-android/src/org/videolan/vlc/providers/medialibrary/PlaylistsProvider.kt
  3. 2
      buildsystem/compile-medialibrary.sh
  4. 4
      medialibrary/jni/AndroidMediaLibrary.cpp
  5. 2
      medialibrary/jni/AndroidMediaLibrary.h
  6. 16
      medialibrary/jni/medialibrary.cpp
  7. 12
      medialibrary/src/org/videolan/medialibrary/MedialibraryImpl.java
  8. 4
      medialibrary/src/org/videolan/medialibrary/interfaces/Medialibrary.java
  9. 9
      medialibrary/src/org/videolan/medialibrary/interfaces/media/Playlist.java
  10. 8
      medialibrary/src/org/videolan/medialibrary/stubs/StubMedialibrary.java

3
application/vlc-android/src/org/videolan/vlc/MediaSessionCallback.kt

@ -39,6 +39,7 @@ import kotlinx.coroutines.launch
import org.videolan.medialibrary.Tools
import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.interfaces.media.Playlist
import org.videolan.resources.*
import org.videolan.resources.util.getFromMl
import org.videolan.tools.Settings
@ -286,7 +287,7 @@ internal class MediaSessionCallback(private val playbackService: PlaybackService
vsp.isAlbumFocus -> playbackService.medialibrary.searchAlbum(vsp.album)
vsp.isGenreFocus -> playbackService.medialibrary.searchGenre(vsp.genre)
vsp.isArtistFocus -> playbackService.medialibrary.searchArtist(vsp.artist)
vsp.isPlaylistFocus -> playbackService.medialibrary.searchPlaylist(vsp.playlist, Settings.includeMissing)
vsp.isPlaylistFocus -> playbackService.medialibrary.searchPlaylist(vsp.playlist, Playlist.Type.All, Settings.includeMissing)
else -> null
}
if (!isActive) return@launch

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

@ -33,7 +33,7 @@ class PlaylistsProvider(context: Context, model: SortableModel) : MedialibraryPr
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)
else medialibrary.searchPlaylist(model.filterQuery, Playlist.Type.All, sort, desc, Settings.includeMissing, loadSize, startposition)
model.viewModelScope.launch { completeHeaders(list, startposition) }
return list
}

2
buildsystem/compile-medialibrary.sh

@ -6,7 +6,7 @@ set -e
# ARGUMENTS #
#############
MEDIALIBRARY_HASH=c210a869c6483001ec0f69e00acd047095bbb2d0
MEDIALIBRARY_HASH=0e037cc3da23416f55b210f6d8b35e51ac58de3a
while [ $# -gt 0 ]; do
case $1 in

4
medialibrary/jni/AndroidMediaLibrary.cpp

@ -319,9 +319,9 @@ AndroidMediaLibrary::searchFromFolder( int64_t folderId, const std::string& quer
}
medialibrary::Query<medialibrary::IPlaylist>
AndroidMediaLibrary::searchPlaylists(const std::string& query, const medialibrary::QueryParameters* params)
AndroidMediaLibrary::searchPlaylists(const std::string& query, medialibrary::PlaylistType type, const medialibrary::QueryParameters* params)
{
return p_ml->searchPlaylists(query, params);
return p_ml->searchPlaylists(query, type, params);
}
medialibrary::Query<medialibrary::IAlbum>

2
medialibrary/jni/AndroidMediaLibrary.h

@ -66,7 +66,7 @@ public:
medialibrary::Query<medialibrary::IMedia> searchMedia(const std::string& query, const medialibrary::QueryParameters* params = nullptr);
medialibrary::Query<medialibrary::IMedia> searchAudio(const std::string& query, const medialibrary::QueryParameters* params = nullptr);
medialibrary::Query<medialibrary::IMedia> searchVideo(const std::string& query, const medialibrary::QueryParameters* params = nullptr);
medialibrary::Query<medialibrary::IPlaylist> searchPlaylists(const std::string& query, const medialibrary::QueryParameters* params = nullptr);
medialibrary::Query<medialibrary::IPlaylist> searchPlaylists(const std::string& query, medialibrary::PlaylistType type, const medialibrary::QueryParameters* params = nullptr);
medialibrary::Query<medialibrary::IAlbum> searchAlbums(const std::string& query, const medialibrary::QueryParameters* params = nullptr);
medialibrary::Query<medialibrary::IGenre> searchGenre(const std::string& query, const medialibrary::QueryParameters* params = nullptr);
medialibrary::Query<medialibrary::IArtist> searchArtists(const std::string& query, const medialibrary::QueryParameters* params = nullptr);

16
medialibrary/jni/medialibrary.cpp

@ -678,11 +678,11 @@ getGenreSearchCount(JNIEnv* env, jobject thiz, jstring filterQuery) {
}
jobjectArray
searchPlaylist(JNIEnv* env, jobject thiz, jstring query, jboolean includeMissing)
searchPlaylist(JNIEnv* env, jobject thiz, jstring query, medialibrary::PlaylistType type, jboolean includeMissing)
{
AndroidMediaLibrary *aml = MediaLibrary_getInstance(env, thiz);
const char *queryChar = env->GetStringUTFChars(query, JNI_FALSE);
std::vector<medialibrary::PlaylistPtr> playlists = aml->searchPlaylists(queryChar)->all();
std::vector<medialibrary::PlaylistPtr> playlists = aml->searchPlaylists(queryChar, type)->all();
jobjectArray playlistRefs = (jobjectArray) env->NewObjectArray(playlists.size(), ml_fields.Playlist.clazz, NULL);
int index = -1;
for(medialibrary::PlaylistPtr const& playlist : playlists) {
@ -694,12 +694,12 @@ searchPlaylist(JNIEnv* env, jobject thiz, jstring query, jboolean includeMissing
}
jobjectArray
searchPagedPlaylist(JNIEnv* env, jobject thiz, jstring filterQuery, jint sortingCriteria, jboolean desc, jboolean includeMissing, jint nbItems, jint offset)
searchPagedPlaylist(JNIEnv* env, jobject thiz, jstring filterQuery, medialibrary::PlaylistType type, jint sortingCriteria, jboolean desc, jboolean includeMissing, jint nbItems, jint offset)
{
AndroidMediaLibrary *aml = MediaLibrary_getInstance(env, thiz);
medialibrary::QueryParameters params = generateParams(sortingCriteria, desc, includeMissing);
const char *queryChar = env->GetStringUTFChars(filterQuery, JNI_FALSE);
const auto query = aml->searchPlaylists(queryChar, &params);
const auto query = aml->searchPlaylists(queryChar, type, &params);
std::vector<medialibrary::PlaylistPtr> playlists = nbItems != 0 ? query->items(nbItems, offset) : query->all();
jobjectArray playlistRefs = (jobjectArray) env->NewObjectArray(playlists.size(), ml_fields.Playlist.clazz, NULL);
int index = -1;
@ -712,9 +712,9 @@ searchPagedPlaylist(JNIEnv* env, jobject thiz, jstring filterQuery, jint sorting
}
jint
getPlaylistSearchCount(JNIEnv* env, jobject thiz, jstring filterQuery) {
getPlaylistSearchCount(JNIEnv* env, jobject thiz, jstring filterQuery, medialibrary::PlaylistType type) {
const char *queryChar = env->GetStringUTFChars(filterQuery, JNI_FALSE);
jint count = (jint) MediaLibrary_getInstance(env, thiz)->searchPlaylists(queryChar)->count();
jint count = (jint) MediaLibrary_getInstance(env, thiz)->searchPlaylists(queryChar, type)->count();
env->ReleaseStringUTFChars(filterQuery, queryChar);
return count;
}
@ -2389,8 +2389,8 @@ static JNINativeMethod methods[] = {
{"nativeSearchGenre", "(Ljava/lang/String;)[Lorg/videolan/medialibrary/interfaces/media/Genre;", (void*)searchGenre },
{"nativeSearchPagedGenre", "(Ljava/lang/String;IZZII)[Lorg/videolan/medialibrary/interfaces/media/Genre;", (void*)searchPagedGenre },
{"nativeGetGenreSearchCount", "(Ljava/lang/String;)I", (void*)getGenreSearchCount },
{"nativeSearchPlaylist", "(Ljava/lang/String;Z)[Lorg/videolan/medialibrary/interfaces/media/Playlist;", (void*)searchPlaylist },
{"nativeSearchPagedPlaylist", "(Ljava/lang/String;IZZII)[Lorg/videolan/medialibrary/interfaces/media/Playlist;", (void*)searchPagedPlaylist },
{"nativeSearchPlaylist", "(Ljava/lang/String;IZ)[Lorg/videolan/medialibrary/interfaces/media/Playlist;", (void*)searchPlaylist },
{"nativeSearchPagedPlaylist", "(Ljava/lang/String;IIZZII)[Lorg/videolan/medialibrary/interfaces/media/Playlist;", (void*)searchPagedPlaylist },
{"nativeGetPlaylistSearchCount", "(Ljava/lang/String;)I", (void*)getPlaylistSearchCount },
{"nativeGetMedia", "(J)Lorg/videolan/medialibrary/interfaces/media/MediaWrapper;", (void*)getMedia },
{"nativeGetMediaFromMrl", "(Ljava/lang/String;)Lorg/videolan/medialibrary/interfaces/media/MediaWrapper;", (void*)getMediaFromMrl },

12
medialibrary/src/org/videolan/medialibrary/MedialibraryImpl.java

@ -577,12 +577,12 @@ public class MedialibraryImpl extends Medialibrary {
return mIsInitiated && !TextUtils.isEmpty(query) ? nativeSearchPagedGenre(query, sort, desc, includeMissing, nbItems, offset) : null;
}
public Playlist[] searchPlaylist(String query, boolean includeMissing) {
return mIsInitiated && !TextUtils.isEmpty(query) ? nativeSearchPlaylist(query, includeMissing) : null;
public Playlist[] searchPlaylist(String query, Playlist.Type type, boolean includeMissing) {
return mIsInitiated && !TextUtils.isEmpty(query) ? nativeSearchPlaylist(query, type.ordinal(), includeMissing) : null;
}
public Playlist[] searchPlaylist(String query, int sort, boolean desc, boolean includeMissing, int nbItems, int offset) {
return mIsInitiated && !TextUtils.isEmpty(query) ? nativeSearchPagedPlaylist(query, sort, desc, includeMissing, nbItems, offset) : null;
public Playlist[] searchPlaylist(String query, Playlist.Type type, int sort, boolean desc, boolean includeMissing, int nbItems, int offset) {
return mIsInitiated && !TextUtils.isEmpty(query) ? nativeSearchPagedPlaylist(query, type.ordinal(), sort, desc, includeMissing, nbItems, offset) : null;
}
@Override
@ -740,8 +740,8 @@ public class MedialibraryImpl extends Medialibrary {
private native Genre[] nativeSearchGenre(String query);
private native Genre[] nativeSearchPagedGenre(String query, int sort, boolean desc, boolean includeMissing, int nbItems, int offset);
private native int nativeGetGenreSearchCount(String query);
private native Playlist[] nativeSearchPlaylist(String query, boolean includeMissing);
private native Playlist[] nativeSearchPagedPlaylist(String query, int sort, boolean desc, boolean includeMissing, int nbItems, int offset);
private native Playlist[] nativeSearchPlaylist(String query, int type, boolean includeMissing);
private native Playlist[] nativeSearchPagedPlaylist(String query, int type, int sort, boolean desc, boolean includeMissing, int nbItems, int offset);
private native int nativeGetPlaylistSearchCount(String query);
private native Folder[] nativeSearchPagedFolders(String query, int sort, boolean desc, boolean includeMissing, int nbItems, int offset);
private native int nativeGetSearchFoldersCount(String query);

4
medialibrary/src/org/videolan/medialibrary/interfaces/Medialibrary.java

@ -796,8 +796,8 @@ abstract public class Medialibrary {
abstract public Album[] searchAlbum(String query, int sort, boolean desc, boolean includeMissing, int nbItems, int offset);
abstract public Genre[] searchGenre(String query);
abstract public Genre[] searchGenre(String query, int sort, boolean desc, boolean includeMissing, int nbItems, int offset);
abstract public Playlist[] searchPlaylist(String query, boolean includeMissing);
abstract public Playlist[] searchPlaylist(String query, int sort, boolean desc, boolean includeMissing, int nbItems, int offset);
abstract public Playlist[] searchPlaylist(String query, Playlist.Type type, boolean includeMissing);
abstract public Playlist[] searchPlaylist(String query, Playlist.Type type, int sort, boolean desc, boolean includeMissing, int nbItems, int offset);
abstract public Folder[] searchFolders(String query, int sort, boolean desc, boolean includeMissing, int nbItems, int offset);
abstract public int getFoldersCount(String query);
abstract public VideoGroup[] searchVideoGroups(String query, int sort, boolean desc, boolean includeMissing, int nbItems, int offset);

9
medialibrary/src/org/videolan/medialibrary/interfaces/media/Playlist.java

@ -27,6 +27,15 @@ public abstract class Playlist extends MediaLibraryItem {
mNbDurationUnknown = nbDurationUnknown;
}
public enum Type {
/// Include all kind of playlist, regarding of the media types
All,
/// Only include audio playlists
AudioOnly,
/// Only include video playlist
VideoOnly
}
abstract public MediaWrapper[] getTracks(boolean includeMissing);
abstract public MediaWrapper[] getPagedTracks(int nbItems, int offset, boolean includeMissing);
abstract public int getRealTracksCount(boolean includeMissing);

8
medialibrary/src/org/videolan/medialibrary/stubs/StubMedialibrary.java

@ -527,7 +527,7 @@ public class StubMedialibrary extends Medialibrary {
Album[] albums = searchAlbum(query);
Artist[] artists = searchArtist(query);
Genre[] genres = searchGenre(query);
Playlist[] playlists = searchPlaylist(query, true);
Playlist[] playlists = searchPlaylist(query, Playlist.Type.All, true);
return new SearchAggregate(albums, artists, genres, videos, tracks, playlists);
}
@ -651,7 +651,7 @@ public class StubMedialibrary extends Medialibrary {
return dt.sortGenre(dt.secureSublist(results, offset, offset + nbItems), sort, desc);
}
public Playlist[] searchPlaylist(String query, boolean includeMissing) {
public Playlist[] searchPlaylist(String query, Playlist.Type type, boolean includeMissing) {
ArrayList<Playlist> results = new ArrayList<>();
for (Playlist playlist : dt.mPlaylists) {
if (Tools.hasSubString(playlist.getTitle(), query)) results.add(playlist);
@ -659,8 +659,8 @@ public class StubMedialibrary extends Medialibrary {
return results.toArray(new Playlist[0]);
}
public Playlist[] searchPlaylist(String query, int sort, boolean desc, boolean includeMissing, int nbItems, int offset) {
ArrayList<Playlist> results = new ArrayList<>(Arrays.asList(searchPlaylist(query, includeMissing)));
public Playlist[] searchPlaylist(String query, Playlist.Type type, int sort, boolean desc, boolean includeMissing, int nbItems, int offset) {
ArrayList<Playlist> results = new ArrayList<>(Arrays.asList(searchPlaylist(query, type, includeMissing)));
return dt.sortPlaylist(dt.secureSublist(results, offset, offset + nbItems), sort, desc);
}

Loading…
Cancel
Save