Kotlin Multiplatform Music Downloader, Supports Spotify / Gaana / Youtube Music / Jio Saavn / SoundCloud. NOTE: BEING REWRITTEN, SO STAY TUNED.

Overview

Web Cover Android Cover Desktop Cover

SpotiFlyer

  • Kotlin Multiplatform Music Downloader ,supports Spotify, Youtube, Gaana, Jio-Saavn and SoundCloud.

Supports- Playlist, Albums, Tracks. (If You know Any Source for Episodes/Podcasts create an Issue sharing It.)

Currently running on:

GitHub stars GitHub forks GitHub watchers

Encourage this repo by giving it a Star .

SpotiFlyer is an App(Written in Kotlin), which aims to work as:

  • Downloads: Albums, Tracks and Playlists,etc
  • Save your Data ,by not Streaming your Fav Songs Online again & again(Just Download Them!)
  • No ADS!
  • Works straight out of the box and does not require you to generate or mess with your API keys (already included).

Supported Platforms:

  • Spotify
  • Gaana
  • Youtube
  • Youtube Music
  • Jio-Saavn
  • SoundCloud
  • (more coming soon)

💻 Install

Platform Download Status
Android Download Button Stable
Windows Download Button Stable
Windows-JAR Download Button Stable
MacOS-JAR Download Button Stable
Linux-DEB Download Button Stable
Linux-JAR Download Button Stable
Web Download Button ⚠️ Beta
  • To run the jar version, you need JAVA installed.
  • MacOs DMG is not notarized and signed using a certificate , so Use jar in mac for now.
Get it on F-Droid

Want to Contribute 🙋‍♂️ ?

Want to contribute? Great! All contributions are welcome, from code to documentation to graphics to design suggestions to bug reports. Please use GitHub to its fullest-- contribute Pull Requests, contribute tutorials or other wiki content-- whatever you have to offer, we can use it!

Please Donate to support me and my work!
ko-fi
paypal

Want to discuss? 💬

Have any questions, doubts or want to present your opinions, views? You're always welcome. You can start discussions.

Todos 📄

  • Write Tests.
  • Support for Podcasts/Episodes and Shows.
  • Build a Media Player into this app. #113

Note

The availability of YouTube Music / JioSaavn in your country is important for this app to work. The reason behind this is, we use YouTube Music / JioSaavn to filter out our search results and get the desired song downloaded from Youtube Music OR other providers we may use(like Jio Saavn). To check if YouTube Music is available in your country, visit YouTube Music.

I am hosting a server for WEB APP on my own personal device , so expect some downtimes, If you have a server available and would like to share , open an issue or ping me wherever you can get a hold of me.

Permissions Info:

  • NETWORK- (INTERNET, ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE): to access the online streaming services, and Confirm Network Connectivity.
  • STORAGE- READ_STORAGE_PERMISSION, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, MANAGE_EXTERNAL_STORAGE): to save Downloaded Media Files.
  • QUERY_ALL_PACKAGES- in order to check if Youtube Music, Spotify, Gaana, JioSaavn, etc apps are installed and if they are, user can directly open them.
  • REQUEST_IGNORE_BATTERY_OPTIMIZATIONS: User Allows App to Run in Background at runtime in Permission Dialog.
  • Wake Lock: Don't let Wifi/Internet Sleep in screen off / dozing state when Songs are being downloaded.
  • Foreground Service: Service responsible to download and save songs to storage even after app is exited/background.
  • NOTE: Analytics and Crashlytics are OPT-IN (Disabled by Default) and are Self-Hosted.

License GPL-License

GPL-3.0 License This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Free Software, Hell Yeah!

Credits

  • Some Logos are Based on Logos by Freepik.

Disclaimer

Downloading copyright songs may be illegal in your country. This tool is for educational purposes only and was created only to show how Music Platform's Apis like Spotify's API can be exploited to download music. Please support the artists by buying their music.

