gitextract_9squytp3/ ├── .github/ │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── build.yml │ └── release.yml ├── .gitignore ├── .husky/ │ └── pre-commit ├── .vscode/ │ └── settings.json ├── LICENSE ├── README.md ├── changelog.md ├── config/ │ ├── webpack.main.config.ts │ ├── webpack.plugins.ts │ ├── webpack.renderer.config.ts │ └── webpack.rules.ts ├── eslint.config.mjs ├── forge.config.ts ├── package.json ├── release/ │ ├── build-windows.iss │ └── version.json ├── res/ │ ├── .service/ │ │ └── request-forwarder.js │ ├── lang/ │ │ ├── en-US.json │ │ ├── zh-CN.json │ │ └── zh-TW.json │ └── logo.icns ├── scripts/ │ └── feishu-upload.js ├── src/ │ ├── common/ │ │ ├── async-memoize.ts │ │ ├── camel-to-snake.ts │ │ ├── constant.ts │ │ ├── debounce.ts │ │ ├── event-wrapper.ts │ │ ├── file-util.ts │ │ ├── get-resource-path.ts │ │ ├── index-map.ts │ │ ├── is-renderer.ts │ │ ├── media-util.ts │ │ ├── normalize-util.ts │ │ ├── safe-serialization.ts │ │ ├── store.ts │ │ ├── thumb-bar-util.ts │ │ ├── time-util.ts │ │ ├── unique-map.ts │ │ └── void-callback.ts │ ├── hooks/ │ │ ├── useAppConfig.ts │ │ ├── useLocalFonts.ts │ │ ├── useMediaDevices.ts │ │ ├── useMounted.ts │ │ ├── useStateRef.ts │ │ └── useVirtualList.ts │ ├── main/ │ │ ├── deep-link/ │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── native_modules/ │ │ │ └── TaskbarThumbnailManager/ │ │ │ ├── TaskbarThumbnailManager.node │ │ │ └── TaskbarThumbnailManager.node.d.ts │ │ ├── tray-manager/ │ │ │ └── index.ts │ │ └── window-manager/ │ │ └── index.ts │ ├── preload/ │ │ ├── common-preload.ts │ │ ├── extension.ts │ │ └── index.ts │ ├── renderer/ │ │ ├── app.scss │ │ ├── app.tsx │ │ ├── components/ │ │ │ ├── A/ │ │ │ │ └── index.tsx │ │ │ ├── AnimatedDiv/ │ │ │ │ └── index.tsx │ │ │ ├── ArtistItem/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── BottomLoadingState/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── Checkbox/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── Condition/ │ │ │ │ └── index.tsx │ │ │ ├── ContextMenu/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── DragReceiver/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── Empty/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── Header/ │ │ │ │ ├── index.scss │ │ │ │ ├── index.tsx │ │ │ │ └── widgets/ │ │ │ │ ├── Navigator/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ └── SearchHistory/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── Loading/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── Modal/ │ │ │ │ ├── index.tsx │ │ │ │ └── templates/ │ │ │ │ ├── AddMusicToSheet/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── AddNewSheet/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── Base/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── ExitConfirm/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── ImportMusicSheet/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── PluginSubscription/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── Reconfirm/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── SearchLyric/ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── searchResultStore.ts │ │ │ │ │ │ └── useSearchLyric.ts │ │ │ │ │ ├── index.scss │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── searchResult.scss │ │ │ │ │ └── searchResult.tsx │ │ │ │ ├── SelectOne/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── SimpleInputWithState/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── Sparkles/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── Update/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── WatchLocalDir/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ └── index.ts │ │ │ ├── MusicBar/ │ │ │ │ ├── index.scss │ │ │ │ ├── index.tsx │ │ │ │ └── widgets/ │ │ │ │ ├── Controller/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── Extra/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── MusicInfo/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ └── Slider/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── MusicDetail/ │ │ │ │ ├── index.scss │ │ │ │ ├── index.tsx │ │ │ │ ├── store.ts │ │ │ │ └── widgets/ │ │ │ │ ├── Header/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ └── Lyric/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── MusicDownloaded/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── MusicFavorite/ │ │ │ │ └── index.tsx │ │ │ ├── MusicList/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── MusicSheetlikeItem/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── MusicSheetlikeList/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── MusicSheetlikeView/ │ │ │ │ ├── components/ │ │ │ │ │ ├── Body/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── Header/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.scss │ │ │ │ ├── index.tsx │ │ │ │ └── store.ts │ │ │ ├── NoPlugin/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── Panel/ │ │ │ │ ├── index.tsx │ │ │ │ └── templates/ │ │ │ │ ├── Base/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── MusicComment/ │ │ │ │ │ ├── index.scss │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── useComment.ts │ │ │ │ ├── PlayList/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── UserVariables/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ └── index.ts │ │ │ ├── SvgAsset/ │ │ │ │ └── index.tsx │ │ │ ├── SwitchCase/ │ │ │ │ └── index.tsx │ │ │ └── Tag/ │ │ │ ├── index.scss │ │ │ └── index.tsx │ │ ├── core/ │ │ │ ├── backup-resume/ │ │ │ │ └── index.ts │ │ │ ├── db/ │ │ │ │ └── music-sheet-db.ts │ │ │ ├── downloader/ │ │ │ │ ├── downloaded-sheet.ts │ │ │ │ ├── ee.ts │ │ │ │ ├── index.new.ts │ │ │ │ ├── index.ts │ │ │ │ └── store.ts │ │ │ ├── link-lyric/ │ │ │ │ └── index.ts │ │ │ ├── local-music/ │ │ │ │ ├── index.ts │ │ │ │ └── store.ts │ │ │ ├── music-sheet/ │ │ │ │ ├── backend/ │ │ │ │ │ └── index.ts │ │ │ │ ├── common/ │ │ │ │ │ └── default-sheet.ts │ │ │ │ ├── frontend/ │ │ │ │ │ ├── index.old.ts │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── recently-playlist/ │ │ │ │ └── index.ts │ │ │ └── track-player/ │ │ │ ├── controller/ │ │ │ │ ├── audio-controller.ts │ │ │ │ └── controller-base.ts │ │ │ ├── enum.ts │ │ │ ├── hooks.ts │ │ │ ├── index.ts │ │ │ └── store.ts │ │ ├── document/ │ │ │ ├── bootstrap.ts │ │ │ ├── fallback.tsx │ │ │ ├── index.html │ │ │ ├── index.tsx │ │ │ ├── styles/ │ │ │ │ ├── base.scss │ │ │ │ ├── components.scss │ │ │ │ ├── fallback.scss │ │ │ │ ├── index.scss │ │ │ │ ├── tables.scss │ │ │ │ ├── utilities.scss │ │ │ │ └── variables.scss │ │ │ └── useBootstrap.ts │ │ ├── pages/ │ │ │ └── main-page/ │ │ │ ├── components/ │ │ │ │ └── SideBar/ │ │ │ │ ├── index.scss │ │ │ │ ├── index.tsx │ │ │ │ └── widgets/ │ │ │ │ ├── ListItem/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── MySheets/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ └── StarredSheets/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── index.scss │ │ │ ├── index.tsx │ │ │ └── views/ │ │ │ ├── album-view/ │ │ │ │ ├── hooks/ │ │ │ │ │ └── useAlbumDetail.ts │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── artist-view/ │ │ │ │ ├── components/ │ │ │ │ │ ├── Body/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── widgets/ │ │ │ │ │ │ ├── AlbumResult/ │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── MusicResult/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── Header/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── hooks/ │ │ │ │ │ └── useQueryArtist.ts │ │ │ │ ├── index.scss │ │ │ │ ├── index.tsx │ │ │ │ └── store/ │ │ │ │ └── index.ts │ │ │ ├── download-view/ │ │ │ │ ├── components/ │ │ │ │ │ ├── Downloaded/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── Downloading/ │ │ │ │ │ ├── DownloadStatus.tsx │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── local-music-view/ │ │ │ │ ├── index.scss │ │ │ │ ├── index.tsx │ │ │ │ └── views/ │ │ │ │ ├── album/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── artist/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── folder/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ └── list/ │ │ │ │ └── index.tsx │ │ │ ├── music-sheet-view/ │ │ │ │ ├── index.scss │ │ │ │ ├── index.tsx │ │ │ │ ├── local-sheet/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── remote-sheet/ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ └── usePluginSheetMusicList.ts │ │ │ │ │ └── index.tsx │ │ │ │ └── store/ │ │ │ │ └── musicSheetStore.ts │ │ │ ├── plugin-manager-view/ │ │ │ │ ├── components/ │ │ │ │ │ └── plugin-table/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── recently-play-view/ │ │ │ │ └── index.tsx │ │ │ ├── recommend-sheets-view/ │ │ │ │ ├── components/ │ │ │ │ │ └── Body/ │ │ │ │ │ ├── index.scss │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── tag-panel.scss │ │ │ │ │ └── tag-panel.tsx │ │ │ │ ├── hooks/ │ │ │ │ │ ├── useRecommendListTags.ts │ │ │ │ │ └── useRecommendSheets.ts │ │ │ │ └── index.tsx │ │ │ ├── search-view/ │ │ │ │ ├── components/ │ │ │ │ │ └── SearchResult/ │ │ │ │ │ ├── AlbumResult/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ArtistResult/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── MusicResult/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── SheetResult/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── hooks/ │ │ │ │ │ └── useSearch.ts │ │ │ │ ├── index.scss │ │ │ │ ├── index.tsx │ │ │ │ └── store/ │ │ │ │ └── search-result.ts │ │ │ ├── setting-view/ │ │ │ │ ├── components/ │ │ │ │ │ ├── CheckBoxSettingItem/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ColorPickerSettingItem/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── FontPickerSettingItem/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── InputSettingItem/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ListBoxSettingItem/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── MultiRadioGroupSettingItem/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── PathSettingItem/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── RadioGroupSettingItem/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.scss │ │ │ │ ├── index.tsx │ │ │ │ └── routers/ │ │ │ │ ├── About/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── Backup/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── Download/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── Lyric/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── Network/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── Normal/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── PlayMusic/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── Plugin/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── ShortCut/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ └── index.ts │ │ │ ├── theme-view/ │ │ │ │ ├── components/ │ │ │ │ │ ├── LocalThemes/ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── RemoteThemes/ │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ └── useRemoteThemes.ts │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── ThemeItem/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── toplist-detail-view/ │ │ │ │ ├── hooks/ │ │ │ │ │ └── useTopListDetail.ts │ │ │ │ └── index.tsx │ │ │ └── toplist-view/ │ │ │ ├── hooks/ │ │ │ │ └── useGetTopList.ts │ │ │ ├── index.scss │ │ │ ├── index.tsx │ │ │ └── store/ │ │ │ └── index.ts │ │ └── utils/ │ │ ├── check-update.ts │ │ ├── classnames.ts │ │ ├── create-tmp-file.ts │ │ ├── get-text-width.ts │ │ ├── get-url-ext.ts │ │ ├── groupBy.ts │ │ ├── img-on-error.ts │ │ ├── is-local-music.ts │ │ ├── lyric-parser.ts │ │ ├── preload-util.ts │ │ ├── raf2.ts │ │ ├── search-history.ts │ │ └── user-perference.ts │ ├── renderer-lrc/ │ │ ├── document/ │ │ │ ├── bootstrap.ts │ │ │ ├── index.html │ │ │ ├── index.tsx │ │ │ └── styles/ │ │ │ └── index.scss │ │ └── pages/ │ │ ├── index.scss │ │ └── index.tsx │ ├── renderer-minimode/ │ │ ├── document/ │ │ │ ├── bootstrap.ts │ │ │ ├── index.html │ │ │ ├── index.tsx │ │ │ └── styles/ │ │ │ └── index.scss │ │ └── pages/ │ │ ├── index.scss │ │ └── index.tsx │ ├── shared/ │ │ ├── app-config/ │ │ │ ├── default-app-config.ts │ │ │ ├── main.ts │ │ │ ├── preload.ts │ │ │ └── renderer.ts │ │ ├── database/ │ │ │ ├── main.ts │ │ │ ├── preload-backup.ts │ │ │ ├── preload.ts │ │ │ └── renderer.ts │ │ ├── global-context/ │ │ │ ├── internal/ │ │ │ │ └── common.ts │ │ │ ├── main.ts │ │ │ ├── preload.ts │ │ │ ├── renderer.ts │ │ │ └── type.d.ts │ │ ├── i18n/ │ │ │ ├── main.ts │ │ │ ├── preload.ts │ │ │ ├── renderer.ts │ │ │ └── type.d.ts │ │ ├── logger/ │ │ │ ├── main.ts │ │ │ └── renderer.ts │ │ ├── message-bus/ │ │ │ ├── main.ts │ │ │ ├── preload/ │ │ │ │ ├── extension.ts │ │ │ │ └── main.ts │ │ │ ├── renderer/ │ │ │ │ ├── extension.ts │ │ │ │ └── main.ts │ │ │ └── type.d.ts │ │ ├── plugin-manager/ │ │ │ ├── main/ │ │ │ │ ├── index.ts │ │ │ │ ├── internal-plugins/ │ │ │ │ │ └── local-plugin.ts │ │ │ │ ├── plugin-methods.ts │ │ │ │ ├── plugin.ts │ │ │ │ └── polyfill/ │ │ │ │ ├── react-native-cookies.ts │ │ │ │ └── storage.ts │ │ │ ├── preload.ts │ │ │ └── renderer.ts │ │ ├── service-manager/ │ │ │ ├── common.ts │ │ │ ├── main.ts │ │ │ ├── preload.ts │ │ │ └── renderer.ts │ │ ├── short-cut/ │ │ │ ├── main.ts │ │ │ ├── preload.ts │ │ │ └── renderer.ts │ │ ├── themepack/ │ │ │ ├── main.ts │ │ │ ├── preload.ts │ │ │ ├── renderer.ts │ │ │ └── type.d.ts │ │ ├── utils/ │ │ │ ├── main.ts │ │ │ ├── preload.ts │ │ │ └── renderer.ts │ │ └── window-drag/ │ │ ├── main.ts │ │ ├── preload.ts │ │ └── renderer.ts │ ├── types/ │ │ ├── app-config.d.ts │ │ ├── assets.d.ts │ │ ├── audio-controller.d.ts │ │ ├── common.d.ts │ │ ├── main/ │ │ │ └── window-manager.d.ts │ │ ├── media.d.ts │ │ ├── model.d.ts │ │ ├── plugin.d.ts │ │ ├── preload.d.ts │ │ ├── user-perference.d.ts │ │ └── window.d.ts │ └── webworkers/ │ ├── db-worker/ │ │ ├── const.ts │ │ ├── index.ts │ │ └── utils.ts │ ├── db-worker.ts │ ├── downloader.ts │ └── local-file-watcher.ts └── tsconfig.json