From dcf14266f23a4ac881b1c05e80c48f021dfcbab2 Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Fri, 28 Apr 2023 22:11:53 +0300 Subject: [PATCH] cleanup catalog json injector --- .../catalog/inject/CatalogJsonInjector.java | 128 ++++++++---------- .../buttons/CatalogButtonOpenSection$a.smali | 33 ++++- 2 files changed, 91 insertions(+), 70 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java b/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java index 24cab5f7a..f0ab25622 100644 --- a/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java +++ b/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java @@ -11,7 +11,6 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import ru.vtosters.lite.di.singleton.VtOkHttpClient; -import ru.vtosters.lite.feature.groupslist.GroupsCatalogInjector; import ru.vtosters.lite.music.cache.CacheDatabaseDelegate; import ru.vtosters.lite.utils.AccountManagerUtils; import ru.vtosters.lite.utils.AndroidUtils; @@ -146,67 +145,65 @@ public class CatalogJsonInjector { return json; } - public static JSONObject catalogInjector(JSONObject json) { + public static void catalogInjector(JSONObject json) { try { var section = json.optJSONObject("section"); + if (section == null) return; // early return if section is null var useOldAppVer = getBoolValue("useOldAppVer", false); var isUsersCatalog = section.optString("url").equals("https://vk.com/audios" + getUserId() + "?section=" + (useOldAppVer ? "all" : "general")); - if (isUsersCatalog && CacheDatabaseDelegate.hasTracks() && !LibVKXClient.isIntegrationEnabled()) { - var blocks = section.getJSONArray("blocks"); - var noPlaylists = !json.has("playlists"); + if (!isUsersCatalog || !CacheDatabaseDelegate.hasTracks() || LibVKXClient.isIntegrationEnabled()) return; // early return if not users catalog or no tracks or integration enabled + var blocks = section.getJSONArray("blocks"); + var noPlaylists = !json.has("playlists"); - // Log.d("catalogInjector", "type: " + blocks.optJSONObject(0).optJSONArray("buttons").optJSONObject(0).optJSONObject("action").optString("type")); + if (noPlaylists) { + json.put("playlists", new JSONArray().put(getPlaylist())); + Log.d("catalogInjector", "added new pl"); + } else { + try { + json.optJSONArray("playlists").put(getPlaylist()); + Log.d("catalogInjector", "added to exist pl"); + } catch (Exception e) { + Log.d("catalogInjector", e.toString()); + } + } - if (noPlaylists) { - json.put("playlists", new JSONArray().put(getPlaylist())); - Log.d("catalogInjector", "added new pl"); - } else { - try { - json.optJSONArray("playlists").put(getPlaylist()); - Log.d("catalogInjector", "added to exist pl"); - } catch (Exception e) { - Log.d("catalogInjector", e.toString()); - } + if ((!useOldAppVer || noPlaylists) && !isLoaded) { + var newBlocks = new JSONArray(); + + newBlocks + .put(getCatalogHeader()) + .put(getCatalogPlaylist()) + .put(getCatalogSeparator()); + + isLoaded = true; + + Log.d("catalogInjector", "added cache catalog playlist"); + + for (int i = 0; i < blocks.length(); i++) { + newBlocks.put(blocks.optJSONObject(i)); } - if ((!useOldAppVer || noPlaylists) && !isLoaded) { - var newBlocks = new JSONArray(); + section.put("blocks", newBlocks); + } else { + for (int i = 0; i < blocks.length(); i++) { + var j = blocks.optJSONObject(i); + var type = j.optString("data_type"); - newBlocks - .put(getCatalogHeader()) - .put(getCatalogPlaylist()) - .put(getCatalogSeparator()); + if (type.equals("music_playlists") && j.has("playlists_ids")) { + var newarr = new JSONArray(); + var playlists_ids = j.optJSONArray("playlists_ids"); - isLoaded = true; + newarr.put(getUserId() + "_-1"); - Log.d("catalogInjector", "added cache catalog playlist"); - - for (int i = 0; i < blocks.length(); i++) { - newBlocks.put(blocks.optJSONObject(i)); - } - - section.put("blocks", newBlocks); - } else { - for (int i = 0; i < blocks.length(); i++) { - var j = blocks.optJSONObject(i); - var type = j.optString("data_type"); - - if (type.equals("music_playlists") && j.has("playlists_ids")) { - var newarr = new JSONArray(); - var playlists_ids = j.optJSONArray("playlists_ids"); - - newarr.put(getUserId() + "_-1"); - - for (int n = 0; n < playlists_ids.length(); n++) { - newarr.put(playlists_ids.optString(n)); - } - - Log.d("catalogInjector", "added to pl ids"); - - j.put("playlists_ids", newarr); - break; + for (int n = 0; n < playlists_ids.length(); n++) { + newarr.put(playlists_ids.optString(n)); } + + Log.d("catalogInjector", "added to pl ids"); + + j.put("playlists_ids", newarr); + break; } } } @@ -214,8 +211,6 @@ public class CatalogJsonInjector { } catch (JSONException e) { Log.d("catalogInjector", e.toString()); } - - return json; } public static JSONObject injectIntoCatalogs(JSONObject json) { @@ -227,7 +222,7 @@ public class CatalogJsonInjector { return json; } - public static JSONObject musicLinkFix(JSONObject json) { + public static void musicLinkFix(JSONObject json) { var links = json.optJSONArray("links"); if (links != null && !getBoolValue("useOldAppVer", false)) { @@ -244,7 +239,7 @@ public class CatalogJsonInjector { e.printStackTrace(); } - return catalogInjector(json); + catalogInjector(json); } public static JSONObject fixArtists(JSONObject json) { @@ -261,21 +256,18 @@ public class CatalogJsonInjector { public static void fixHeaders(JSONObject json) { var blocks = json.optJSONArray("blocks"); - if (blocks != null) { - for (int i = 0; i < blocks.length(); i++) { - var block = blocks.optJSONObject(i); - var layout = block.optJSONObject("layout"); - if (layout != null) { - var name = layout.optString("name"); - if (name.equals("header_extended")) { - if (layout.has("top_title")) blocks.remove(i); - try { - layout.put("name", "header"); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } + if (blocks == null) return; // early return if blocks are null + for (int i = 0; i < blocks.length(); i++) { + var block = blocks.optJSONObject(i); + var layout = block.optJSONObject("layout"); + if (layout == null) continue; // skip iteration if layout is null + var name = layout.optString("name"); + if (!name.equals("header_extended")) continue; // skip iteration if name is not "header_extended" + if (layout.has("top_title")) blocks.remove(i); + try { + layout.put("name", "header"); + } catch (JSONException e) { + e.printStackTrace(); } } } diff --git a/smali/smali_classes2/com/vk/catalog2/core/api/dto/buttons/CatalogButtonOpenSection$a.smali b/smali/smali_classes2/com/vk/catalog2/core/api/dto/buttons/CatalogButtonOpenSection$a.smali index 34de29e13..4760502ab 100644 --- a/smali/smali_classes2/com/vk/catalog2/core/api/dto/buttons/CatalogButtonOpenSection$a.smali +++ b/smali/smali_classes2/com/vk/catalog2/core/api/dto/buttons/CatalogButtonOpenSection$a.smali @@ -46,9 +46,38 @@ .end annotation .line 2 - invoke-static { p1 }, Lru/vtosters/lite/feature/groupslist/GroupsCatalogInjector;->injectIntoSerializer(Lcom/vk/core/serialize/Serializer;)Lcom/vk/catalog2/core/api/dto/buttons/CatalogButtonOpenSection; + new-instance v0, Lcom/vk/catalog2/core/api/dto/buttons/CatalogButtonOpenSection; - move-result-object v0 + .line 3 + invoke-virtual {p1}, Lcom/vk/core/serialize/Serializer;->v()Ljava/lang/String; + + move-result-object v1 + + const-string v2, "" + + if-eqz v1, :cond_0 + + goto :goto_0 + + :cond_0 + move-object v1, v2 + + .line 4 + :goto_0 + invoke-virtual {p1}, Lcom/vk/core/serialize/Serializer;->v()Ljava/lang/String; + + move-result-object p1 + + if-eqz p1, :cond_1 + + goto :goto_1 + + :cond_1 + move-object p1, v2 + + .line 5 + :goto_1 + invoke-direct {v0, v1, p1}, Lcom/vk/catalog2/core/api/dto/buttons/CatalogButtonOpenSection;->(Ljava/lang/String;Ljava/lang/String;)V return-object v0 .end method