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 f818fe6d..838cc8d3 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java @@ -63,6 +63,7 @@ import org.moire.ultrasonic.api.subsonic.response.GetIndexesResponse; import org.moire.ultrasonic.api.subsonic.response.GetMusicDirectoryResponse; import org.moire.ultrasonic.api.subsonic.response.LicenseResponse; import org.moire.ultrasonic.api.subsonic.response.MusicFoldersResponse; +import org.moire.ultrasonic.api.subsonic.response.SearchResponse; import org.moire.ultrasonic.api.subsonic.response.SubsonicResponse; import org.moire.ultrasonic.data.APIConverter; import org.moire.ultrasonic.domain.Bookmark; @@ -94,7 +95,6 @@ import org.moire.ultrasonic.service.parser.PodcastEpisodeParser; import org.moire.ultrasonic.service.parser.PodcastsChannelsParser; import org.moire.ultrasonic.service.parser.RandomSongsParser; import org.moire.ultrasonic.service.parser.SearchResult2Parser; -import org.moire.ultrasonic.service.parser.SearchResultParser; import org.moire.ultrasonic.service.parser.ShareParser; import org.moire.ultrasonic.service.parser.UserInfoParser; import org.moire.ultrasonic.service.ssl.SSLSocketFactory; @@ -407,39 +407,36 @@ public class RESTMusicService implements MusicService return APIConverter.toMusicDirectoryDomainEntity(response.body().getAlbum()); } - @Override - public SearchResult search(SearchCriteria criteria, Context context, ProgressListener progressListener) throws Exception - { - try - { - return !Util.isOffline(context) && Util.getShouldUseId3Tags(context) ? search3(criteria, context, progressListener) : search2(criteria, context, progressListener); - } - catch (ServerTooOldException x) - { - // Ensure backward compatibility with REST 1.3. - return searchOld(criteria, context, progressListener); - } - } + @Override + public SearchResult search(SearchCriteria criteria, + Context context, + ProgressListener progressListener) throws Exception { + try { + return !Util.isOffline(context) && + Util.getShouldUseId3Tags(context) ? + search3(criteria, context, progressListener) : + search2(criteria, context, progressListener); + } catch (ServerTooOldException x) { + // Ensure backward compatibility with REST 1.3. + return searchOld(criteria, context, progressListener); + } + } - /** - * Search using the "search" REST method. - */ - private SearchResult searchOld(SearchCriteria criteria, Context context, ProgressListener progressListener) throws Exception - { - List parameterNames = asList("any", "songCount"); - List parameterValues = Arrays.asList(criteria.getQuery(), criteria.getSongCount()); - Reader reader = getReader(context, progressListener, "search", null, parameterNames, parameterValues); - try - { - return new SearchResultParser(context).parse(reader, progressListener); - } - finally - { - Util.close(reader); - } - } + /** + * Search using the "search" REST method. + */ + private SearchResult searchOld(SearchCriteria criteria, + Context context, + ProgressListener progressListener) throws Exception { + updateProgressListener(progressListener, R.string.parser_reading); + Response response = subsonicAPIClient.getApi().search(null, null, null, criteria.getQuery(), + criteria.getSongCount(), null, null).execute(); + checkResponseSuccessful(response); - /** + return APIConverter.toDomainEntity(response.body().getSearchResult()); + } + + /** * Search using the "search2" REST method, available in 1.4.0 and later. */ private SearchResult search2(SearchCriteria criteria, Context context, ProgressListener progressListener) throws Exception diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/parser/SearchResultParser.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/parser/SearchResultParser.java deleted file mode 100644 index 238748f8..00000000 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/parser/SearchResultParser.java +++ /dev/null @@ -1,77 +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 org.moire.ultrasonic.R; -import org.moire.ultrasonic.domain.MusicDirectory; -import org.moire.ultrasonic.domain.SearchResult; -import org.moire.ultrasonic.domain.Artist; -import org.moire.ultrasonic.util.ProgressListener; - -import org.xmlpull.v1.XmlPullParser; - -import java.io.Reader; -import java.util.Collections; -import java.util.List; -import java.util.ArrayList; - -/** - * @author Sindre Mehus - */ -public class SearchResultParser extends MusicDirectoryEntryParser -{ - - public SearchResultParser(Context context) - { - super(context); - } - - public SearchResult parse(Reader reader, ProgressListener progressListener) throws Exception - { - updateProgress(progressListener, R.string.parser_reading); - init(reader); - - List songs = new ArrayList(); - int eventType; - do - { - eventType = nextParseEvent(); - if (eventType == XmlPullParser.START_TAG) - { - String name = getElementName(); - if ("match".equals(name)) - { - songs.add(parseEntry("", false, 0)); - } - else if ("error".equals(name)) - { - handleError(); - } - } - } while (eventType != XmlPullParser.END_DOCUMENT); - - validate(); - updateProgress(progressListener, R.string.parser_reading_done); - - return new SearchResult(Collections.emptyList(), Collections.emptyList(), songs); - } - -}