להורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!
-
metrolist זו אפליקציית "לקוח" של יוטיוב מיוזיק. ניתן להתחבר עם החשבון גוגל שלכם.
זה נראה לי fork של innertune, שבעבר מישהו כאן העלה ללא תמונות, אך כיום האפליקציה לא עובדת.
יש מספר אתרים שמבצעים העברת פלייליסטים מספוטיפיי ליוטיוב, אולי בהמשך אעלה.
עודכן לגרסה 12.3.0
להורדהכנסו לספויילר כדי לראות את השינויים שעשיתי.
לחסימת תמונות:
בנתיב: com/metrolist/innertube/models/Thumbnail
להוסיף בתוך:.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
את השורה הזו:
.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V const-string p2, "" #:להוסיף את זה .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
לעריכת הWebview של הכניסה:
לחפש בsmali (כי השם של הclass דינמי ובעתיד יכול להשתנות):
const-string p1, "https://music.youtube.com".class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 7 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
השינויים:
.class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 9 # לשנות ל9 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V # להוסיף לפני שורה 1 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 # להחליף את השורה שהיתה מתחת לשורה 13 # מכאן invoke-virtual {p1}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings; move-result-object v0 const/4 v1, 0x0 invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setLoadsImagesAutomatically(Z)V # עד כאן .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V # להוסיף את זה const-string v1, "javascript:(function(){function cleanPage(){const footer=document.querySelector(\'footer\');if(footer){footer.remove();}; const langSelector=document.querySelector(\'[jscontroller=\"xiZRqc\"]\');if(langSelector){langSelector.remove();}; const guestModeDiv=document.querySelector(\'.RDsYTb\');if(guestModeDiv){guestModeDiv.remove();}}cleanPage();const observer=new MutationObserver(mutations=>{cleanPage();});observer.observe(document.body,{childList:true,subtree:true});})();" iget-object v2, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {v2, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V # עד כאן .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V # להוסיף את זה iget-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {p1}, Landroid/webkit/WebView;->goBack()V # עד כאן .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
-
metrolist זו אפליקציית "לקוח" של יוטיוב מיוזיק. ניתן להתחבר עם החשבון גוגל שלכם.
זה נראה לי fork של innertune, שבעבר מישהו כאן העלה ללא תמונות, אך כיום האפליקציה לא עובדת.
יש מספר אתרים שמבצעים העברת פלייליסטים מספוטיפיי ליוטיוב, אולי בהמשך אעלה.
עודכן לגרסה 12.3.0
להורדהכנסו לספויילר כדי לראות את השינויים שעשיתי.
לחסימת תמונות:
בנתיב: com/metrolist/innertube/models/Thumbnail
להוסיף בתוך:.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
את השורה הזו:
.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V const-string p2, "" #:להוסיף את זה .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
לעריכת הWebview של הכניסה:
לחפש בsmali (כי השם של הclass דינמי ובעתיד יכול להשתנות):
const-string p1, "https://music.youtube.com".class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 7 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
השינויים:
.class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 9 # לשנות ל9 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V # להוסיף לפני שורה 1 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 # להחליף את השורה שהיתה מתחת לשורה 13 # מכאן invoke-virtual {p1}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings; move-result-object v0 const/4 v1, 0x0 invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setLoadsImagesAutomatically(Z)V # עד כאן .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V # להוסיף את זה const-string v1, "javascript:(function(){function cleanPage(){const footer=document.querySelector(\'footer\');if(footer){footer.remove();}; const langSelector=document.querySelector(\'[jscontroller=\"xiZRqc\"]\');if(langSelector){langSelector.remove();}; const guestModeDiv=document.querySelector(\'.RDsYTb\');if(guestModeDiv){guestModeDiv.remove();}}cleanPage();const observer=new MutationObserver(mutations=>{cleanPage();});observer.observe(document.body,{childList:true,subtree:true});})();" iget-object v2, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {v2, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V # עד כאן .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V # להוסיף את זה iget-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {p1}, Landroid/webkit/WebView;->goBack()V # עד כאן .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
-
@yשמריהו זה לא יוטיוב מיוזיק, אלא אפליקציה בקוד פתוח שמסודרת כנגן מוזיקה מהיוטיוב. אז אמנם לא שייך לקרוא לזה פרימיום, אבל יש לזה את כל התכונות של פרימיום, אין לזה פרסומות, ואפשר אפילו להוריד שירים למכשיר.
-
@הגיע-הזמן לא...
-
metrolist זו אפליקציית "לקוח" של יוטיוב מיוזיק. ניתן להתחבר עם החשבון גוגל שלכם.
זה נראה לי fork של innertune, שבעבר מישהו כאן העלה ללא תמונות, אך כיום האפליקציה לא עובדת.
יש מספר אתרים שמבצעים העברת פלייליסטים מספוטיפיי ליוטיוב, אולי בהמשך אעלה.
עודכן לגרסה 12.3.0
להורדהכנסו לספויילר כדי לראות את השינויים שעשיתי.
לחסימת תמונות:
בנתיב: com/metrolist/innertube/models/Thumbnail
להוסיף בתוך:.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
את השורה הזו:
.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V const-string p2, "" #:להוסיף את זה .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
לעריכת הWebview של הכניסה:
לחפש בsmali (כי השם של הclass דינמי ובעתיד יכול להשתנות):
const-string p1, "https://music.youtube.com".class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 7 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
השינויים:
.class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 9 # לשנות ל9 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V # להוסיף לפני שורה 1 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 # להחליף את השורה שהיתה מתחת לשורה 13 # מכאן invoke-virtual {p1}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings; move-result-object v0 const/4 v1, 0x0 invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setLoadsImagesAutomatically(Z)V # עד כאן .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V # להוסיף את זה const-string v1, "javascript:(function(){function cleanPage(){const footer=document.querySelector(\'footer\');if(footer){footer.remove();}; const langSelector=document.querySelector(\'[jscontroller=\"xiZRqc\"]\');if(langSelector){langSelector.remove();}; const guestModeDiv=document.querySelector(\'.RDsYTb\');if(guestModeDiv){guestModeDiv.remove();}}cleanPage();const observer=new MutationObserver(mutations=>{cleanPage();});observer.observe(document.body,{childList:true,subtree:true});})();" iget-object v2, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {v2, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V # עד כאן .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V # להוסיף את זה iget-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {p1}, Landroid/webkit/WebView;->goBack()V # עד כאן .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
@lilo159 אפשר להוריד שירים ישירות ולא רק לשימוש אופליין?
-
metrolist זו אפליקציית "לקוח" של יוטיוב מיוזיק. ניתן להתחבר עם החשבון גוגל שלכם.
זה נראה לי fork של innertune, שבעבר מישהו כאן העלה ללא תמונות, אך כיום האפליקציה לא עובדת.
יש מספר אתרים שמבצעים העברת פלייליסטים מספוטיפיי ליוטיוב, אולי בהמשך אעלה.
עודכן לגרסה 12.3.0
להורדהכנסו לספויילר כדי לראות את השינויים שעשיתי.
לחסימת תמונות:
בנתיב: com/metrolist/innertube/models/Thumbnail
להוסיף בתוך:.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
את השורה הזו:
.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V const-string p2, "" #:להוסיף את זה .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
לעריכת הWebview של הכניסה:
לחפש בsmali (כי השם של הclass דינמי ובעתיד יכול להשתנות):
const-string p1, "https://music.youtube.com".class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 7 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
השינויים:
.class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 9 # לשנות ל9 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V # להוסיף לפני שורה 1 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 # להחליף את השורה שהיתה מתחת לשורה 13 # מכאן invoke-virtual {p1}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings; move-result-object v0 const/4 v1, 0x0 invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setLoadsImagesAutomatically(Z)V # עד כאן .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V # להוסיף את זה const-string v1, "javascript:(function(){function cleanPage(){const footer=document.querySelector(\'footer\');if(footer){footer.remove();}; const langSelector=document.querySelector(\'[jscontroller=\"xiZRqc\"]\');if(langSelector){langSelector.remove();}; const guestModeDiv=document.querySelector(\'.RDsYTb\');if(guestModeDiv){guestModeDiv.remove();}}cleanPage();const observer=new MutationObserver(mutations=>{cleanPage();});observer.observe(document.body,{childList:true,subtree:true});})();" iget-object v2, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {v2, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V # עד כאן .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V # להוסיף את זה iget-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {p1}, Landroid/webkit/WebView;->goBack()V # עד כאן .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
-
@lilo159 אפשר להוריד שירים ישירות ולא רק לשימוש אופליין?
@הרב-של-השכונה בעיקרון לא, אבל אפשר לחלץ שירים שהורדו עם סייר רוט.
-
metrolist זו אפליקציית "לקוח" של יוטיוב מיוזיק. ניתן להתחבר עם החשבון גוגל שלכם.
זה נראה לי fork של innertune, שבעבר מישהו כאן העלה ללא תמונות, אך כיום האפליקציה לא עובדת.
יש מספר אתרים שמבצעים העברת פלייליסטים מספוטיפיי ליוטיוב, אולי בהמשך אעלה.
עודכן לגרסה 12.3.0
להורדהכנסו לספויילר כדי לראות את השינויים שעשיתי.
לחסימת תמונות:
בנתיב: com/metrolist/innertube/models/Thumbnail
להוסיף בתוך:.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
את השורה הזו:
.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V const-string p2, "" #:להוסיף את זה .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
לעריכת הWebview של הכניסה:
לחפש בsmali (כי השם של הclass דינמי ובעתיד יכול להשתנות):
const-string p1, "https://music.youtube.com".class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 7 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
השינויים:
.class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 9 # לשנות ל9 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V # להוסיף לפני שורה 1 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 # להחליף את השורה שהיתה מתחת לשורה 13 # מכאן invoke-virtual {p1}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings; move-result-object v0 const/4 v1, 0x0 invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setLoadsImagesAutomatically(Z)V # עד כאן .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V # להוסיף את זה const-string v1, "javascript:(function(){function cleanPage(){const footer=document.querySelector(\'footer\');if(footer){footer.remove();}; const langSelector=document.querySelector(\'[jscontroller=\"xiZRqc\"]\');if(langSelector){langSelector.remove();}; const guestModeDiv=document.querySelector(\'.RDsYTb\');if(guestModeDiv){guestModeDiv.remove();}}cleanPage();const observer=new MutationObserver(mutations=>{cleanPage();});observer.observe(document.body,{childList:true,subtree:true});})();" iget-object v2, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {v2, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V # עד כאן .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V # להוסיף את זה iget-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {p1}, Landroid/webkit/WebView;->goBack()V # עד כאן .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
-
@שלום053 כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
יש אפליקציה כזו גם למחשב?
למה לא לבדוק פוסט אחד אחורה לפני שמעלים שאלה??
@צול-גאה כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
ב}יש לווינדוס??
ו
@lilo159 כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
ב. זו אפליקציה לטלפון...
-
metrolist זו אפליקציית "לקוח" של יוטיוב מיוזיק. ניתן להתחבר עם החשבון גוגל שלכם.
זה נראה לי fork של innertune, שבעבר מישהו כאן העלה ללא תמונות, אך כיום האפליקציה לא עובדת.
יש מספר אתרים שמבצעים העברת פלייליסטים מספוטיפיי ליוטיוב, אולי בהמשך אעלה.
עודכן לגרסה 12.3.0
להורדהכנסו לספויילר כדי לראות את השינויים שעשיתי.
לחסימת תמונות:
בנתיב: com/metrolist/innertube/models/Thumbnail
להוסיף בתוך:.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
את השורה הזו:
.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V .registers 7 .line 1 and-int/lit8 v0, p1, 0x7 .line 3 const/4 v1, 0x7 .line 4 if-ne v1, v0, :cond_f .line 6 invoke-direct {p0}, Ljava/lang/Object;-><init>()V const-string p2, "" #:להוסיף את זה .line 9 iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String; .line 11 iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer; .line 13 iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer; .line 15 return-void .line 16 :cond_f sget-object p2, Lo9/d0;->a:Lo9/d0; .line 18 invoke-virtual {p2}, Lo9/d0;->d()Lwe/g; .line 21 move-result-object p2 .line 22 invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V .line 25 const/4 p1, 0x0 .line 26 throw p1 .end method
לעריכת הWebview של הכניסה:
לחפש בsmali (כי השם של הclass דינמי ובעתיד יכול להשתנות):
const-string p1, "https://music.youtube.com".class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 7 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
השינויים:
.class public final Lla/g2; .super Landroid/webkit/WebViewClient; .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e" # instance fields .field public final synthetic a:Landroid/webkit/WebView; .field public final synthetic b:Lge/x; .field public final synthetic c:Ly0/w0; .field public final synthetic d:Ly0/w0; .field public final synthetic e:Ly0/w0; .field public final synthetic f:Ly0/w0; # direct methods .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V .registers 9 # לשנות ל9 invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V # להוסיף לפני שורה 1 .line 1 iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 3 iput-object p2, p0, Lla/g2;->b:Lge/x; .line 5 iput-object p3, p0, Lla/g2;->c:Ly0/w0; .line 7 iput-object p4, p0, Lla/g2;->d:Ly0/w0; .line 9 iput-object p5, p0, Lla/g2;->e:Ly0/w0; .line 11 iput-object p6, p0, Lla/g2;->f:Ly0/w0; .line 13 # להחליף את השורה שהיתה מתחת לשורה 13 # מכאן invoke-virtual {p1}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings; move-result-object v0 const/4 v1, 0x0 invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setLoadsImagesAutomatically(Z)V # עד כאן .line 16 return-void .end method # virtual methods .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V .registers 9 .line 1 const-string v0, "view" .line 3 invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V # להוסיף את זה const-string v1, "javascript:(function(){function cleanPage(){const footer=document.querySelector(\'footer\');if(footer){footer.remove();}; const langSelector=document.querySelector(\'[jscontroller=\"xiZRqc\"]\');if(langSelector){langSelector.remove();}; const guestModeDiv=document.querySelector(\'.RDsYTb\');if(guestModeDiv){guestModeDiv.remove();}}cleanPage();const observer=new MutationObserver(mutations=>{cleanPage();});observer.observe(document.body,{childList:true,subtree:true});})();" iget-object v2, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {v2, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V # עד כאן .line 6 const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)" .line 8 iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView; .line 10 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 13 const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)" .line 15 invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 18 if-eqz p2, :cond_42 .line 20 const-string p1, "https://music.youtube.com" .line 22 const/4 v0, 0x0 .line 23 invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z .line 26 move-result p1 .line 27 const/4 v0, 0x1 .line 28 if-ne p1, v0, :cond_42 .line 30 invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; .line 33 move-result-object p1 .line 34 invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; .line 37 move-result-object p1 .line 38 const-string p2, "getCookie(...)" .line 40 invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V .line 43 iget-object p2, p0, Lla/g2;->c:Ly0/w0; .line 45 invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V # להוסיף את זה iget-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView; invoke-virtual {p1}, Landroid/webkit/WebView;->goBack()V # עד כאן .line 48 new-instance v0, Lla/v1; .line 50 iget-object v3, p0, Lla/g2;->f:Ly0/w0; .line 52 const/4 v5, 0x1 .line 53 iget-object v1, p0, Lla/g2;->d:Ly0/w0; .line 55 iget-object v2, p0, Lla/g2;->e:Ly0/w0; .line 57 const/4 v4, 0x0 .line 58 invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V .line 61 const/4 p1, 0x3 .line 62 iget-object p2, p0, Lla/g2;->b:Lge/x; .line 64 invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1; .line 67 :cond_42 return-void .end method
-
@ikrh7891 כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
@lilo159 יש כזו לאייפון ?
יש לך את preTub
ללא פרסומות ואפשר לצאת מהאפליקציה -
@שלום053 כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
יש אפליקציה כזו גם למחשב?
למה לא לבדוק פוסט אחד אחורה לפני שמעלים שאלה??
@צול-גאה כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
ב}יש לווינדוס??
ו
@lilo159 כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
ב. זו אפליקציה לטלפון...
@צול-גאה כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
@שלום053 כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
יש אפליקציה כזו גם למחשב?
למה לא לבדוק פוסט אחד אחורה לפני שמעלים שאלה??
@צול-גאה כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
ב}יש לווינדוס??
ו
@lilo159 כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
ב. זו אפליקציה לטלפון...
אני שאלתי אם יש אפליקציה כזו גם למחשב.
ואתה אומר לי שכתוב שהאפליקציה הזו היא לטלפון.
צריך עוד הסבר? -
@צול-גאה כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
@שלום053 כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
יש אפליקציה כזו גם למחשב?
למה לא לבדוק פוסט אחד אחורה לפני שמעלים שאלה??
@צול-גאה כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
ב}יש לווינדוס??
ו
@lilo159 כתב בלהורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!:
ב. זו אפליקציה לטלפון...
אני שאלתי אם יש אפליקציה כזו גם למחשב.
ואתה אומר לי שכתוב שהאפליקציה הזו היא לטלפון.
צריך עוד הסבר? -
@lilo159 אפשר להוריד שירים ישירות ולא רק לשימוש אופליין?
@הרב-של-השכונה אם יש לך רוט אתה נכנס ל
data/data/com.metrolist.music/files/download
אתה משנה סיומת מexo לmp3