1
0
Fork 0
dotfiles/dot_config/spicetify/CustomApps/spicetify-marketplace/extension.js
Florian RICHER efb95c2bb2 Add dot_config/spicetify/CustomApps/spicetify-marketplace-tmp/.keep
Add dot_config/spicetify/CustomApps/spicetify-marketplace/CONTRIBUTING.md
Add dot_config/spicetify/CustomApps/spicetify-marketplace/LICENSE
Add dot_config/spicetify/CustomApps/spicetify-marketplace/README.md
Add dot_config/spicetify/CustomApps/spicetify-marketplace/blacklist.json
Add dot_config/spicetify/CustomApps/spicetify-marketplace/dot_eslintrc.json
Add dot_config/spicetify/CustomApps/spicetify-marketplace/dot_github/ISSUE_TEMPLATE/bug_report.yml
Add dot_config/spicetify/CustomApps/spicetify-marketplace/dot_github/ISSUE_TEMPLATE/config.yml
Add dot_config/spicetify/CustomApps/spicetify-marketplace/dot_github/ISSUE_TEMPLATE/feature_request.yml
Add dot_config/spicetify/CustomApps/spicetify-marketplace/dot_github/ISSUE_TEMPLATE/malicious_extension_report.yml
Add dot_config/spicetify/CustomApps/spicetify-marketplace/dot_github/dependabot.yml
Add dot_config/spicetify/CustomApps/spicetify-marketplace/dot_github/workflows/lint.yml
Add dot_config/spicetify/CustomApps/spicetify-marketplace/dot_gitignore
Add dot_config/spicetify/CustomApps/spicetify-marketplace/dot_nvmrc
Add dot_config/spicetify/CustomApps/spicetify-marketplace/executable_install.sh
Add dot_config/spicetify/CustomApps/spicetify-marketplace/extension.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/index.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/install.ps1
Add dot_config/spicetify/CustomApps/spicetify-marketplace/manifest.json
Add dot_config/spicetify/CustomApps/spicetify-marketplace/package-lock.json
Add dot_config/spicetify/CustomApps/spicetify-marketplace/package.json
Add dot_config/spicetify/CustomApps/spicetify-marketplace/snippets.json
Add dot_config/spicetify/CustomApps/spicetify-marketplace/src/AddSnippetModal.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/src/Card.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/src/Icons.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/src/OptionsMenu.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/src/ReadmePage.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/src/ReloadModal.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/src/Settings.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/src/SortBox.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/src/TabBar.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/src/Utils.js
Add dot_config/spicetify/CustomApps/spicetify-marketplace/style.css
Add dot_config/spicetify/CustomApps/spicetify-marketplace/styles/components/add-snippet-modal.scss
Add dot_config/spicetify/CustomApps/spicetify-marketplace/styles/components/card.scss
Add dot_config/spicetify/CustomApps/spicetify-marketplace/styles/components/fixes.scss
Add dot_config/spicetify/CustomApps/spicetify-marketplace/styles/components/grid.scss
Add dot_config/spicetify/CustomApps/spicetify-marketplace/styles/components/readme-pages.scss
Add dot_config/spicetify/CustomApps/spicetify-marketplace/styles/components/reload-modal.scss
Add dot_config/spicetify/CustomApps/spicetify-marketplace/styles/components/settings.scss
Add dot_config/spicetify/CustomApps/spicetify-marketplace/styles/style.scss
Add dot_config/spicetify/CustomApps/spicetify-marketplace/tsconfig.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_executable_index.html
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_executable_login.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_executable_login.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_executable_manifest.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_executable_vendor~login.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_executable_vendor~login.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIAraOnly-Black.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIAraOnly-Bold.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIAraOnly-Book.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIAraOnly-Light.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUICyrOnly-Black.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUICyrOnly-Bold.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUICyrOnly-Book.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUICyrOnly-Light.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIHbrOnly-Black.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIHbrOnly-Bold.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIHbrOnly-Book.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIHbrOnly-Light.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIv3T-Black.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIv3T-Bold.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIv3T-Book.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_CircularSpUIv3T-Light.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_fonts/private_executable_spoticon_regular_2.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable___longest.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_af.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_am.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_ar.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_az.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_bg.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_bho.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_bn.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_cs.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_da.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_de.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_el.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_en.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_es-419.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_es.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_et.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_fa.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_fi.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_fil.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_fr-CA.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_fr.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_gu.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_he.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_hi.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_hr.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_hu.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_id.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_is.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_it.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_ja.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_kn.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_ko.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_lt.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_lv.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_ml.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_mr.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_ms.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_nb.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_ne.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_nl.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_or.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_pa-IN.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_pa-PK.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_pl.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_pt-BR.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_pt-PT.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_ro.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_ru.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_sk.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_sl.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_sr.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_sv.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_sw.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_ta.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_te.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_th.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_tr.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_uk.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_ur.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_vi.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_zh-CN.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_zh-TW.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_i18n/private_executable_zu.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_executable_background.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_executable_eye.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_executable_logo.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_executable_scrollbar-buttons.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_fake-web-player/private_executable_content-rtl.avif
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_fake-web-player/private_executable_content-small-rtl.avif
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_fake-web-player/private_executable_content-small.avif
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_fake-web-player/private_executable_content.avif
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_fake-web-player/private_executable_controls.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_fake-web-player/private_executable_footer-left.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_fake-web-player/private_executable_footer-right.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_fake-web-player/private_executable_side.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_social-buttons/private_executable_apple.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_social-buttons/private_executable_facebook.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_login/private_images/private_social-buttons/private_executable_google.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_12.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_185.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_188.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_188.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_258.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_258.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_375.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_375.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_381.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_396.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_448.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_479.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_479.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_696.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_774.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_774.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_818.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_818.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_blank.html
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_collection-music-download.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_in-app-messaging-preview.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_in-app-messaging-preview.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_index.html
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_licenses.html
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_manifest.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_vendor~xpui.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_vendor~xpui.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-desktop-modals.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-desktop-modals.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-desktop-routes-debug-utils.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-desktop-routes-debug-utils.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-desktop-routes-homepage-takeover-ad.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-desktop-routes-homepage-takeover-ad.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-album.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-all-episode-sponsors.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-all-episode-sponsors.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-all-show-sponsors.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-artist.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-artist.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-blend.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-blend.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-collection-concerts.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-collection-concerts.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-collection-local-files.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-collection-local-files.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-concert.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-concert.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-create-playlist.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-download-page.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-download-page.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-enhanced-playlist.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-enhanced-playlist.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-episode.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-episode.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-folder.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-folder.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-offline-browse.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-offline-browse.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-playlist.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-playlist.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-profile.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-profile.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-queue.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-queue.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-track-v2.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-track-v2.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-track.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-view.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui-routes-view.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui.css
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_executable_xpui.js
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIAraOnly-Black.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIAraOnly-Bold.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIAraOnly-Book.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIAraOnly-Light.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUICyrOnly-Black.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUICyrOnly-Bold.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUICyrOnly-Book.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUICyrOnly-Light.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIHbrOnly-Black.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIHbrOnly-Bold.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIHbrOnly-Book.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIHbrOnly-Light.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIv3T-Black.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIv3T-Bold.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIv3T-Book.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_fonts/private_executable_CircularSpUIv3T-Light.woff2
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable___longest.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_af.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_am.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_ar.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_az.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_bg.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_bho.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_bn.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_cs.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_da.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_de.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_el.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_en.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_es-419.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_es.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_et.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_fa.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_fi.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_fil.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_fr-CA.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_fr.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_gu.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_he.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_hi.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_hr.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_hu.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_id.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_is.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_it.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_ja.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_kn.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_ko.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_lt.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_lv.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_ml.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_mr.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_ms.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_nb.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_ne.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_nl.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_or.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_pa-IN.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_pa-PK.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_pl.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_pt-BR.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_pt-PT.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_ro.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_ru.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_sk.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_sl.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_sr.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_sv.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_sw.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_ta.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_te.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_th.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_tr.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_uk.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_ur.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_vi.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_zh-CN.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_zh-TW.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_i18n/private_executable_zu.json
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_devices/private_executable_mac.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_connect-to-devices-white.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_connect_header@1x.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_equaliser-animated-green.gif
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_equaliser-green.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_hifi-button-off.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_hifi-button-on.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_hifi.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_playlist-folder-filled.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_station-header-wave.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_station-wave.svg
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_sw_saber_ahsoka1.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_sw_saber_anakin.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_sw_saber_leia.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_sw_saber_luke.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_sw_saber_mace.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_sw_saber_rey.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_sw_saber_vader.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_xpui/private_images/private_executable_tracklist-placeholder.png
Add dot_config/spicetify/private_Extracted/private_Raw/private_zlink/private_executable_index.html
Add dot_config/spicetify/private_Extracted/private_Raw/private_zlink/private_executable_manifest.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_executable_index.html
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_executable_login.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_executable_login.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_executable_manifest.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_executable_vendor~login.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_executable_vendor~login.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_fonts/.keep
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable___longest.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_af.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_am.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_ar.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_az.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_bg.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_bho.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_bn.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_cs.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_da.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_de.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_el.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_en.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_es-419.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_es.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_et.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_fa.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_fi.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_fil.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_fr-CA.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_fr.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_gu.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_he.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_hi.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_hr.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_hu.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_id.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_is.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_it.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_ja.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_kn.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_ko.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_lt.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_lv.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_ml.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_mr.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_ms.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_nb.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_ne.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_nl.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_or.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_pa-IN.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_pa-PK.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_pl.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_pt-BR.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_pt-PT.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_ro.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_ru.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_sk.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_sl.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_sr.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_sv.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_sw.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_ta.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_te.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_th.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_tr.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_uk.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_ur.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_vi.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_zh-CN.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_zh-TW.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_i18n/private_executable_zu.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_images/private_fake-web-player/.keep
Add dot_config/spicetify/private_Extracted/private_Themed/private_login/private_images/private_social-buttons/.keep
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_12.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_185.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_188.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_188.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_258.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_258.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_375.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_375.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_381.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_396.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_448.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_479.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_479.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_696.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_774.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_774.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_818.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_818.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_blank.html
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_collection-music-download.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_in-app-messaging-preview.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_in-app-messaging-preview.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_index.html
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_licenses.html
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_manifest.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_vendor~xpui.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_vendor~xpui.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-desktop-modals.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-desktop-modals.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-desktop-routes-debug-utils.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-desktop-routes-debug-utils.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-desktop-routes-homepage-takeover-ad.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-desktop-routes-homepage-takeover-ad.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-album.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-all-episode-sponsors.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-all-episode-sponsors.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-all-show-sponsors.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-artist.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-artist.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-blend.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-blend.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-collection-concerts.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-collection-concerts.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-collection-local-files.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-collection-local-files.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-concert.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-concert.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-create-playlist.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-download-page.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-download-page.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-enhanced-playlist.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-enhanced-playlist.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-episode.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-episode.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-folder.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-folder.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-offline-browse.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-offline-browse.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-playlist.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-playlist.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-profile.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-profile.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-queue.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-queue.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-track-v2.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-track-v2.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-track.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-view.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui-routes-view.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui.css
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_executable_xpui.js
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_fonts/.keep
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable___longest.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_af.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_am.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_ar.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_az.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_bg.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_bho.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_bn.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_cs.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_da.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_de.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_el.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_en.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_es-419.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_es.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_et.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_fa.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_fi.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_fil.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_fr-CA.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_fr.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_gu.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_he.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_hi.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_hr.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_hu.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_id.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_is.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_it.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_ja.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_kn.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_ko.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_lt.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_lv.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_ml.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_mr.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_ms.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_nb.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_ne.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_nl.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_or.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_pa-IN.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_pa-PK.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_pl.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_pt-BR.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_pt-PT.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_ro.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_ru.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_sk.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_sl.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_sr.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_sv.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_sw.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_ta.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_te.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_th.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_tr.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_uk.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_ur.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_vi.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_zh-CN.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_zh-TW.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_i18n/private_executable_zu.json
Add dot_config/spicetify/private_Extracted/private_Themed/private_xpui/private_images/private_devices/.keep
Add dot_config/spicetify/private_Extracted/private_Themed/private_zlink/private_executable_index.html
Add dot_config/spicetify/private_Extracted/private_Themed/private_zlink/private_executable_manifest.json
2022-05-09 01:04:16 +02:00

