From e46d078ec0535a11b887f2876d5527fa11b56969 Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Fri, 17 Feb 2023 23:09:22 +0300 Subject: [PATCH] genius lyrics test only for songs with vk lyrics --- .../java/com/vk/api/audio/AudioGetLyrics.java | 13 ++- .../com/vk/music/view/x/LyricsHolder.java | 2 +- .../java/ru/vtosters/lite/music/Genius.java | 90 +++++++++++++++++++ smali/res/xml/preferences_debug.xml | 4 + 4 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/ru/vtosters/lite/music/Genius.java diff --git a/app/src/main/java/com/vk/api/audio/AudioGetLyrics.java b/app/src/main/java/com/vk/api/audio/AudioGetLyrics.java index def68348f..a02f14788 100644 --- a/app/src/main/java/com/vk/api/audio/AudioGetLyrics.java +++ b/app/src/main/java/com/vk/api/audio/AudioGetLyrics.java @@ -3,21 +3,32 @@ package com.vk.api.audio; import android.text.TextUtils; import androidx.annotation.NonNull; import com.vk.api.base.ApiRequest; +import com.vk.dto.music.MusicTrack; import com.vk.log.L; import org.json.JSONObject; +import ru.vtosters.lite.music.Genius; +import ru.vtosters.lite.utils.Preferences; import java.util.ArrayList; public class AudioGetLyrics extends ApiRequest { - public AudioGetLyrics(int lyrics_id, String audio_id) { + private final MusicTrack musicTrack; + + public AudioGetLyrics(int lyrics_id, String audio_id, MusicTrack mt) { super("audio.getLyrics"); c("audio_id", audio_id); + musicTrack = mt; } /* renamed from: a */ public a a(@NonNull JSONObject jSONObject) { var aVar = new a(); + if (Preferences.getBoolValue("useGenius", false)) { + aVar.a = Genius.getTextMusic(musicTrack); + return aVar; + } + try { var lines = new ArrayList<>(); var lyrics = jSONObject.getJSONObject("response").getJSONObject("lyrics"); diff --git a/app/src/main/java/com/vk/music/view/x/LyricsHolder.java b/app/src/main/java/com/vk/music/view/x/LyricsHolder.java index 91e2a9500..7ac4b567b 100644 --- a/app/src/main/java/com/vk/music/view/x/LyricsHolder.java +++ b/app/src/main/java/com/vk/music/view/x/LyricsHolder.java @@ -76,7 +76,7 @@ public class LyricsHolder extends RecyclerHolder implements View.OnC this.f18328f.b(8); ViewUtils.a(this.g, 0); ViewUtils.a(this.h, 8); - new AudioGetLyrics(e2.G, e2.y1()).a(new b(e2)).a(); + new AudioGetLyrics(e2.G, e2.y1(), e2).a(new b(e2)).a(); } @Override // android.view.View.OnClickListener diff --git a/app/src/main/java/ru/vtosters/lite/music/Genius.java b/app/src/main/java/ru/vtosters/lite/music/Genius.java new file mode 100644 index 000000000..f9470790b --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/music/Genius.java @@ -0,0 +1,90 @@ +package ru.vtosters.lite.music; + +import android.text.TextUtils; +import android.util.Log; +import com.vk.dto.music.MusicTrack; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import org.json.JSONException; +import org.json.JSONObject; +import ru.vtosters.lite.di.singleton.VtOkHttpClient; + +import java.io.IOException; +import java.util.ArrayList; + +public class Genius { + private static final String KEY = "Bearer ZTejoT_ojOEasIkT9WrMBhBQOz6eYKK5QULCMECmOhvwqjRZ6WbpamFe3geHnvp3"; + private static final String URL = "https://api.genius.com"; + private static final OkHttpClient client = VtOkHttpClient.getInstance(); + public static String getTextMusic(MusicTrack musictrack) { + var uid = musictrack.y1(); + var artist = musictrack.C; + var title = musictrack.f; + var duration = musictrack.h; + var album_id = musictrack.I; + + if (TextUtils.isEmpty(uid) || TextUtils.isEmpty(artist) || TextUtils.isEmpty(title) || duration == 0) { + Log.d("Genius", "grabTrackInfo: " + "Empty track, info: " + artist + " - " + title + " - " + duration + " - " + uid); + return "No text found"; + } + + return searchAudios(title, artist); + } + + private static String searchAudios(String track, String artist) { + if (TextUtils.isEmpty(track) || TextUtils.isEmpty(artist)) { + Log.d("Genius", "No track/artist"); + return null; + } + + Log.d("Genius", "/search/multi?q=" + artist + "%20" + track + "&from_background=0"); + + var request = new Request.a() + .b(URL + "/search/multi?q=" + artist + "%20" + track + "&from_background=0") + .a("User-Agent", "Genius/5.14.0 (Android; Android 13; Google Pixel 4 XL)") + .a("Authorization", KEY) + .a("x-genius-app-background-request", "0") + .a("x-genius-logged-out", "true") + .a("host", "api.genius.com") + .a("Content-Type", "application/x-www-form-urlencoded") + .b() + .a(); + try { + var payload = client.a(request).execute().a().g(); + Log.d("Genius", payload); + var path = new JSONObject(payload).getJSONObject("response").getJSONArray("sections").getJSONObject(0).getJSONArray("hits").getJSONObject(0).getJSONObject("result").getString("api_path"); + Log.d("Genius", path); + return getText(path); + } catch (JSONException | IOException e) { + e.printStackTrace(); + return null; + } + } + + private static String getText(String track) { + if (TextUtils.isEmpty(track)) { + Log.d("Genius", "No track"); + return null; + } + + var request = new Request.a() + .b(URL + track + "?text_format=plain") + .a("User-Agent", "Genius/5.14.0 (Android; Android 13; Google Pixel 4 XL)") + .a("Authorization", KEY) + .a("x-genius-app-background-request", "0") + .a("x-genius-logged-out", "true") + .a("host", "api.genius.com") + .a("Content-Type", "application/x-www-form-urlencoded") + .b() + .a(); + try { + var payload = client.a(request).execute().a().g(); + Log.d("Genius", payload); + + return " " + new JSONObject(payload).getJSONObject("response").getJSONObject("song").getJSONObject("lyrics").getString("plain"); + + } catch (JSONException | IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/smali/res/xml/preferences_debug.xml b/smali/res/xml/preferences_debug.xml index 0e77da5f9..36b13eed1 100644 --- a/smali/res/xml/preferences_debug.xml +++ b/smali/res/xml/preferences_debug.xml @@ -22,6 +22,10 @@ android:key="calls" android:summary="@string/messages_interface_calls_summary" android:title="@string/vtlcalls"/> +