1
0
mirror of https://github.com/ultrasonic/ultrasonic synced 2025-02-18 04:30:48 +01:00

Use new subsonic api getCoverArt call.

Signed-off-by: Yahor Berdnikau <egorr.berd@gmail.com>
This commit is contained in:
Yahor Berdnikau 2017-10-18 22:32:30 +02:00
parent 48e6788224
commit 4ef8507353

View File

@ -77,6 +77,7 @@ import org.moire.ultrasonic.api.subsonic.response.MusicFoldersResponse;
import org.moire.ultrasonic.api.subsonic.response.SearchResponse; import org.moire.ultrasonic.api.subsonic.response.SearchResponse;
import org.moire.ultrasonic.api.subsonic.response.SearchThreeResponse; import org.moire.ultrasonic.api.subsonic.response.SearchThreeResponse;
import org.moire.ultrasonic.api.subsonic.response.SearchTwoResponse; import org.moire.ultrasonic.api.subsonic.response.SearchTwoResponse;
import org.moire.ultrasonic.api.subsonic.response.StreamResponse;
import org.moire.ultrasonic.api.subsonic.response.SubsonicResponse; import org.moire.ultrasonic.api.subsonic.response.SubsonicResponse;
import org.moire.ultrasonic.data.APIAlbumConverter; import org.moire.ultrasonic.data.APIAlbumConverter;
import org.moire.ultrasonic.data.APIArtistConverter; import org.moire.ultrasonic.data.APIArtistConverter;
@ -110,6 +111,7 @@ import org.moire.ultrasonic.service.parser.JukeboxStatusParser;
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.ShareParser; import org.moire.ultrasonic.service.parser.ShareParser;
import org.moire.ultrasonic.service.parser.SubsonicRESTException;
import org.moire.ultrasonic.service.parser.UserInfoParser; import org.moire.ultrasonic.service.parser.UserInfoParser;
import org.moire.ultrasonic.service.ssl.SSLSocketFactory; import org.moire.ultrasonic.service.ssl.SSLSocketFactory;
import org.moire.ultrasonic.service.ssl.TrustSelfSignedStrategy; import org.moire.ultrasonic.service.ssl.TrustSelfSignedStrategy;
@ -756,84 +758,73 @@ public class RESTMusicService implements MusicService
return serverVersion == null || serverVersion.compareTo(requiredVersion) >= 0; return serverVersion == null || serverVersion.compareTo(requiredVersion) >= 0;
} }
@Override @Override
public Bitmap getCoverArt(Context context, final MusicDirectory.Entry entry, int size, boolean saveToFile, boolean highQuality, ProgressListener progressListener) throws Exception public Bitmap getCoverArt(Context context,
{ final MusicDirectory.Entry entry,
// Synchronize on the entry so that we don't download concurrently for int size,
// the same song. boolean saveToFile,
if (entry == null) boolean highQuality,
{ ProgressListener progressListener) throws Exception {
return null; // Synchronize on the entry so that we don't download concurrently for
} // the same song.
if (entry == null) {
return null;
}
synchronized (entry) synchronized (entry) {
{ // Use cached file, if existing.
// Use cached file, if existing. Bitmap bitmap = FileUtil.getAlbumArtBitmap(context, entry, size, highQuality);
Bitmap bitmap = FileUtil.getAlbumArtBitmap(context, entry, size, highQuality); boolean serverScaling = Util.isServerScalingEnabled(context);
boolean serverScaling = Util.isServerScalingEnabled(context);
if (bitmap == null) if (bitmap == null) {
{ Log.d(TAG, "Loading cover art for: " + entry);
String url = Util.getRestUrl(context, "getCoverArt");
InputStream in = null; final String id = entry.getCoverArt();
try if (id == null) {
{ return null; // Can't load
List<String> parameterNames; }
List<Object> parameterValues;
if (serverScaling) StreamResponse response = subsonicAPIClient.getCoverArt(id, (long) size);
{ if (response.hasError() || response.getStream() == null) {
parameterNames = asList("id", "size"); if (response.getApiError() != null) {
parameterValues = Arrays.<Object>asList(entry.getCoverArt(), size); throw new SubsonicRESTException(response.getApiError().getCode(), "rest error");
} } else {
else throw new IOException("Failed to make endpoint request, code: " +
{ response.getRequestErrorCode());
parameterNames = Collections.singletonList("id"); }
parameterValues = Arrays.<Object>asList(entry.getCoverArt()); }
}
HttpEntity entity = getEntityForURL(context, url, null, parameterNames, parameterValues, progressListener); if (response.getStream() == null) {
in = entity.getContent(); return null; // Failed to load
}
// If content type is XML, an error occurred. Get it. InputStream in = null;
String contentType = Util.getContentType(entity); try {
if (contentType != null && contentType.startsWith("text/xml")) in = response.getStream();
{ byte[] bytes = Util.toByteArray(in);
new ErrorParser(context).parse(new InputStreamReader(in, Constants.UTF_8));
return null; // Never reached.
}
byte[] bytes = Util.toByteArray(in); // If we aren't allowing server-side scaling, always save the file to disk because it will be unmodified
if (!serverScaling || saveToFile) {
OutputStream out = null;
// If we aren't allowing server-side scaling, always save the file to disk because it will be unmodified try {
if (!serverScaling || saveToFile) out = new FileOutputStream(FileUtil.getAlbumArtFile(context, entry));
{ out.write(bytes);
OutputStream out = null; } finally {
Util.close(out);
}
}
try bitmap = FileUtil.getSampledBitmap(bytes, size, highQuality);
{ } finally {
out = new FileOutputStream(FileUtil.getAlbumArtFile(context, entry)); Util.close(in);
out.write(bytes); }
} }
finally
{
Util.close(out);
}
}
bitmap = FileUtil.getSampledBitmap(bytes, size, highQuality); // Return scaled bitmap
} return Util.scaleBitmap(bitmap, size);
finally }
{ }
Util.close(in);
}
}
// Return scaled bitmap
return Util.scaleBitmap(bitmap, size);
}
}
@Override @Override
public HttpResponse getDownloadInputStream(Context context, MusicDirectory.Entry song, long offset, int maxBitrate, CancellableTask task) throws Exception public HttpResponse getDownloadInputStream(Context context, MusicDirectory.Entry song, long offset, int maxBitrate, CancellableTask task) throws Exception