Browse Source

Implement the medialibrary folder callbacks

merge-requests/1717/head
Nicolas Pomepuy 4 years ago
parent
commit
9a7dcee338
  1. 17
      application/vlc-android/src/org/videolan/vlc/viewmodels/CallBackDelegate.kt
  2. 1
      application/vlc-android/src/org/videolan/vlc/viewmodels/mobile/VideosViewModel.kt
  3. 41
      medialibrary/jni/AndroidMediaLibrary.cpp
  4. 12
      medialibrary/jni/medialibrary.cpp
  5. 40
      medialibrary/src/org/videolan/medialibrary/interfaces/Medialibrary.java

17
application/vlc-android/src/org/videolan/vlc/viewmodels/CallBackDelegate.kt

@ -45,6 +45,7 @@ interface ICallBackHandler {
fun watchPlaylists()
fun watchHistory()
fun watchMediaGroups()
fun watchFolders()
fun pause()
fun resume()
}
@ -58,7 +59,8 @@ class CallBackDelegate : ICallBackHandler,
Medialibrary.GenresCb,
Medialibrary.PlaylistsCb,
Medialibrary.HistoryCb,
Medialibrary.MediaGroupCb
Medialibrary.MediaGroupCb,
Medialibrary.FoldersCb
{
override val medialibrary = Medialibrary.getInstance()
@ -72,6 +74,7 @@ class CallBackDelegate : ICallBackHandler,
private var playlistsCb = false
private var historyCb = false
private var mediaGroupsCb = false
private var foldersCb = false
var paused = false
set(value) {
field = value
@ -165,6 +168,11 @@ class CallBackDelegate : ICallBackHandler,
mediaGroupsCb = true
}
override fun watchFolders() {
medialibrary.addFoldersCb(this)
foldersCb = true
}
override fun releaseCallbacks() {
medialibrary.removeOnMedialibraryReadyListener(this)
medialibrary.removeOnDeviceChangeListener(this)
@ -175,6 +183,7 @@ class CallBackDelegate : ICallBackHandler,
if (playlistsCb) medialibrary.removePlaylistCb(this)
if (historyCb) medialibrary.removeHistoryCb(this)
if (mediaGroupsCb) medialibrary.removeMediaGroupCb(this)
if (foldersCb) medialibrary.removeFoldersCb(this)
refreshActor.close()
}
@ -198,6 +207,12 @@ class CallBackDelegate : ICallBackHandler,
deleteActor.trySend(MediaConvertedExternalAction(ids))
}
override fun onFoldersAdded() { refreshActor.trySend(Unit) }
override fun onFoldersModified() { refreshActor.trySend(Unit) }
override fun onFoldersDeleted() { refreshActor.trySend(Unit) }
override fun onArtistsAdded() { refreshActor.trySend(Unit) }
override fun onArtistsModified() { refreshActor.trySend(Unit) }

1
application/vlc-android/src/org/videolan/vlc/viewmodels/mobile/VideosViewModel.kt

