diff --git a/app/build.gradle b/app/build.gradle index 450e6b3ab..f3df2c7b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,10 +77,11 @@ android { targetSdkVersion 32 versionCode 1 versionName "1.0" - multiDexEnabled false + multiDexEnabled true } compileOptions { + coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } @@ -88,6 +89,7 @@ android { } dependencies { + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' implementation 'net.sourceforge.streamsupport:streamsupport-minifuture:1.7.4' implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.preference:preference:1.2.0' 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 92b103cf0..200a240db 100644 --- a/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java +++ b/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java @@ -73,7 +73,7 @@ public class AudioDownloader { public void onSuccess() { try { var fileName = track.toString(); - var success = FFMpeg.convert(downloadPath, musicPath + File.separator + fileName + ".mp3"); + var success = FFMpeg.convert(downloadPath, musicPath + File.separator + fileName + ".mp3", track); if (success) { notification .setContentText(AndroidUtils.getString("player_download_finished")) diff --git a/app/src/main/java/ru/vtosters/lite/feature/music/MusicArtistSelectorHook.java b/app/src/main/java/ru/vtosters/lite/feature/music/MusicArtistSelectorHook.java new file mode 100644 index 000000000..38a83ac84 --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/feature/music/MusicArtistSelectorHook.java @@ -0,0 +1,15 @@ +package ru.vtosters.lite.feature.music; + +import android.content.Context; + +import com.vk.music.fragment.MusicFragment; + +public class MusicArtistSelectorHook { + public static void navigateToSearch(Context context, String artist) { + var fr = new MusicFragment.f(); + fr.a(artist); + + // navigate + fr.a(context); + } +} 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 a1848d30a..ade05b86b 100644 --- a/app/src/main/java/ru/vtosters/lite/music/FFMpeg.java +++ b/app/src/main/java/ru/vtosters/lite/music/FFMpeg.java @@ -6,6 +6,7 @@ import android.util.Log; import com.arthenica.ffmpegkit.FFmpegKit; import com.arthenica.ffmpegkit.ReturnCode; import com.vk.core.util.ToastUtils; +import com.vk.dto.music.MusicTrack; import java.io.ByteArrayOutputStream; import java.io.File; @@ -50,7 +51,7 @@ public class FFMpeg { } } - public static boolean convert(String in, String out) { + public static boolean convert(String in, String out, MusicTrack track) { checkFFMpegLibs(); var tsesList = new File(in).listFiles(); @@ -97,8 +98,30 @@ public class FFMpeg { // convert .ts file to .mp3 file via ffmpeg - // var session = FFmpegKit.execute("-i " + in + "/all.ts -f mp3 -acodec mp3 -q:a 0 -y '" + out + "'"); - var session = FFmpegKit.execute("-y -i " + in + "/all.ts -map 0 -dn -c copy '" + out + "'"); + var sb = new StringBuilder(); + sb.append("-y -i ").append(in).append("/all.ts -map 0 -dn "); + sb.append(" -loglevel error"); + sb.append(" -hide_banner"); + if (track.f != null) { + sb.append(" -metadata title='").append(track.f).append("'"); + } + if (track.C != null) { + sb.append(" -metadata artist='").append(track.C).append("'"); + } + if (track.I != null) { + sb.append(" -metadata album='").append(track.I.getTitle()).append("'"); + } +// +// if (track.L != null) { +// var artists = track.L.stream().map(Artist::w1).reduce((s, s2) -> s + ", " + s2).orElse(""); +// sb.append(" -metadata artist='").append(artists).append("'"); +// } + + sb.append(" -c copy '").append(out).append("'"); + + var command = sb.toString(); + + var session = FFmpegKit.execute(command); var rc = session.getReturnCode(); IOUtils.deleteRecursive(new File(in)); diff --git a/smali/smali_classes3/com/vk/music/artists/chooser/MusicArtistSelector$Companion.smali b/smali/smali_classes3/com/vk/music/artists/chooser/MusicArtistSelector$Companion.smali index bd84f7948..34069c7e3 100644 --- a/smali/smali_classes3/com/vk/music/artists/chooser/MusicArtistSelector$Companion.smali +++ b/smali/smali_classes3/com/vk/music/artists/chooser/MusicArtistSelector$Companion.smali @@ -83,15 +83,18 @@ .locals 1 .line 21 - new-instance v0, Lcom/vk/music/search/MusicSearchFragment$a; + # ru.vtosters.lite.feature.music.MusicArtistSelectorHook.navigateToSearch(Context context, String artist) + invoke-static {p1, p2}, Lru/vtosters/lite/feature/music/MusicArtistSelectorHook;->navigateToSearch(Landroid/content/Context;Ljava/lang/String;)V - invoke-direct {v0}, Lcom/vk/music/search/MusicSearchFragment$a;->()V - - .line 22 - invoke-virtual {v0, p2}, Lcom/vk/music/search/MusicSearchFragment$a;->b(Ljava/lang/String;)Lcom/vk/music/search/MusicSearchFragment$a; - - .line 23 - invoke-virtual {v0, p1}, Lcom/vk/navigation/Navigator;->a(Landroid/content/Context;)V +# new-instance v0, Lcom/vk/music/search/MusicSearchFragment$a; +# +# invoke-direct {v0}, Lcom/vk/music/search/MusicSearchFragment$a;->()V +# +# .line 22 +# invoke-virtual {v0, p2}, Lcom/vk/music/search/MusicSearchFragment$a;->b(Ljava/lang/String;)Lcom/vk/music/search/MusicSearchFragment$a; +# +# .line 23 +# invoke-virtual {v0, p1}, Lcom/vk/navigation/Navigator;->a(Landroid/content/Context;)V return-void .end method