gitextract_hqly39f3/ ├── .bundle/ │ └── config ├── .commitlintrc.json ├── .eslintignore ├── .eslintrc.js ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report_zh.yaml │ │ ├── config.yml │ │ └── feature_request_zh.yaml │ └── workflows/ │ └── build-beta.yml ├── .gitignore ├── .husky/ │ ├── commit-msg │ └── pre-commit ├── .prettierrc.js ├── .watchmanconfig ├── Gemfile ├── LICENSE ├── android/ │ ├── app/ │ │ ├── build.gradle │ │ ├── debug.keystore │ │ ├── proguard-rules.pro │ │ └── src/ │ │ ├── debug/ │ │ │ └── AndroidManifest.xml │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── fun/ │ │ │ └── upup/ │ │ │ └── musicfree/ │ │ │ ├── MainActivity.kt │ │ │ ├── MainApplication.kt │ │ │ ├── lyricUtil/ │ │ │ │ ├── LyricUtilModule.kt │ │ │ │ ├── LyricUtilPackage.kt │ │ │ │ └── LyricView.kt │ │ │ ├── mp3Util/ │ │ │ │ ├── Mp3UtilModule.kt │ │ │ │ └── Mp3UtilPackage.kt │ │ │ └── utils/ │ │ │ ├── UtilsModule.kt │ │ │ └── UtilsPackage.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ ├── rn_edit_text_material.xml │ │ │ └── splashscreen.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ └── values/ │ │ ├── colors.xml │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── build.gradle │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── app.json ├── babel.config.js ├── changelog.md ├── generator/ │ └── generate-assets.mjs ├── index.js ├── ios/ │ ├── .xcode.env │ ├── MusicFree/ │ │ ├── AppDelegate.h │ │ ├── AppDelegate.mm │ │ ├── Images.xcassets/ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Info.plist │ │ ├── LaunchScreen.storyboard │ │ ├── PrivacyInfo.xcprivacy │ │ └── main.m │ ├── MusicFree.xcodeproj/ │ │ ├── project.pbxproj │ │ └── xcshareddata/ │ │ └── xcschemes/ │ │ └── MusicFreeNew.xcscheme │ ├── MusicFreeTests/ │ │ ├── Info.plist │ │ └── MusicFreeNewTests.m │ └── Podfile ├── jest.config.js ├── metro.config.js ├── package.json ├── readme-en.md ├── readme.md ├── release/ │ └── version.json ├── src/ │ ├── components/ │ │ ├── base/ │ │ │ ├── SortableFlatList.tsx │ │ │ ├── appBar.tsx │ │ │ ├── button.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── chip.tsx │ │ │ ├── colorBlock.tsx │ │ │ ├── divider.tsx │ │ │ ├── empty.tsx │ │ │ ├── fab.tsx │ │ │ ├── fastImage.tsx │ │ │ ├── horizontalSafeAreaView.tsx │ │ │ ├── icon.tsx │ │ │ ├── iconButton.tsx │ │ │ ├── iconTextButton.tsx │ │ │ ├── image.tsx │ │ │ ├── imageBtn.tsx │ │ │ ├── input.tsx │ │ │ ├── linkText.tsx │ │ │ ├── listEmpty.tsx │ │ │ ├── listFooter.tsx │ │ │ ├── listItem.tsx │ │ │ ├── loading.tsx │ │ │ ├── noPlugin.tsx │ │ │ ├── pageBackground.tsx │ │ │ ├── paragraph.tsx │ │ │ ├── playAllBar.tsx │ │ │ ├── portal.tsx │ │ │ ├── statusBar.tsx │ │ │ ├── switch.tsx │ │ │ ├── tag.tsx │ │ │ ├── textButton.tsx │ │ │ ├── themeText.tsx │ │ │ ├── tip.tsx │ │ │ ├── toast.tsx │ │ │ ├── typeTag.tsx │ │ │ └── verticalSafeAreaView.tsx │ │ ├── debug/ │ │ │ └── index.tsx │ │ ├── dialogs/ │ │ │ ├── components/ │ │ │ │ ├── base/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── checkStorage.tsx │ │ │ │ ├── downloadDialog.tsx │ │ │ │ ├── editSheetDetail.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── loadingDialog.tsx │ │ │ │ ├── markdownDialog.tsx │ │ │ │ ├── radioDialog.tsx │ │ │ │ ├── setScheduleCloseTimeDialog.tsx │ │ │ │ ├── simpleDialog.tsx │ │ │ │ └── subscribePluginDialog.tsx │ │ │ ├── index.tsx │ │ │ └── useDialog.ts │ │ ├── errorBoundary/ │ │ │ └── index.tsx │ │ ├── mediaItem/ │ │ │ ├── LyricItem.tsx │ │ │ ├── albumItem.tsx │ │ │ ├── musicItem.tsx │ │ │ ├── sheetItem.tsx │ │ │ ├── titleAndTag.tsx │ │ │ └── topListItem.tsx │ │ ├── musicBar/ │ │ │ ├── index.tsx │ │ │ └── musicInfo.tsx │ │ ├── musicList/ │ │ │ └── index.tsx │ │ ├── musicSheetPage/ │ │ │ ├── components/ │ │ │ │ ├── header.tsx │ │ │ │ ├── navBar.tsx │ │ │ │ └── sheetMusicList.tsx │ │ │ └── index.tsx │ │ └── panels/ │ │ ├── base/ │ │ │ ├── panelBase.tsx │ │ │ ├── panelFullscreen.tsx │ │ │ └── panelHeader.tsx │ │ ├── index.tsx │ │ ├── types/ │ │ │ ├── addToMusicSheet.tsx │ │ │ ├── associateLrc.tsx │ │ │ ├── colorPicker.tsx │ │ │ ├── createMusicSheet.tsx │ │ │ ├── editMusicSheetInfo.tsx │ │ │ ├── imageViewer.tsx │ │ │ ├── importMusicSheet.tsx │ │ │ ├── index.ts │ │ │ ├── musicComment/ │ │ │ │ ├── comment.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── useComments.ts │ │ │ ├── musicItemLyricOptions.tsx │ │ │ ├── musicItemOptions.tsx │ │ │ ├── musicQuality.tsx │ │ │ ├── playList/ │ │ │ │ ├── body.tsx │ │ │ │ ├── header.tsx │ │ │ │ └── index.tsx │ │ │ ├── playRate.tsx │ │ │ ├── searchLrc/ │ │ │ │ ├── LyricList.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── searchResultStore.ts │ │ │ │ └── useSearchLrc.ts │ │ │ ├── setFontSize.tsx │ │ │ ├── setLyricOffset.tsx │ │ │ ├── setUserVariables.tsx │ │ │ ├── sheetTags.tsx │ │ │ ├── simpleInput.tsx │ │ │ ├── simpleSelect.tsx │ │ │ └── timingClose.tsx │ │ └── usePanel.ts │ ├── constants/ │ │ ├── assetsConst.ts │ │ ├── commonConst.ts │ │ ├── globalStyle.ts │ │ ├── pathConst.ts │ │ ├── repeatModeConst.ts │ │ └── uiConst.ts │ ├── core/ │ │ ├── appConfig.ts │ │ ├── appMeta.ts │ │ ├── backup.ts │ │ ├── downloader.ts │ │ ├── i18n/ │ │ │ ├── index.ts │ │ │ └── languages/ │ │ │ ├── en-us.json │ │ │ ├── zh-cn.json │ │ │ └── zh-tw.json │ │ ├── localMusicSheet.ts │ │ ├── lyricManager.ts │ │ ├── mediaCache.ts │ │ ├── musicHistory.ts │ │ ├── musicSheet/ │ │ │ ├── index.ts │ │ │ ├── migrate.ts │ │ │ ├── sortedMusicList.ts │ │ │ └── storage.ts │ │ ├── pluginManager/ │ │ │ ├── index.ts │ │ │ ├── meta.ts │ │ │ └── plugin.ts │ │ ├── router/ │ │ │ ├── index.ts │ │ │ └── routes.tsx │ │ ├── theme.ts │ │ └── trackPlayer/ │ │ └── index.ts │ ├── core.defination/ │ │ └── trackPlayer/ │ │ └── index.ts │ ├── entry/ │ │ ├── bootstrap/ │ │ │ ├── BootstrapComponent.tsx │ │ │ ├── bootstrap.atom.ts │ │ │ └── bootstrap.ts │ │ └── index.tsx │ ├── hooks/ │ │ ├── useCheckUpdate.ts │ │ ├── useColors.ts │ │ ├── useDelayFalsy.ts │ │ ├── useHardwareBack.ts │ │ ├── useLogRerender.ts │ │ ├── useMounted.ts │ │ ├── useOnceEffect.ts │ │ ├── useOrientation.ts │ │ ├── usePrimaryColor.ts │ │ ├── useRerender.ts │ │ └── useTextColor.ts │ ├── lib/ │ │ └── react-native-vdebug/ │ │ ├── index.js │ │ └── src/ │ │ ├── event.js │ │ ├── hoc.js │ │ ├── log.js │ │ ├── network.js │ │ ├── storage.js │ │ └── tool.js │ ├── native/ │ │ ├── lyricUtil/ │ │ │ └── index.ts │ │ ├── mp3Util/ │ │ │ └── index.ts │ │ └── utils/ │ │ └── index.ts │ ├── pages/ │ │ ├── albumDetail/ │ │ │ ├── hooks/ │ │ │ │ └── useAlbumMusicList.ts │ │ │ └── index.tsx │ │ ├── artistDetail/ │ │ │ ├── components/ │ │ │ │ ├── body.tsx │ │ │ │ ├── content/ │ │ │ │ │ ├── albumContentItem.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── musicContentItem.tsx │ │ │ │ ├── header.tsx │ │ │ │ └── resultList.tsx │ │ │ ├── hooks/ │ │ │ │ └── useQuery.ts │ │ │ ├── index.tsx │ │ │ └── store/ │ │ │ └── atoms.ts │ │ ├── downloading/ │ │ │ ├── downloadingList.tsx │ │ │ └── index.tsx │ │ ├── fileSelector/ │ │ │ ├── fileItem.tsx │ │ │ └── index.tsx │ │ ├── history/ │ │ │ └── index.tsx │ │ ├── home/ │ │ │ ├── components/ │ │ │ │ ├── ActionButton.tsx │ │ │ │ ├── drawer/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── homeBody/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── operations.tsx │ │ │ │ │ └── sheets.tsx │ │ │ │ ├── homeBodyHorizontal/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── operations.tsx │ │ │ │ └── navBar.tsx │ │ │ └── index.tsx │ │ ├── localMusic/ │ │ │ ├── index.tsx │ │ │ └── mainPage/ │ │ │ ├── index.tsx │ │ │ └── localMusicList.tsx │ │ ├── musicDetail/ │ │ │ ├── components/ │ │ │ │ ├── background.tsx │ │ │ │ ├── bottom/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── playControl.tsx │ │ │ │ │ └── seekBar.tsx │ │ │ │ ├── content/ │ │ │ │ │ ├── albumCover/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── operations.tsx │ │ │ │ │ ├── heartIcon/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── lyric/ │ │ │ │ │ ├── draggingTime.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── lyricItem.tsx │ │ │ │ │ └── lyricOperations.tsx │ │ │ │ └── navBar.tsx │ │ │ └── index.tsx │ │ ├── musicListEditor/ │ │ │ ├── components/ │ │ │ │ ├── body.tsx │ │ │ │ ├── bottom.tsx │ │ │ │ └── musicList.tsx │ │ │ ├── index.tsx │ │ │ └── store/ │ │ │ └── atom.ts │ │ ├── permissions/ │ │ │ └── index.tsx │ │ ├── pluginSheetDetail/ │ │ │ ├── hooks/ │ │ │ │ └── usePluginSheetMusicList.ts │ │ │ └── index.tsx │ │ ├── recommendSheets/ │ │ │ ├── components/ │ │ │ │ └── body/ │ │ │ │ ├── index.tsx │ │ │ │ ├── sheetBody.tsx │ │ │ │ └── sheetList.tsx │ │ │ ├── hooks/ │ │ │ │ ├── useRecommendListTags.ts │ │ │ │ └── useRecommendSheets.ts │ │ │ └── index.tsx │ │ ├── searchMusicList/ │ │ │ ├── index.tsx │ │ │ └── searchResult.tsx │ │ ├── searchPage/ │ │ │ ├── common/ │ │ │ │ └── historySearch.ts │ │ │ ├── components/ │ │ │ │ ├── historyPanel.tsx │ │ │ │ ├── navBar.tsx │ │ │ │ └── resultPanel/ │ │ │ │ ├── index.tsx │ │ │ │ ├── resultSubPanel.tsx │ │ │ │ ├── resultWrapper.tsx │ │ │ │ └── results/ │ │ │ │ ├── albumResultItem.tsx │ │ │ │ ├── artistResultItem.tsx │ │ │ │ ├── defaultResults.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── musicResultItem.tsx │ │ │ │ └── musicSheetResultItem.tsx │ │ │ ├── hooks/ │ │ │ │ └── useSearch.ts │ │ │ ├── index.tsx │ │ │ └── store/ │ │ │ └── atoms.ts │ │ ├── setCustomTheme/ │ │ │ ├── body.tsx │ │ │ └── index.tsx │ │ ├── setting/ │ │ │ ├── index.tsx │ │ │ └── settingTypes/ │ │ │ ├── aboutSetting.tsx │ │ │ ├── backupSetting.tsx │ │ │ ├── basicSetting.tsx │ │ │ ├── index.ts │ │ │ ├── pluginSetting/ │ │ │ │ ├── components/ │ │ │ │ │ └── pluginItem.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── views/ │ │ │ │ ├── pluginList.tsx │ │ │ │ ├── pluginSort.tsx │ │ │ │ └── pluginSubscribe.tsx │ │ │ └── themeSetting/ │ │ │ ├── background.tsx │ │ │ ├── index.tsx │ │ │ ├── logoCard.tsx │ │ │ ├── mode.tsx │ │ │ └── themeCard.tsx │ │ ├── sheetDetail/ │ │ │ ├── components/ │ │ │ │ ├── header.tsx │ │ │ │ ├── navBar.tsx │ │ │ │ └── sheetMusicList.tsx │ │ │ └── index.tsx │ │ ├── topList/ │ │ │ ├── components/ │ │ │ │ ├── boardPanel.tsx │ │ │ │ ├── boardPanelWrapper.tsx │ │ │ │ └── topListBody.tsx │ │ │ ├── hooks/ │ │ │ │ └── useGetTopList.ts │ │ │ ├── index.tsx │ │ │ └── store/ │ │ │ └── atoms.ts │ │ └── topListDetail/ │ │ ├── hooks/ │ │ │ └── useTopListDetail.ts │ │ └── index.tsx │ ├── service/ │ │ └── index.ts │ ├── types/ │ │ ├── album.d.ts │ │ ├── artist.d.ts │ │ ├── common.d.ts │ │ ├── core/ │ │ │ ├── config.d.ts │ │ │ ├── i18n/ │ │ │ │ └── index.d.ts │ │ │ ├── musicHistory.d.ts │ │ │ ├── pluginManager/ │ │ │ │ └── index.d.ts │ │ │ └── trackPlayer/ │ │ │ └── index.d.ts │ │ ├── declarations.d.ts │ │ ├── infra.d.ts │ │ ├── lyric.d.ts │ │ ├── media.d.ts │ │ ├── music.d.ts │ │ ├── musicSheet.d.ts │ │ ├── musicSheetGroup.d.ts │ │ └── plugin.d.ts │ └── utils/ │ ├── base64.ts │ ├── checkUpdate.ts │ ├── colorUtil.ts │ ├── delay.ts │ ├── eventBus.ts │ ├── fileUtils.ts │ ├── getOrCreateMMKV.ts │ ├── getUrlExt.ts │ ├── htmlUtil.ts │ ├── jsonUtil.ts │ ├── log.ts │ ├── lrcParser.ts │ ├── mediaExtra.ts │ ├── mediaIndexMap.ts │ ├── mediaUtils.ts │ ├── minDistance.ts │ ├── network.ts │ ├── notImplementedFunction.ts │ ├── openUrl.ts │ ├── perfLogger.ts │ ├── persistStatus.ts │ ├── qualities.ts │ ├── rpx.ts │ ├── scheduleClose.ts │ ├── stateMapper.ts │ ├── storage.ts │ ├── timeformat.ts │ ├── toast.ts │ └── trackUtils.ts └── tsconfig.json