gitextract_mk7l9x6b/ ├── .github/ │ ├── scripts/ │ │ └── process_commits.sh │ └── workflows/ │ └── build.yml ├── .gitignore ├── .metadata ├── LICENSE ├── README.md ├── README_en.md ├── analysis_options.yaml ├── android/ │ ├── .gitignore │ ├── app/ │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src/ │ │ ├── debug/ │ │ │ └── AndroidManifest.xml │ │ ├── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin/ │ │ │ │ ├── com/ │ │ │ │ │ └── example/ │ │ │ │ │ └── asmrapp/ │ │ │ │ │ └── MainActivity.kt │ │ │ │ └── one/ │ │ │ │ └── asmr/ │ │ │ │ └── yuro/ │ │ │ │ ├── MainActivity.kt │ │ │ │ └── lyric/ │ │ │ │ ├── LyricOverlayPlugin.kt │ │ │ │ └── LyricOverlayService.kt │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ └── launch_background.xml │ │ │ ├── drawable-v21/ │ │ │ │ └── launch_background.xml │ │ │ ├── layout/ │ │ │ │ └── lyric_overlay.xml │ │ │ ├── values/ │ │ │ │ └── styles.xml │ │ │ ├── values-night/ │ │ │ │ └── styles.xml │ │ │ └── xml/ │ │ │ └── network_security_config.xml │ │ └── profile/ │ │ └── AndroidManifest.xml │ ├── build.gradle │ ├── gradle/ │ │ └── wrapper/ │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ └── settings.gradle ├── devtools_options.yaml ├── docs/ │ ├── architecture.md │ ├── audio_architecture.md │ ├── guidelines.md │ ├── guidelines_en.md │ └── guidelines_zh.md ├── ios/ │ ├── .gitignore │ ├── Flutter/ │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ └── Release.xcconfig │ ├── Podfile │ ├── Runner/ │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets/ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ └── LaunchImage.imageset/ │ │ │ ├── Contents.json │ │ │ └── README.md │ │ ├── Base.lproj/ │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── Runner-Bridging-Header.h │ ├── Runner.xcodeproj/ │ │ ├── project.pbxproj │ │ ├── project.xcworkspace/ │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcshareddata/ │ │ └── xcschemes/ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings │ └── RunnerTests/ │ └── RunnerTests.swift ├── lib/ │ ├── common/ │ │ └── constants/ │ │ └── strings.dart │ ├── core/ │ │ ├── audio/ │ │ │ ├── README.md │ │ │ ├── audio_player_handler.dart │ │ │ ├── audio_player_service.dart │ │ │ ├── audio_service.dart │ │ │ ├── cache/ │ │ │ │ └── audio_cache_manager.dart │ │ │ ├── controllers/ │ │ │ │ └── playback_controller.dart │ │ │ ├── events/ │ │ │ │ ├── playback_event.dart │ │ │ │ └── playback_event_hub.dart │ │ │ ├── i_audio_player_service.dart │ │ │ ├── models/ │ │ │ │ ├── audio_track_info.dart │ │ │ │ ├── file_path.dart │ │ │ │ ├── play_mode.dart │ │ │ │ ├── playback_context.dart │ │ │ │ └── subtitle.dart │ │ │ ├── notification/ │ │ │ │ └── audio_notification_service.dart │ │ │ ├── state/ │ │ │ │ └── playback_state_manager.dart │ │ │ ├── storage/ │ │ │ │ ├── i_playback_state_repository.dart │ │ │ │ └── playback_state_repository.dart │ │ │ └── utils/ │ │ │ ├── audio_error_handler.dart │ │ │ ├── playlist_builder.dart │ │ │ └── track_info_creator.dart │ │ ├── cache/ │ │ │ └── recommendation_cache_manager.dart │ │ ├── di/ │ │ │ └── service_locator.dart │ │ ├── platform/ │ │ │ ├── dummy_lyric_overlay_controller.dart │ │ │ ├── i_lyric_overlay_controller.dart │ │ │ ├── lyric_overlay_controller.dart │ │ │ ├── lyric_overlay_manager.dart │ │ │ └── wakelock_controller.dart │ │ ├── subtitle/ │ │ │ ├── cache/ │ │ │ │ └── subtitle_cache_manager.dart │ │ │ ├── i_subtitle_service.dart │ │ │ ├── managers/ │ │ │ │ └── subtitle_state_manager.dart │ │ │ ├── parsers/ │ │ │ │ ├── lrc_parser.dart │ │ │ │ ├── subtitle_parser.dart │ │ │ │ ├── subtitle_parser_factory.dart │ │ │ │ └── vtt_parser.dart │ │ │ ├── subtitle_loader.dart │ │ │ ├── subtitle_service.dart │ │ │ └── utils/ │ │ │ └── subtitle_matcher.dart │ │ └── theme/ │ │ ├── app_colors.dart │ │ ├── app_theme.dart │ │ └── theme_controller.dart │ ├── data/ │ │ ├── models/ │ │ │ ├── audio/ │ │ │ │ └── README.md │ │ │ ├── auth/ │ │ │ │ └── auth_resp/ │ │ │ │ ├── auth_resp.dart │ │ │ │ ├── auth_resp.freezed.dart │ │ │ │ ├── auth_resp.g.dart │ │ │ │ ├── user.dart │ │ │ │ ├── user.freezed.dart │ │ │ │ └── user.g.dart │ │ │ ├── files/ │ │ │ │ ├── child.dart │ │ │ │ ├── child.freezed.dart │ │ │ │ ├── child.g.dart │ │ │ │ ├── files.dart │ │ │ │ ├── files.freezed.dart │ │ │ │ ├── files.g.dart │ │ │ │ ├── work.dart │ │ │ │ ├── work.freezed.dart │ │ │ │ └── work.g.dart │ │ │ ├── mark_lists/ │ │ │ │ ├── mark_lists.dart │ │ │ │ ├── mark_lists.freezed.dart │ │ │ │ ├── mark_lists.g.dart │ │ │ │ ├── pagination.dart │ │ │ │ ├── pagination.freezed.dart │ │ │ │ ├── pagination.g.dart │ │ │ │ ├── playlist.dart │ │ │ │ ├── playlist.freezed.dart │ │ │ │ └── playlist.g.dart │ │ │ ├── mark_status.dart │ │ │ ├── my_lists/ │ │ │ │ ├── README.md │ │ │ │ └── my_playlists/ │ │ │ │ ├── my_playlists.dart │ │ │ │ ├── my_playlists.freezed.dart │ │ │ │ ├── my_playlists.g.dart │ │ │ │ ├── pagination.dart │ │ │ │ ├── pagination.freezed.dart │ │ │ │ ├── pagination.g.dart │ │ │ │ ├── playlist.dart │ │ │ │ ├── playlist.freezed.dart │ │ │ │ └── playlist.g.dart │ │ │ ├── playback/ │ │ │ │ ├── playback_state.dart │ │ │ │ ├── playback_state.freezed.dart │ │ │ │ └── playback_state.g.dart │ │ │ ├── playlists_with_exist_statu/ │ │ │ │ ├── pagination.dart │ │ │ │ ├── pagination.freezed.dart │ │ │ │ ├── pagination.g.dart │ │ │ │ ├── playlist.dart │ │ │ │ ├── playlist.freezed.dart │ │ │ │ ├── playlist.g.dart │ │ │ │ ├── playlists_with_exist_statu.dart │ │ │ │ ├── playlists_with_exist_statu.freezed.dart │ │ │ │ └── playlists_with_exist_statu.g.dart │ │ │ └── works/ │ │ │ ├── circle.dart │ │ │ ├── circle.freezed.dart │ │ │ ├── circle.g.dart │ │ │ ├── en_us.dart │ │ │ ├── en_us.freezed.dart │ │ │ ├── en_us.g.dart │ │ │ ├── i18n.dart │ │ │ ├── i18n.freezed.dart │ │ │ ├── i18n.g.dart │ │ │ ├── ja_jp.dart │ │ │ ├── ja_jp.freezed.dart │ │ │ ├── ja_jp.g.dart │ │ │ ├── language_edition.dart │ │ │ ├── language_edition.freezed.dart │ │ │ ├── language_edition.g.dart │ │ │ ├── other_language_editions_in_db.dart │ │ │ ├── other_language_editions_in_db.freezed.dart │ │ │ ├── other_language_editions_in_db.g.dart │ │ │ ├── pagination.dart │ │ │ ├── pagination.freezed.dart │ │ │ ├── pagination.g.dart │ │ │ ├── tag.dart │ │ │ ├── tag.freezed.dart │ │ │ ├── tag.g.dart │ │ │ ├── translation_bonus_lang.dart │ │ │ ├── translation_bonus_lang.freezed.dart │ │ │ ├── translation_bonus_lang.g.dart │ │ │ ├── translation_info.dart │ │ │ ├── translation_info.freezed.dart │ │ │ ├── translation_info.g.dart │ │ │ ├── work.dart │ │ │ ├── work.freezed.dart │ │ │ ├── work.g.dart │ │ │ ├── works.dart │ │ │ ├── works.freezed.dart │ │ │ ├── works.g.dart │ │ │ ├── zh_cn.dart │ │ │ ├── zh_cn.freezed.dart │ │ │ └── zh_cn.g.dart │ │ ├── repositories/ │ │ │ ├── audio/ │ │ │ │ └── README.md │ │ │ └── auth_repository.dart │ │ └── services/ │ │ ├── api_service.dart │ │ ├── auth_service.dart │ │ └── interceptors/ │ │ └── auth_interceptor.dart │ ├── main.dart │ ├── presentation/ │ │ ├── layouts/ │ │ │ ├── work_layout_config.dart │ │ │ └── work_layout_strategy.dart │ │ ├── models/ │ │ │ └── filter_state.dart │ │ ├── viewmodels/ │ │ │ ├── auth_viewmodel.dart │ │ │ ├── base/ │ │ │ │ └── paginated_works_viewmodel.dart │ │ │ ├── detail_viewmodel.dart │ │ │ ├── favorites_viewmodel.dart │ │ │ ├── home_viewmodel.dart │ │ │ ├── player_viewmodel.dart │ │ │ ├── playlist_works_viewmodel.dart │ │ │ ├── playlists_viewmodel.dart │ │ │ ├── popular_viewmodel.dart │ │ │ ├── recommend_viewmodel.dart │ │ │ ├── search_viewmodel.dart │ │ │ ├── settings/ │ │ │ │ └── cache_manager_viewmodel.dart │ │ │ └── similar_works_viewmodel.dart │ │ └── widgets/ │ │ └── auth/ │ │ └── login_dialog.dart │ ├── screens/ │ │ ├── contents/ │ │ │ ├── home_content.dart │ │ │ ├── playlists/ │ │ │ │ ├── playlist_works_view.dart │ │ │ │ └── playlists_list_view.dart │ │ │ ├── playlists_content.dart │ │ │ ├── popular_content.dart │ │ │ └── recommend_content.dart │ │ ├── detail_screen.dart │ │ ├── docs/ │ │ │ └── main_screen.md │ │ ├── favorites_screen.dart │ │ ├── main_screen.dart │ │ ├── player_screen.dart │ │ ├── search_screen.dart │ │ ├── settings/ │ │ │ └── cache_manager_screen.dart │ │ └── similar_works_screen.dart │ ├── utils/ │ │ ├── file_size_formatter.dart │ │ └── logger.dart │ └── widgets/ │ ├── common/ │ │ └── tag_chip.dart │ ├── detail/ │ │ ├── mark_selection_dialog.dart │ │ ├── playlist_selection_dialog.dart │ │ ├── work_action_buttons.dart │ │ ├── work_cover.dart │ │ ├── work_file_item.dart │ │ ├── work_files_list.dart │ │ ├── work_files_skeleton.dart │ │ ├── work_folder_item.dart │ │ ├── work_info.dart │ │ ├── work_info_header.dart │ │ └── work_stats_info.dart │ ├── drawer_menu.dart │ ├── filter/ │ │ ├── filter_panel.dart │ │ └── filter_with_keyword.dart │ ├── lyrics/ │ │ └── components/ │ │ ├── lyric_line.dart │ │ └── player_lyric_view.dart │ ├── mini_player/ │ │ ├── mini_player.dart │ │ ├── mini_player_controls.dart │ │ ├── mini_player_cover.dart │ │ └── mini_player_progress.dart │ ├── pagination_controls.dart │ ├── player/ │ │ ├── player_controls.dart │ │ ├── player_cover.dart │ │ ├── player_progress.dart │ │ ├── player_seek_controls.dart │ │ └── player_work_info.dart │ ├── work_card/ │ │ ├── components/ │ │ │ ├── work_cover_image.dart │ │ │ ├── work_footer.dart │ │ │ ├── work_info_section.dart │ │ │ ├── work_tags_panel.dart │ │ │ └── work_title.dart │ │ └── work_card.dart │ ├── work_grid/ │ │ ├── components/ │ │ │ ├── grid_content.dart │ │ │ ├── grid_empty.dart │ │ │ ├── grid_error.dart │ │ │ └── grid_loading.dart │ │ ├── enhanced_work_grid_view.dart │ │ └── models/ │ │ └── grid_config.dart │ ├── work_grid.dart │ ├── work_grid_view.dart │ └── work_row.dart ├── linux/ │ ├── .gitignore │ ├── CMakeLists.txt │ ├── flutter/ │ │ ├── CMakeLists.txt │ │ ├── generated_plugin_registrant.cc │ │ ├── generated_plugin_registrant.h │ │ └── generated_plugins.cmake │ ├── main.cc │ ├── my_application.cc │ └── my_application.h ├── macos/ │ ├── .gitignore │ ├── Flutter/ │ │ ├── Flutter-Debug.xcconfig │ │ ├── Flutter-Release.xcconfig │ │ └── GeneratedPluginRegistrant.swift │ ├── Podfile │ ├── Runner/ │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets/ │ │ │ └── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Base.lproj/ │ │ │ └── MainMenu.xib │ │ ├── Configs/ │ │ │ ├── AppInfo.xcconfig │ │ │ ├── Debug.xcconfig │ │ │ ├── Release.xcconfig │ │ │ └── Warnings.xcconfig │ │ ├── DebugProfile.entitlements │ │ ├── Info.plist │ │ ├── MainFlutterWindow.swift │ │ └── Release.entitlements │ ├── Runner.xcodeproj/ │ │ ├── project.pbxproj │ │ ├── project.xcworkspace/ │ │ │ └── xcshareddata/ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata/ │ │ └── xcschemes/ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── IDEWorkspaceChecks.plist │ └── RunnerTests/ │ └── RunnerTests.swift ├── pubspec.yaml ├── test/ │ └── widget_test.dart ├── web/ │ ├── index.html │ └── manifest.json └── windows/ ├── .gitignore ├── CMakeLists.txt ├── flutter/ │ ├── CMakeLists.txt │ ├── generated_plugin_registrant.cc │ ├── generated_plugin_registrant.h │ └── generated_plugins.cmake └── runner/ ├── CMakeLists.txt ├── Runner.rc ├── flutter_window.cpp ├── flutter_window.h ├── main.cpp ├── resource.h ├── runner.exe.manifest ├── utils.cpp ├── utils.h ├── win32_window.cpp └── win32_window.h