Comments
  • [ATTENTION HERE] : Use Apk Provided here, until I can fix all issues

    [ATTENTION HERE] : Use Apk Provided here, until I can fix all issues

    We use an External 3rd Party m4a -> mp3 converter which seems to have changed their API behavior and hence APP is DOWN and not working for the moment.

    I request everybody to give me a few days, I will make some time and fix it as soon as possible.(Probably this Weekend, i.e., by Aug 9)

    Please refrain from creating more issues until I fix the app and release a new version. I appreciate your understanding.

    bug 
    opened by Shabinder 60
  • Spotify Stopped because of rate limiting.

    Spotify Stopped because of rate limiting.

    Describe the bug: Opening a playlist results in this error:

    Client request(https://api.spotify.com/v1/playlists/{PLAYLIST_ID} invalid: 429 . Text: "Too many requests"
    

    I got this after downloading roughly 20 songs earlier that day. In the past I was able to download hundreds of songs without any issues.

    Media Links Used: Not specific to one link. This happens with every playlist link.

    Expected behavior Shows list of songs of a playlist

    Screenshots: image

    StackTrace: No errors in Logcat...

    Device Info (please complete the following information):

    • Device: OnePlus 7 Pro
    • OS: Android 11
    • Version: 3.6.1 (latest from F-Droid)
    • Country: Germany
    bug 
    opened by T-vK 31
  • [BUG] : ffmpeg issue on MacOS

    [BUG] : ffmpeg issue on MacOS

    It shows a warning that "No FFmpeg found at path" and this error when downloading a song:

    com.github.kokorin.jaffree.JaffreeException: Failed to start process. at com.github.kokorin.jaffree.process.ProcessHandler.execute(ProcessHandler.java:148) at com.github.kokorin.jaffree.ffmpeg.FFmpeg.execute(FFmpeg.java:400) at com.shabinder.common.core_components.media_converter.DesktopMediaConverter$convertAudioFile$2.invokeSuspend(DesktopMediaConverter.kt:34) at com.shabinder.common.core_components.media_converter.DesktopMediaConverter$convertAudioFile$2.invoke(DesktopMediaConverter.kt) at com.shabinder.common.core_components.media_converter.DesktopMediaConverter$convertAudioFile$2.invoke(DesktopMediaConverter.kt) at com.shabinder.common.core_components.parallel_executor.ParallelExecutor$Operation.execute(ParallelExecutor.kt:170) at com.shabinder.common.core_components.parallel_executor.ParallelExecutor$launchProcessor$1.invokeSuspend(ParallelExecutor.kt:113) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.selects.SelectBuilderImpl.resumeWith(Select.kt:304) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665) Caused by: java.io.IOException: Cannot run program "ffmpeg": error=2, No such file or directory at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071) at com.github.kokorin.jaffree.process.ProcessHandler.execute(ProcessHandler.java:141) ... 14 more Caused by: java.io.IOException: error=2, No such file or directory at java.base/java.lang.ProcessImpl.forkAndExec(Native Method) at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:319) at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:250) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)

    bug 
    opened by lordelan 23
  • app crashing

    app crashing

    it just opens a small black window when i open the app from the start menu and then it crashed if i do it with admin privs it shows the small window with the logo and crashed i downloaded using the exe and i repaired the file

    opened by thaynos 19
  • All playlists have only 100 songs

    All playlists have only 100 songs

    Hi

    I have been using your app. And I noticed that all playlists are limited to 100 songs, even though they have more. Is there any reason for this limitation?

    bug 
    opened by Demosteneus 15
  • [BUG] : Trying to download from Spotify fails

    [BUG] : Trying to download from Spotify fails

    All downloads fail. I am running the newest version

    Media Links Used: https://open.spotify.com/playlist/5bmSJgFmBjQWpOw1ImERp7

    Expected behavior Download songs

    StackTrace:

    DownloadLinkFetchFailed(errorTrace=Find Link for Sinister Kid 
    
    Fetching From Saavn Failed:DownloadLinkFetchFailed(errorTrace=No SAAVN Match Found for Sinister Kid)
    	at com.shabinder.common.providers.saavn.requests.JioSaavnRequests$DefaultImpls.findBestSongDownloadURL(JioSaavnRequests.kt:19)
    	at com.shabinder.common.providers.saavn.requests.JioSaavnRequests$findBestSongDownloadURL$1.invokeSuspend(Unknown Source:10)
    	at q7.a.resumeWith(ContinuationImpl.kt:3)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3)
    	at q7.a.resumeWith(ContinuationImpl.kt:9)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3)
    	at q7.a.resumeWith(ContinuationImpl.kt:9)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3)
    	at q7.a.resumeWith(ContinuationImpl.kt:9)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3)
    	at q7.a.resumeWith(ContinuationImpl.kt:9)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3)
    	at q7.a.resumeWith(ContinuationImpl.kt:9)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:18)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:1)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:4)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:4)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:1)
    
    
    
    Fetching From YT-Music Failed:io.ktor.client.features.ServerResponseException: Server error(https://yt1s.com/api/ajaxSearch/index: 503 Service Temporarily Unavailable. Text: "<!DOCTYPE HTML>
    <html lang="en-US">
    <head>
      <meta charset="UTF-8" />
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
      <meta name="robots" content="noindex, nofollow" />
      <meta name="viewport" content="width=device-width,initial-scale=1" />
      <title>Just a moment...</title>
      <style type="text/css">
        html, body {width: 100%; height: 100%; margin: 0; padding: 0;}
        body {background-color: #ffffff; color: #000000; font-family:-apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, "Helvetica Neue",Arial, sans-serif; font-size: 16px; line-height: 1.7em;-webkit-font-smoothing: antialiased;}
        h1 { text-align: center; font-weight:700; margin: 16px 0; font-size: 32px; color:#000000; line-height: 1.25;}
        p {font-size: 20px; font-weight: 400; margin: 8px 0;}
        p, .attribution, {text-align: center;}
        #spinner {margin: 0 auto 30px auto; display: block;}
        .attribution {margin-top: 32px;}
        @keyframes fader     { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }
        @-webkit-keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }
        #cf-bubbles > .bubbles { animation: fader 1.6s infinite;}
        #cf-bubbles > .bubbles:nth-child(2) { animation-delay: .2s;}
        #cf-bubbles > .bubbles:nth-child(3) { animation-delay: .4s;}
        .bubbles { background-color: #f58220; width:20px; height: 20px; margin:2px; border-radius:100%; display:inline-block; }
        a { color: #2c7cb0; text-decoration: none; -moz-transition: color 0.15s ease; -o-transition: color 0.15s ease; -webkit-transition: color 0.15s ease; transition: color 0.15s ease; }
        a:hover{color: #f4a15d}
        .attribution{font-size: 16px; line-height: 1.5;}
        .ray_id{display: block; margin-top: 8px;}
        #cf-wrapper #challenge-form { padding-top:25px; padding-bottom:25px; }
        #cf-hcaptcha-container { text-align:center;}
        #cf-hcaptcha-container iframe { display: inline-block;}
      </style>
    
          <meta http-equiv="refresh" content="35">
      <script type="text/javascript">
        //<![CDATA[
        (function(){
          
          window._cf_chl_opt={
            cvId: "2",
            cType: "non-interactive",
            cNounce: "14415",
            cRay: "69a179cc8e3805f1",
            cHash: "c60ea3c95bfab48",
            cFPWv: "g",
            cTTimeMs: "1000",
            cRq: {
              ru: "aHR0cHM6Ly95dDFzLmNvbS9hcGkvYWpheFNlYXJjaC9pbmRleA==",
              ra: "S3RvciBjbGllbnQ=",
              rm: "UE9TVA==",
              d: "M19YuQBoC3sX/Jo1LYW8nOxe+W200eyZC/vB8s4E1zubYUEkcGY8lTq1tqhaXagS16r4U63cWlOZ1GPHlUMVnXydp8JLZHIK85yNPwRqjyTCHtOo3ShV/rX2D7UOUoLAdi+e7mducpllO373rsP+SQ1rXjXGuuhNmXr90QA+RyRLf3VYg1tdQHWlKRthAP49QAxciltXzTw/i8NHQriNvDbysR3oi35SCPtmbxAz+xZnc+4waSkSB6wKcHHLEZM9ML7IK0Idfcz08DD3GErNjwLut1WBUzeld0kpP22c1xtBj8mZJ/phoWUYzIBww8ZXImDFB85A7eQw1fNAM+N466x8xluF25239xb1MuIkSs45QxYcsi/OgCUpa0z5o7960Fh2UuvJSo1Po3TbY7JtcM0pPG1H+OjXENAaEmbadCwoxJXbK3cy425YuLnGBPpmsrdwBfkLnTEA8mjxabomWuFGgNZufTlCyLq/NjWkVQWEtbH9cVgxap705oTsw1YgOsSmQZsh5PcvuuyvTrVLpg==",
              t: "MTYzMzU1MDQyNS4wNDcwMDA=",
              m: "QhT/gYSmnvj9BtZLXIdndfbZ1WnR0k0+JgJxL/Ir17k=",
              i1: "I7uHycoMsjzwLbU523Jn9A==",
              i2: "XTiQJaL20iO3IMWdczEZBw==",
              zh: "slbOGnEscRNxFiOnTsX0AKh1TuDl2qbz+DoFMtxCWD8=",
              uh: "oz7OrxkrnxacOh3btzIq4iwAY0NK/hCkZ0LN2B2nTlI=",
              hh: "LBSS74KkcrNPPaDUVSmWQv8ZxJLhGAngcURUX8gX1AQ=",
            }
          }
          window._cf_chl_enter = function(){window._cf_chl_opt.p=1};
          
        })();
        //]]>
      </script>
      
    
    </head>
    <body>
      <table width="100%" height="100%" cellpadding="20">
        <tr>
          <td align="center" valign="middle">
              <div class="cf-browser-verification cf-im-under-attack">
      <noscript>
        <h1 data-translate="turn_on_js" style="color:#bd2426;">Please turn JavaScript on and reload the page.</h1>
      </noscript>
      <div id="cf-content" style="display:none">
        
        <div id="cf-bubbles">
          <div class="bubbles"></div>
          <div class="bubbles"></div>
          <div class="bubbles"></div>
        </div>
        <h1><span data-translate="checking_browser">Checking your browser before accessing</span> yt1s.com.</h1>
        
        <div id="no-cookie-warning" class="cookie-warning" data-translate="turn_on_cookies" style="display:none">
          <p data-translate="turn_on_cookies" style="color:#bd2426;">Please enable Cookies and reload the page.</p>
        </div>
        <p data-translate="process_is_automatic">This process is automatic. Your browser will redirect to your requested content shortly.</p>
        <p data-translate="allow_5_secs" id="cf-spinner-allow-5-secs" >Please allow up to 5 seconds&hellip;</p>
        <p data-translate="redirecting" id="cf-spinner-redirecting" style="display:none">Redirecting&hellip;</p>
      </div>
       
      <form class="challenge-form" id="challenge-form" action="/api/ajaxSearch/index?__cf_chl_jschl_tk__=pmd_1Qg15BNcKC8jAA6dSqUMnGPqhrjXRuBFVkPtgOLS4_g-1633550425-0-gqNtZGzNAiWjcnBszQgR" method="POST" enctype="application/x-www-form-urlencoded">
        <input type="hidden" name="md" value="KuSQOFacz8XnjNpj53.F7BNlcT7dMayPrMkJ2OTaODE-1633550425-0-AZRdNtorRx5k9OdTdYP6tXgqozd_hInriiN2rrghE-2Hb_miz91uD9ovnSg0dpzujD1p51j-rZc8wVfXplJ54M33rYim4d4J1_WClk9Wi0n5UtvUdZADxmpzl2zlTj2Kj5sYYf4HY7niAsl3stLeHVhHKFwfDjIRDJLMNYULTmpQmr5O2NeEn4LKMjQXeNn_zwbK-LurvRnoCRY9HZexvwlpCGrbJb3gQkGalp-yzBnp7dUglJInP_E7RnyS_khUCrptKBL5xbo8_ijv_zPYAowKmCckr7xVZ5olxlBms-ac_luYVd953KlI83NXUnf2MY9j7AwlPkGb2hIC96S3zSmkDW59IuK-IoJj5Lbm0NXLBET6YXTbzcyDaoLp5bCHnmtJW2cs6wIxXRG1mf3OZfnyz0W1KmhTQHWT84tuDboMky8z22nif8dN8a1KzHZAqNpE7N9UmbxNTctabRtkGkvMQzGOYow3o9-YG3p-WEB3" />
        <input type="hidden" name="r" value="nYDTgX_GL4fC1bRZ8nhJMyCZ5DdFe49VievDPGqfJh4-1633550425-0-AdK22U+JKAYJ8ZcVnPC0B+LdoKTnqtIgbV7SHlPRfaXUJrvBe258z5Sw7enkpb4YwsGMUyP9odkZwxgGYDEPrR29ItpDvmlY0nxZH/Cq0c7Drc3tDP50+DgvWrFlwClFo+rJaMMbEQwotZBze2Kp1fM1E3vAGiagLM0+NSYWkAhdTXkdWBSre4L2EZ0MP+EG+TlIBJTGdbck47ZBH/CMOIzBG/bYc92O8u0mrbUGOUfzI++MVU2sk2GocbleEMnrpisktRp6Iwxm3sQS5bRAbFvzksEMI2h49b6OLof5UMHwevA2QqlnpYEoumOvd5iF2C/fWLPqQFuiwfnoAxoIkv2cMgLhoeYw9KkmLhDjUPUbdC48t2DZWTeHh6sj2eEUGXJernsxctCRAknBqshyP1zihdvgfq8E5nsdEYjfPi0ERIiOSus5QVG+qlL+vEZYeK3WYsqFju0MoIvHFILrVxfT9gXqhQ2q5COaVuzeocxH/yZbVUrGsdZdxQmgJZ5Q9EpfNAQCegxvJEIViyCxfgNNzr1zuXRVnxxiDul8SOJfFUc6iee7BAafdj39emvlTXCfZGgmV03lIjfxpc3RxAXf/H+DUdiEVBfWTG3DgZQPRgTz2w6Qj+5A77t/pqWArZX6JdFf+P78xxVbDwuJQHBG2rTyXsllHT1yA0jFioYRT28KLWnpVVFh4K0/a06kFuA2urn4S5922EcQbRLVa1EvD3P23PHLqYzSWqWf5c0xO/JL7FwRhf+NQqX7EKNozjUbHNHmzK+QQabTmF2LQsTTCO7dOzbKQyjaMbcvjkaKYe5yHdHGFSOfVLKdnGMmHxTBiwuTH9sczEtGjj4BC1NxPNmKxOoM9qre9pj4RsWnnAdC3uOpY7bzkcTZJMf5N53IRr56PQr8i3BL7lYqsKcl7KLC+icW4yubKfipgEGrNoG++zEcxzwMGFLUKvgqKWhAUsDOYAD36L7r6tw9I1cjCjKw/3UqLpfFOOXZzkReBvVtlWBscGjTDgBe1aaP8d84+kCodRlw8AfWHxOGSc6BnwpvWnmpE5v6fTXlHE2jSMJ0fxZcgazYEcpyCMuej6MZKRI/EeVZrbxMFHXlQtPjodYSO/xG/uBvB2QuqN2hpb1nmYa+YTUxG7Phuwe9LORwByAuKPjRJSdJJt8VE3JOQi7REOk6piKyLhlqot0lfphbcl0zF0ZI4CiY/UloVNgjWra9aRWJE1R5TX+KZeAJ8+dCTiuYcnarDQ+kuGXPG2GJPmqysjezEEtF6nzDo/G0VvzQVGPqkQJO3AJXGbrk+mgWTDOWKL4vRvGrgBe5OJo9sCuSQ7pdf1W9bAQ5m2NmmEv8wQlIRBGodbrX/wSAj4TsPi30LNX89O8gPnnu4bcLmCMuglDJCekQY8MjIgr7ArWdZzWngzlEjOg6BzCJF1LDlhHZ2wkw3aYlSwypzIkqhIRMzY6FR0x1PKXLI/AIIk/fwussMuJyRAACwigykKSQp5wdq9XVYl1b7ssNeTbgG1pRR+oz1Cr0VhKyGuHOmm12DuavwT2ZN1dEsQtLMHEpFj3GyxheAMFzInjPTZHFJV6zlDE6AxpV0s21Cl/xjy8DYV5rMv6QAdTDmtAcoTHkArCWmoB0fG1Ay06s9oFK0By+0UtzfdT6fAY/YSUdSxaN6kbSZhTon/B4+6ekCIaUe6S9xPPF5y7BoCeHwC1hUgQ9c6XN/GYtxHa4rp1EViAZWLKH5mnWo98Gs3jUDuuROSARb52p7g8qx5yt/X5ozx7WcH3y2d5GLBoHlfi3aKq4JnBa8YoFbhk3jgulBJ8fH69mk7fRFAufIfK44JyC9xkUau4TLm04c+sVl4pR/pn5GFrX1QmMLcCVro9l0Sqh+y6R0eNJK5NVUyxYxTw1PjMcu8j0VeTb3pe5i+UMJgTDdLNb99mbaHZib1uFzk392fZNKnEdcAWzBRmJHcObmiMai977lIAHoj54302lQTckdR0os9+NPP3N3Yk="/>
        <input type="hidden" value="ddee95a5ef55596a579760f9582897cb" id="jschl-vc" name="jschl_vc"/>
        <!-- <input type="hidden" value="" id="jschl-vc" name="jschl_vc"/> -->
        <input type="hidden" name="pass" value="1633550426.047-7+pLJ3zHlD"/>
        <input type="hidden" id="jschl-answer" name="jschl_answer"/>
      </form>
         
        <script type="text/javascript">
          //<![CDATA[
          (function(){
              var a = document.getElementById('cf-content');
              a.style.display = 'block';
              var isIE = /(MSIE|Trident\/|Edge\/)/i.test(window.navigator.userAgent);
              var trkjs = isIE ? new Image() : document.createElement('img');
              trkjs.setAttribute("src", "/cdn-cgi/images/trace/jschal/js/transparent.gif?ray=69a179cc8e3805f1");
              trkjs.id = "trk_jschal_js";
              trkjs.setAttribute("alt", "");
              document.body.appendChild(trkjs);
              var cpo=document.createElement('script');
              cpo.type='text/javascript';
              cpo.src="/cdn-cgi/challenge-platform/h/g/orchestrate/jsch/v1?ray=69a179cc8e3805f1";
              document.getElementsByTagName('head')[0].appendChild(cpo);
            }());
          //]]>
        </script>
      
    
      
      <div id="trk_jschal_nojs" style="background-image:url('/cdn-cgi/images/trace/jschal/nojs/transparent.gif?ray=69a179cc8e3805f1')"> </div>
    </div>
    
              
              <div class="attribution">
                DDoS protection by <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing/" target="_blank">Cloudflare</a>
                <br />
                <span class="ray_id">Ray ID: <code>69a179cc8e3805f1</code></span>
              </div>
          </td>
         
        </tr>
      </table>
    </body>
    </html>
    "
    	at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invokeSuspend(DefaultResponseValidation.kt:15)
    	at q7.a.resumeWith(ContinuationImpl.kt:3)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:18)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:1)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:4)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:4)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:1)
    
    
    )
    	at com.shabinder.common.providers.FetchPlatformQueryResult.findBestDownloadLink(FetchPlatformQueryResult.kt:59)
    	at com.shabinder.common.providers.FetchPlatformQueryResult$findBestDownloadLink$1.invokeSuspend(Unknown Source:12)
    	at q7.a.resumeWith(ContinuationImpl.kt:3)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:12)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:1)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:2)
    	at q7.a.resumeWith(ContinuationImpl.kt:9)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:12)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:1)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:2)
    	at q7.a.resumeWith(ContinuationImpl.kt:9)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:12)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:1)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:2)
    	at q7.a.resumeWith(ContinuationImpl.kt:9)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:18)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:1)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:4)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:4)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:1)
    
    

    Device Info (please complete the following information):

    • Device: mi 9 lite
    • OS: Android 11, MIUI
    • Version: 12.5.3.0
    • Country: Germany
    bug 
    opened by Hallohannes123 13
  • Won't download

    Won't download

    DownloadLinkFetchFailed(trackName=Snap It, jioSaavnError=java.util.NoSuchElementException: Collection is empty., ytMusicError=NoMatchFound(trackName=Snap It, message=Snap It : NO Match Found!), message=No Downloadable link found: Snap It, YtMusic Error's StackTrace: NoMatchFound(trackName=Snap It, message=Snap It : NO Match Found!) at com.shabinder.common.di.providers.YoutubeMusic.getYTIDBestMatch(YoutubeMusic.kt:13) at com.shabinder.common.di.providers.YoutubeMusic.access$getYTIDBestMatch(YoutubeMusic.kt:1) at com.shabinder.common.di.providers.YoutubeMusic$getYTIDBestMatch$1.invokeSuspend(YoutubeMusic.kt) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:18) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:1) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:4) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:4) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:1)

    JioSaavn Error's StackTrace: java.util.NoSuchElementException: Collection is empty. at i.r.m.p(_ArraysJvm.kt:5) at com.shabinder.common.di.providers.requests.saavn.JioSaavnRequests$DefaultImpls.findMp3SongDownloadURL(JioSaavnRequests.kt:8) at com.shabinder.common.di.providers.requests.saavn.JioSaavnRequests$findMp3SongDownloadURL$1.invokeSuspend(JioSaavnRequests.kt) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:18) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:1) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:4) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:4) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:1)

    ) at com.shabinder.common.di.FetchPlatformQueryResult.findMp3Link(FetchPlatformQueryResult.kt:18) at com.shabinder.common.di.FetchPlatformQueryResult.access$findMp3Link(FetchPlatformQueryResult.kt:1) at com.shabinder.common.di.FetchPlatformQueryResult$findMp3Link$1.invokeSuspend(FetchPlatformQueryResult.kt) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:3) at i.t.k.a.a.resumeWith(ContinuationImpl.kt:9) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:18) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:1) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:4) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:4) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:1)

    More-Info-Needed 
    opened by joshlynx135 13
  • White screen on spotiflyer windows 10

    White screen on spotiflyer windows 10

    Discussed in https://github.com/Shabinder/SpotiFlyer/discussions/940

    Originally posted by Vikng412 January 22, 2022 After installing as I opened spotiflyer on windows only white screen was showing image I don't know what to do cause its not even showing an error.

    opened by Vikng412 11
  • [BUG] : <Issue_Title>Downloads fake files

    [BUG] : Downloads fake files

    In Android: If two songs have the same title it doesn't download any of them Eg Taylor swift afterglow and ed Sheeran afterglow

    For about 30% of downloaded songs it downloads fake mp3 files of about 100kb which don't play.

    In windows: Just doesn't open. Tried many ways.

    bug More-Info-Needed Invalid Template 
    opened by virenhooda27 9
  • Error running on Linux

    Error running on Linux

    Hello, ich have problems Installing SpotiFlyer on Linux. Using Xubuntu : Linux laptop 5.8.0-50-generic #56~20.04.1-Ubuntu SMP Mon Apr 12 21:46:35 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

    Error message :

    markus@laptop ~/SpotiFlyer (main)> ./gradlew :desktop:run
    Starting a Gradle Daemon (subsequent builds will be faster)
    
    > Task :buildSrc:buildSrc:compileKotlin
    The `kotlin-dsl` plugin applied to project ':buildSrc:buildSrc' enables experimental Kotlin compiler features. For more information see https://docs.gradle.org/6.8/userguide/kotlin_dsl.html#sec:kotlin-dsl_plugin
    
    > Task :buildSrc:buildSrc:jar
    :jar: No valid plugin descriptors were found in META-INF/gradle-plugins
    Kotlin Multiplatform Projects are an Alpha feature. See: https://kotlinlang.org/docs/reference/evolution/components-stability.html. To hide this message, add 'kotlin.mpp.stability.nowarn=true' to the Gradle properties.
    
    
    > Configure project :
    WARNING: Unsupported Kotlin plugin version.
    The `embedded-kotlin` and `kotlin-dsl` plugins rely on features of Kotlin `1.4.20` that might work differently than in the requested version `1.4.32`.
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Could not determine the dependencies of task ':common:dependency-injection:compileKotlinDesktop'.
    > Could not resolve all task dependencies for configuration ':common:dependency-injection:desktopCompileClasspath'.
       > Could not find com.shabinder.downloader:youtube-api-dl:0.1.
         Searched in the following locations:
           - https://dl.google.com/dl/android/maven2/com/shabinder/downloader/youtube-api-dl/0.1/youtube-api-dl-0.1.pom
           - https://jcenter.bintray.com/com/shabinder/downloader/youtube-api-dl/0.1/youtube-api-dl-0.1.pom
           - https://repo.maven.apache.org/maven2/com/shabinder/downloader/youtube-api-dl/0.1/youtube-api-dl-0.1.pom
           - file:/home/markus/.m2/repository/com/shabinder/downloader/youtube-api-dl/0.1/youtube-api-dl-0.1.pom
           - https://jitpack.io/com/shabinder/downloader/youtube-api-dl/0.1/youtube-api-dl-0.1.pom
           - https://dl.bintray.com/ekito/koin/com/shabinder/downloader/youtube-api-dl/0.1/youtube-api-dl-0.1.pom
           - https://kotlin.bintray.com/kotlinx/com/shabinder/downloader/youtube-api-dl/0.1/youtube-api-dl-0.1.pom
           - https://dl.bintray.com/icerockdev/moko/com/shabinder/downloader/youtube-api-dl/0.1/youtube-api-dl-0.1.pom
           - https://dl.bintray.com/kotlin/kotlin-js-wrappers/com/shabinder/downloader/youtube-api-dl/0.1/youtube-api-dl-0.1.pom
           - https://maven.pkg.jetbrains.space/public/p/compose/dev/com/shabinder/downloader/youtube-api-dl/0.1/youtube-api-dl-0.1.pom
         Required by:
             project :common:dependency-injection
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
    Use '--warning-mode all' to show the individual deprecation warnings.
    See https://docs.gradle.org/6.8/userguide/command_line_interface.html#sec:command_line_warnings
    
    BUILD FAILED in 3m 55s
    

    seems to me that the source isnt available, if i call the first link https://dl.google.com/dl/android/maven2/com/shabinder/downloader/youtube-api-dl/0.1/youtube-api-dl-0.1.pom in my Browser i get an 403 Error. I'am using PiHole as my DNS, but i put my Laptop to direct Internet accsess.

    so i have no clue about Programming

    if neede for more Information just ask please

    Please Help

    THX Markus

    opened by markus681 9
  • YouTube Music links not working (v2)

    YouTube Music links not working (v2)

    Pasting any links from YouTube music, playlists or individual songs just don't do anything, won't even show the the song information. Spotify seems to work fine.

    (Thanks for your great work)

    bug 
    opened by yossigrosskopf 9
  • [BUG] : A song on my Spotify playlist didn't download, or it can't be downloaded.

    [BUG] : A song on my Spotify playlist didn't download, or it can't be downloaded.

    Describe the bug:

    StackTrace:

    DownloadLinkFetchFailed(errorTrace=Find Link for snowfall 
    
    Fetching From Saavn Failed:DownloadLinkFetchFailed(errorTrace=No SAAVN Match Found for snowfall)
    	at com.shabinder.common.providers.saavn.requests.JioSaavnRequests$DefaultImpls.findBestSongDownloadURL(JioSaavnRequests.kt:44)
    	at com.shabinder.common.providers.saavn.requests.JioSaavnRequests$findBestSongDownloadURL$1.invokeSuspend(JioSaavnRequests.kt)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    	at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39)
    	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
    
    
    
    Fetching From YT Failed:NoMatchFound(trackName=snowfall, message=snowfall : No match found!)
    	at com.shabinder.common.providers.youtube_music.YoutubeMusic.getYTIDBestMatch(YoutubeMusic.kt:110)
    	at com.shabinder.common.providers.youtube_music.YoutubeMusic.access$getYTIDBestMatch(YoutubeMusic.kt:56)
    	at com.shabinder.common.providers.youtube_music.YoutubeMusic$getYTIDBestMatch$1.invokeSuspend(YoutubeMusic.kt)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    	at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39)
    	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
    
    
    )
    	at com.shabinder.common.providers.FetchPlatformQueryResult.findBestDownloadLink(FetchPlatformQueryResult.kt:204)
    	at com.shabinder.common.providers.FetchPlatformQueryResult$findBestDownloadLink$1.invokeSuspend(FetchPlatformQueryResult.kt)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:191)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:147)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:15)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:93)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    	at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39)
    	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
    
    
    

    Device Info (please complete the following information):

    • Device: iMac (21.5-inch, 2017)
    • OS: Windows 10 Pro
    • Version: 21H2
    • Country: Philippines
    bug 
    opened by fhinite 1
  • Wont Let Me Download some songs

    Wont Let Me Download some songs

    heres the error code thingy, used it on wsa, and normal windows is telling me ffmpeg isnt installed, how can i do that?

    android error code : DownloadLinkFetchFailed(errorTrace=Find Link for Alpha Male

    Fetching From Saavn Failed:DownloadLinkFetchFailed(errorTrace=No SAAVN Match Found for Alpha Male) at com.shabinder.common.providers.saavn.requests.JioSaavnRequests$DefaultImpls.findBestSongDownloadURL(JioSaavnRequests.kt:299) at com.shabinder.common.providers.saavn.requests.JioSaavnRequests$findBestSongDownloadURL$1.invokeSuspend(Unknown Source:10) at h7.a.resumeWith(ContinuationImpl.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24) at h7.a.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24) at h7.a.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24) at h7.a.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100) at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:12) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:2) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:0) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:14) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:28) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:0)

    Yt1sMp3 Failed for XTKiVAaW3JE:io.ktor.client.features.ServerResponseException: Server error(https://yt1s.com/api/ajaxSearch/index: 503 Service Temporarily Unavailable. Text: "

    Just a moment...

    yt1s.com

    Checking if the site connection is secure

    yt1s.com needs to review the security of your connection before proceeding.
    <div class="footer" role="contentinfo">
        <div class="footer-inner">
            <div class="clearfix diagnostic-wrapper">
                <div class="ray-id">Ray ID: <code>780b30f77bc4dae9</code></div>
            </div>
            <div class="text-center">Performance &amp; security by <a rel="noopener noreferrer" href="https://www.cloudflare.com?utm_source=challenge&utm_campaign=j" target="_blank">Cloudflare</a></div>
        </div>
    </div>
    
    " at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invokeSuspend(DefaultResponseValidation.kt:187) at h7.a.resumeWith(ContinuationImpl.kt:10) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100) at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:12) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:2) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:0) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:14) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:28) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:0)

    Extracting Manually...

    YT Manual Extraction Failed!io.ktor.client.features.ClientRequestException: Client request(https://rr2---sn-hp57kndk.googlevideo.com/videoplayback?expire=1672261496&ei=GFusY9eCGbGA_9EPg6SKiAY&ip=97.102.147.156&id=o-AEh3bGRDESzqPXOEfFu1fC9FDjfcxdHnNl30I8dHniEL&itag=140&source=youtube&requiressl=yes&mh=7z&mm=31%2C26&mn=sn-hp57kndk%2Csn-q4flrn7y&ms=au%2Conr&mv=m&mvi=2&pl=16&initcwndbps=1730000&vprv=1&mime=audio%2Fmp4&ns=A8RyMA10-NY6R6efssLz9kMK&gir=yes&clen=3183749&dur=200.411&lmt=1539585586012078&mt=1672239440&fvip=1&keepalive=yes&fexp=24001373%2C24007246&c=WEB&txp=5432432&n=RYbyAiISWUBOf4XXE&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAPtP3j5WFxrlzjeOH4Tvy_M4Gvc5y7d6JS4g9xEOMODrAiEAksmKxEMJpsPMbnEXxCw8iIMP3vRwTa5rYwHAZT37080%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIhAM9wWBK-elfeUQk1dTnyAfSseO-a-22UV5XpvWtElrL3AiBt6utrvJUbaZf5wUMhhBOWXU1NKQeQUWJxbg_tFfswvQ%3D%3D) invalid: 403 Forbidden. Text: "" at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invokeSuspend(DefaultResponseValidation.kt:199) at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invoke(Unknown Source:8) at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invoke(Unknown Source:4) at io.ktor.client.features.HttpCallValidator.validateResponse(HttpCallValidator.kt:86) at io.ktor.client.features.HttpCallValidator.access$validateResponse(HttpCallValidator.kt:0) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invokeSuspend(HttpCallValidator.kt:42) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invoke(Unknown Source:11) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invoke(Unknown Source:8) at io.ktor.client.features.HttpSend$Feature$install$1.invokeSuspend(HttpSend.kt:178) at h7.a.resumeWith(ContinuationImpl.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24) at h7.a.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24) at h7.a.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100) at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:12) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:2) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:0) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:14) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:28) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:0)

    Fetching From YT Failed:io.ktor.client.features.ClientRequestException: Client request(https://rr2---sn-hp57kndk.googlevideo.com/videoplayback?expire=1672261496&ei=GFusY9eCGbGA_9EPg6SKiAY&ip=97.102.147.156&id=o-AEh3bGRDESzqPXOEfFu1fC9FDjfcxdHnNl30I8dHniEL&itag=140&source=youtube&requiressl=yes&mh=7z&mm=31%2C26&mn=sn-hp57kndk%2Csn-q4flrn7y&ms=au%2Conr&mv=m&mvi=2&pl=16&initcwndbps=1730000&vprv=1&mime=audio%2Fmp4&ns=A8RyMA10-NY6R6efssLz9kMK&gir=yes&clen=3183749&dur=200.411&lmt=1539585586012078&mt=1672239440&fvip=1&keepalive=yes&fexp=24001373%2C24007246&c=WEB&txp=5432432&n=RYbyAiISWUBOf4XXE&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAPtP3j5WFxrlzjeOH4Tvy_M4Gvc5y7d6JS4g9xEOMODrAiEAksmKxEMJpsPMbnEXxCw8iIMP3vRwTa5rYwHAZT37080%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIhAM9wWBK-elfeUQk1dTnyAfSseO-a-22UV5XpvWtElrL3AiBt6utrvJUbaZf5wUMhhBOWXU1NKQeQUWJxbg_tFfswvQ%3D%3D) invalid: 403 Forbidden. Text: "" at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invokeSuspend(DefaultResponseValidation.kt:199) at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invoke(Unknown Source:8) at io.ktor.client.features.DefaultResponseValidationKt$addDefaultResponseValidation$1$1.invoke(Unknown Source:4) at io.ktor.client.features.HttpCallValidator.validateResponse(HttpCallValidator.kt:86) at io.ktor.client.features.HttpCallValidator.access$validateResponse(HttpCallValidator.kt:0) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invokeSuspend(HttpCallValidator.kt:42) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invoke(Unknown Source:11) at io.ktor.client.features.HttpCallValidator$Companion$install$3.invoke(Unknown Source:8) at io.ktor.client.features.HttpSend$Feature$install$1.invokeSuspend(HttpSend.kt:178) at h7.a.resumeWith(ContinuationImpl.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24) at h7.a.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24) at h7.a.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100) at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:12) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:2) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:0) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:14) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:28) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:0)

    ) at com.shabinder.common.providers.FetchPlatformQueryResult.findBestDownloadLink(FetchPlatformQueryResult.kt:1873) at com.shabinder.common.providers.FetchPlatformQueryResult$findBestDownloadLink$1.invokeSuspend(Unknown Source:12) at h7.a.resumeWith(ContinuationImpl.kt:10) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:74) at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:17) at h7.a.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:74) at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:17) at h7.a.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:74) at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:17) at h7.a.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24) at h7.a.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24) at h7.a.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100) at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:12) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:2) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:0) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:14) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:28) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:0)

    opened by darshtechtutorials13456 2
  • [BUG] :

    [BUG] :

    Describe the bug: I wanted to download my Playlist and everything downloaded as expected except this one song.

    Media Links Used: Playlist: https://open.spotify.com/playlist/2RTvCgo1usjh4Tj2szOwbO?si=mmYTygWDROa3aj50b6_Smg&utm_source=copy-link

    Expected behavior That it is just downloading all song normally.

    Screenshots: https://anonfiles.com/07IcTfO3ya/Screenshot_20221228-125455_jpg

    StackTrace:

    DownloadLinkFetchFailed(errorTrace=Find Link for Where Are You Now 
    
    Fetching From Saavn Failed:DownloadLinkFetchFailed(errorTrace=No SAAVN Match Found for Where Are You Now)
    	at com.shabinder.common.providers.saavn.requests.JioSaavnRequests$DefaultImpls.findBestSongDownloadURL(JioSaavnRequests.kt:299)
    	at com.shabinder.common.providers.saavn.requests.JioSaavnRequests$findBestSongDownloadURL$1.invokeSuspend(Unknown Source:10)
    	at h7.a.resumeWith(ContinuationImpl.kt:10)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
    	at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:12)
    	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:2)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:0)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:14)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:28)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:0)
    
    
    
    Fetching From YT Failed:NoMatchFound(trackName=Where Are You Now, message=Where Are You Now : KEINE Übereinstimmungen gefunden!)
    	at com.shabinder.common.providers.youtube_music.YoutubeMusic.getYTIDBestMatch(YoutubeMusic.kt:179)
    	at com.shabinder.common.providers.youtube_music.YoutubeMusic.access$getYTIDBestMatch(YoutubeMusic.kt:0)
    	at com.shabinder.common.providers.youtube_music.YoutubeMusic$getYTIDBestMatch$1.invokeSuspend(Unknown Source:12)
    	at h7.a.resumeWith(ContinuationImpl.kt:10)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
    	at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:12)
    	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:2)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:0)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:14)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:28)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:0)
    
    
    )
    	at com.shabinder.common.providers.FetchPlatformQueryResult.findBestDownloadLink(FetchPlatformQueryResult.kt:1873)
    	at com.shabinder.common.providers.FetchPlatformQueryResult$findBestDownloadLink$1.invokeSuspend(Unknown Source:12)
    	at h7.a.resumeWith(ContinuationImpl.kt:10)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:55)
    	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:17)
    	at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:0)
    	at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:24)
    	at h7.a.resumeWith(ContinuationImpl.kt:33)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
    	at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:12)
    	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:2)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:0)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:14)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:28)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:0)
    
    

    Device Info (please complete the following information):

    • Device: Samsung Galaxy A13 LTE (SM-A137F)
    • OS: Android
    • Version: 12
    • Country: Germany

    Additional context: Everything works fine its just that sometimes I cant download some specific songs.

    bug 
    opened by lukaslup3e 2
  • Cant download few BTS songs

    Cant download few BTS songs

    java.lang.Exception: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at com.shabinder.spotiflyer.service.ForegroundService$enqueueDownload$$inlined$collect$1.emit(Collect.kt:9) at com.shabinder.common.core_components.file_manager.FileManagerKt$downloadFile$4.invokeSuspend(FileManager.kt:5) at com.shabinder.common.core_components.file_manager.FileManagerKt$downloadFile$4.invoke(Unknown Source:11) at com.shabinder.common.core_components.file_manager.FileManagerKt$downloadFile$4.invoke(Unknown Source:6) at kotlinx.coroutines.flow.FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1.collect(SafeCollector.common.kt:6) at kotlinx.coroutines.flow.FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1.invokeSuspend(Unknown Source:12) at u.v.j.a.a.resumeWith(ContinuationImpl.kt:3) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:12) at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:2) at u.v.j.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:12) at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:2) at u.v.j.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:12) at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:2) at u.v.j.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:12) at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:2) at u.v.j.a.a.resumeWith(ContinuationImpl.kt:9) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:12) at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:1) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:2) at u.v.j.a.a.resumeWith(ContinuationImpl.kt:9) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:17) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:1) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:4) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:4) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:1)

    bug 
    opened by NymphSyrenix 0
  • Bump actions/cache from 2.1.4 to 3.2.2 in /.github/workflows

    Bump actions/cache from 2.1.4 to 3.2.2 in /.github/workflows

    Bumps actions/cache from 2.1.4 to 3.2.2.

    Release notes

    Sourced from actions/cache's releases.

    v3.2.2

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/cache/compare/v3.2.1...v3.2.2

    v3.2.1

    What's Changed

    Full Changelog: https://github.com/actions/cache/compare/v3.2.0...v3.2.1

    v3.2.0

    What's Changed

    New Contributors

    ... (truncated)

    Changelog

    Sourced from actions/cache's changelog.

    3.2.2

    • Reverted the changes made in 3.2.1 to use gnu tar and zstd by default on windows.
    Commits
    • 4723a57 Revert compression changes related to windows but keep version logging (#1049)
    • d1507cc Merge pull request #1042 from me-and/correct-readme-re-windows
    • 3337563 Merge branch 'main' into correct-readme-re-windows
    • 60c7666 save/README.md: Fix typo in example (#1040)
    • b053f2b Fix formatting error in restore/README.md (#1044)
    • 501277c README.md: remove outdated Windows cache tip link
    • c1a5de8 Upgrade codeql to v2 (#1023)
    • 9b0be58 Release compression related changes for windows (#1039)
    • c17f4bf GA for granular cache (#1035)
    • ac25611 docs: fix an invalid link in workarounds.md (#929)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
Releases(v3.6.3)
Owner
Shabinder Singh
A TECH GEEK , Android & Linux Enthusiast! I do have keen interest in Cyber security too. -Admire "OPEN SOURCE" projects and their respective developers!
Shabinder Singh
A simple library for parsing and playing links from YouTube, YouTube Music, Vimeo and Rutube is WebView without the need to connect api data services. Request caching is available now

Android Oembed Video A simple library for parsing and playing links from YouTube, YouTube Music, Vimeo and Rutube and others in the WebView without th

Alexey Mostovoy 32 Oct 8, 2022
Listen to your favourite songs from Spotify with your friends in Discord (via Spotify Connect)

Adieux Listen to your favourite songs from Spotify with your friends in Discord (via Spotify Connect) Requires Spotify Premium. This project is self-h

Conor Byrne 6 Feb 15, 2022
Blade is an open source music player for Android, allowing you to play music from multiple services : files on your phone, Spotify, and more.

Blade Player Blade is an open source music player for Android, allowing you to play music from multiple services : files on your phone, Spotify, and m

Valentin HAUDIQUET 72 Jan 5, 2023
Youtube-dl UI - Youtube-dl ui built with kotlin and jetpack compose

youtube-dl_UI youtube-dl ui built with kotlin and jetpack compose.

null 0 Feb 11, 2022
Youtube Android Clone 🚀an Android Youtube Clone made out of XML and Kotlin

Youtube Android Clone ?? This app consumes The Youtube Api to fetch and display a list of popular videos, The app uses MVVM design pattern to allow se

Breens Robert 38 Dec 13, 2022
Convert your YouTube channel into a native Android app using YouTube Data API v3.

Convert your YouTube channel into an app. Screenshots • Description • Features • Configuration • Documentation Screenshots Description Channelify is a

Aculix Technologies LLP 121 Dec 26, 2022
Music Player application with you tube downloader

MusicHub Music Player application with you tube downloader Playing around with Kotlin compose the new UI framework Libraries & technologies used MVVM

Mohamed Almahdy 2 Mar 17, 2022
Android app that uses Spotify API to recommend new music based on your listening history

Android app that uses Spotify API to recommend new music based on your listening history. Written in Kotlin and uses Spotify Web API and Android SDK. New music is presented in swipe cards where a left swipe plays the next song and a right swipe can add the app to your liked songs in Spotify.

null 3 Jun 5, 2022
Android Application that plays music through a Spotify API based on a user's current location found through Google Maps API and also checking Google Weather API.

GeoStereo Android Application that plays music through a Spotify API based on a user's current location found through Google Maps API and also checkin

Jonah Douglas 1 Jun 16, 2022
An easy to use Instagram Video Downloader library for android apps.

Instagram-Video-Downloader-Library An easy to use library for directly download videos from ig reels, igtv. Implementation Step 1. Add the JitPack rep

Abhay 16 Dec 7, 2022
Library for Instagram Image/Video Downloader for Android

Insta Downloader Simple Instagram Image Video Downloader Library for Android Implementation Step 1. Add the JitPack repository to your build file Add

kannikesh Prabhu 2 Mar 12, 2022
Video/Audio Downloader for Android, written with Jetpack Compose.

Seal Video/Audio Downloader for Android, written with Jetpack Compose.

junkfood 2.1k Dec 29, 2022
Music Player - This is a basic music player built with Android Studio and Kotlin

Music Player Made by Jenny Cárdenas This is a basic music player built with Android Studio and Kotlin, it shows two views in the UI, the user can play

Jenny C 3 Oct 28, 2021
A modern front-end for YouTube built using Kotlin compose

A modern front-end for YouTube built using Kotlin compose, with Material You theming and many more features.

Nick 379 Jan 5, 2023
Odeon Music Player is a lightweight music player for Android.

Odeon ?? Odeon Music Player is a lightweight music player for Android. Get it on Google Play. We value your privacy, your battery life and your device

Thibault Seisel 63 Dec 20, 2022
TunePlayer is a basic music player app aimed at showing how MusicServiceCompat and MusicBrowerCompat can be used to build a music playback service

TunePlayer TunePlayer is a basic music player app aimed at showing how MusicServiceCompat and MusicBrowerCompat can be used to build a music playback

Abdulmalik 6 Nov 18, 2022
This is a local music player, imitates the UI of Netease Music client.

Introduce This is a local music player, imitates the UI of Netease Music client. The UI was built on Jetbrains Compose. Screenshot Features Parse and

Konyaco 4 Dec 10, 2022
This is a local music player, imitates the UI of Netease Music client.

Introduce This is a local music player, imitates the UI of Netease Music client. The UI was built on Jetbrains Compose. Screenshots Features Parse and

Konyaco 4 Dec 10, 2022
SocyMusic is an open-source Android music player written in Java with the aim of creating an easy-to-use app for exchanging and listening to top-quality music. Help us create it!

SocyMusic SocyMusic is an open-source Android music player written entirely in Java. It's objectives are to provide top-quality music to everyone for

Benji 23 Dec 26, 2022