From 1f0367c991d2d2a7ad1de7cc1088a56fb2733c62 Mon Sep 17 00:00:00 2001 From: Nicolas Pomepuy Date: Mon, 16 Sep 2024 10:00:50 +0200 Subject: [PATCH] Add the album artist id to the MediaWrapper --- .../vlc/util/DummyMediaWrapperProvider.kt | 2 +- .../vlc/widget/MiniPlayerAppWidgetProvider.kt | 1 + medialibrary/jni/medialibrary.cpp | 2 +- medialibrary/jni/utils.cpp | 8 +++++--- .../medialibrary/MLServiceLocator.java | 12 ++++++------ .../interfaces/media/MediaWrapper.java | 19 ++++++++++++++----- .../medialibrary/media/MediaWrapperImpl.java | 15 +++++++++++---- .../medialibrary/stubs/StubDataSource.java | 8 +++++--- .../medialibrary/stubs/StubMediaWrapper.java | 13 +++++++++---- 9 files changed, 53 insertions(+), 27 deletions(-) diff --git a/application/vlc-android/src/org/videolan/vlc/util/DummyMediaWrapperProvider.kt b/application/vlc-android/src/org/videolan/vlc/util/DummyMediaWrapperProvider.kt index e33d11bec..407e3378f 100644 --- a/application/vlc-android/src/org/videolan/vlc/util/DummyMediaWrapperProvider.kt +++ b/application/vlc-android/src/org/videolan/vlc/util/DummyMediaWrapperProvider.kt @@ -31,7 +31,7 @@ object DummyMediaWrapperProvider { fun getDummyMediaWrapper(id: Long): MediaWrapper { if (id >= 0) throw IllegalArgumentException("Dummy MediaWrapper id must be < 0") return MLServiceLocator.getAbstractMediaWrapper(id, "dummy://Mrl", -1L, -1F, 18820L, MediaWrapper.TYPE_VIDEO, - "", "", -1L, "", "", -1L, + "", "", -1L, -1L, "", "", -1L, "", "", 416, 304, "", 0, -2, 0, 0, 1509466228L, 0L, true, false, 1970, true, 1683711438317L) } diff --git a/application/vlc-android/src/org/videolan/vlc/widget/MiniPlayerAppWidgetProvider.kt b/application/vlc-android/src/org/videolan/vlc/widget/MiniPlayerAppWidgetProvider.kt index 371066cd8..8179debad 100644 --- a/application/vlc-android/src/org/videolan/vlc/widget/MiniPlayerAppWidgetProvider.kt +++ b/application/vlc-android/src/org/videolan/vlc/widget/MiniPlayerAppWidgetProvider.kt @@ -436,6 +436,7 @@ class MiniPlayerAppWidgetProvider : AppWidgetProvider() { "Track name", "", -1L, + -1L, "Artist name", "", -1L, diff --git a/medialibrary/jni/medialibrary.cpp b/medialibrary/jni/medialibrary.cpp index cf709978b..442eef4ef 100644 --- a/medialibrary/jni/medialibrary.cpp +++ b/medialibrary/jni/medialibrary.cpp @@ -2841,7 +2841,7 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) GET_ID(GetMethodID, ml_fields.MediaWrapper.initID, ml_fields.MediaWrapper.clazz, - "", "(JLjava/lang/String;JFJILjava/lang/String;Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;IILjava/lang/String;IIIIJJZZIZJ)V"); + "", "(JLjava/lang/String;JFJILjava/lang/String;Ljava/lang/String;JJLjava/lang/String;Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;IILjava/lang/String;IIIIJJZZIZJ)V"); GET_CLASS(ml_fields.HistoryItem.clazz, "org/videolan/medialibrary/media/HistoryItem", true); diff --git a/medialibrary/jni/utils.cpp b/medialibrary/jni/utils.cpp index 8803dec02..c50da0f86 100644 --- a/medialibrary/jni/utils.cpp +++ b/medialibrary/jni/utils.cpp @@ -26,7 +26,7 @@ mediaToMediaWrapper(JNIEnv* env, fields *fields, medialibrary::MediaPtr const& m } utils::jni::string artist, genre, album, albumArtist, mrl, title, thumbnail, filename; jint trackNumber = 0, discNumber = 0; - int64_t artistId = -1, albumId = -1; + int64_t artistId = -1, albumArtistId = -1, albumId = -1; const bool isPresent = mediaPtr->isPresent(); medialibrary::ArtistPtr artistPtr = mediaPtr->artist(); @@ -42,8 +42,10 @@ mediaToMediaWrapper(JNIEnv* env, fields *fields, medialibrary::MediaPtr const& m album = vlcNewStringUTF(env, albumPtr->title().c_str()); albumId = albumPtr->id(); medialibrary::ArtistPtr albumArtistPtr = albumPtr->albumArtist(); - if (albumArtistPtr != NULL) + if (albumArtistPtr != NULL) { albumArtist = vlcNewStringUTF(env, albumArtistPtr->name().c_str()); + albumArtistId = albumArtistPtr->id(); + } } trackNumber = mediaPtr->trackNumber(); discNumber = mediaPtr->discNumber(); @@ -73,7 +75,7 @@ mediaToMediaWrapper(JNIEnv* env, fields *fields, medialibrary::MediaPtr const& m auto isFavorite = mediaPtr->isFavorite(); return { env, env->NewObject(fields->MediaWrapper.clazz, fields->MediaWrapper.initID, (jlong) mediaPtr->id(), mrl.get(), (jlong) mediaPtr->lastTime(), (jfloat) mediaPtr->lastPosition(), (jlong) duration, type, - title.get(), filename.get(), (jlong) artistId, artist.get(), genre.get(), (jlong) albumId, album.get(), + title.get(), filename.get(), (jlong) artistId, albumArtistId, artist.get(), genre.get(), (jlong) albumId, album.get(), albumArtist.get(), width, height, thumbnail.get(), audioTrack, spuTrack, trackNumber, discNumber, (jlong) files.at(0)->lastModificationDate(), (jlong) mediaPtr->playCount(), hasThumbnail, isFavorite, mediaPtr->releaseDate(), isPresent, (jlong) mediaPtr->insertionDate()) diff --git a/medialibrary/src/org/videolan/medialibrary/MLServiceLocator.java b/medialibrary/src/org/videolan/medialibrary/MLServiceLocator.java index 223a59384..6370aa672 100644 --- a/medialibrary/src/org/videolan/medialibrary/MLServiceLocator.java +++ b/medialibrary/src/org/videolan/medialibrary/MLServiceLocator.java @@ -64,7 +64,7 @@ public class MLServiceLocator { // MediaWrapper public static MediaWrapper getAbstractMediaWrapper(long id, String mrl, long time, float position, long length, - int type, String title, String filename, long artistId, + int type, String title, String filename, long artistId, long albumArtistId, String artist, String genre, long albumId, String album, String albumArtist, int width, int height, String artworkURL, int audio, int spu, @@ -73,29 +73,29 @@ public class MLServiceLocator { int releaseDate, boolean isPresent, long insertionDate) { if (sMode == LocatorMode.VLC_ANDROID) { return new MediaWrapperImpl(id, mrl, time, position, length, type, title, - filename, artistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL, + filename, artistId, albumArtistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL, audio, spu, trackNumber, discNumber, lastModified, seen, isThumbnailGenerated, isFavorite, releaseDate, isPresent, insertionDate); } else { return new StubMediaWrapper(id, mrl, time, position, length, type, title, - filename,artistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL, + filename,artistId, albumArtistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL, audio, spu, trackNumber, discNumber, lastModified, seen, isThumbnailGenerated, isFavorite, releaseDate, isPresent, insertionDate); } } public static MediaWrapper getAbstractMediaWrapper(Uri uri, long time, float position, long length, int type, - Bitmap picture, String title, long artistId, String artist, + Bitmap picture, String title, long artistId, long albumArtistId, String artist, String genre, long albumId, String album, String albumArtist, int width, int height, String artworkURL, int audio, int spu, int trackNumber, int discNumber, long lastModified, long seen, long insertionDate) { if (sMode == LocatorMode.VLC_ANDROID) { - return new MediaWrapperImpl(uri, time, position, length, type, picture, title, artistId, artist, genre, + return new MediaWrapperImpl(uri, time, position, length, type, picture, title, artistId, albumArtistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL, audio, spu, trackNumber, discNumber, lastModified, seen, false, insertionDate); } else { - return new StubMediaWrapper(uri, time, position, length, type, picture, title, artistId, artist, genre, + return new StubMediaWrapper(uri, time, position, length, type, picture, title, artistId, albumArtistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL, audio, spu, trackNumber, discNumber, lastModified, seen, false, insertionDate); } diff --git a/medialibrary/src/org/videolan/medialibrary/interfaces/media/MediaWrapper.java b/medialibrary/src/org/videolan/medialibrary/interfaces/media/MediaWrapper.java index be09c2fdc..a005b731a 100644 --- a/medialibrary/src/org/videolan/medialibrary/interfaces/media/MediaWrapper.java +++ b/medialibrary/src/org/videolan/medialibrary/interfaces/media/MediaWrapper.java @@ -92,6 +92,7 @@ public abstract class MediaWrapper extends MediaLibraryItem implements Parcelabl protected String mDisplayTitle; protected long mArtistId; + protected long mAlbumArtistId; protected String mArtist; protected String mGenre; protected String mCopyright; @@ -152,6 +153,7 @@ public abstract class MediaWrapper extends MediaLibraryItem implements Parcelabl public abstract boolean markAsPlayed(); public abstract Album getAlbumWrapper(); public abstract Artist getArtistWrapper(); + public abstract Artist getAlbumArtistWrapper(); /** * Create a new MediaWrapper @@ -159,7 +161,7 @@ public abstract class MediaWrapper extends MediaLibraryItem implements Parcelabl * @param mrl Should not be null. */ public MediaWrapper(long id, String mrl, long time, float position, long length, int type, String title, - String filename, long artistId, String artist, String genre, long albumId, String album, String albumArtist, + String filename, long artistId, long albumArtistId, String artist, String genre, long albumId, String album, String albumArtist, int width, int height, String artworkURL, int audio, int spu, int trackNumber, int discNumber, long lastModified, long seen, boolean isThumbnailGenerated, boolean isFavorite, int releaseDate, boolean isPresent, long insertionDate) { @@ -171,7 +173,7 @@ public abstract class MediaWrapper extends MediaLibraryItem implements Parcelabl mFilename = filename; mReleaseYear = releaseDate; mIsPresent = isPresent; - init(time, position, length, type, null, title, artistId, artist, genre, albumId, album, albumArtist, width, height, + init(time, position, length, type, null, title, artistId, albumArtistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL != null ? VLCUtil.UriFromMrl(artworkURL).getPath() : null, audio, spu, trackNumber, discNumber, lastModified, seen, isPresent, null, isFavorite, insertionDate); final StringBuilder sb = new StringBuilder(); @@ -318,7 +320,7 @@ public abstract class MediaWrapper extends MediaLibraryItem implements Parcelabl } private void init(long time, float position, long length, int type, - Bitmap picture, String title, long artistId, String artist, String genre, long albumId, String album, String albumArtist, + Bitmap picture, String title, long artistId, long albumArtistId, String artist, String genre, long albumId, String album, String albumArtist, int width, int height, String artworkURL, int audio, int spu, int trackNumber, int discNumber, long lastModified, long seen, boolean isPresent, IMedia.Slave[] slaves, boolean isFavorite, long insertionDate) { mFilename = null; @@ -336,6 +338,7 @@ public abstract class MediaWrapper extends MediaLibraryItem implements Parcelabl mTitle = title != null ? title.trim() : null; mArtistId = artistId; + mAlbumArtistId = albumArtistId; mArtist = artist != null ? artist.trim() : null; mGenre = genre != null ? genre.trim() : null; mAlbumId = albumId; @@ -352,11 +355,11 @@ public abstract class MediaWrapper extends MediaLibraryItem implements Parcelabl } public MediaWrapper(Uri uri, long time, float position, long length, int type, - Bitmap picture, String title, long artistId, String artist, String genre, long albumId, String album, String albumArtist, + Bitmap picture, String title, long artistId, long albumArtistId, String artist, String genre, long albumId, String album, String albumArtist, int width, int height, String artworkURL, int audio, int spu, int trackNumber, int discNumber, long lastModified, long seen, boolean isFavorite, long insertionDate) { mUri = uri; - init(time, position, length, type, picture, title, artistId, artist, genre, albumId, album, albumArtist, + init(time, position, length, type, picture, title, artistId, albumArtistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL, audio, spu, trackNumber, discNumber, lastModified, seen, true, null, isFavorite, insertionDate); } @@ -614,6 +617,10 @@ public abstract class MediaWrapper extends MediaLibraryItem implements Parcelabl return mArtistId; } + public long getAlbumArtistId() { + return mAlbumArtistId; + } + public Boolean isArtistUnknown() { return mArtist == null; } @@ -764,6 +771,7 @@ public abstract class MediaWrapper extends MediaLibraryItem implements Parcelabl (Bitmap) in.readParcelable(Bitmap.class.getClassLoader()), in.readString(), in.readLong(), + in.readLong(), in.readString(), in.readString(), in.readLong(), @@ -795,6 +803,7 @@ public abstract class MediaWrapper extends MediaLibraryItem implements Parcelabl dest.writeParcelable(getPicture(), flags); dest.writeString(getTitle()); dest.writeLong(getArtistId()); + dest.writeLong(getAlbumArtistId()); dest.writeString(getArtist()); dest.writeString(getGenre()); dest.writeLong(getAlbumId()); diff --git a/medialibrary/src/org/videolan/medialibrary/media/MediaWrapperImpl.java b/medialibrary/src/org/videolan/medialibrary/media/MediaWrapperImpl.java index 180137ced..c862d61f5 100644 --- a/medialibrary/src/org/videolan/medialibrary/media/MediaWrapperImpl.java +++ b/medialibrary/src/org/videolan/medialibrary/media/MediaWrapperImpl.java @@ -41,21 +41,21 @@ public class MediaWrapperImpl extends MediaWrapper { public final static String TAG = "VLC/MediaWrapperImpl"; public MediaWrapperImpl(long id, String mrl, long time, float position, long length, int type, String title, - String filename,long artistId, String artist, String genre, long albumId, String album, String albumArtist, + String filename,long artistId, long albumArtistId, String artist, String genre, long albumId, String album, String albumArtist, int width, int height, String artworkURL, int audio, int spu, int trackNumber, int discNumber, long lastModified, long seen, boolean isThumbnailGenerated, boolean isFavorite, int releaseDate, boolean isPresent, long insertionDate) { - super(id, mrl, time, position, length, type, title, filename, artistId, artist, + super(id, mrl, time, position, length, type, title, filename, artistId, albumArtistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL, audio, spu, trackNumber, discNumber, lastModified, seen, isThumbnailGenerated, isFavorite, releaseDate, isPresent, insertionDate); } public MediaWrapperImpl(Uri uri, long time, float position, long length, int type, - Bitmap picture, String title, long artistId, String artist, String genre, long albumId, String album, String albumArtist, + Bitmap picture, String title, long artistId, long albumArtistId, String artist, String genre, long albumId, String album, String albumArtist, int width, int height, String artworkURL, int audio, int spu, int trackNumber, int discNumber, long lastModified, long seen, boolean isFavorite, long insertionDate) { - super(uri, time, position, length, type, picture, title, artistId, artist, + super(uri, time, position, length, type, picture, title, artistId, albumArtistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL, audio, spu, trackNumber, discNumber, lastModified, seen, isFavorite, insertionDate); } @@ -91,6 +91,13 @@ public class MediaWrapperImpl extends MediaWrapper { return null; } + @Override + public Artist getAlbumArtistWrapper() { + final Medialibrary ml = Medialibrary.getInstance(); + if (ml.isInitiated()) return ml.getArtist(mAlbumArtistId); + return null; + } + public void setArtist(String artist) { mArtist = artist; } diff --git a/medialibrary/src/org/videolan/medialibrary/stubs/StubDataSource.java b/medialibrary/src/org/videolan/medialibrary/stubs/StubDataSource.java index 9a6a990a9..98bf43a42 100644 --- a/medialibrary/src/org/videolan/medialibrary/stubs/StubDataSource.java +++ b/medialibrary/src/org/videolan/medialibrary/stubs/StubDataSource.java @@ -94,7 +94,7 @@ public class StubDataSource { fileName = i + " - " + STUBBED_VIDEO_TITLE + STUBBED_AUDIO_EXTENSION; String mrl = baseMrl + ((folder != null) ? folder + "/" : "") + fileName; media = MLServiceLocator.getAbstractMediaWrapper(getUUID(), mrl, -1L, -1F, 18820L, MediaWrapper.TYPE_VIDEO, - fileName, fileName, -1L, "", "", -1L, + fileName, fileName, -1L,-1L, "", "", -1L, "", "", 416, 304, "", 0, -2, 0, 0, 1509466228L, 0L, true, false, 1970, true, 1683711438317L); addVideo(media); @@ -110,7 +110,7 @@ public class StubDataSource { fileName = i + " - " + STUBBED_AUDIO_TITLE + STUBBED_AUDIO_EXTENSION; String mrl = baseMrl + ((folder != null) ? folder + "/" : "") + fileName; media = MLServiceLocator.getAbstractMediaWrapper(getUUID(), mrl, -1L, -1F, 280244L, MediaWrapper.TYPE_AUDIO, - i + "-Show Me The Way", fileName, -1L, "Peter Frampton", "Rock", -1L, + i + "-Show Me The Way", fileName, -1L,-1L, "Peter Frampton", "Rock", -1L, "Shine On CD2", "Peter Frampton", 0, 0, baseMrl + folder + ".jpg", 0, -2, 1, 0, @@ -396,6 +396,7 @@ public class StubDataSource { jsonObject.getString("title"), jsonObject.getString("filename"), -1L, + -1L, jsonObject.getString("artist"), jsonObject.getString("genre"), -1L, @@ -560,6 +561,7 @@ public class StubDataSource { media.getTitle(), media.getFileName(), -1L, + -1L, media.getArtist(), genre.getTitle(), -1L, @@ -590,7 +592,7 @@ public class StubDataSource { public MediaWrapper addMediaWrapper(String mrl, String title, int type) { MediaWrapper media = MLServiceLocator.getAbstractMediaWrapper(getUUID(), mrl, -1L, -1F, 280224L, type, - title, title, -1L, "Artisto", "Jazz", -1L, "XYZ CD1", "", 0, 0, baseMrl + title, -2, + title, title, -1L, -1L, "Artisto", "Jazz", -1L, "XYZ CD1", "", 0, 0, baseMrl + title, -2, 1, 1, 0, 1547452796L, 0L, true, false, 0, true, 1683711438317L); if (type == MediaWrapper.TYPE_ALL) type = media.getType(); if (type == MediaWrapper.TYPE_VIDEO) addVideo(media); diff --git a/medialibrary/src/org/videolan/medialibrary/stubs/StubMediaWrapper.java b/medialibrary/src/org/videolan/medialibrary/stubs/StubMediaWrapper.java index d93ef2faf..ecc50c037 100644 --- a/medialibrary/src/org/videolan/medialibrary/stubs/StubMediaWrapper.java +++ b/medialibrary/src/org/videolan/medialibrary/stubs/StubMediaWrapper.java @@ -14,11 +14,11 @@ import org.videolan.medialibrary.interfaces.media.MediaWrapper; public class StubMediaWrapper extends MediaWrapper { public StubMediaWrapper(long id, String mrl, long time, float position, long length, int type, String title, - String filename, long artistId, String artist, String genre, long albumId, String album, String albumArtist, + String filename, long artistId, long albumArtistId, String artist, String genre, long albumId, String album, String albumArtist, int width, int height, String artworkURL, int audio, int spu, int trackNumber, int discNumber, long lastModified, long seen, boolean isThumbnailGenerated, boolean isFavorite, int releaseDate, boolean isPresent, long insertionDate) { - super(id, mrl, time, position, length, type, title, filename, artistId, artist, + super(id, mrl, time, position, length, type, title, filename, artistId, albumArtistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL, audio, spu, trackNumber, discNumber, lastModified, seen, isThumbnailGenerated, isFavorite, releaseDate, isPresent, insertionDate); @@ -46,10 +46,10 @@ public class StubMediaWrapper extends MediaWrapper { } public StubMediaWrapper(Uri uri, long time, float position, long length, int type, - Bitmap picture, String title, long artistId, String artist, String genre, long albumId, String album, String albumArtist, + Bitmap picture, String title, long artistId, long albumArtistId, String artist, String genre, long albumId, String album, String albumArtist, int width, int height, String artworkURL, int audio, int spu, int trackNumber, int discNumber, long lastModified, long seen, boolean isFavorite, long insertionDate) { - super(uri, time, position, length, type, picture, title, artistId, artist, + super(uri, time, position, length, type, picture, title, artistId, albumArtistId, artist, genre, albumId, album, albumArtist, width, height, artworkURL, audio, spu, trackNumber, discNumber, lastModified, seen, isFavorite, insertionDate); } @@ -103,6 +103,11 @@ public class StubMediaWrapper extends MediaWrapper { return null; } + @Override + public Artist getAlbumArtistWrapper() { + return null; + } + public boolean setLongMeta(int metaDataType, long metadataValue) { mMetaLong.setValueAt(metaDataType, metadataValue); return true;