diff --git a/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java b/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java index 55a5a0f96..af2ef2341 100644 --- a/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java +++ b/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java @@ -1,5 +1,7 @@ package ru.vtosters.lite.downloaders; +import static ru.vtosters.lite.music.cache.FileCacheImplementation.getCacheDir; + import android.app.Notification; import android.os.Build; import android.os.Environment; @@ -55,16 +57,16 @@ public class AudioDownloader { } public static void downloadAudio(MusicTrack track) { - downloadM3U8(track); + downloadM3U8(track, false); } - private static void downloadM3U8(MusicTrack track) { + private static void downloadM3U8(MusicTrack track, boolean cache) { if (track.D == null) { ToastUtils.a(AndroidUtils.getString("link_audio_error")); return; } - var musicPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath(); + var musicPath = cache ? getCacheDir().getAbsolutePath() : Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath(); var tempId = track.d; var downloadPath = musicPath + File.separator; var notification = buildDownloadNotification(track, tempId); @@ -111,7 +113,7 @@ public class AudioDownloader { public void onSizeReceived(long size, long header) { } - }); + }, cache); } public static void cacheTrack(MusicTrack track) { @@ -122,7 +124,7 @@ public class AudioDownloader { var trackFile = FileCacheImplementation.getTrackFile(trackId); if (!trackFile.exists()) trackFile.getParentFile().mkdirs(); - downloadM3U8(track); + downloadM3U8(track, true); notifySavingToCache(track); CacheDatabaseDelegate.insertTrack(track); NotificationChannels.getNotificationManager().cancel(trackId.hashCode()); 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 b7b244754..54555c617 100644 --- a/app/src/main/java/ru/vtosters/lite/music/M3UDownloader.java +++ b/app/src/main/java/ru/vtosters/lite/music/M3UDownloader.java @@ -14,6 +14,7 @@ import java.util.concurrent.atomic.AtomicInteger; import javax.crypto.NoSuchPaddingException; +import bruhcollective.itaysonlab.libvkx.client.LibVKXClient; import java8.util.concurrent.CompletableFuture; import okhttp3.Call; import okhttp3.OkHttpClient; @@ -31,7 +32,7 @@ public class M3UDownloader implements ITrackDownloader { return Holder.INSTANCE; } - public void downloadTrack(MusicTrack track, File outDir, Callback callback) { + public void downloadTrack(MusicTrack track, File outDir, Callback callback, boolean cache) { var request = new Request.a() .b(track.D) .a(); @@ -43,12 +44,12 @@ public class M3UDownloader implements ITrackDownloader { @Override public void a(Call call, Response response) throws IOException { - parse(response.a().g(), outDir, callback, track); + parse(response.a().g(), outDir, callback, track, cache); } }); } - private void parse(String payload, File outDir, Callback callback, MusicTrack track) { + private void parse(String payload, File outDir, Callback callback, MusicTrack track, boolean cache) { VKM3UParser parser = new VKM3UParser(payload); List tses = parser.getTransportStreams(); AtomicInteger progress = new AtomicInteger(0); @@ -57,7 +58,7 @@ public class M3UDownloader implements ITrackDownloader { var tsesDir = new File(outDir, String.valueOf(payload.hashCode())); tsesDir.mkdirs(); var resultTs = new File(tsesDir, "result.ts"); - var resultMp3 = new File(outDir, IOUtils.getValidFileName(track.toString()) + ".mp3"); + var resultMp3 = new File(outDir, IOUtils.getValidFileName(cache ? LibVKXClient.asId(track) : track.toString()) + ".mp3"); callback.onProgress(5); for (TransportStream ts : tses) { diff --git a/app/src/main/java/ru/vtosters/lite/music/cache/FileCacheImplementation.java b/app/src/main/java/ru/vtosters/lite/music/cache/FileCacheImplementation.java index 4ea8490cb..0fc1fe060 100644 --- a/app/src/main/java/ru/vtosters/lite/music/cache/FileCacheImplementation.java +++ b/app/src/main/java/ru/vtosters/lite/music/cache/FileCacheImplementation.java @@ -26,7 +26,7 @@ public class FileCacheImplementation { } public static File getTrackFile(String trackId) { - return new File(getTrackFolder(trackId), "track.mp3"); + return new File(getCacheDir(), trackId + ".mp3"); } public static boolean isTrackExist(String trackId) { diff --git a/app/src/main/java/ru/vtosters/lite/music/downloader/PlaylistDownloader.java b/app/src/main/java/ru/vtosters/lite/music/downloader/PlaylistDownloader.java index d819808f3..02cee4fb1 100644 --- a/app/src/main/java/ru/vtosters/lite/music/downloader/PlaylistDownloader.java +++ b/app/src/main/java/ru/vtosters/lite/music/downloader/PlaylistDownloader.java @@ -57,7 +57,7 @@ public class PlaylistDownloader { @Override public void onSizeReceived(long size, long header) {} - }); + }, false); } } 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 44ea4e114..fa69fc586 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 @@ -17,17 +17,17 @@ public class TrackDownloader { * @param path Folder where to put track * @param callback Callback to call when download status changes */ - public static void downloadTrack(MusicTrack track, String path, Callback callback) { - download(track, path, callback, M3UDownloader.getInstance()); + public static void downloadTrack(MusicTrack track, String path, Callback callback, boolean cache) { + download(track, path, callback, M3UDownloader.getInstance(), cache); } - private static void download(MusicTrack track, String path, Callback callback, ITrackDownloader downloader) { + private static void download(MusicTrack track, String path, Callback callback, ITrackDownloader downloader, boolean cache) { File outDir = new File(path); if (!outDir.exists()) if (outDir.mkdir()) Log.v("TrackDownloader", "Directory created"); else Log.e("TrackDownloader", "Directory creation failed"); - downloader.downloadTrack(track, outDir, callback); + downloader.downloadTrack(track, outDir, callback, cache); } } diff --git a/app/src/main/java/ru/vtosters/lite/music/interfaces/ITrackDownloader.java b/app/src/main/java/ru/vtosters/lite/music/interfaces/ITrackDownloader.java index e61505674..52b30dc2b 100644 --- a/app/src/main/java/ru/vtosters/lite/music/interfaces/ITrackDownloader.java +++ b/app/src/main/java/ru/vtosters/lite/music/interfaces/ITrackDownloader.java @@ -16,5 +16,5 @@ public interface ITrackDownloader { * @param outDir Directory where to download the track * @param callback Callback to call when download status changes */ - void downloadTrack(MusicTrack track, File outDir, Callback callback); + void downloadTrack(MusicTrack track, File outDir, Callback callback, boolean cache); } \ No newline at end of file