aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/github/daneren2005/dsub/adapter/EntryInfiniteGridAdapter.java3
-rw-r--r--app/src/main/java/github/daneren2005/dsub/adapter/MainAdapter.java3
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/MainFragment.java29
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java10
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/CachedMusicService.java5
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/MusicService.java2
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/OfflineMusicService.java5
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java45
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/parser/EntryListParser.java (renamed from app/src/main/java/github/daneren2005/dsub/service/parser/AlbumListParser.java)7
-rw-r--r--app/src/main/res/values/strings.xml4
10 files changed, 107 insertions, 6 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/adapter/EntryInfiniteGridAdapter.java b/app/src/main/java/github/daneren2005/dsub/adapter/EntryInfiniteGridAdapter.java
index 2c4f75dc..a757149a 100644
--- a/app/src/main/java/github/daneren2005/dsub/adapter/EntryInfiniteGridAdapter.java
+++ b/app/src/main/java/github/daneren2005/dsub/adapter/EntryInfiniteGridAdapter.java
@@ -26,6 +26,7 @@ import github.daneren2005.dsub.R;
import github.daneren2005.dsub.domain.MusicDirectory;
import github.daneren2005.dsub.domain.MusicDirectory.Entry;
import github.daneren2005.dsub.domain.ServerInfo;
+import github.daneren2005.dsub.fragments.MainFragment;
import github.daneren2005.dsub.service.MusicService;
import github.daneren2005.dsub.service.MusicServiceFactory;
import github.daneren2005.dsub.util.ImageLoader;
@@ -126,6 +127,8 @@ public class EntryInfiniteGridAdapter extends EntryGridAdapter {
result = service.getAlbumList(type, extra, size, offset, false, context, null);
} else if("genres".equals(type) || "genres-songs".equals(type)) {
result = service.getSongsByGenre(extra, size, offset, context, null);
+ }else if(type.indexOf(MainFragment.SONGS_LIST_PREFIX) != -1) {
+ result = service.getSongList(type, size, offset, context, null);
} else {
result = service.getAlbumList(type, size, offset, false, context, null);
}
diff --git a/app/src/main/java/github/daneren2005/dsub/adapter/MainAdapter.java b/app/src/main/java/github/daneren2005/dsub/adapter/MainAdapter.java
index 8f1f1c38..473366fe 100644
--- a/app/src/main/java/github/daneren2005/dsub/adapter/MainAdapter.java
+++ b/app/src/main/java/github/daneren2005/dsub/adapter/MainAdapter.java
@@ -100,6 +100,9 @@ public class MainAdapter extends SectionAdapter<Integer> {
} else if("videos".equals(header)) {
display = context.getResources().getString(R.string.main_videos);
checkBox.setVisibility(View.GONE);
+ } else if("songs".equals(header)) {
+ display = context.getResources().getString(R.string.search_songs);
+ checkBox.setVisibility(View.GONE);
} else {
display = header;
checkBox.setVisibility(View.GONE);
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/MainFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/MainFragment.java
index f048587b..65ed99b9 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/MainFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/MainFragment.java
@@ -46,6 +46,11 @@ import javax.net.ssl.HttpsURLConnection;
public class MainFragment extends SelectRecyclerFragment<Integer> {
private static final String TAG = MainFragment.class.getSimpleName();
+ public static final String SONGS_LIST_PREFIX = "songs-";
+ public static final String SONGS_NEWEST = SONGS_LIST_PREFIX + "newest";
+ public static final String SONGS_TOP_PLAYED = SONGS_LIST_PREFIX + "topPlayed";
+ public static final String SONGS_RECENT = SONGS_LIST_PREFIX + "recent";
+ public static final String SONGS_FREQUENT = SONGS_LIST_PREFIX + "frequent";
public MainFragment() {
super();
@@ -124,6 +129,22 @@ public class MainFragment extends SelectRecyclerFragment<Integer> {
sections.add(albums);
headers.add("albums");
+ if(ServerInfo.isMadsonic6(context)) {
+ List<Integer> songs = new ArrayList<>();
+
+ songs.add(R.string.main_songs_newest);
+ if(ServerInfo.checkServerVersion(context, "2.0.1")) {
+ songs.add(R.string.main_songs_top_played);
+ }
+ songs.add(R.string.main_songs_recent);
+ if(ServerInfo.checkServerVersion(context, "2.0.1")) {
+ songs.add(R.string.main_songs_frequent);
+ }
+
+ sections.add(songs);
+ headers.add("songs");
+ }
+
if(ServerInfo.checkServerVersion(context, "1.8")) {
List<Integer> videos = Arrays.asList(R.string.main_videos);
sections.add(videos);
@@ -383,6 +404,14 @@ public class MainFragment extends SelectRecyclerFragment<Integer> {
showAlbumList("alphabeticalByName");
} else if(item == R.string.main_videos) {
showVideos();
+ } else if (item == R.string.main_songs_newest) {
+ showAlbumList(SONGS_NEWEST);
+ } else if (item == R.string.main_songs_top_played) {
+ showAlbumList(SONGS_TOP_PLAYED);
+ } else if (item == R.string.main_songs_recent) {
+ showAlbumList(SONGS_RECENT);
+ } else if (item == R.string.main_songs_frequent) {
+ showAlbumList(SONGS_FREQUENT);
}
}
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
index 316d30ad..0b436218 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
@@ -583,6 +583,14 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Section
setTitle(albumListExtra);
} else if("alphabeticalByName".equals(albumListType)) {
setTitle(R.string.main_albums_alphabetical);
+ } if (MainFragment.SONGS_NEWEST.equals(albumListType)) {
+ setTitle(R.string.main_songs_newest);
+ } else if (MainFragment.SONGS_TOP_PLAYED.equals(albumListType)) {
+ setTitle(R.string.main_songs_top_played);
+ } else if (MainFragment.SONGS_RECENT.equals(albumListType)) {
+ setTitle(R.string.main_songs_recent);
+ } else if (MainFragment.SONGS_FREQUENT.equals(albumListType)) {
+ setTitle(R.string.main_songs_frequent);
}
new LoadTask(true) {
@@ -599,6 +607,8 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Section
}
} else if("genres".equals(albumListType) || "genres-songs".equals(albumListType)) {
result = service.getSongsByGenre(albumListExtra, size, 0, context, this);
+ } else if(albumListType.indexOf(MainFragment.SONGS_LIST_PREFIX) != -1) {
+ result = service.getSongList(albumListType, size, 0, context, this);
} else {
result = service.getAlbumList(albumListType, size, 0, refresh, context, this);
}
diff --git a/app/src/main/java/github/daneren2005/dsub/service/CachedMusicService.java b/app/src/main/java/github/daneren2005/dsub/service/CachedMusicService.java
index 49cb217d..d247f1fb 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/CachedMusicService.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/CachedMusicService.java
@@ -667,6 +667,11 @@ public class CachedMusicService implements MusicService {
}
@Override
+ public MusicDirectory getSongList(String type, int size, int offset, Context context, ProgressListener progressListener) throws Exception {
+ return musicService.getSongList(type, size, offset, context, progressListener);
+ }
+
+ @Override
public MusicDirectory getRandomSongs(int size, String artistId, Context context, ProgressListener progressListener) throws Exception {
return musicService.getRandomSongs(size, artistId, context, progressListener);
}
diff --git a/app/src/main/java/github/daneren2005/dsub/service/MusicService.java b/app/src/main/java/github/daneren2005/dsub/service/MusicService.java
index 2972bb7c..876b45fd 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/MusicService.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/MusicService.java
@@ -94,6 +94,8 @@ public interface MusicService {
MusicDirectory getAlbumList(String type, String extra, int size, int offset, boolean refresh, Context context, ProgressListener progressListener) throws Exception;
+ MusicDirectory getSongList(String type, int size, int offset, Context context, ProgressListener progressListener) throws Exception;
+
MusicDirectory getRandomSongs(int size, String artistId, Context context, ProgressListener progressListener) throws Exception;
MusicDirectory getRandomSongs(int size, String folder, String genre, String startYear, String endYear, Context context, ProgressListener progressListener) throws Exception;
diff --git a/app/src/main/java/github/daneren2005/dsub/service/OfflineMusicService.java b/app/src/main/java/github/daneren2005/dsub/service/OfflineMusicService.java
index b8633624..d14c7fd3 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/OfflineMusicService.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/OfflineMusicService.java
@@ -587,6 +587,11 @@ public class OfflineMusicService implements MusicService {
}
@Override
+ public MusicDirectory getSongList(String type, int size, int offset, Context context, ProgressListener progressListener) throws Exception {
+ throw new OfflineException(ERRORMSG);
+ }
+
+ @Override
public MusicDirectory getRandomSongs(int size, String artistId, Context context, ProgressListener progressListener) throws Exception {
throw new OfflineException(ERRORMSG);
}
diff --git a/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java b/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java
index 4a6e5108..a7a68205 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java
@@ -72,7 +72,8 @@ import android.util.Log;
import github.daneren2005.dsub.R;
import github.daneren2005.dsub.domain.*;
-import github.daneren2005.dsub.service.parser.AlbumListParser;
+import github.daneren2005.dsub.fragments.MainFragment;
+import github.daneren2005.dsub.service.parser.EntryListParser;
import github.daneren2005.dsub.service.parser.ArtistInfoParser;
import github.daneren2005.dsub.service.parser.BookmarkParser;
import github.daneren2005.dsub.service.parser.ChatMessageParser;
@@ -571,7 +572,7 @@ public class RESTMusicService implements MusicService {
Reader reader = getReader(context, progressListener, method, null, names, values, true);
try {
- return new AlbumListParser(context, getInstance(context)).parse(reader, progressListener);
+ return new EntryListParser(context, getInstance(context)).parse(reader, progressListener);
} finally {
Util.close(reader);
}
@@ -637,13 +638,49 @@ public class RESTMusicService implements MusicService {
Reader reader = getReader(context, progressListener, method, null, names, values, true);
try {
- return new AlbumListParser(context, instance).parse(reader, progressListener);
+ return new EntryListParser(context, instance).parse(reader, progressListener);
} finally {
Util.close(reader);
}
}
- @Override
+ @Override
+ public MusicDirectory getSongList(String type, int size, int offset, Context context, ProgressListener progressListener) throws Exception {
+ List<String> names = new ArrayList<String>();
+ List<Object> values = new ArrayList<Object>();
+
+ names.add("size");
+ values.add(size);
+ names.add("offset");
+ values.add(offset);
+
+ String method;
+ switch(type) {
+ case MainFragment.SONGS_NEWEST:
+ method = "getNewaddedSongs";
+ break;
+ case MainFragment.SONGS_TOP_PLAYED:
+ method = "getTopplayedSongs";
+ break;
+ case MainFragment.SONGS_RECENT:
+ method = "getLastplayedSongs";
+ break;
+ case MainFragment.SONGS_FREQUENT:
+ method = "getMostplayedSongs";
+ break;
+ default:
+ method = "getNewaddedSongs";
+ }
+
+ Reader reader = getReader(context, progressListener, method, null, names, values, true);
+ try {
+ return new EntryListParser(context, getInstance(context)).parse(reader, progressListener);
+ } finally {
+ Util.close(reader);
+ }
+ }
+
+ @Override
public MusicDirectory getRandomSongs(int size, String artistId, Context context, ProgressListener progressListener) throws Exception {
checkServerVersion(context, "1.11", "Artist radio is not supported");
diff --git a/app/src/main/java/github/daneren2005/dsub/service/parser/AlbumListParser.java b/app/src/main/java/github/daneren2005/dsub/service/parser/EntryListParser.java
index 213cc6b3..f91aaae1 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/parser/AlbumListParser.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/parser/EntryListParser.java
@@ -29,9 +29,9 @@ import java.io.Reader;
/**
* @author Sindre Mehus
*/
-public class AlbumListParser extends MusicDirectoryEntryParser {
+public class EntryListParser extends MusicDirectoryEntryParser {
- public AlbumListParser(Context context, int instance) {
+ public EntryListParser(Context context, int instance) {
super(context, instance);
}
@@ -50,6 +50,9 @@ public class AlbumListParser extends MusicDirectoryEntryParser {
entry.setDirectory(true);
}
dir.addChild(entry);
+ } else if ("song".equals(name)) {
+ MusicDirectory.Entry entry = parseEntry("");
+ dir.addChild(entry);
} else if ("error".equals(name)) {
handleError();
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5d0aacd7..1e4cfea9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -76,6 +76,10 @@
<string name="main.albums_alphabetical">Alphabetically</string>
<string name="main.videos">Videos</string>
<string name="main.songs_genres">@string/main.albums_genres</string>
+ <string name="main.songs_newest">@string/main.albums_newest</string>
+ <string name="main.songs_top_played">Top Played</string>
+ <string name="main.songs_recent">@string/main.albums_recent</string>
+ <string name="main.songs_frequent">@string/main.albums_frequent</string>
<string name="main.back_confirm">Press back again to exit</string>
<string name="main.scan_complete">Completed scan of Server</string>
<string name="main.artist">Artist</string>