From 61006cdfd1c91af2aff76a1fa1da44e875b2c41c Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Tue, 15 Aug 2017 22:14:15 +0200 Subject: [PATCH] Use new api getArtists() call. Signed-off-by: Yahor Berdnikau --- .../ultrasonic/service/RESTMusicService.java | 95 ++++++------- .../service/parser/IndexesParser.java | 126 ------------------ 2 files changed, 40 insertions(+), 181 deletions(-) delete mode 100644 ultrasonic/src/main/java/org/moire/ultrasonic/service/parser/IndexesParser.java diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java index daa4826f..4d31685d 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java @@ -56,6 +56,7 @@ import org.apache.http.protocol.ExecutionContext; import org.apache.http.protocol.HttpContext; import org.moire.ultrasonic.R; import org.moire.ultrasonic.api.subsonic.SubsonicAPIClient; +import org.moire.ultrasonic.api.subsonic.response.GetArtistsResponse; import org.moire.ultrasonic.api.subsonic.response.GetIndexesResponse; import org.moire.ultrasonic.api.subsonic.response.LicenseResponse; import org.moire.ultrasonic.api.subsonic.response.MusicFoldersResponse; @@ -81,7 +82,6 @@ import org.moire.ultrasonic.service.parser.BookmarkParser; import org.moire.ultrasonic.service.parser.ChatMessageParser; import org.moire.ultrasonic.service.parser.ErrorParser; import org.moire.ultrasonic.service.parser.GenreParser; -import org.moire.ultrasonic.service.parser.IndexesParser; import org.moire.ultrasonic.service.parser.JukeboxStatusParser; import org.moire.ultrasonic.service.parser.LyricsParser; import org.moire.ultrasonic.service.parser.MusicDirectoryParser; @@ -234,6 +234,21 @@ public class RESTMusicService implements MusicService return musicFolders; } + private static List readCachedMusicFolders(Context context) { + String filename = getCachedMusicFoldersFilename(context); + return FileUtil.deserialize(context, filename); + } + + private static void writeCachedMusicFolders(Context context, List musicFolders) { + String filename = getCachedMusicFoldersFilename(context); + FileUtil.serialize(context, new ArrayList<>(musicFolders), filename); + } + + private static String getCachedMusicFoldersFilename(Context context) { + String s = Util.getRestUrl(context, null); + return String.format(Locale.US, "musicFolders-%d.ser", Math.abs(s.hashCode())); + } + @Override public Indexes getIndexes(String musicFolderId, boolean refresh, @@ -269,68 +284,38 @@ public class RESTMusicService implements MusicService return String.format(Locale.US, "indexes-%d.ser", Math.abs(s.hashCode())); } - @Override - public Indexes getArtists(boolean refresh, Context context, ProgressListener progressListener) throws Exception - { - checkServerVersion(context, "1.8", "Artists by ID3 tag not supported."); + @Override + public Indexes getArtists(boolean refresh, + Context context, + ProgressListener progressListener) throws Exception { + Indexes cachedArtists = readCachedArtists(context); + if (cachedArtists != null && + !refresh) { + return cachedArtists; + } - Indexes cachedArtists = readCachedArtists(context); - if (cachedArtists != null && !refresh) - { - return cachedArtists; - } + Response response = subsonicAPIClient.getApi().getArtists(null).execute(); + checkResponseSuccessful(response); - Reader reader = getReader(context, progressListener, "getArtists", null); - try - { - Indexes indexes = new IndexesParser(context).parse(reader, progressListener); - if (indexes != null) - { - writeCachedArtists(context, indexes); - return indexes; - } + Indexes indexes = APIConverter.toDomainEntity(response.body().getIndexes()); + writeCachedArtists(context, indexes); + return indexes; + } - return cachedArtists != null ? cachedArtists : new Indexes(0, null, new ArrayList(), new ArrayList()); - } - finally - { - Util.close(reader); - } - } - - private static Indexes readCachedArtists(Context context) - { - String filename = getCachedArtistsFilename(context); - return FileUtil.deserialize(context, filename); - } - - private static void writeCachedArtists(Context context, Indexes artists) - { - String filename = getCachedArtistsFilename(context); - FileUtil.serialize(context, artists, filename); - } - - private static String getCachedArtistsFilename(Context context) - { - String s = Util.getRestUrl(context, null); - return String.format("indexes-%d.ser", Math.abs(s.hashCode())); - } - - private static List readCachedMusicFolders(Context context) { - String filename = getCachedMusicFoldersFilename(context); + private static Indexes readCachedArtists(Context context) { + String filename = getCachedArtistsFilename(context); return FileUtil.deserialize(context, filename); } - private static void writeCachedMusicFolders(Context context, List musicFolders) { - String filename = getCachedMusicFoldersFilename(context); - FileUtil.serialize(context, new ArrayList<>(musicFolders), filename); + private static void writeCachedArtists(Context context, Indexes artists) { + String filename = getCachedArtistsFilename(context); + FileUtil.serialize(context, artists, filename); } - private static String getCachedMusicFoldersFilename(Context context) - { - String s = Util.getRestUrl(context, null); - return String.format("musicFolders-%d.ser", Math.abs(s.hashCode())); - } + private static String getCachedArtistsFilename(Context context) { + String s = Util.getRestUrl(context, null); + return String.format(Locale.US, "indexes-%d.ser", Math.abs(s.hashCode())); + } @Override public void star(String id, String albumId, String artistId, Context context, ProgressListener progressListener) throws Exception diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/parser/IndexesParser.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/parser/IndexesParser.java deleted file mode 100644 index faa39bd6..00000000 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/parser/IndexesParser.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - This file is part of Subsonic. - - Subsonic 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 3 of the License, or - (at your option) any later version. - - Subsonic 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 Subsonic. If not, see . - - Copyright 2009 (C) Sindre Mehus - */ -package org.moire.ultrasonic.service.parser; - -import android.content.Context; -import android.util.Log; - -import org.moire.ultrasonic.R; -import org.moire.ultrasonic.domain.Artist; -import org.moire.ultrasonic.domain.Indexes; -import org.moire.ultrasonic.util.ProgressListener; - -import org.xmlpull.v1.XmlPullParser; - -import java.io.Reader; -import java.util.ArrayList; -import java.util.List; - -/** - * @author Sindre Mehus - */ -public class IndexesParser extends AbstractParser -{ - private static final String TAG = IndexesParser.class.getSimpleName(); - private Context context; - - public IndexesParser(Context context) - { - super(context); - this.context = context; - } - - public Indexes parse(Reader reader, ProgressListener progressListener) throws Exception - { - - long t0 = System.currentTimeMillis(); - updateProgress(progressListener, R.string.parser_reading); - init(reader); - - List artists = new ArrayList(); - List shortcuts = new ArrayList(); - Long lastModified = null; - String ignoredArticles = null; - int eventType; - String index = "#"; - boolean changed = false; - - do - { - eventType = nextParseEvent(); - if (eventType == XmlPullParser.START_TAG) - { - String name = getElementName(); - if ("indexes".equals(name) || "artists".equals(name)) - { - changed = true; - lastModified = getLong("lastModified"); - ignoredArticles = get("ignoredArticles"); - } - else if ("index".equals(name)) - { - index = get("name"); - } - else if ("artist".equals(name)) - { - Artist artist = new Artist(); - artist.setId(get("id")); - artist.setName(get("name")); - artist.setCoverArt(get("coverArt")); - artist.setAlbumCount(getLong("albumCount")); - artist.setIndex(index); - artists.add(artist); - - if (artists.size() % 10 == 0) - { - String msg = this.context.getResources().getString(R.string.parser_artist_count, artists.size()); - updateProgress(progressListener, msg); - } - } - else if ("shortcut".equals(name)) - { - Artist shortcut = new Artist(); - shortcut.setId(get("id")); - shortcut.setName(get("name")); - shortcut.setIndex("*"); - shortcuts.add(shortcut); - } - else if ("error".equals(name)) - { - handleError(); - } - } - } while (eventType != XmlPullParser.END_DOCUMENT); - - validate(); - - if (!changed) - { - return null; - } - - long t1 = System.currentTimeMillis(); - Log.d(TAG, "Got " + artists.size() + " artist(s) in " + (t1 - t0) + "ms."); - - String msg = this.context.getResources().getString(R.string.parser_artist_count, artists.size()); - updateProgress(progressListener, msg); - - return new Indexes(lastModified == null ? 0L : lastModified, ignoredArticles, shortcuts, artists); - } -} \ No newline at end of file