496 lines
19 KiB
JavaScript

// @ts-check
// NAME: Spicetify Marketplace Extension
// AUTHOR: theRealPadster, CharlieS1103
// DESCRIPTION: Companion extension for Spicetify Marketplace
/// <reference path="../spicetify-cli/globals.d.ts" />
// Reset any Marketplace localStorage keys (effectively resetting it completely)
// eslint-disable-next-line no-redeclare
const resetMarketplace = () => {
console.log("Resetting Marketplace");
// Loop through and reset marketplace keys
Object.keys(localStorage).forEach((key) => {
if (key.startsWith("marketplace:")) {
localStorage.removeItem(key);
console.log(`Removed ${key}`);
}
});
console.log("Marketplace has been reset");
location.reload();
};
// Expose useful methods in global context
// @ts-ignore
window.Marketplace = {
// Should allow you to reset Marketplace from the dev console if it's b0rked
reset: resetMarketplace,
};
// eslint-disable-next-line no-redeclare
const hexToRGB = (hex) => {
if (hex.length === 3) {
hex = hex.split("").map((char) => char + char).join("");
} else if (hex.length != 6) {
throw "Only 3- or 6-digit hex colours are allowed.";
} else if (hex.match(/[^0-9a-f]/i)) {
throw "Only hex colours are allowed.";
}
const aRgbHex = hex.match(/.{1,2}/g);
const aRgb = [
parseInt(aRgbHex[0], 16),
parseInt(aRgbHex[1], 16),
parseInt(aRgbHex[2], 16),
];
return aRgb;
};
/**
* Get user, repo, and branch from a GitHub raw URL
* @param {string} url Github Raw URL
* @returns { { user: string, repo: string, branch: string, filePath: string } }
*/
const getParamsFromGithubRaw = (url) => {
// eslint-disable-next-line no-useless-escape
const regex_result = url.match(/https:\/\/raw\.githubusercontent\.com\/(?<user>[^\/]+)\/(?<repo>[^\/]+)\/(?<branch>[^\/]+)\/(?<filePath>.+$)/);
// e.g. https://raw.githubusercontent.com/CharlieS1103/spicetify-extensions/main/featureshuffle/featureshuffle.js
const obj = {
user: regex_result ? regex_result.groups.user : null,
repo: regex_result ? regex_result.groups.repo : null,
branch: regex_result ? regex_result.groups.branch : null,
filePath: regex_result ? regex_result.groups.filePath : null,
};
return obj;
};
(async function MarketplaceExtension() {
const { LocalStorage } = Spicetify;
if (!(LocalStorage)) {
// console.log('Not ready, waiting...');
setTimeout(MarketplaceExtension, 1000);
return;
}
// TODO: can we reference/require/import common files between extension and custom app?
const LOCALSTORAGE_KEYS = {
"installedExtensions": "marketplace:installed-extensions",
"installedSnippets": "marketplace:installed-snippets",
"installedThemes": "marketplace:installed-themes",
"activeTab": "marketplace:active-tab",
"tabs": "marketplace:tabs",
// Theme installed store the localsorage key of the theme (e.g. marketplace:installed:NYRI4/Comfy-spicetify/user.css)
"themeInstalled": "marketplace:theme-installed",
"colorShift": "marketplace:colorShift",
};
const getLocalStorageDataFromKey = (key, fallback) => {
return JSON.parse(localStorage.getItem(key)) ?? fallback;
};
const initializeExtension = (extensionKey) => {
const extensionManifest = getLocalStorageDataFromKey(extensionKey);
// Abort if no manifest found or no extension URL (i.e. a theme)
if (!extensionManifest || !extensionManifest.extensionURL) return;
console.log("Initializing extension: ", extensionManifest);
const script = document.createElement("script");
script.defer = true;
script.src = extensionManifest.extensionURL;
// If it's a github raw script, use jsdelivr
if (script.src.indexOf("raw.githubusercontent.com") > -1) {
const { user, repo, branch, filePath } = getParamsFromGithubRaw(extensionManifest.extensionURL);
if (!user || !repo || !branch || !filePath) return;
script.src = `https://cdn.jsdelivr.net/gh/${user}/${repo}@${branch}/${filePath}`;
}
script.src = `${script.src}?time=${Date.now()}`;
document.body.appendChild(script);
};
/**
* Loop through the snippets and add the contents of the code as a style tag in the DOM
* @param { { title: string; description: string; code: string;}[] } snippets The snippets to initialize
*/
// TODO: keep this in sync with the index.js file
const initializeSnippets = (snippets) => {
// Remove any existing marketplace snippets
const existingSnippets = document.querySelector("style.marketplaceSnippets");
if (existingSnippets) existingSnippets.remove();
const style = document.createElement("style");
const styleContent = snippets.reduce((accum, snippet) => {
accum += `/* ${snippet.title} - ${snippet.description} */\n`;
accum += `${snippet.code}\n`;
return accum;
}, "");
style.innerHTML = styleContent;
style.classList.add("marketplaceSnippets");
document.head.appendChild(style);
};
// NOTE: Keep in sync with index.js
const injectColourScheme = (scheme) => {
try {
// Remove any existing Spicetify scheme
const existingColorsCSS = document.querySelector("link[href='colors.css']");
if (existingColorsCSS) existingColorsCSS.remove();
// Remove any existing marketplace scheme
const existingMarketplaceSchemeCSS = document.querySelector("style.marketplaceCSS.marketplaceScheme");
if (existingMarketplaceSchemeCSS) existingMarketplaceSchemeCSS.remove();
// Add new marketplace scheme
const schemeTag = document.createElement("style");
schemeTag.classList.add("marketplaceCSS");
schemeTag.classList.add("marketplaceScheme");
// const theme = document.querySelector('#theme');
let injectStr = ":root {";
const themeIniKeys = Object.keys(scheme);
themeIniKeys.forEach((key) => {
injectStr += `--spice-${key}: #${scheme[key]};`;
injectStr += `--spice-rgb-${key}: ${hexToRGB(scheme[key])};`;
});
injectStr += "}";
schemeTag.innerHTML = injectStr;
document.head.appendChild(schemeTag);
} catch (error) {
console.warn(error);
}
};
/**
* Update the user.css in the DOM
* @param {string} userCSS The contents of the new user.css
*/
const injectUserCSS = (userCSS) => {
try {
// Remove any existing Spicetify user.css
const existingUserThemeCSS = document.querySelector("link[href='user.css']");
if (existingUserThemeCSS) existingUserThemeCSS.remove();
// Remove any existing marketplace scheme
const existingMarketplaceUserCSS = document.querySelector("style.marketplaceCSS.marketplaceUserCSS");
if (existingMarketplaceUserCSS) existingMarketplaceUserCSS.remove();
// Add new marketplace scheme
const userCssTag = document.createElement("style");
userCssTag.classList.add("marketplaceCSS");
userCssTag.classList.add("marketplaceUserCSS");
userCssTag.innerHTML = userCSS;
document.head.appendChild(userCssTag);
} catch (error) {
console.warn(error);
}
};
// I guess this is okay to not have an end condition on the interval
// because if they turn the setting on or off,
// closing the settings modal will reload the page
const initColorShiftLoop = (schemes) => {
let i = 0;
const NUM_SCHEMES = Object.keys(schemes).length;
setInterval(() => {
// Resets to zero when passes the last scheme
i = i % NUM_SCHEMES;
const style = document.createElement("style");
style.className = "colorShift-style";
style.innerHTML = `* {
transition-duration: 400ms;
}
main-type-bass {
transition-duration: unset !important;
}`;
document.body.appendChild(style);
injectColourScheme(Object.values(schemes)[i]);
i++;
style.remove();
}, 60 * 1000);
};
const parseCSS = async (themeManifest) => {
const userCssUrl = themeManifest.cssURL.indexOf("raw.githubusercontent.com") > -1
// TODO: this should probably be the URL stored in localstorage actually (i.e. put this url in localstorage)
? `https://cdn.jsdelivr.net/gh/${themeManifest.user}/${themeManifest.repo}@${themeManifest.branch}/${themeManifest.manifest.usercss}`
: themeManifest.cssURL;
// TODO: Make this more versatile
const assetsUrl = userCssUrl.replace("/user.css", "/assets/");
console.log("Parsing CSS: ", userCssUrl);
let css = await fetch(`${userCssUrl}?time=${Date.now()}`).then(res => res.text());
// console.log("Parsed CSS: ", css);
let urls = css.matchAll(/url\(['|"](?<path>.+?)['|"]\)/gm) || [];
for (const match of urls) {
const url = match.groups.path;
// console.log(url);
// If it's a relative URL, transform it to HTTP URL
if (!url.startsWith("http") && !url.startsWith("data")) {
const newUrl = assetsUrl + url.replace(/\.\//g, "");
css = css.replace(url, newUrl);
}
}
// console.log("New CSS: ", css);
return css;
};
const initializeTheme = async (themeKey) => {
const themeManifest = getLocalStorageDataFromKey(themeKey);
// Abort if no manifest found
if (!themeManifest) {
console.log("No theme manifest found");
return;
}
console.log("Initializing theme: ", themeManifest);
// Inject colour scheme if found
if (themeManifest.schemes) {
const activeScheme = themeManifest.schemes[themeManifest.activeScheme];
injectColourScheme(activeScheme);
if (localStorage.getItem(LOCALSTORAGE_KEYS.colorShift) === "true") {
initColorShiftLoop(themeManifest.schemes);
}
} else {
console.warn("No schemes found for theme");
}
// Remove default css
// TODO: what about if we remove the theme? Should we re-add the user.css/colors.css?
// const existingUserThemeCSS = document.querySelector("link[href='user.css']");
// if (existingUserThemeCSS) existingUserThemeCSS.remove();
// Remove any existing marketplace theme
const existingMarketplaceThemeCSS = document.querySelector("link.marketplaceCSS");
if (existingMarketplaceThemeCSS) existingMarketplaceThemeCSS.remove();
// Add theme css
const userCSS = await parseCSS(themeManifest);
injectUserCSS(userCSS);
// Inject any included js
if (themeManifest.include && themeManifest.include.length) {
// console.log("Including js", installedThemeData.include);
themeManifest.include.forEach((script) => {
const newScript = document.createElement("script");
let src = script;
// If it's a github raw script, use jsdelivr
if (script.indexOf("raw.githubusercontent.com") > -1) {
const { user, repo, branch, filePath } = getParamsFromGithubRaw(script);
src = `https://cdn.jsdelivr.net/gh/${user}/${repo}@${branch}/${filePath}`;
}
// console.log({src});
newScript.src = `${src}?time=${Date.now()}`;
newScript.classList.add("marketplaceScript");
document.body.appendChild(newScript);
});
}
};
console.log("Loaded Marketplace extension");
const installedThemeKey = LocalStorage.get(LOCALSTORAGE_KEYS.themeInstalled);
if (installedThemeKey) initializeTheme(installedThemeKey);
const installedSnippetKeys = getLocalStorageDataFromKey(LOCALSTORAGE_KEYS.installedSnippets, []);
const installedSnippets = installedSnippetKeys.map((key) => getLocalStorageDataFromKey(key));
initializeSnippets(installedSnippets);
const installedExtensions = getLocalStorageDataFromKey(LOCALSTORAGE_KEYS.installedExtensions, []);
installedExtensions.forEach((extensionKey) => initializeExtension(extensionKey));
})();
const ITEMS_PER_REQUEST = 100;
async function Blacklist() {
const url = "https://raw.githubusercontent.com/CharlieS1103/spicetify-marketplace/main/blacklist.json";
const jsonReturned = await fetch(url).then(res => res.json()).catch(() => {});
return jsonReturned.repos;
}
/**
* TODO
* @param {"theme"|"extension"} type The repo type
* @param {number} pageNum The page number
* @returns TODO
*/
async function queryRepos(type, pageNum = 1) {
const BLACKLIST = window.sessionStorage.getItem("marketplace:blacklist");
let url = `https://api.github.com/search/repositories?per_page=${ITEMS_PER_REQUEST}`;
if (type === "extension") url += `&q=${encodeURIComponent("topic:spicetify-extensions")}`;
else if (type === "theme") url += `&q=${encodeURIComponent("topic:spicetify-themes")}`;
if (pageNum) url += `&page=${pageNum}`;
const allRepos = await fetch(url).then(res => res.json()).catch(() => []);
if (!allRepos.items) {
Spicetify.showNotification("Too Many Requests, Cool Down.");
}
const filteredResults = {
...allRepos,
page_count: allRepos.items.length,
items: allRepos.items.filter(item => !BLACKLIST.includes(item.html_url)),
};
return filteredResults;
}
/**
* TODO
* @param {"theme"|"extension"} type The repo type
* @param {number} pageNum The page number
* @returns TODO
*/
async function loadPageRecursive(type, pageNum) {
const pageOfRepos = await queryRepos(type, pageNum);
appendInformationToLocalStorage(pageOfRepos, type);
// Sets the amount of items that have thus been fetched
const soFarResults = ITEMS_PER_REQUEST * (pageNum - 1) + pageOfRepos.page_count;
console.log({ pageOfRepos });
const remainingResults = pageOfRepos.total_count - soFarResults;
// If still have more results, recursively fetch next page
console.log(`Parsed ${soFarResults}/${pageOfRepos.total_count} ${type}s`);
if (remainingResults > 0) return await loadPageRecursive(type, pageNum + 1); // There are more results. currentPage + 1 is the next page to fetch.
else console.log(`No more ${type} results`);
}
(async function initializePreload() {
console.log("Preloading extensions and themes...");
window.sessionStorage.clear();
const BLACKLIST = await Blacklist();
window.sessionStorage.setItem("marketplace:blacklist", JSON.stringify(BLACKLIST));
// TODO: does this work?
// The recursion isn't super clean...
// Begin by getting the themes and extensions from github
// const [extensionReposArray, themeReposArray] = await Promise.all([
await Promise.all([
loadPageRecursive("extension", 1),
loadPageRecursive("theme", 1),
]);
// let extensionsNextPage = 1;
// let themesNextPage = 1;
// do {
// extensionReposArray = await loadPage("extension", extensionsNextPage);
// appendInformationToLocalStorage(extensionReposArray, "extension");
// } while (extensionsNextPage);
// do {
// themeReposArray = await loadPage("theme", themesNextPage);
// appendInformationToLocalStorage(themeReposArray, "theme");
// } while (themesNextPage);
})();
async function appendInformationToLocalStorage(array, type) {
// This system should make it so themes and extensions are stored concurrently
for (const repo of array.items) {
const data = (type === "theme")
? await fetchThemeManifest(repo.contents_url, repo.default_branch)
: await fetchExtensionManifest(repo.contents_url, repo.default_branch);
if (data) {
addToSessionStorage(data);
await sleep(5000);
}
}
}
// This function is used to fetch manifest of a theme and return it
async function fetchThemeManifest(contents_url, branch) {
try {
const regex_result = contents_url.match(/https:\/\/api\.github\.com\/repos\/(?<user>.+)\/(?<repo>.+)\/contents/);
// TODO: err handling?
if (!regex_result || !regex_result.groups) return null;
let { user, repo } = regex_result.groups;
let manifests = await getRepoManifest(user, repo, branch);
// If the manifest returned is not an array, initialize it as one
if (!Array.isArray(manifests)) manifests = [manifests];
manifests.user = user;
manifests.repo = repo;
if (manifests[0] && manifests[0].name && manifests[0].usercss && manifests[0].description) {
return manifests;
}
return null;
}
catch (err) {
// console.warn(contents_url, err);
return null;
}
}
// This function is used to fetch manifest of an extension and return it
async function fetchExtensionManifest(contents_url, branch) {
try {
// TODO: use the original search full_name ("theRealPadster/spicetify-hide-podcasts") or something to get the url better?
const regex_result = contents_url.match(/https:\/\/api\.github\.com\/repos\/(?<user>.+)\/(?<repo>.+)\/contents/);
// TODO: err handling?
if (!regex_result || !regex_result.groups) return null;
const { user, repo } = regex_result.groups;
let manifests = await getRepoManifest(user, repo, branch);
// If the manifest returned is not an array, initialize it as one
if (!Array.isArray(manifests)) manifests = [manifests];
manifests.user = user;
manifests.repo = repo;
if (manifests[0] && manifests[0].name && manifests[0].description && manifests[0].main) {
return manifests;
}
return null;
}
catch (err) {
// console.warn(contents_url, err);
return null;
}
}
async function getRepoManifest(user, repo, branch) {
const sessionStorageItem = window.sessionStorage.getItem(`${user}-${repo}`);
const failedSessionStorageItems = window.sessionStorage.getItem("noManifests");
if (sessionStorageItem) {
return null;
}
const url = `https://raw.githubusercontent.com/${user}/${repo}/${branch}/manifest.json`;
if (failedSessionStorageItems?.includes(url)) {
return null;
}
return await fetch(url).then(res => res.json()).catch(() => addToSessionStorage([url], "noManifests"));
}
// This function appends an array to session storage
function addToSessionStorage(items, key) {
if (!items || items == null) return;
items.forEach(item => {
if (!key) key = `${items.user}-${items.repo}`;
// If the key already exists, it will append to it instead of overwriting it
const existing = window.sessionStorage.getItem(key);
const parsed = existing ? JSON.parse(existing) : [];
parsed.push(item);
window.sessionStorage.setItem(key, JSON.stringify(parsed));
});
}
// This function is used to sleep for a certain amount of time
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}