fix null link crash for music tracks

This commit is contained in:
gdlbo
2023-01-27 16:12:27 +03:00
parent 0ef33f5c52
commit a68e580436
2 changed files with 31 additions and 10 deletions
@@ -1,5 +1,6 @@
package ru.vtosters.lite.music;
import android.util.Log;
import com.vk.dto.music.MusicTrack;
import java.io.File;
@@ -33,6 +34,12 @@ public class M3UDownloader implements ITrackDownloader {
}
public void downloadTrack(MusicTrack track, File outDir, Callback callback, boolean cache) {
if (track.D.isEmpty()) {
Log.d("TrackDownloader", "link error: " + track.y1() + ", title: " + M3UDownloader.getTitle(track));
callback.onFailure();
return;
}
var request = new Request.a().b(track.D).a();
try {
var response = client.a(request).execute().a().g();
@@ -60,16 +67,7 @@ public class M3UDownloader implements ITrackDownloader {
tsesDir.mkdirs();
var resultTs = new File(tsesDir, "result.ts");
String title = null;
if (track.f != null) {
title = track.f;
if (!track.g.isEmpty()) {
title += " (" + track.g + ")";
}
}
var fileName = IOUtils.getValidFileName((cache ? "track" : track.C + " - " + title) + ".mp3");
var fileName = IOUtils.getValidFileName((cache ? "track" : track.C + " - " + getTitle(track)) + ".mp3");
var resultMp3 = new File(outDir, fileName);
callback.onProgress(5);
@@ -109,6 +107,19 @@ public class M3UDownloader implements ITrackDownloader {
}).thenRun(() -> IOUtils.deleteRecursive(tsesDir)).thenRun(callback::onSuccess);
}
public static String getTitle(MusicTrack track) {
String title = null;
if (track.f != null) {
title = track.f;
if (!track.g.isEmpty()) {
title += " (" + track.g + ")";
}
}
return title;
}
// Initialization-on-demand
private static class Holder {
private static final M3UDownloader INSTANCE = new M3UDownloader();
@@ -16,6 +16,12 @@ import ru.vtosters.lite.music.interfaces.ITrackDownloader;
public class TrackDownloader {
public static void downloadTrack(MusicTrack track, String path, Callback callback) {
if (track.D.isEmpty()) {
Log.d("TrackDownloader", "link error: " + track.y1() + ", title: " + M3UDownloader.getTitle(track));
callback.onFailure();
return;
}
download(track, path, callback, M3UDownloader.getInstance(), false);
}
@@ -23,6 +29,10 @@ public class TrackDownloader {
if (CacheDatabaseDelegate.isCached(track.y1())) {
callback.onSuccess();
return;
} else if (track.D.isEmpty()) {
Log.d("TrackDownloader", "link error: " + track.y1() + ", title: " + M3UDownloader.getTitle(track));
callback.onFailure();
return;
}
var path = FileCacheImplementation.getTrackFolder(LibVKXClient.asId(track)).getAbsolutePath();