From 94c72eb490df24a279173f3c059a162c620a9b4e Mon Sep 17 00:00:00 2001 From: aliveoutside <53598473+aliveoutside@users.noreply.github.com> Date: Mon, 11 Jul 2022 19:55:04 +0300 Subject: [PATCH] finish music downloader --- .../lite/downloaders/AudioDownloader.java | 20 ++++++++++++++----- .../java/ru/vtosters/lite/music/FFMpeg.java | 12 ++++++++--- 2 files changed, 24 insertions(+), 8 deletions(-) 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 45d2e3084..f58371df3 100644 --- a/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java +++ b/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java @@ -11,6 +11,7 @@ import com.vk.core.util.ToastUtils; import com.vk.dto.music.MusicTrack; import java.io.File; +import java.util.Random; import ru.vtosters.lite.music.Callback; import ru.vtosters.lite.music.FFMpeg; @@ -22,17 +23,26 @@ public class AudioDownloader { ToastUtils.a("Не удалось найти ссылку на аудиозапись"); return; } - var path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) - .getAbsolutePath() + File.separator + track.f; - downloadAudioAsync(track, path, new Callback() { + var musicPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath(); + var downloadPath = musicPath + File.separator + new Random().nextInt(100); + + downloadAudioAsync(track, downloadPath, new Callback() { @Override public void onProgress(int progress) { - ToastUtils.a("Загружено " + progress + "%"); } @Override public void onSuccess() { - FFMpeg.convert(path, path + "x"); + try { + var fileName = track.toString(); + FFMpeg.convert(downloadPath, musicPath + File.separator + fileName + ".mp3"); + } + catch (UnsatisfiedLinkError e) { + Log.e("AudioDownloader","Опять эти нативные либы"); + Log.e("AudioDownloader", e.getMessage()); + onFailure(); + } + ToastUtils.a("Загрузка завершена"); } diff --git a/app/src/main/java/ru/vtosters/lite/music/FFMpeg.java b/app/src/main/java/ru/vtosters/lite/music/FFMpeg.java index 057e8fdfc..78f311352 100644 --- a/app/src/main/java/ru/vtosters/lite/music/FFMpeg.java +++ b/app/src/main/java/ru/vtosters/lite/music/FFMpeg.java @@ -10,7 +10,6 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.util.Arrays; import ru.vtosters.lite.utils.Globals; @@ -50,7 +49,6 @@ public class FFMpeg { // write the list of all .ts files to a txt file in "in" directory var list = new File(in); - list.mkdirs(); var listFile = new File(list, "list.txt"); try { listFile.createNewFile(); @@ -70,14 +68,22 @@ public class FFMpeg { var concat = FFmpegKit.execute("-f concat -safe 0 -i " + in + "/list.txt -c copy " + in + "/all.ts"); // convert .ts file to .mp3 file via ffmpeg - var session = FFmpegKit.execute("-i " + in + "/all.ts -f mp3 -acodec mp3 -b 320 -y " + out); + var session = FFmpegKit.execute("-i " + in + "/all.ts -f mp3 -acodec mp3 -b 320 -y '" + out + "'"); var rc = session.getReturnCode(); if (ReturnCode.isSuccess(rc)) { + // remove temp files + deleteRecursively(new File(in)); return true; } else { Log.e("FFMpeg", "FFmpegKit failed with return code " + rc); return false; } } + + private static void deleteRecursively(File fileOrDirectory) { + if (fileOrDirectory.isDirectory()) for (File child : fileOrDirectory.listFiles()) + deleteRecursively(child); + fileOrDirectory.delete(); + } }