diff --git a/README.md b/README.md index 2cf49ff0..54a8f6aa 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ A simple music app using YouTube Music for backend - Caching and can save data for offline playback - Synced lyrics from Musixmatch and YouTube Transcript and translated lyrics (Community translation from Musixmatch) -- Personalize data (*) +- Personalize data (*) and multi-YouTube-account support - Support SponsorBlock - Sleep Timer - Android Auto diff --git a/app/src/main/java/com/maxrave/simpmusic/adapter/search/SuggestQueryAdapter.kt b/app/src/main/java/com/maxrave/simpmusic/adapter/search/SuggestQueryAdapter.kt index 96b626c4..c474775a 100644 --- a/app/src/main/java/com/maxrave/simpmusic/adapter/search/SuggestQueryAdapter.kt +++ b/app/src/main/java/com/maxrave/simpmusic/adapter/search/SuggestQueryAdapter.kt @@ -7,18 +7,37 @@ import com.maxrave.simpmusic.databinding.ItemSuggestQueryBinding class SuggestQueryAdapter(private var suggestQuery: ArrayList): RecyclerView.Adapter() { private lateinit var mListener: onItemClickListener - interface onItemClickListener{ + private lateinit var mCopyListener: OnCopyClickListener + + interface onItemClickListener { fun onItemClick(position: Int) } - fun setOnClickListener(listener: onItemClickListener){ + + interface OnCopyClickListener { + fun onCopyClick(position: Int) + } + + fun setOnClickListener(listener: onItemClickListener) { mListener = listener } - inner class ViewHolder(val binding: ItemSuggestQueryBinding, listener: onItemClickListener) : + + fun setOnCopyClickListener(listener: OnCopyClickListener) { + mCopyListener = listener + } + + inner class ViewHolder( + val binding: ItemSuggestQueryBinding, + listener: onItemClickListener, + mCopyClickListener: OnCopyClickListener + ) : RecyclerView.ViewHolder(binding.root) { init { binding.root.setOnClickListener { listener.onItemClick(bindingAdapterPosition) } + binding.btCopySuggestQuery.setOnClickListener { + mCopyClickListener.onCopyClick(bindingAdapterPosition) + } } } fun updateData(newData: ArrayList){ @@ -28,7 +47,7 @@ class SuggestQueryAdapter(private var suggestQuery: ArrayList): Recycler } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding = ItemSuggestQueryBinding.inflate(LayoutInflater.from(parent.context), parent, false) - return ViewHolder(binding, mListener) + return ViewHolder(binding, mListener, mCopyListener) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { diff --git a/app/src/main/java/com/maxrave/simpmusic/ui/fragment/SearchFragment.kt b/app/src/main/java/com/maxrave/simpmusic/ui/fragment/SearchFragment.kt index 3a8947b2..f9d83f6b 100644 --- a/app/src/main/java/com/maxrave/simpmusic/ui/fragment/SearchFragment.kt +++ b/app/src/main/java/com/maxrave/simpmusic/ui/fragment/SearchFragment.kt @@ -802,8 +802,13 @@ class SearchFragment : Fragment() { resultAdapter.updateList(resultList) } } - suggestAdapter.setOnClickListener(object: SuggestQueryAdapter.onItemClickListener{ + suggestAdapter.setOnClickListener(object : SuggestQueryAdapter.onItemClickListener { override fun onItemClick(position: Int) { + binding.svSearch.setQuery(suggestList[position], true) + } + }) + suggestAdapter.setOnCopyClickListener(object : SuggestQueryAdapter.OnCopyClickListener { + override fun onCopyClick(position: Int) { binding.svSearch.setQuery(suggestList[position], false) } }) @@ -813,8 +818,7 @@ class SearchFragment : Fragment() { if (binding.chipGroupTypeSearch.isEnabled) { setEnabledAll(binding.chipGroupTypeSearch, false) } - } - else { + } else { if (!binding.chipGroupTypeSearch.isEnabled) { setEnabledAll(binding.chipGroupTypeSearch, true) } diff --git a/app/src/main/res/layout/item_suggest_query.xml b/app/src/main/res/layout/item_suggest_query.xml index 00047d93..24432d6b 100644 --- a/app/src/main/res/layout/item_suggest_query.xml +++ b/app/src/main/res/layout/item_suggest_query.xml @@ -21,6 +21,7 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_marginEnd="15sp" + android:padding="15dp" android:src="@drawable/baseline_arrow_outward_24" android:background="@android:color/transparent" android:layout_centerVertical="true"> diff --git a/asset/screenshot/new_home_ui.jpg b/asset/screenshot/new_home_ui.jpg index 401e77ac..23bdb0cd 100644 Binary files a/asset/screenshot/new_home_ui.jpg and b/asset/screenshot/new_home_ui.jpg differ diff --git a/asset/screenshot/new_setting_sponsor_block.jpg b/asset/screenshot/new_setting_sponsor_block.jpg index 4b1a5320..be827670 100644 Binary files a/asset/screenshot/new_setting_sponsor_block.jpg and b/asset/screenshot/new_setting_sponsor_block.jpg differ diff --git a/fastlane/metadata/android/en-US/changelogs/15.txt b/fastlane/metadata/android/en-US/changelogs/15.txt new file mode 100644 index 00000000..fc824ad6 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/15.txt @@ -0,0 +1,9 @@ +- "New release" in home page +- Multiple YouTube Accounts Support +- Bigger thumbnails in home page +- Click suggest query to search +- Drag and drop to reorder songs in queue +- "Play next" feature +- Fixed "Conflict songs in queue when getting related songs" +- Fixed "LIKE" button +- Fixed all known bugs in Local Playlists \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index 7d75bc68..9362631a 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -8,6 +8,7 @@ Not a simple music player, it's SimpMusic - Analyze your playing data, create custom playlists and sync with YouTube Music... - Play video option with subtitle - Caching and can save data for offline playback +- Login to YouTube Music account and support multiple accounts - Synced lyrics from Musixmatch, YouTube Transcript and translate lyrics (Community translation from Musixmatch) - Support SponsorBlock - Sleep Timer diff --git a/fastlane/metadata/android/en-US/images/featureGraphic.png b/fastlane/metadata/android/en-US/images/featureGraphic.png new file mode 100644 index 00000000..8d798596 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/featureGraphic.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/10.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/10.jpg index b0f528fa..23bdb0cd 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/10.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/10.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/16.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/16.jpg new file mode 100644 index 00000000..be827670 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/16.jpg differ diff --git a/fastlane/metadata/android/vi-VN/changelogs/15.txt b/fastlane/metadata/android/vi-VN/changelogs/15.txt new file mode 100644 index 00000000..1ea1bf4b --- /dev/null +++ b/fastlane/metadata/android/vi-VN/changelogs/15.txt @@ -0,0 +1,9 @@ +- Thêm "Mới phát hành" trên trang chủ +- Hỗ trợ chuyển đổi giữa nhiều tài khoản YouTube +- Tăng kích thước ảnh thumbnail trên trang chủ +- Click vào gợi ý để tìm kiếm +- Kéo thả để sắp xếp lại bài hát trong hàng đợi +- Chức năng "Phát tiếp theo" +- Sửa lỗi "Trùng lặp bài hát trong hàng đợi khi lấy bài hát liên quan" +- Sửa lỗi nút "LIKE" +- Sửa tất cả các lỗi đã biết trong danh sách phát cục bộ \ No newline at end of file diff --git a/fastlane/metadata/android/vi-VN/full_description.txt b/fastlane/metadata/android/vi-VN/full_description.txt index d5d4b664..bab4bee5 100644 --- a/fastlane/metadata/android/vi-VN/full_description.txt +++ b/fastlane/metadata/android/vi-VN/full_description.txt @@ -8,6 +8,7 @@ Không chỉ là ứng dụng nghe nhạc, nó là SimpMusic - Thống kê dữ liệu nghe nhạc của bạn, tạo danh sách phát tùy chỉnh và đồng bộ với YouTube Music - Tuỳ chọn xem video hỗ trợ phụ đề - Lưu trữ dữ liệu ngoại tuyến +- Đăng nhập tài khoản YouTube và hỗ trợ đa tài khoản - Lời bài hát được đồng bộ từ Musixmatch và YouTube Transcript, dịch lời bài hát với cộng đồng từ Musixmatch - Hỗ trợ SponsorBlock - Hẹn giờ đi ngủ diff --git a/fastlane/metadata/android/vi-VN/images/featureGraphic.png b/fastlane/metadata/android/vi-VN/images/featureGraphic.png new file mode 100644 index 00000000..8d798596 Binary files /dev/null and b/fastlane/metadata/android/vi-VN/images/featureGraphic.png differ diff --git a/fastlane/metadata/android/vi-VN/images/phoneScreenshots/10.jpg b/fastlane/metadata/android/vi-VN/images/phoneScreenshots/10.jpg index b0f528fa..23bdb0cd 100644 Binary files a/fastlane/metadata/android/vi-VN/images/phoneScreenshots/10.jpg and b/fastlane/metadata/android/vi-VN/images/phoneScreenshots/10.jpg differ diff --git a/fastlane/metadata/android/vi-VN/images/phoneScreenshots/16.jpg b/fastlane/metadata/android/vi-VN/images/phoneScreenshots/16.jpg new file mode 100644 index 00000000..be827670 Binary files /dev/null and b/fastlane/metadata/android/vi-VN/images/phoneScreenshots/16.jpg differ diff --git a/kotlinYtmusicScraper/src/main/java/com/maxrave/kotlinytmusicscraper/test/main.kt b/kotlinYtmusicScraper/src/main/java/com/maxrave/kotlinytmusicscraper/test/main.kt index cf363236..0880bbdc 100644 --- a/kotlinYtmusicScraper/src/main/java/com/maxrave/kotlinytmusicscraper/test/main.kt +++ b/kotlinYtmusicScraper/src/main/java/com/maxrave/kotlinytmusicscraper/test/main.kt @@ -16,8 +16,7 @@ fun main() { runBlocking { YouTube.apply { locale = YouTubeLocale("VN", "vi") - cookie = - "VISITOR_INFO1_LIVE=zhhx1-pXFL0; __utmz=27069237.1673094830.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); DEVICE_INFO=ChxOekk1TlRJMU5qazNORGszTnpNek56SXdNZz09EJHr96kGGJHr96kG; VISITOR_PRIVACY_METADATA=CgJWThIEGgAgTg%3D%3D; __utma=27069237.597876058.1673094830.1701522667.1702909192.30; HSID=AKmR2wltBTtzS_ssL; SSID=AmqXseQN3blQJAlw-; APISID=HLtlhkG_cz7HW8sh/AW6T1ufP21Y-B0BOP; SAPISID=5wLR0vjnRB0XSl6C/Agh-ZC5Cqfpx9x9Gj; __Secure-1PAPISID=5wLR0vjnRB0XSl6C/Agh-ZC5Cqfpx9x9Gj; __Secure-3PAPISID=5wLR0vjnRB0XSl6C/Agh-ZC5Cqfpx9x9Gj; SID=fQiHuJ_WVR-i8-Dj3hFzHfh8DnFQ2mW2LD5osSjDqaNf4Z3blFcY_nvLCrkOs3vdiSVgHg.; __Secure-1PSID=fQiHuJ_WVR-i8-Dj3hFzHfh8DnFQ2mW2LD5osSjDqaNf4Z3b8e9gPCrAxY9Xefj2kKpKUw.; __Secure-3PSID=fQiHuJ_WVR-i8-Dj3hFzHfh8DnFQ2mW2LD5osSjDqaNf4Z3bjcWRdG1Ehl94K2R5mfxdoA.; PREF=f6=40000000&tz=Asia.Saigon&f7=100&autoplay=true&volume=30&gl=VN&hl=vi&guide_collapsed=false&f5=20000&repeat=ALL; LOGIN_INFO=AFmmF2swRQIhAIoGt33kkyxNC21Oo7SDCC3sWGKl_2C3S5kgeZg1WZniAiAbNeI6wa74ewn9k7xs6cH3t5Zp-nSaXed5Km7QftOjGg:QUQ3MjNmeVhQMlI3NjBCS3ZOTDRVUndzZ2dGZFcxa2lFTmFEcTcxMElocmFWQmRyb1Q0cTBuOUk2dUEzNTFlbFcxOXVwV3dnS19pNlRWcTBOWUg5M3NNcUpZeVpjOTVZZTE4blQ5RmpmYVMybTVnTmNnQVV6bVAtbWdjM011aW5DbUtJcGZiRko2YXVSaU5sSlpybFlKQTVjTGNuTFByOXpB; YSC=i41GgqnGE5s; __Secure-1PSIDTS=sidts-CjEBPVxjSnxPDBGPY1lto4D_fgFSj1a0QaMH4PrIW5eHcUtc8OsqJFplt5TPs_ETEEp1EAA; __Secure-3PSIDTS=sidts-CjEBPVxjSnxPDBGPY1lto4D_fgFSj1a0QaMH4PrIW5eHcUtc8OsqJFplt5TPs_ETEEp1EAA; SIDCC=ABTWhQGVGIodP7jK127I-HWNfzEz4z519Hww7Q4c6Q--DqH06_erpbZwHVrFHlbcUelk45Z7DJ3f; __Secure-1PSIDCC=ABTWhQFhb4TlFYjoh_0-Uprx6R01HC7jTYEDobY_gcPKjW2gecEtSlBV960ClGdSSjQ-F4u44JZn; __Secure-3PSIDCC=ABTWhQGwIqRZw1RXfUJWOl-4IbHAZ-N4xJMLldKtPgK5-moJkVS01x113n5mSJL6I602Gk8e4_Y" + cookie = "" }.getNotification().onSuccess { account -> println(account) } @@ -25,155 +24,7 @@ fun main() { it.printStackTrace() } } -// Ytmusic().player(YouTubeClient.ANDROID_MUSIC, ) -// YouTube.spotifyCookie = -// "sp_t=a910acb941e990e349d79e8170f2dafe; _scid=e96b060c-30fc-4c59-9e44-25f376482edd; _ga=GA1.2.2112854199.1671017821; sp_adid=95e621d6-b86c-4ce5-bed4-6b03ab65155b; _ga_ZWG1NSHWD8=GS1.1.1671017821.1.0.1671017823.0.0.0; sp_dc=AQAYI79gjZIRlNjJUDXJLIq1yw5Nb_E85T55B8jgHOVWOseGrnhlVuEKRziSRV1XA8Ca2d7bx7RAQ-6hjGLWNlsxHrZ6DP6Jmn_Joz-6djb05evRb31kKFGrTXhRzFBRMr5MePVo2pujxkVtOjCZp_qNP1J3ryQ; sp_key=595700a0-212b-4ce5-a497-0f7eea005f35; OptanonAlertBoxClosed=2022-12-27T15:05:03.114Z; sp_m=vn-vi; sp_landing=https%3A%2F%2Fopen.spotify.com%2Ftrack%2F1GPRHgVXzRfzoc44HEZZQI%3Fsp_cid%3Da910acb941e990e349d79e8170f2dafe%26device%3Ddesktop; OptanonConsent=isIABGlobal=false&datestamp=Sat+Sep+30+2023+22%3A30%3A16+GMT%2B0700+(Indochina+Time)&version=6.26.0&hosts=&landingPath=NotLandingPage&groups=s00%3A1%2Cf00%3A1%2Cm00%3A1%2Ct00%3A1%2Ci00%3A1%2Cf11%3A0&AwaitingReconsent=false&geolocation=VN%3BSG" -// YouTube.cookie = -// "VISITOR_INFO1_LIVE=zhhx1-pXFL0; __utmz=27069237.1673094830.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); VISITOR_PRIVACY_METADATA=CgJWThICGgA%3D; __utma=27069237.597876058.1673094830.1691393097.1693037834.24; LOGIN_INFO=AFmmF2swRQIhALlK-GIKSX-_-wAq3MR4LiZxDEyZau-CdERSaDCSToolAiBHixfkKWkvAOsMjXax7ia-Nsld97BRcVkrl0mP4wkxNA:QUQ3MjNmeVBBcWJNVnp1cWNLVnFnNVhCdTQ5d3JzaTNsaUVLZWwzNUFFM21Gd3BaWTZHdTh6VzJDZDhaR09UTDVHYkpORWdudXFwNVNybE1wWVVKM3p5ZFpoODgyQWc2OUlISnc1TUJpU09DXzVJR3FUVWdhVGxZT3RLcTBXcThZdGhjVENjMmI4ZnJZWGtrQ29UejhRMVl0N1NTVUxRYnl3; SID=bAiHuOSAVkOcHMA4cuCGz3Esa2qGLgDbdsMbk5UHs0UUkVJkLIWqC4og39fPQOPkDMu2xg.; __Secure-1PSID=bAiHuOSAVkOcHMA4cuCGz3Esa2qGLgDbdsMbk5UHs0UUkVJkk5EjmxcjfH2pbmn4iPwjuw.; __Secure-3PSID=bAiHuOSAVkOcHMA4cuCGz3Esa2qGLgDbdsMbk5UHs0UUkVJkYXoKeyvKnENZHS6ubzdUJg.; HSID=Anikjx73sQ4s47Hjp; SSID=AKVpi9FZspt0u7zj8; APISID=GF09QQoyirI05dF7/ALTs2_GFCeABgB3sQ; SAPISID=T_NjR_vKV6wufMQH/A1MpNmKnmYUpD9ALL; __Secure-1PAPISID=T_NjR_vKV6wufMQH/A1MpNmKnmYUpD9ALL; __Secure-3PAPISID=T_NjR_vKV6wufMQH/A1MpNmKnmYUpD9ALL; PREF=f6=40000000&tz=Asia.Saigon&f7=100&autoplay=true&volume=56&gl=VN&hl=vi&guide_collapsed=false&f5=20000; YSC=zlOmTzYFmfA; __Secure-1PSIDTS=sidts-CjEB3e41hVMGhnny0RrJ_9Xo7vlv9Snp5RI0Os4UJf3o0eTVQpu6XIgu1WiB4h-85ieZEAA; __Secure-3PSIDTS=sidts-CjEB3e41hVMGhnny0RrJ_9Xo7vlv9Snp5RI0Os4UJf3o0eTVQpu6XIgu1WiB4h-85ieZEAA; SIDCC=ACA-OxNYWmgFXxZbBBCm28QjtcfRwJ-5KptqbNeVrmmzSTfn17hF36FVWfNBS-xsXZZQ2MtFaAWJ; __Secure-1PSIDCC=ACA-OxMd3YwVX5FAZmRVz9dag48RWH8hv-WvzziDAcc4aYGNDEfK7OXwf3N_uMe7Z7KeBEBpvbn3; __Secure-3PSIDCC=ACA-OxP0D1K8y4lhUZR35NgHhmj3PZ_1o51V9gUcB8X-SChuTiQF7gyOCq9cTx5Orr483Owq2_U" -// YouTube.next(endpoint = WatchEndpoint(playlistId = "RDEMgtw3oC9Zt7NLrWZyopXq4Q")) -// .onSuccess { -// val songs = ArrayList() -// songs.addAll(it.items) -// println(songs.size) -// if (it.continuation != null) { -// YouTube.next(endpoint = WatchEndpoint(playlistId = "RDEMgtw3oC9Zt7NLrWZyopXq4Q"), continuation = it.continuation).onSuccess { value -> -// songs.addAll(value.items) -// println(songs.size) -// println(songs) -// } -// } -// } -// YouTube.getMusixmatchUserToken().onSuccess { -// println(it.message.body.user_token) -// YouTube.postMusixmatchCredentials("ndtminh2608@gmail.com", "minh123456", it.message.body.user_token).onSuccess { value -> -// println(value) -// YouTube.musixmatchUserToken = it.message.body.user_token -// delay(2000) -// YouTube.getMusixmatchTranslateLyrics("144114431", it.message.body.user_token, "vi").onSuccess { lyrics -> -// println(lyrics) -// }.onFailure { -// it.printStackTrace() -// } -// -// } -// .onFailure { -// it.printStackTrace() -// } -// } -// .onFailure { -// it.printStackTrace() -// } -// YouTube.browse(browseId = "VLOLAK5uy_nX6nwnLobDcXKOKCk2gH-xql7B6aU1Ta4", params = "ggMCCAI%3D").onSuccess { result -> -// println(result.items) -// }.onFailure { error -> -// error.printStackTrace() -// } - } -// YouTube.authentication().onSuccess { token -> -// if (token.accessToken != null) { -// -// YouTube.getSongId(token.accessToken, "Feel Good Gryffin").onSuccess { spotifyResult -> -// if (!spotifyResult.tracks?.items.isNullOrEmpty()) { -// val list = arrayListOf() -// for (index in spotifyResult.tracks?.items!!.indices) { -// list.add(spotifyResult.tracks?.items?.get(index)?.name + spotifyResult.tracks?.items?.get(index)?.artists?.get(0)?.name) -// } -// bestMatchingIndex("Feel Good Gryffin", list).let { -// spotifyResult.tracks?.items?.get(it)?.let {item -> -// item.id?.let { it1 -> -// YouTube.getAccessToken().onSuccess { value: AccessToken -> -// println(value) -// YouTube.getLyrics(it1, value.accessToken).onSuccess { lyrics -> -// println(lyrics) -// }.onFailure { -// it.printStackTrace() -// } -// } -// } -// } -// } -// } -// }.onFailure { -// it.printStackTrace() -// } -// } -// -// } -// }.onFailure { -// it.printStackTrace() -// } - // YouTube.player("cPcGnUJmcFg", "").onSuccess { player -> -//// player.playbackTracking?.videostatsPlaybackUrl?.baseUrl?.let { url -> -//// YouTube.initPlayback(url).onSuccess { playback -> -//// println(playback) -//// delay(5000) -//// player.playbackTracking.atrUrl?.baseUrl?.let { -//// YouTube.initPlayback(it).onSuccess { atr -> -//// println(atr) -//// } -//// } -//// } -//// } -// if (player.playbackTracking?.videostatsPlaybackUrl?.baseUrl != null && player.playbackTracking.atrUrl?.baseUrl != null && player.playbackTracking.videostatsWatchtimeUrl?.baseUrl != null) { -// YouTube.initPlayback(player.playbackTracking.videostatsPlaybackUrl.baseUrl, -// player.playbackTracking.atrUrl.baseUrl, player.playbackTracking.videostatsWatchtimeUrl.baseUrl -// ).onSuccess { playback -> -// -// } -// } -// } -// .onFailure { error -> -// error.printStackTrace() -// } -// YouTube.getLibraryPlaylists().onSuccess {data -> -// val input = data.contents?.singleColumnBrowseResultsRenderer?.tabs?.get(0)?.tabRenderer?.content?.sectionListRenderer?.contents?.get(0)?.gridRenderer?.items ?: null -// if (input != null) { -// val list = parseLibraryPlaylist(input) -// println(list) -// } -// else { -// println("null") -// } -// } -// .onFailure { error -> -// error.printStackTrace() -// } -// } -// YouTube.customQuery("FEmusic_history", setLogin = true).onSuccess { -// println(Json.encodeToString(it)) -// } -// .onFailure { error -> -// error.printStackTrace() -// } -// YouTube.scrapeYouTube("XLbiC-ly7v8").onSuccess { scrape -> -// var response = "" -// var data = "" -// val ksoupHtmlParser = KsoupHtmlParser( -// object : KsoupHtmlHandler { -// override fun onText(text: String) { -// super.onText(text) -// if (text.contains("var ytInitialPlayerResponse")) { -// val temp = text.replace("var ytInitialPlayerResponse = ", "").dropLast(1) -// response = temp.trimIndent() -// } -// else if (text.contains("var ytInitialData")) { -// val temp = text.replace("var ytInitialData = ", "").dropLast(1) -// data = temp.trimIndent() -// } -// } -// } -// ) -// ksoupHtmlParser.write(scrape) -// ksoupHtmlParser.end() -// val json = Json {ignoreUnknownKeys = true} -// val ytScrapeData = json.decodeFromString(data) -// val ytScrapeInitial = json.decodeFromString(response) -// println(ytScrapeInitial.playbackTracking.toString()) -// -// } -// .onFailure { error -> -// error.printStackTrace() -// } +} fun parseLibraryPlaylist(input: List): ArrayList { val list : ArrayList = arrayListOf()