Use new api getGenres call.

Signed-off-by: Yahor Berdnikau <egorr.berd@gmail.com>
This commit is contained in:
Yahor Berdnikau 2017-11-11 23:59:00 +01:00
parent d693971baf
commit 579accb06c
2 changed files with 10 additions and 169 deletions

View File

@ -58,6 +58,7 @@ import org.moire.ultrasonic.api.subsonic.SubsonicAPIClient;
import org.moire.ultrasonic.api.subsonic.models.AlbumListType; import org.moire.ultrasonic.api.subsonic.models.AlbumListType;
import org.moire.ultrasonic.api.subsonic.models.JukeboxAction; import org.moire.ultrasonic.api.subsonic.models.JukeboxAction;
import org.moire.ultrasonic.api.subsonic.models.MusicDirectoryChild; import org.moire.ultrasonic.api.subsonic.models.MusicDirectoryChild;
import org.moire.ultrasonic.api.subsonic.response.GenresResponse;
import org.moire.ultrasonic.api.subsonic.response.GetAlbumList2Response; import org.moire.ultrasonic.api.subsonic.response.GetAlbumList2Response;
import org.moire.ultrasonic.api.subsonic.response.GetAlbumListResponse; import org.moire.ultrasonic.api.subsonic.response.GetAlbumListResponse;
import org.moire.ultrasonic.api.subsonic.response.GetAlbumResponse; import org.moire.ultrasonic.api.subsonic.response.GetAlbumResponse;
@ -92,6 +93,7 @@ import org.moire.ultrasonic.data.APIPlaylistConverter;
import org.moire.ultrasonic.data.APIPodcastConverter; import org.moire.ultrasonic.data.APIPodcastConverter;
import org.moire.ultrasonic.data.APISearchConverter; import org.moire.ultrasonic.data.APISearchConverter;
import org.moire.ultrasonic.data.APIShareConverter; import org.moire.ultrasonic.data.APIShareConverter;
import org.moire.ultrasonic.data.ApiGenreConverter;
import org.moire.ultrasonic.domain.Bookmark; import org.moire.ultrasonic.domain.Bookmark;
import org.moire.ultrasonic.domain.ChatMessage; import org.moire.ultrasonic.domain.ChatMessage;
import org.moire.ultrasonic.domain.Genre; import org.moire.ultrasonic.domain.Genre;
@ -110,7 +112,6 @@ import org.moire.ultrasonic.domain.Version;
import org.moire.ultrasonic.service.parser.BookmarkParser; import org.moire.ultrasonic.service.parser.BookmarkParser;
import org.moire.ultrasonic.service.parser.ChatMessageParser; import org.moire.ultrasonic.service.parser.ChatMessageParser;
import org.moire.ultrasonic.service.parser.ErrorParser; import org.moire.ultrasonic.service.parser.ErrorParser;
import org.moire.ultrasonic.service.parser.GenreParser;
import org.moire.ultrasonic.service.parser.MusicDirectoryParser; import org.moire.ultrasonic.service.parser.MusicDirectoryParser;
import org.moire.ultrasonic.service.parser.RandomSongsParser; import org.moire.ultrasonic.service.parser.RandomSongsParser;
import org.moire.ultrasonic.service.parser.SubsonicRESTException; import org.moire.ultrasonic.service.parser.SubsonicRESTException;
@ -1196,21 +1197,15 @@ public class RESTMusicService implements MusicService
return networkInfo == null ? -1 : networkInfo.getType(); return networkInfo == null ? -1 : networkInfo.getType();
} }
@Override @Override
public List<Genre> getGenres(Context context, ProgressListener progressListener) throws Exception public List<Genre> getGenres(Context context,
{ ProgressListener progressListener) throws Exception {
checkServerVersion(context, "1.9", "Genres not supported."); updateProgressListener(progressListener, R.string.parser_reading);
Response<GenresResponse> response = subsonicAPIClient.getApi().getGenres().execute();
checkResponseSuccessful(response);
Reader reader = getReader(context, progressListener, "getGenres", null); return ApiGenreConverter.toDomainEntityList(response.body().getGenresList());
try }
{
return new GenreParser(context).parse(reader, progressListener);
}
finally
{
Util.close(reader);
}
}
@Override @Override
public MusicDirectory getSongsByGenre(String genre, int count, int offset, Context context, ProgressListener progressListener) throws Exception public MusicDirectory getSongsByGenre(String genre, int count, int offset, Context context, ProgressListener progressListener) throws Exception

View File

@ -1,154 +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 <http://www.gnu.org/licenses/>.
Copyright 2010 (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.Genre;
import org.moire.ultrasonic.util.ProgressListener;
import org.xmlpull.v1.XmlPullParser;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
/**
* @author Joshua Bahnsen
*/
public class GenreParser extends AbstractParser
{
private static final String TAG = GenreParser.class.getSimpleName();
private static final Pattern COMPILE = Pattern.compile("(?:&amp;)(amp;|lt;|gt;|#37;|apos;)");
private static final Pattern PATTERN = Pattern.compile("&(?!amp;|lt;|gt;|#37;|apos;)");
private static final Pattern COMPILE1 = Pattern.compile("%");
private static final Pattern COMPILE2 = Pattern.compile("'");
public GenreParser(Context context)
{
super(context);
}
public List<Genre> parse(Reader reader, ProgressListener progressListener) throws Exception
{
updateProgress(progressListener, R.string.parser_reading);
List<Genre> result = new ArrayList<Genre>();
StringReader sr = null;
try
{
BufferedReader br = new BufferedReader(reader);
String xml = null;
String line;
while ((line = br.readLine()) != null)
{
if (xml == null)
{
xml = line;
}
else
{
xml += line;
}
}
br.close();
// Replace possible unescaped XML characters
// No replacements for <> at this time
if (xml != null)
{
// Replace double escaped ampersand (&amp;apos;)
xml = COMPILE.matcher(xml).replaceAll("&$1");
// Replace unescaped ampersand
xml = PATTERN.matcher(xml).replaceAll("&amp;");
// Replace unescaped percent symbol
xml = COMPILE1.matcher(xml).replaceAll("&#37;");
// Replace unescaped apostrophe
xml = COMPILE2.matcher(xml).replaceAll("&apos;");
}
sr = new StringReader(xml);
}
catch (IOException ioe)
{
Log.e(TAG, "Error parsing Genre XML", ioe);
}
if (sr == null)
{
Log.w(TAG, "Unable to parse Genre XML, returning empty list");
return result;
}
init(sr);
Genre genre = null;
int eventType;
do
{
eventType = nextParseEvent();
if (eventType == XmlPullParser.START_TAG)
{
String name = getElementName();
if ("genre".equals(name))
{
genre = new Genre();
}
else if ("error".equals(name))
{
handleError();
}
else
{
genre = null;
}
}
else if (eventType == XmlPullParser.TEXT)
{
if (genre != null)
{
String value = getText();
genre.setName(value);
genre.setIndex(value.substring(0, 1));
result.add(genre);
genre = null;
}
}
} while (eventType != XmlPullParser.END_DOCUMENT);
validate();
updateProgress(progressListener, R.string.parser_reading_done);
return result;
}
}