Skip to content
Snippets Groups Projects
Commit 4ef3cf09 authored by Nicolas Pomepuy's avatar Nicolas Pomepuy
Browse files

Allow sorting albums by artists

Fixes #1410
parent 731893a3
No related branches found
No related tags found
1 merge request!879Bookmarks
......@@ -39,6 +39,7 @@ class AlbumsProvider(val parent : MediaLibraryItem?, context: Context, model: So
override val sortKey = "${super.sortKey}_${parent?.javaClass?.simpleName}"
override fun canSortByDuration() = true
override fun canSortByReleaseDate() = true
override fun canSortByArtist() = true
init {
sort = Settings.getInstance(context).getInt(sortKey, if (parent is Artist) Medialibrary.SORT_RELEASEDATE else Medialibrary.SORT_DEFAULT)
......
......@@ -6,6 +6,7 @@ import kotlinx.coroutines.withContext
import org.videolan.libvlc.MediaPlayer
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.MediaWrapper
import org.videolan.medialibrary.media.DummyItem
import org.videolan.medialibrary.media.MediaLibraryItem
......@@ -149,10 +150,10 @@ object ModelsHelper {
}
}
SORT_ARTIST -> {
val artist = (item as MediaWrapper).artist ?: ""
val artist = (item as? MediaWrapper)?.artist ?: (item as? Album)?.albumArtist ?: ""
if (aboveItem == null) artist
else {
val previous = (aboveItem as MediaWrapper).artist ?: ""
val previous = (aboveItem as? MediaWrapper)?.artist ?: (aboveItem as? Album)?.albumArtist ?: ""
artist.takeIf { it != previous }
}
}
......
......@@ -53,7 +53,7 @@ public abstract class Album extends MediaLibraryItem {
abstract public MediaWrapper[] getPagedTracks(int sort, boolean desc, int nbItems, int offset);
abstract public MediaWrapper[] searchTracks(String query, int sort, boolean desc, int nbItems, int offset);
abstract public int searchTracksCount(String query);
abstract public Artist getAlbumArtist();
abstract public Artist retrieveAlbumArtist();
@Override
public long getId() {
......@@ -96,6 +96,10 @@ public abstract class Album extends MediaLibraryItem {
return TYPE_ALBUM;
}
public String getAlbumArtist() {
return albumArtist;
}
public static Parcelable.Creator<Album> CREATOR
= new Parcelable.Creator<Album>() {
@Override
......
......@@ -44,9 +44,9 @@ public class AlbumImpl extends Album {
return ml.isInitiated() ? nativeGetSearchCount(ml, mId, query) : 0;
}
public Artist getAlbumArtist() {
//TODO
return null;
public Artist retrieveAlbumArtist() {
Medialibrary ml = Medialibrary.getInstance();
return ml.getArtist(this.albumArtistId);
}
private native MediaWrapper[] nativeGetTracks(Medialibrary ml, long mId, int sort, boolean desc);
......
......@@ -30,7 +30,7 @@ public class StubAlbum extends Album {
return count;
}
public Artist getAlbumArtist() {
public Artist retrieveAlbumArtist() {
Medialibrary ml = Medialibrary.getInstance();
return ml.getArtist(this.albumArtistId);
}
......@@ -39,7 +39,7 @@ public class StubAlbum extends Album {
ArrayList<MediaWrapper> results = new ArrayList<>();
for (MediaWrapper media : dt.mAudioMediaWrappers) {
if (media.getAlbum().equals(this.getTitle())
&& media.getAlbumArtist().equals(this.getAlbumArtist().getTitle())) {
&& media.getAlbumArtist().equals(this.retrieveAlbumArtist().getTitle())) {
results.add(media);
}
}
......
......@@ -37,7 +37,7 @@ public class StubArtist extends Artist {
ArrayList<Album> results = new ArrayList<>();
for (Album album : dt.mAlbums) {
if (albumNames.contains(album.getTitle()) &&
album.getAlbumArtist().getTitle().equals(this.getTitle())) {
album.retrieveAlbumArtist().getTitle().equals(this.getTitle())) {
results.add(album);
}
}
......@@ -58,7 +58,7 @@ public class StubArtist extends Artist {
ArrayList<Album> results = new ArrayList<>();
for (Album album : dt.mAlbums) {
if (albumNames.contains(album.getTitle()) &&
album.getAlbumArtist().getTitle().equals(this.getTitle()) &&
album.retrieveAlbumArtist().getTitle().equals(this.getTitle()) &&
Tools.hasSubString(album.getTitle(), query)) {
results.add(album);
}
......@@ -71,7 +71,7 @@ public class StubArtist extends Artist {
ArrayList<String> albumNames = getAlbumNames();
for (Album album : dt.mAlbums) {
if (albumNames.contains(album.getDescription()) &&
album.getAlbumArtist().getTitle().equals(this.getTitle()) &&
album.retrieveAlbumArtist().getTitle().equals(this.getTitle()) &&
Tools.hasSubString(album.getTitle(), query)) {
count++;
}
......
......@@ -179,7 +179,7 @@ public class StubDataSource {
int compareAlbum(Album a1, Album a2) {
if (a1.getTitle().equals(a2.getTitle())) {
return compareArtist(a1.getAlbumArtist(), a2.getAlbumArtist());
return compareArtist(a1.retrieveAlbumArtist(), a2.retrieveAlbumArtist());
} else if (a1.getTitle().equals(Album.SpecialRes.UNKNOWN_ALBUM)) {
return -1;
} else if (a2.getTitle().equals(Album.SpecialRes.UNKNOWN_ALBUM)) {
......@@ -414,7 +414,7 @@ public class StubDataSource {
return;
for (Album album : mAlbums) {
if (album.getTitle().equals(newAlbum.getTitle()) &&
album.getAlbumArtist().getTitle().equals(newAlbum.getAlbumArtist().getTitle()))
album.retrieveAlbumArtist().getTitle().equals(newAlbum.retrieveAlbumArtist().getTitle()))
return;
}
mAlbums.add(newAlbum);
......@@ -434,7 +434,7 @@ public class StubDataSource {
if (albumName.equals(""))
albumName = Album.SpecialRes.UNKNOWN_ALBUM;
for (Album album : mAlbums) {
if (album.getTitle().equals(albumName) && album.getAlbumArtist().getId() == artistID) {
if (album.getTitle().equals(albumName) && album.retrieveAlbumArtist().getId() == artistID) {
return album;
}
}
......@@ -444,9 +444,9 @@ public class StubDataSource {
private void raiseAlbumDuration(Album album, long duration) {
for (int i = 0 ; i < mAlbums.size() ; i++) {
Album item = mAlbums.get(i);
Artist artist = item.getAlbumArtist();
Artist artist = item.retrieveAlbumArtist();
if (item.getTitle().equals(album.getTitle()) &&
item.getAlbumArtist().getTitle().equals(artist.getTitle())) {
item.retrieveAlbumArtist().getTitle().equals(artist.getTitle())) {
mAlbums.set(i, MLServiceLocator.getAbstractAlbum(
album.getId(),
album.getTitle(),
......
......@@ -224,7 +224,7 @@ public class StubMedialibrary extends Medialibrary {
private Artist[] getAlbumArtists() {
ArrayList<Artist> results = new ArrayList<>();
for (Album album : dt.mAlbums) {
Artist artist = album.getAlbumArtist();
Artist artist = album.retrieveAlbumArtist();
if (!checkForArtist(results, artist)) {
results.add(artist);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment