exception is passed to onFailure
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
package ru.vtosters.lite.music.callback;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.core.app.NotificationManagerCompat;
|
||||
|
||||
import com.vtosters.lite.R;
|
||||
|
||||
import ru.vtosters.lite.downloaders.notifications.NotificationChannels;
|
||||
import ru.vtosters.lite.music.interfaces.Callback;
|
||||
import ru.vtosters.lite.utils.AndroidUtils;
|
||||
@@ -40,12 +43,12 @@ public class MusicCallbackBuilder {
|
||||
} catch (UnsatisfiedLinkError e) {
|
||||
Log.e("AudioDownloader", "native libs");
|
||||
Log.e("AudioDownloader", e.getMessage());
|
||||
onFailure();
|
||||
onFailure(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure() {
|
||||
public void onFailure(Throwable e) {
|
||||
notification.setContentText(AndroidUtils.getString(R.string.load_audio_error)).setProgress(0, 0, false);
|
||||
notificationManager.notify(notificationId, notification.build());
|
||||
}
|
||||
@@ -77,7 +80,7 @@ public class MusicCallbackBuilder {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure() {
|
||||
public void onFailure(Throwable e) {
|
||||
notification.setContentText(AndroidUtils.getString(R.string.load_audio_error)).setProgress(0, 0, false);
|
||||
notificationManager.notify(notificationId, notification.build());
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@ package ru.vtosters.lite.music.downloader;
|
||||
|
||||
import com.vk.dto.music.MusicTrack;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import ru.vtosters.lite.music.cache.MusicCacheImpl;
|
||||
import ru.vtosters.lite.music.interfaces.Callback;
|
||||
import ru.vtosters.lite.music.interfaces.ITrackDownloader;
|
||||
@@ -18,16 +16,36 @@ public final class CachedDownloader implements ITrackDownloader {
|
||||
|
||||
|
||||
@Override
|
||||
public void downloadTrack(MusicTrack track, Callback callback) {
|
||||
var d = new Callback.CompletableFutureCallback(callback);
|
||||
origin.downloadTrack(track, d);
|
||||
d.thenAccept(result -> {
|
||||
try {
|
||||
ThumbnailDownloader.downloadThumbnails(track);
|
||||
public void download(MusicTrack track, Callback callback) {
|
||||
origin.download(track, new Callback() {
|
||||
@Override
|
||||
public void onProgress(int progress) { }
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
new ThumbnailDownloader().download(track, new Callback() {
|
||||
@Override public void onProgress(int progress) {}
|
||||
|
||||
@Override public void onSuccess() {}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable e) {
|
||||
callback.onFailure(e);
|
||||
}
|
||||
|
||||
@Override public void onSizeReceived(long size, long header) {}
|
||||
});
|
||||
MusicCacheImpl.addTrack(track);
|
||||
} catch (IOException e) {
|
||||
callback.onFailure();
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable e) {
|
||||
callback.onFailure(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSizeReceived(long size, long header) {
|
||||
callback.onSizeReceived(size, header);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ public final class Mp3Downloader implements ITrackDownloader {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void downloadTrack(MusicTrack track, Callback callback) {
|
||||
public void download(MusicTrack track, Callback callback) {
|
||||
String uri = track.D;
|
||||
if (Objects.requireNonNull(uri).isEmpty()) {
|
||||
String msg = "link error: " +
|
||||
@@ -48,7 +48,7 @@ public final class Mp3Downloader implements ITrackDownloader {
|
||||
callback.onProgress(100);
|
||||
callback.onSuccess();
|
||||
} else
|
||||
callback.onFailure();
|
||||
callback.onFailure(new RuntimeException(session.getLogsAsString()));
|
||||
}, log -> callback.onProgress(Math.min(100, progress.incrementAndGet())),
|
||||
statistics -> {}
|
||||
);
|
||||
|
||||
@@ -59,8 +59,8 @@ public class PlaylistDownloader {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure() {
|
||||
origin.onFailure();
|
||||
public void onFailure(Throwable e) {
|
||||
origin.onFailure(e);
|
||||
}
|
||||
|
||||
@Override public void onSizeReceived(long size, long header) {}
|
||||
|
||||
@@ -1,18 +1,23 @@
|
||||
package ru.vtosters.lite.music.downloader;
|
||||
|
||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
||||
import com.vk.dto.music.MusicTrack;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import ru.vtosters.lite.utils.IOUtils;
|
||||
import ru.vtosters.lite.utils.music.MusicCacheStorageUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
|
||||
public class ThumbnailDownloader {
|
||||
import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
|
||||
import ru.vtosters.lite.music.interfaces.Callback;
|
||||
import ru.vtosters.lite.music.interfaces.ITrackDownloader;
|
||||
import ru.vtosters.lite.utils.IOUtils;
|
||||
import ru.vtosters.lite.utils.music.MusicCacheStorageUtils;
|
||||
|
||||
public static void downloadThumbnails(MusicTrack track) throws IOException {
|
||||
public final class ThumbnailDownloader implements ITrackDownloader {
|
||||
|
||||
@Override
|
||||
public void download(MusicTrack track, Callback callback) {
|
||||
JSONObject json = track.J();
|
||||
JSONObject album = json.optJSONObject("album");
|
||||
if (album == null) return;
|
||||
@@ -20,24 +25,30 @@ public class ThumbnailDownloader {
|
||||
if (thumb == null) return;
|
||||
JSONArray sizes = thumb.optJSONArray("sizes");
|
||||
String trackId = LibVKXClient.asId(track);
|
||||
if (sizes == null) {
|
||||
JSONArray names = thumb.names();
|
||||
if (names == null) return;
|
||||
for (int i = 0; i < names.length(); ++i) {
|
||||
String name = names.optString(i);
|
||||
downloadThumbnail(thumb.optString(name), Integer.parseInt(name.substring(6)), trackId);
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < sizes.length(); ++i) {
|
||||
JSONObject size = sizes.optJSONObject(i);
|
||||
int width = size.optInt("width");
|
||||
String src = size.optString("src");
|
||||
downloadThumbnail(src, width, trackId);
|
||||
try {
|
||||
if (sizes == null) {
|
||||
JSONArray names = thumb.names();
|
||||
if (names == null) return;
|
||||
for (int i = 0; i < names.length(); ++i) {
|
||||
String name = names.optString(i);
|
||||
downloadThumbnail(thumb.optString(name), Integer.parseInt(name.substring(6)), trackId);
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < sizes.length(); ++i) {
|
||||
JSONObject size = sizes.optJSONObject(i);
|
||||
int width = size.optInt("width");
|
||||
String src = size.optString("src");
|
||||
downloadThumbnail(src, width, trackId);
|
||||
}
|
||||
}
|
||||
callback.onSuccess();
|
||||
} catch (IOException e) {
|
||||
callback.onFailure(e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static void downloadThumbnail(String url, int res, String trackId) throws IOException {
|
||||
IOUtils.writeToFile(MusicCacheStorageUtils.getTrackThumb(trackId, res), IOUtils.readFully(new URL(url).openStream()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ public final class TrackDownloader {
|
||||
else
|
||||
Log.e("TrackDownloader", "Directory creation failed");
|
||||
}
|
||||
new Mp3Downloader(outDir).downloadTrack(track, callback);
|
||||
new Mp3Downloader(outDir).download(track, callback);
|
||||
}
|
||||
|
||||
public static void
|
||||
@@ -36,6 +36,6 @@ public final class TrackDownloader {
|
||||
|
||||
new CachedDownloader(
|
||||
new Mp3Downloader(path)
|
||||
).downloadTrack(track, callback);
|
||||
).download(track, callback);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ public interface Callback {
|
||||
|
||||
void onSuccess();
|
||||
|
||||
void onFailure();
|
||||
void onFailure(Throwable e);
|
||||
|
||||
void onSizeReceived(long size, long header);
|
||||
|
||||
@@ -33,9 +33,9 @@ public interface Callback {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure() {
|
||||
completeExceptionally(new RuntimeException("callback failed"));
|
||||
origin.onFailure();
|
||||
public void onFailure(Throwable e) {
|
||||
completeExceptionally(e);
|
||||
origin.onFailure(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -12,5 +12,5 @@ public interface ITrackDownloader {
|
||||
* @param track Music track
|
||||
* @param callback Callback to call when download status changes
|
||||
*/
|
||||
void downloadTrack(MusicTrack track, Callback callback);
|
||||
void download(MusicTrack track, Callback callback);
|
||||
}
|
||||
Reference in New Issue
Block a user