Merge pull request #27 from bendardenne/search-artists
Include artists in search
This commit is contained in:
commit
b236e7a9cd
5 changed files with 58 additions and 27 deletions
|
|
@ -41,7 +41,7 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.github.jellyfin.jellyfin-apiclient-java:android:0.6.1'
|
implementation 'com.github.jellyfin.jellyfin-apiclient-java:android:0.6.3'
|
||||||
implementation 'com.google.android.exoplayer:exoplayer:2.11.4'
|
implementation 'com.google.android.exoplayer:exoplayer:2.11.4'
|
||||||
|
|
||||||
implementation 'androidx.core:core:1.3.0'
|
implementation 'androidx.core:core:1.3.0'
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,18 @@
|
||||||
package com.dkanada.gramophone.ui.activities;
|
package com.dkanada.gramophone.ui.activities;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
import androidx.appcompat.widget.SearchView;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
|
||||||
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.widget.SearchView;
|
||||||
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.dkanada.gramophone.R;
|
import com.dkanada.gramophone.R;
|
||||||
import com.dkanada.gramophone.adapter.SearchAdapter;
|
import com.dkanada.gramophone.adapter.SearchAdapter;
|
||||||
import com.dkanada.gramophone.interfaces.MediaCallback;
|
import com.dkanada.gramophone.interfaces.MediaCallback;
|
||||||
|
|
@ -23,12 +22,16 @@ import com.dkanada.gramophone.model.Song;
|
||||||
import com.dkanada.gramophone.ui.activities.base.AbsMusicServiceActivity;
|
import com.dkanada.gramophone.ui.activities.base.AbsMusicServiceActivity;
|
||||||
import com.dkanada.gramophone.util.QueryUtil;
|
import com.dkanada.gramophone.util.QueryUtil;
|
||||||
import com.dkanada.gramophone.util.Util;
|
import com.dkanada.gramophone.util.Util;
|
||||||
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
|
|
||||||
|
import org.jellyfin.apiclient.model.querying.ArtistsQuery;
|
||||||
import org.jellyfin.apiclient.model.querying.ItemQuery;
|
import org.jellyfin.apiclient.model.querying.ItemQuery;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
|
@ -144,26 +147,53 @@ public class SearchActivity extends AbsMusicServiceActivity implements SearchVie
|
||||||
this.query = query;
|
this.query = query;
|
||||||
ItemQuery itemQuery = new ItemQuery();
|
ItemQuery itemQuery = new ItemQuery();
|
||||||
itemQuery.setSearchTerm(query);
|
itemQuery.setSearchTerm(query);
|
||||||
QueryUtil.getItems(itemQuery, new MediaCallback() {
|
|
||||||
|
ArtistsQuery artistsQuery = new ArtistsQuery();
|
||||||
|
artistsQuery.setSearchTerm(query);
|
||||||
|
|
||||||
|
MediaCallback callback = new MediaCallback() {
|
||||||
|
private final List<Object> data = new ArrayList<>();
|
||||||
|
|
||||||
|
@SuppressWarnings("ConstantConditions")
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<?> media) {
|
||||||
Collections.sort(media, new Comparator<Object>() {
|
data.addAll(media);
|
||||||
public int compare(Object one, Object two) {
|
|
||||||
if (one.getClass() == Album.class || one.getClass() == Artist.class) {
|
Map<Class<?>, List<Object>> byClass = new HashMap<>();
|
||||||
if (two.getClass() == Song.class) return -1;
|
byClass.put(Artist.class, new ArrayList<>());
|
||||||
|
byClass.put(Album.class, new ArrayList<>());
|
||||||
|
byClass.put(Song.class, new ArrayList<>());
|
||||||
|
byClass.put(Object.class, new ArrayList<>());
|
||||||
|
|
||||||
|
for (Object datum : data) {
|
||||||
|
if (byClass.containsKey(datum.getClass())) {
|
||||||
|
byClass.get(datum.getClass()).add(datum);
|
||||||
|
} else {
|
||||||
|
byClass.get(Object.class).add(datum);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (two.getClass() == Album.class || two.getClass() == Artist.class) {
|
Collections.sort(byClass.get(Artist.class),
|
||||||
if (one.getClass() == Song.class) return 1;
|
(one, two) -> ((Artist) one).name.compareTo(((Artist) two).name));
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
Collections.sort(byClass.get(Album.class),
|
||||||
}
|
(one, two) -> ((Album) one).title.compareTo(((Album) two).title));
|
||||||
});
|
|
||||||
|
|
||||||
adapter.swapDataSet((List<Object>) media);
|
Collections.sort(byClass.get(Song.class),
|
||||||
|
(one, two) -> ((Song) one).title.compareTo(((Song) two).title));
|
||||||
|
|
||||||
|
|
||||||
|
List<Object> sortedData = byClass.get(Artist.class);
|
||||||
|
sortedData.addAll(byClass.get(Album.class));
|
||||||
|
sortedData.addAll(byClass.get(Song.class));
|
||||||
|
sortedData.addAll(byClass.get(Object.class));
|
||||||
|
|
||||||
|
adapter.swapDataSet(sortedData);
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
|
QueryUtil.getArtists(artistsQuery, callback);
|
||||||
|
QueryUtil.getItems(itemQuery, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ import com.dkanada.gramophone.model.Artist;
|
||||||
import com.dkanada.gramophone.util.PreferenceUtil;
|
import com.dkanada.gramophone.util.PreferenceUtil;
|
||||||
import com.dkanada.gramophone.util.QueryUtil;
|
import com.dkanada.gramophone.util.QueryUtil;
|
||||||
|
|
||||||
|
import org.jellyfin.apiclient.model.querying.ArtistsQuery;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -38,7 +40,7 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
|
||||||
List<Artist> dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
|
List<Artist> dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
|
||||||
|
|
||||||
ArtistAdapter adapter = new ArtistAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment());
|
ArtistAdapter adapter = new ArtistAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment());
|
||||||
QueryUtil.getArtists(new MediaCallback() {
|
QueryUtil.getArtists(new ArtistsQuery(), new MediaCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<?> media) {
|
||||||
dataSet.addAll((Collection<Artist>) media);
|
dataSet.addAll((Collection<Artist>) media);
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ public class MusicUtil {
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public static String getArtistInfoString(@NonNull final Context context, @NonNull final Artist artist) {
|
public static String getArtistInfoString(@NonNull final Context context, @NonNull final Artist artist) {
|
||||||
return artist.genres.size() != 0 ? artist.genres.get(0).name : artist.id;
|
return artist.genres.size() != 0 ? artist.genres.get(0).name : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|
|
||||||
|
|
@ -139,8 +139,7 @@ public class QueryUtil {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void getArtists(MediaCallback callback) {
|
public static void getArtists(ArtistsQuery query, MediaCallback callback) {
|
||||||
ArtistsQuery query = new ArtistsQuery();
|
|
||||||
query.setFields(new ItemFields[]{ItemFields.Genres});
|
query.setFields(new ItemFields[]{ItemFields.Genres});
|
||||||
applyProperties(query);
|
applyProperties(query);
|
||||||
App.getApiClient().GetAlbumArtistsAsync(query, new Response<ItemsResult>() {
|
App.getApiClient().GetAlbumArtistsAsync(query, new Response<ItemsResult>() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue