Browse Source

Implement Bookmark API

pipelines/135724
Nicolas Pomepuy 5 years ago
parent
commit
731893a323
  1. 2
      buildsystem/compile-medialibrary.sh
  2. 6
      medialibrary/jni/AndroidMediaLibrary.cpp
  3. 3
      medialibrary/jni/AndroidMediaLibrary.h
  4. 108
      medialibrary/jni/medialibrary.cpp
  5. 12
      medialibrary/jni/utils.cpp
  6. 6
      medialibrary/jni/utils.h
  7. 20
      medialibrary/src/org/videolan/medialibrary/MLServiceLocator.java
  8. 114
      medialibrary/src/org/videolan/medialibrary/interfaces/media/Bookmark.java
  9. 4
      medialibrary/src/org/videolan/medialibrary/interfaces/media/MediaWrapper.java
  10. 71
      medialibrary/src/org/videolan/medialibrary/media/BookmarkImpl.java
  11. 1
      medialibrary/src/org/videolan/medialibrary/media/MediaLibraryItem.java
  12. 25
      medialibrary/src/org/videolan/medialibrary/media/MediaWrapperImpl.java
  13. 63
      medialibrary/src/org/videolan/medialibrary/stubs/StubBookmark.java
  14. 21
      medialibrary/src/org/videolan/medialibrary/stubs/StubMediaWrapper.java

2
buildsystem/compile-medialibrary.sh

@ -4,7 +4,7 @@
# ARGUMENTS #
#############
MEDIALIBRARY_HASH=ad5bdbc179f57763c4d0e5d71644cd979b615b09
MEDIALIBRARY_HASH=214c7fc12e698df82b5494507771fe23939064b9
while [ $# -gt 0 ]; do
case $1 in

6
medialibrary/jni/AndroidMediaLibrary.cpp

@ -328,6 +328,12 @@ AndroidMediaLibrary::searchArtists(const std::string& query, const medialibrary:
return p_ml->searchArtists(query, medialibrary::ArtistIncluded::All, params);
}
medialibrary::BookmarkPtr
AndroidMediaLibrary::bookmark(long id)
{
return p_ml->bookmark(id);
}
medialibrary::MediaPtr
AndroidMediaLibrary::media(long id)
{

3
medialibrary/jni/AndroidMediaLibrary.h

@ -77,7 +77,8 @@ public:
medialibrary::Query<medialibrary::IFolder> searchFolders( const std::string& query, const medialibrary::QueryParameters* params = nullptr );
medialibrary::Query<medialibrary::IMedia> searchFromFolder( int64_t folderId, const std::string& query, medialibrary::IMedia::Type type, const medialibrary::QueryParameters* params = nullptr );
medialibrary::Query<medialibrary::IMediaGroup> searchVideoGroups( const std::string& query, const medialibrary::QueryParameters* params = nullptr );
medialibrary::MediaPtr media(long id);
medialibrary::BookmarkPtr bookmark(long id);
medialibrary::MediaPtr media(long id);
medialibrary::MediaPtr media(const std::string& mrl);
medialibrary::MediaPtr addMedia(const std::string& mrl, long duration);
bool removeExternalMedia(long id);

108
medialibrary/jni/medialibrary.cpp

@ -1488,6 +1488,94 @@ getMediaLongMetadata(JNIEnv* env, jobject thiz, jobject medialibrary, jlong id,
return metadata.isSet() ? metadata.asInt() : 0L;
}
jobjectArray
getBookmarks(JNIEnv* env, jobject thiz, jobject medialibrary, jlong id)
{
AndroidMediaLibrary *aml = MediaLibrary_getInstance(env, medialibrary);
medialibrary::MediaPtr media = aml->media(id);
if (media == nullptr) return 0L;
const auto query = media->bookmarks(nullptr);
if (query == nullptr) return (jobjectArray) env->NewObjectArray(0, ml_fields.Bookmark.clazz, NULL);
std::vector<medialibrary::BookmarkPtr> bookmarks = query->all();
jobjectArray mediaRefs = (jobjectArray) env->NewObjectArray(bookmarks.size(), ml_fields.Bookmark.clazz, NULL);
int index = -1, drops = 0;
jobject item = nullptr;
for(medialibrary::BookmarkPtr const& bookmark : bookmarks) {
item = convertBookmarkObject(env, &ml_fields, bookmark);
env->SetObjectArrayElement(mediaRefs, ++index, item);
if (item == nullptr) ++drops;
env->DeleteLocalRef(item);
}
return filteredArray(env, mediaRefs, ml_fields.Bookmark.clazz, drops);
}
jobject
addBookmark(JNIEnv* env, jobject thiz, jobject medialibrary, jlong id, jlong time)
{
AndroidMediaLibrary *aml = MediaLibrary_getInstance(env, medialibrary);
medialibrary::MediaPtr media = aml->media(id);
if (media == nullptr) return 0L;
medialibrary::BookmarkPtr bookmark = media->addBookmark(time);
return bookmark != nullptr ? convertBookmarkObject(env, &ml_fields, bookmark) : nullptr;
}
jboolean
removeBookmark(JNIEnv* env, jobject thiz, jobject medialibrary, jlong id, jlong time)
{
AndroidMediaLibrary *aml = MediaLibrary_getInstance(env, medialibrary);
medialibrary::MediaPtr media = aml->media(id);
if (media == nullptr) return 0L;
return media->removeBookmark(time);
}
jboolean
removeAllBookmarks(JNIEnv* env, jobject thiz, jobject medialibrary, jlong id)
{
AndroidMediaLibrary *aml = MediaLibrary_getInstance(env, medialibrary);
medialibrary::MediaPtr media = aml->media(id);
if (media == nullptr) return 0L;
return media->removeAllBookmarks();
}
jboolean
setBookmarkName(JNIEnv* env, jobject thiz, jobject medialibrary, jlong id, jstring name) {
AndroidMediaLibrary *aml = MediaLibrary_getInstance(env, medialibrary);
const char *char_name = env->GetStringUTFChars(name, JNI_FALSE);
const medialibrary::BookmarkPtr bookmark = aml->bookmark(id);
const bool result = bookmark->setName(char_name);
env->ReleaseStringUTFChars(name, char_name);
return result;
}
jboolean
setBookmarkDescription(JNIEnv* env, jobject thiz, jobject medialibrary, jlong id, jstring description) {
AndroidMediaLibrary *aml = MediaLibrary_getInstance(env, medialibrary);
const char *char_description = env->GetStringUTFChars(description, JNI_FALSE);
const medialibrary::BookmarkPtr bookmark = aml->bookmark(id);
const bool result = bookmark->setDescription(char_description);
env->ReleaseStringUTFChars(description, char_description);
return result;
}
jboolean
setBookmarkNameAndDescription(JNIEnv* env, jobject thiz, jobject medialibrary, jlong id, jstring name, jstring description) {
AndroidMediaLibrary *aml = MediaLibrary_getInstance(env, medialibrary);
const char *char_name = env->GetStringUTFChars(name, JNI_FALSE);
const char *char_description = env->GetStringUTFChars(description, JNI_FALSE);
const medialibrary::BookmarkPtr bookmark = aml->bookmark(id);
const bool result = bookmark->setNameAndDescription(char_name, char_description);
env->ReleaseStringUTFChars(name, char_name);
env->ReleaseStringUTFChars(description, char_description);
return result;
}
jboolean
bookmarkMove(JNIEnv* env, jobject thiz, jobject medialibrary, jlong id, jlong time) {
AndroidMediaLibrary *aml = MediaLibrary_getInstance(env, medialibrary);
const medialibrary::BookmarkPtr bookmark = aml->bookmark(id);
return bookmark->move(time);
}
jobject
getMediaStringMetadata(JNIEnv* env, jobject thiz, jobject medialibrary, jlong id, jint metadataType)
{
@ -2142,8 +2230,18 @@ static JNINativeMethod media_methods[] = {
{"nativeSetMediaTitle", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;JLjava/lang/String;)V", (void*)setMediaTitle },
{"nativeRemoveFromHistory", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;J)Z", (void*)removeMediaFromHistory },
{"nativeRequestThumbnail", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;JIIIF)V", (void*)requestThumbnail },
{"nativeGetBookmarks", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;J)[Lorg/videolan/medialibrary/interfaces/media/Bookmark;", (void*)getBookmarks },
{"nativeAddBookmark", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;JJ)Lorg/videolan/medialibrary/interfaces/media/Bookmark;", (void*)addBookmark },
{"nativeRemoveBookmark", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;JJ)Z", (void*)removeBookmark },
{"nativeRemoveAllBookmarks", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;J)Z", (void*)removeAllBookmarks },
};
static JNINativeMethod bookmark_methods[] = {
{"nativeSetName", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;JLjava/lang/String;)Z", (void*)setBookmarkName },
{"nativeSetDescription", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;JLjava/lang/String;)Z", (void*)setBookmarkDescription },
{"nativeSetNameAndDescription", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;JLjava/lang/String;Ljava/lang/String;)Z", (void*)setBookmarkNameAndDescription },
{"nativeMove", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;JJ)Z", (void*)bookmarkMove },
};
static JNINativeMethod album_methods[] = {
{"nativeGetTracks", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;JIZ)[Lorg/videolan/medialibrary/interfaces/media/MediaWrapper;", (void*)getTracksFromAlbum },
{"nativeGetPagedTracks", "(Lorg/videolan/medialibrary/interfaces/Medialibrary;JIZII)[Lorg/videolan/medialibrary/interfaces/media/MediaWrapper;", (void*)getPagedTracksFromAlbum },
@ -2371,6 +2469,16 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved)
ml_fields.VideoGroup.clazz,
"<init>", "(JLjava/lang/String;I)V");
GET_CLASS(ml_fields.Bookmark.clazz, "org/videolan/medialibrary/media/BookmarkImpl", true);
if (env->RegisterNatives(ml_fields.Bookmark.clazz, bookmark_methods, sizeof(bookmark_methods) / sizeof(bookmark_methods[0])) < 0) {
LOGE("RegisterNatives failed for 'org/videolan/medialibrary/media/BookmarkImpl");
return -1;
}
GET_ID(GetMethodID,
ml_fields.Bookmark.initID,
ml_fields.Bookmark.clazz,
"<init>", "(JLjava/lang/String;Ljava/lang/String;JJ)V");
GET_ID(GetFieldID,
ml_fields.MediaLibrary.instanceID,
ml_fields.MediaLibrary.clazz,

12
medialibrary/jni/utils.cpp

@ -166,6 +166,18 @@ convertVideoGroupObject(JNIEnv* env, fields *fields, medialibrary::MediaGroupPtr
return item;
}
jobject
convertBookmarkObject(JNIEnv* env, fields *fields, medialibrary::BookmarkPtr const& bookmarkPtr)
{
jstring name = env->NewStringUTF(bookmarkPtr->name().c_str());
jstring description = env->NewStringUTF(bookmarkPtr->description().c_str());
jobject item = env->NewObject(fields->Bookmark.clazz, fields->Bookmark.initID,
(jlong) bookmarkPtr->id(), name, description, (jlong) bookmarkPtr->mediaId(), (jlong) bookmarkPtr->time());
env->DeleteLocalRef(name);
env->DeleteLocalRef(description);
return item;
}
jobject
convertSearchAggregateObject(JNIEnv* env, fields *fields, medialibrary::SearchAggregate const& searchAggregatePtr)
{

6
medialibrary/jni/utils.h

@ -36,6 +36,7 @@
#include <medialibrary/IMetadata.h>
#include<medialibrary/filesystem/IDevice.h>
#include <medialibrary/IMediaGroup.h>
#include <medialibrary/IBookmark.h>
#include <medialibrary/filesystem/Errors.h>
#define VLC_JNI_VERSION JNI_VERSION_1_2
@ -122,6 +123,10 @@ struct fields {
jclass clazz;
jmethodID initID;
} VideoGroup;
struct Bookmark {
jclass clazz;
jmethodID initID;
} Bookmark;
};
jobject mediaToMediaWrapper(JNIEnv*, fields*, const medialibrary::MediaPtr &);
@ -131,6 +136,7 @@ jobject convertGenreObject(JNIEnv* env, fields *fields, medialibrary::GenrePtr c
jobject convertPlaylistObject(JNIEnv* env, fields *fields, medialibrary::PlaylistPtr const& genrePtr);
jobject convertFolderObject(JNIEnv* env, fields *fields, medialibrary::FolderPtr const& folderPtr, int count);
jobject convertVideoGroupObject(JNIEnv* env, fields *fields, medialibrary::MediaGroupPtr const& videogroupPtr);
jobject convertBookmarkObject(JNIEnv* env, fields *fields, medialibrary::BookmarkPtr const& bookmarkPtr);
jobject convertSearchAggregateObject(JNIEnv* env, fields *fields, medialibrary::SearchAggregate const& searchAggregatePtr);
jobjectArray filteredArray(JNIEnv* env, jobjectArray array, jclass clazz, int removalCount = -1);

20
medialibrary/src/org/videolan/medialibrary/MLServiceLocator.java

@ -8,6 +8,7 @@ import org.videolan.libvlc.interfaces.IMedia;
import org.videolan.medialibrary.interfaces.Medialibrary;
import org.videolan.medialibrary.interfaces.media.Album;
import org.videolan.medialibrary.interfaces.media.Artist;
import org.videolan.medialibrary.interfaces.media.Bookmark;
import org.videolan.medialibrary.interfaces.media.Folder;
import org.videolan.medialibrary.interfaces.media.Genre;
import org.videolan.medialibrary.interfaces.media.MediaWrapper;
@ -15,6 +16,7 @@ import org.videolan.medialibrary.interfaces.media.Playlist;
import org.videolan.medialibrary.interfaces.media.VideoGroup;
import org.videolan.medialibrary.media.AlbumImpl;
import org.videolan.medialibrary.media.ArtistImpl;
import org.videolan.medialibrary.media.BookmarkImpl;
import org.videolan.medialibrary.media.FolderImpl;
import org.videolan.medialibrary.media.GenreImpl;
import org.videolan.medialibrary.media.MediaWrapperImpl;
@ -22,6 +24,7 @@ import org.videolan.medialibrary.media.PlaylistImpl;
import org.videolan.medialibrary.media.VideoGroupImpl;
import org.videolan.medialibrary.stubs.StubAlbum;
import org.videolan.medialibrary.stubs.StubArtist;
import org.videolan.medialibrary.stubs.StubBookmark;
import org.videolan.medialibrary.stubs.StubFolder;
import org.videolan.medialibrary.stubs.StubGenre;
import org.videolan.medialibrary.stubs.StubMediaWrapper;
@ -187,6 +190,23 @@ public class MLServiceLocator {
}
}
//BookmarkImpl
public Bookmark getAbstractBookmark(long id, String name, String description, long mediaId, long time) {
if (sMode == LocatorMode.VLC_ANDROID) {
return new BookmarkImpl(id, name, description, mediaId, time);
} else {
return new StubBookmark(id, name, description, mediaId, time);
}
}
public static Bookmark getAbstractBookmark(Parcel in) {
if (sMode == LocatorMode.VLC_ANDROID) {
return new BookmarkImpl(in);
} else {
return new StubBookmark(in);
}
}
public static VideoGroup getAbstractVideoGroup(Parcel in) {
if (sMode == LocatorMode.VLC_ANDROID) {
return new VideoGroupImpl(in);

114
medialibrary/src/org/videolan/medialibrary/interfaces/media/Bookmark.java

@ -0,0 +1,114 @@
/*
* ************************************************************************
* Bookmark.java
* *************************************************************************
* Copyright © 2021 VLC authors and VideoLAN
* Author: Nicolas POMEPUY
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
* **************************************************************************
*
*
*/
package org.videolan.medialibrary.interfaces.media;
import android.os.Parcel;
import android.os.Parcelable;
import org.videolan.medialibrary.MLServiceLocator;
import org.videolan.medialibrary.media.MediaLibraryItem;
abstract public class Bookmark extends MediaLibraryItem {
public long mediaId;
public long mTime;
public Bookmark(long id, String name, String description, long mediaId, long time) {
super(id, name);
this.mediaId = mediaId;
this.mTime = time;
this.setDescription(description);
}
@Override
public MediaWrapper[] getTracks() {
return new MediaWrapper[0];
}
@Override
public int getTracksCount() {
return 0;
}
@Override
public int getItemType() {
return TYPE_BOOKMARK;
}
public long getTime() {
return mTime;
}
public void setTime(long time) {
this.mTime = time;
}
abstract public boolean setName(String name);
abstract public boolean updateDescription(String description);
abstract public boolean setNameAndDescription(String name, String description);
abstract public boolean move(long time);
@Override
public void writeToParcel(Parcel parcel, int i) {
super.writeToParcel(parcel, i);
parcel.writeLong(mediaId);
}
public static Parcelable.Creator<Bookmark> CREATOR = new Parcelable.Creator<Bookmark>() {
@Override
public Bookmark createFromParcel(Parcel in) {
return MLServiceLocator.getAbstractBookmark(in);
}
@Override
public Bookmark[] newArray(int size) {
return new Bookmark[size];
}
};
public Bookmark(Parcel in) {
super(in);
this.mediaId = in.readLong();
this.mTime = in.readLong();
}
public boolean equals(Bookmark other) {
return mId == other.getId();
}
@Override
public boolean equals(MediaLibraryItem other) {
if (other instanceof Bookmark) return equals((Bookmark)other);
return super.equals(other);
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Bookmark) return equals((Bookmark)obj);
return super.equals(obj);
}
}

4
medialibrary/src/org/videolan/medialibrary/interfaces/media/MediaWrapper.java

@ -135,6 +135,10 @@ public abstract class MediaWrapper extends MediaLibraryItem implements Parcelabl
public abstract void requestThumbnail(int width, float position);
public abstract void requestBanner(int width, float position);
public abstract boolean removeFromHistory();
public abstract Bookmark[] getBookmarks();
public abstract Bookmark addBookmark(long time);
public abstract boolean removeBookmark(long time);
public abstract boolean removeAllBookmarks();
/**
* Create a new MediaWrapper

71
medialibrary/src/org/videolan/medialibrary/media/BookmarkImpl.java

@ -0,0 +1,71 @@
/*
* ************************************************************************
* BookmarkImpl.java
* *************************************************************************
* Copyright © 2021 VLC authors and VideoLAN
* Author: Nicolas POMEPUY
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
* **************************************************************************
*
*
*/
package org.videolan.medialibrary.media;
import android.os.Parcel;
import org.videolan.medialibrary.interfaces.Medialibrary;
import org.videolan.medialibrary.interfaces.media.Bookmark;
@SuppressWarnings("JniMissingFunction")
public class BookmarkImpl extends Bookmark {
public BookmarkImpl(long id, String name, String description, long mediaId, long time) {
super(id, name,description, mediaId, time);
}
public BookmarkImpl(Parcel in) {
super(in);
}
@Override
public boolean setName(String name) {
final Medialibrary ml = Medialibrary.getInstance();
return ml.isInitiated() && nativeSetName(ml, mId, name);
}
@Override
public boolean updateDescription(String description) {
final Medialibrary ml = Medialibrary.getInstance();
return ml.isInitiated() && nativeSetDescription(ml, mId, description);
}
@Override
public boolean setNameAndDescription(String name, String description) {
final Medialibrary ml = Medialibrary.getInstance();
return ml.isInitiated() && nativeSetNameAndDescription(ml, mId, name, description);
}
@Override
public boolean move(long time) {
final Medialibrary ml = Medialibrary.getInstance();
return ml.isInitiated() && nativeMove(ml, mId, time);
}
private native boolean nativeSetName(Medialibrary ml, long mId, String name);
private native boolean nativeSetDescription(Medialibrary ml, long mId, String description);
private native boolean nativeSetNameAndDescription(Medialibrary ml, long mId, String name, String description);
private native boolean nativeMove(Medialibrary ml, long mId, long time);
}

1
medialibrary/src/org/videolan/medialibrary/media/MediaLibraryItem.java

@ -18,6 +18,7 @@ public abstract class MediaLibraryItem implements Parcelable {
public static final int TYPE_HISTORY = 1 << 9;
public static final int TYPE_FOLDER = 1 << 10;
public static final int TYPE_VIDEO_GROUP = 1 << 11;
public static final int TYPE_BOOKMARK = 1 << 12;
public static final int FLAG_NONE = 0;
public static final int FLAG_SELECTED = 1;

25
medialibrary/src/org/videolan/medialibrary/media/MediaWrapperImpl.java

@ -30,6 +30,7 @@ import android.text.TextUtils;
import org.videolan.libvlc.interfaces.IMedia;
import org.videolan.medialibrary.Tools;
import org.videolan.medialibrary.interfaces.Medialibrary;
import org.videolan.medialibrary.interfaces.media.Bookmark;
import org.videolan.medialibrary.interfaces.media.MediaWrapper;
import java.util.Locale;
@ -228,6 +229,26 @@ public class MediaWrapperImpl extends MediaWrapper {
return mId == 0 || !ml.isInitiated() ? null : nativeGetMediaStringMetadata(ml, mId, metaDataType);
}
public Bookmark[] getBookmarks() {
Medialibrary ml = Medialibrary.getInstance();
return mId == 0 || !ml.isInitiated() ? null : nativeGetBookmarks(ml, mId);
}
public Bookmark addBookmark(long time) {
Medialibrary ml = Medialibrary.getInstance();
return mId == 0 || !ml.isInitiated() ? null : nativeAddBookmark(ml, mId, time);
}
public boolean removeBookmark(long time) {
Medialibrary ml = Medialibrary.getInstance();
return mId == 0 || !ml.isInitiated() ? null : nativeRemoveBookmark(ml, mId, time);
}
public boolean removeAllBookmarks() {
Medialibrary ml = Medialibrary.getInstance();
return mId == 0 || !ml.isInitiated() ? null : nativeRemoveAllBookmarks(ml, mId);
}
public boolean setLongMeta(int metaDataType, long metadataValue) {
Medialibrary ml = Medialibrary.getInstance();
if (mId != 0 && ml.isInitiated())
@ -270,4 +291,8 @@ public class MediaWrapperImpl extends MediaWrapper {
private native boolean nativeRemoveFromHistory(Medialibrary ml, long id);
private native void nativeSetMediaThumbnail(Medialibrary ml, long id, String mrl);
private native void nativeRequestThumbnail(Medialibrary ml, long mediaId, int type, int width, int height, float position);
private native Bookmark[] nativeGetBookmarks(Medialibrary ml, long id);
private native Bookmark nativeAddBookmark(Medialibrary ml, long id, long time);
private native boolean nativeRemoveBookmark(Medialibrary ml, long id, long time);
private native boolean nativeRemoveAllBookmarks(Medialibrary ml, long id);
}

63
medialibrary/src/org/videolan/medialibrary/stubs/StubBookmark.java

@ -0,0 +1,63 @@
/*
* ************************************************************************
* StubBookmark.java
* *************************************************************************
* Copyright © 2021 VLC authors and VideoLAN
* Author: Nicolas POMEPUY
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
* **************************************************************************
*
*
*/
package org.videolan.medialibrary.stubs;
import android.os.Parcel;
import org.videolan.medialibrary.interfaces.media.Bookmark;
public class StubBookmark extends Bookmark {
private StubDataSource dt = StubDataSource.getInstance();
public StubBookmark(long id, String name, String description, long mediaId, long time) {
super(id, name, description, mediaId, time);
}
@Override
public boolean setName(String name) {
return false;
}
@Override
public boolean updateDescription(String description) {
return false;
}
@Override
public boolean setNameAndDescription(String name, String description) {
return false;
}
@Override
public boolean move(long time) {
return false;
}
public StubBookmark(Parcel in) {
super(in);
}
}

21
medialibrary/src/org/videolan/medialibrary/stubs/StubMediaWrapper.java

@ -9,6 +9,7 @@ import org.videolan.medialibrary.Tools;
import org.videolan.medialibrary.interfaces.media.Album;
import org.videolan.medialibrary.interfaces.media.Artist;
import org.videolan.libvlc.interfaces.IMedia;
import org.videolan.medialibrary.interfaces.media.Bookmark;
import org.videolan.medialibrary.interfaces.media.MediaWrapper;
public class StubMediaWrapper extends MediaWrapper {
@ -70,6 +71,26 @@ public class StubMediaWrapper extends MediaWrapper {
return mMetaString.get(metaDataType);
}
@Override
public Bookmark[] getBookmarks() {
return new Bookmark[0];
}
@Override
public Bookmark addBookmark(long time) {
return null;
}
@Override
public boolean removeBookmark(long time) {
return false;
}
@Override
public boolean removeAllBookmarks() {
return false;
}
public boolean setLongMeta(int metaDataType, long metadataValue) {
mMetaLong.setValueAt(metaDataType, metadataValue);
return true;

Loading…
Cancel
Save