@ -72,6 +72,7 @@ class VideosViewModel(context: Context, type: VideoGroupingType, val folder: Fol
init {
watchMedia()
watchMediaGroups()
watchFolders()
}
class Factory(val context: Context, private val groupingType: VideoGroupingType, val folder: Folder? = null, val group: VideoGroup? = null) : ViewModelProvider.NewInstanceFactory() {

41
medialibrary/jni/AndroidMediaLibrary.cpp

@ -1066,6 +1066,33 @@ void AndroidMediaLibrary::onMediaGroupsDeleted( std::set<int64_t> mediaGroupsIds
}
}
void AndroidMediaLibrary::onFoldersAdded( std::vector<medialibrary::FolderPtr> folder )
{
JNIEnv *env = getEnv();
if (env != nullptr && weak_thiz)
{
env->CallVoidMethod(weak_thiz, p_fields->MediaLibrary.onFoldersAddedId);
}
}
void AndroidMediaLibrary::onFoldersModified( std::set<int64_t> foldersIds )
{
JNIEnv *env = getEnv();
if (env != nullptr && weak_thiz)
{
env->CallVoidMethod(weak_thiz, p_fields->MediaLibrary.onFoldersModifiedId);
}
}
void AndroidMediaLibrary::onFoldersDeleted( std::set<int64_t> foldersIds )
{
JNIEnv *env = getEnv();
if (env != nullptr && weak_thiz)
{
env->CallVoidMethod(weak_thiz, p_fields->MediaLibrary.onFoldersDeletedId);
}
}
void AndroidMediaLibrary::onBookmarksAdded( std::vector<medialibrary::BookmarkPtr> )
{
}
@ -1147,20 +1174,6 @@ AndroidMediaLibrary::detachCurrentThread() {
myVm->DetachCurrentThread();
}
void
AndroidMediaLibrary::onFoldersAdded( std::vector<medialibrary::FolderPtr> )
{
}
void
AndroidMediaLibrary::onFoldersModified( std::set<int64_t> )
{
}
void AndroidMediaLibrary::onFoldersDeleted( std::set<int64_t> )
{
}
/*
* Subscriptions
*/

12
medialibrary/jni/medialibrary.cpp

@ -2948,6 +2948,18 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved)
ml_fields.MediaLibrary.onMediaGroupDeletedId,
ml_fields.MediaLibrary.clazz,
"onMediaGroupDeleted", "()V");
GET_ID(GetMethodID,
ml_fields.MediaLibrary.onFoldersAddedId,
ml_fields.MediaLibrary.clazz,
"onFoldersAdded", "()V");
GET_ID(GetMethodID,
ml_fields.MediaLibrary.onFoldersModifiedId,
ml_fields.MediaLibrary.clazz,
"onFoldersModified", "()V");
GET_ID(GetMethodID,
ml_fields.MediaLibrary.onFoldersDeletedId,
ml_fields.MediaLibrary.clazz,
"onFoldersDeleted", "()V");
GET_ID(GetMethodID,
ml_fields.MediaLibrary.onPlaylistsModifiedId,
ml_fields.MediaLibrary.clazz,

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

@ -110,6 +110,7 @@ abstract public class Medialibrary {
protected final List<PlaylistsCb> mPlaylistCbs = new ArrayList<>();
protected final List<HistoryCb> mHistoryCbs = new ArrayList<>();
protected final List<MediaGroupCb> mMediaGroupCbs = new ArrayList<>();
protected final List<FoldersCb> mFoldersCbs = new ArrayList<>();
protected final List<OnMedialibraryReadyListener> onMedialibraryReadyListeners = new ArrayList<>();
protected final List<OnDeviceChangeListener> onDeviceChangeListeners = new ArrayList<>();
protected volatile boolean isMedialibraryStarted = false;
@ -243,6 +244,12 @@ abstract public class Medialibrary {
void onMediaGroupsDeleted();
}
public interface FoldersCb {
void onFoldersAdded();
void onFoldersModified();
void onFoldersDeleted();
}
public interface OnMedialibraryReadyListener {
void onMedialibraryReady();
void onMedialibraryIdle();
@ -426,6 +433,27 @@ abstract public class Medialibrary {
}
}
@SuppressWarnings("unused")
public void onFoldersAdded() {
synchronized (mFoldersCbs) {
for (FoldersCb cb : mFoldersCbs) cb.onFoldersAdded();
}
}
@SuppressWarnings("unused")
public void onFoldersModified() {
synchronized (mFoldersCbs) {
for (FoldersCb cb : mFoldersCbs) cb.onFoldersModified();
}
}
@SuppressWarnings("unused")
public void onFoldersDeleted() {
synchronized (mFoldersCbs) {
for (FoldersCb cb : mFoldersCbs) cb.onFoldersDeleted();
}
}
public void onDiscoveryStarted() {
synchronized (devicesDiscoveryCbList) {
if (!devicesDiscoveryCbList.isEmpty())
@ -646,6 +674,18 @@ abstract public class Medialibrary {
}
}
public void addFoldersCb(FoldersCb foldersCb) {
synchronized (mFoldersCbs) {
this.mFoldersCbs.add(foldersCb);
}
}
public void removeFoldersCb(FoldersCb foldersCb) {
synchronized (mFoldersCbs) {
this.mFoldersCbs.remove(foldersCb);
}
}
public void addDeviceDiscoveryCb(DevicesDiscoveryCb cb) {
synchronized (devicesDiscoveryCbList) {
if (!devicesDiscoveryCbList.contains(cb))

Loading…
Cancel
Save