From a68e58043607956e04badbabe5e2636cc27673bb Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Fri, 27 Jan 2023 16:12:27 +0300 Subject: [PATCH] fix null link crash for music tracks --- .../ru/vtosters/lite/music/M3UDownloader.java | 31 +++++++++++++------ .../music/downloader/TrackDownloader.java | 10 ++++++ 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/music/M3UDownloader.java b/app/src/main/java/ru/vtosters/lite/music/M3UDownloader.java index 2a1fe5f09..a6d1c1655 100644 --- a/app/src/main/java/ru/vtosters/lite/music/M3UDownloader.java +++ b/app/src/main/java/ru/vtosters/lite/music/M3UDownloader.java @@ -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(); diff --git a/app/src/main/java/ru/vtosters/lite/music/downloader/TrackDownloader.java b/app/src/main/java/ru/vtosters/lite/music/downloader/TrackDownloader.java index c6414bda0..513952d67 100644 --- a/app/src/main/java/ru/vtosters/lite/music/downloader/TrackDownloader.java +++ b/app/src/main/java/ru/vtosters/lite/music/downloader/TrackDownloader.java @@ -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();