├── .github
├── ISSUE_TEMPLATE
│ ├── bug.yml
│ └── other.yml
└── workflows
│ ├── pr.yaml
│ └── release.yaml
├── .gitignore
├── .gitmodules
├── .metadata
├── .vscode
└── settings.json
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── kazumi
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-hdpi
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── drawable-mdpi
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable-xhdpi
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── drawable-xxhdpi
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── drawable-xxxhdpi
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ └── ic_launcher.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── bbcode
│ └── BBCode.g4
├── images
│ ├── danmaku_off.svg
│ ├── danmaku_setting.svg
│ ├── forward_80.png
│ ├── loading.png
│ ├── logo
│ │ ├── logo_android.png
│ │ ├── logo_ios.png
│ │ ├── logo_lanczos.ico
│ │ ├── logo_linux.png
│ │ ├── logo_rounded.png
│ │ └── logo_windows.ico
│ ├── noface.jpeg
│ └── playing.gif
├── linux
│ ├── DEBIAN
│ │ ├── postinst
│ │ └── postrm
│ └── io.github.Predidit.Kazumi.desktop
├── plugins
│ ├── DM84.json
│ ├── aafun.json
│ └── xfdm.json
├── shaders
│ ├── Anime4K_AutoDownscalePre_x2.glsl
│ ├── Anime4K_AutoDownscalePre_x4.glsl
│ ├── Anime4K_Clamp_Highlights.glsl
│ ├── Anime4K_Restore_CNN_M.glsl
│ ├── Anime4K_Restore_CNN_S.glsl
│ ├── Anime4K_Restore_CNN_VL.glsl
│ ├── Anime4K_Upscale_CNN_x2_M.glsl
│ ├── Anime4K_Upscale_CNN_x2_S.glsl
│ ├── Anime4K_Upscale_CNN_x2_VL.glsl
│ └── LICENSE
└── statements
│ └── statements.txt
├── devtools_options.yaml
├── fastlane
└── metadata
│ └── android
│ ├── en-US
│ ├── full_description.txt
│ ├── images
│ │ ├── icon.png
│ │ └── phoneScreenshots
│ │ │ ├── 1.png
│ │ │ ├── 2.png
│ │ │ ├── 3.png
│ │ │ ├── 4.png
│ │ │ ├── 5.png
│ │ │ └── 6.png
│ ├── short_description.txt
│ └── title.txt
│ └── zh-CN
│ ├── full_description.txt
│ ├── short_description.txt
│ └── title.txt
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── 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
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-50x50@1x.png
│ │ │ ├── Icon-App-50x50@2x.png
│ │ │ ├── Icon-App-57x57@1x.png
│ │ │ ├── Icon-App-57x57@2x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-72x72@1x.png
│ │ │ ├── Icon-App-72x72@2x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ ├── LaunchBackground.imageset
│ │ │ ├── Contents.json
│ │ │ ├── background.png
│ │ │ └── darkbackground.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ ├── LaunchImageDark.png
│ │ │ ├── LaunchImageDark@2x.png
│ │ │ ├── LaunchImageDark@3x.png
│ │ │ └── README.md
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
└── RunnerTests
│ └── RunnerTests.swift
├── lib
├── app_module.dart
├── app_widget.dart
├── bbcode
│ ├── README.md
│ ├── bbcode_base_listener.dart
│ ├── bbcode_elements.dart
│ ├── bbcode_widget.dart
│ └── generated
│ │ ├── BBCode.tokens
│ │ ├── BBCodeLexer.dart
│ │ ├── BBCodeListener.dart
│ │ └── BBCodeParser.dart
├── bean
│ ├── appbar
│ │ ├── drag_to_move_bar.dart
│ │ └── sys_app_bar.dart
│ ├── card
│ │ ├── bangumi_card.dart
│ │ ├── bangumi_history_card.dart
│ │ ├── bangumi_info_card.dart
│ │ ├── character_card.dart
│ │ ├── character_comments_card.dart
│ │ ├── comments_card.dart
│ │ ├── episode_comments_card.dart
│ │ ├── network_img_layer.dart
│ │ ├── palette_card.dart
│ │ └── staff_card.dart
│ ├── dialog
│ │ └── dialog_helper.dart
│ ├── settings
│ │ ├── color_type.dart
│ │ └── theme_provider.dart
│ └── widget
│ │ ├── collect_button.dart
│ │ ├── embedded_native_control_area.dart
│ │ ├── error_widget.dart
│ │ ├── scrollable_wrapper.dart
│ │ └── text_display.dart
├── main.dart
├── modules
│ ├── bangumi
│ │ ├── bangumi_item.dart
│ │ ├── bangumi_item.g.dart
│ │ ├── bangumi_tag.dart
│ │ ├── bangumi_tag.g.dart
│ │ ├── episode_item.dart
│ │ └── weekday_item.dart
│ ├── character
│ │ └── character_full_item.dart
│ ├── characters
│ │ ├── actor_item.dart
│ │ ├── character_item.dart
│ │ └── characters_response.dart
│ ├── collect
│ │ ├── collect_change_module.dart
│ │ ├── collect_change_module.g.dart
│ │ ├── collect_module.dart
│ │ └── collect_module.g.dart
│ ├── comments
│ │ ├── comment_item.dart
│ │ └── comment_response.dart
│ ├── danmaku
│ │ ├── danmaku_episode_response.dart
│ │ ├── danmaku_module.dart
│ │ └── danmaku_search_response.dart
│ ├── history
│ │ ├── history_module.dart
│ │ └── history_module.g.dart
│ ├── plugin
│ │ └── plugin_http_module.dart
│ ├── roads
│ │ └── road_module.dart
│ ├── search
│ │ └── plugin_search_module.dart
│ └── staff
│ │ ├── staff_item.dart
│ │ └── staff_response.dart
├── pages
│ ├── about
│ │ ├── about_module.dart
│ │ └── about_page.dart
│ ├── collect
│ │ ├── collect_controller.dart
│ │ ├── collect_controller.g.dart
│ │ ├── collect_module.dart
│ │ └── collect_page.dart
│ ├── error
│ │ └── storage_error_page.dart
│ ├── history
│ │ ├── history_controller.dart
│ │ ├── history_controller.g.dart
│ │ ├── history_module.dart
│ │ └── history_page.dart
│ ├── index_module.dart
│ ├── index_page.dart
│ ├── info
│ │ ├── character_page.dart
│ │ ├── info_controller.dart
│ │ ├── info_controller.g.dart
│ │ ├── info_module.dart
│ │ ├── info_page.dart
│ │ ├── info_tabview.dart
│ │ └── source_sheet.dart
│ ├── init_page.dart
│ ├── logs
│ │ └── logs_page.dart
│ ├── menu
│ │ └── menu.dart
│ ├── my
│ │ ├── my_controller.dart
│ │ ├── my_controller.g.dart
│ │ ├── my_module.dart
│ │ └── my_page.dart
│ ├── player
│ │ ├── episode_comments_sheet.dart
│ │ ├── player_controller.dart
│ │ ├── player_controller.g.dart
│ │ ├── player_item.dart
│ │ ├── player_item_panel.dart
│ │ ├── player_item_surface.dart
│ │ └── smallest_player_item_panel.dart
│ ├── plugin_editor
│ │ ├── plugin_editor_page.dart
│ │ ├── plugin_module.dart
│ │ ├── plugin_shop_page.dart
│ │ └── plugin_view_page.dart
│ ├── popular
│ │ ├── popular_controller.dart
│ │ ├── popular_controller.g.dart
│ │ ├── popular_module.dart
│ │ └── popular_page.dart
│ ├── router.dart
│ ├── search
│ │ ├── search_controller.dart
│ │ ├── search_controller.g.dart
│ │ ├── search_module.dart
│ │ └── search_page.dart
│ ├── settings
│ │ ├── danmaku
│ │ │ ├── danmaku_module.dart
│ │ │ ├── danmaku_settings.dart
│ │ │ ├── danmaku_settings_sheet.dart
│ │ │ └── danmaku_shield_settings.dart
│ │ ├── decoder_settings.dart
│ │ ├── displaymode_settings.dart
│ │ ├── player_settings.dart
│ │ ├── settings_module.dart
│ │ ├── super_resolution_settings.dart
│ │ └── theme_settings_page.dart
│ ├── timeline
│ │ ├── timeline_controller.dart
│ │ ├── timeline_controller.g.dart
│ │ ├── timeline_module.dart
│ │ └── timeline_page.dart
│ ├── video
│ │ ├── video_controller.dart
│ │ ├── video_controller.g.dart
│ │ ├── video_module.dart
│ │ └── video_page.dart
│ ├── webdav_editor
│ │ ├── webdav_editor_page.dart
│ │ ├── webdav_module.dart
│ │ └── webdav_setting.dart
│ └── webview
│ │ ├── webview_controller.dart
│ │ ├── webview_controller_impel
│ │ ├── webview_apple_controller_impel.dart
│ │ ├── webview_controller_impel.dart
│ │ ├── webview_linux_controller_impel.dart
│ │ └── webview_windows_controller_impel.dart
│ │ ├── webview_item.dart
│ │ └── webview_item_impel
│ │ ├── webview_item_impel.dart
│ │ ├── webview_linux_item_impel.dart
│ │ └── webview_windows_item_impel.dart
├── plugins
│ ├── plugin_install_time_tracker.dart
│ ├── plugin_validity_tracker.dart
│ ├── plugins.dart
│ ├── plugins_controller.dart
│ └── plugins_controller.g.dart
├── request
│ ├── api.dart
│ ├── bangumi.dart
│ ├── damaku.dart
│ ├── interceptor.dart
│ ├── plugin.dart
│ ├── query_manager.dart
│ └── request.dart
├── shaders
│ ├── shaders_controller.dart
│ └── shaders_controller.g.dart
└── utils
│ ├── anime_season.dart
│ ├── constants.dart
│ ├── extension.dart
│ ├── external_player.dart
│ ├── logger.dart
│ ├── mortis.dart
│ ├── remote.dart
│ ├── search_parser.dart
│ ├── storage.dart
│ ├── string_match.dart
│ ├── syncplay.dart
│ ├── utils.dart
│ └── webdav.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
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── app_icon_1024.png
│ │ │ ├── app_icon_128.png
│ │ │ ├── app_icon_16.png
│ │ │ ├── app_icon_256.png
│ │ │ ├── app_icon_32.png
│ │ │ ├── app_icon_512.png
│ │ │ └── app_icon_64.png
│ ├── Base.lproj
│ │ └── MainMenu.xib
│ ├── Configs
│ │ ├── AppInfo.xcconfig
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ └── Warnings.xcconfig
│ ├── DebugProfile.entitlements
│ ├── Info.plist
│ ├── MainFlutterWindow.swift
│ └── Release.entitlements
└── RunnerTests
│ └── RunnerTests.swift
├── pubspec.lock
├── pubspec.yaml
├── static
├── screenshot
│ ├── img_1.png
│ ├── img_2.png
│ ├── img_3.png
│ ├── img_4.png
│ ├── img_5.png
│ └── img_6.png
└── svg
│ └── get_it_on_github.svg
├── test
└── widget_test.dart
├── web
├── favicon.png
├── icons
│ ├── Icon-192.png
│ ├── Icon-512.png
│ ├── Icon-maskable-192.png
│ └── Icon-maskable-512.png
├── 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
├── external_player_utils.cpp
├── external_player_utils.h
├── flutter_window.cpp
├── flutter_window.h
├── fullscreen_utils.cpp
├── fullscreen_utils.h
├── main.cpp
├── resource.h
├── resources
└── app_icon.ico
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
/.github/ISSUE_TEMPLATE/bug.yml:
--------------------------------------------------------------------------------
1 | name: Bug 反馈
2 | description: 提交一个 Bug 反馈。
3 | title: "[Bug]: "
4 | labels: ["bug"]
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | 请详细填写以下内容~
10 | - type: textarea
11 | id: buginfo
12 | attributes:
13 | label: 在使用的时候发生了什么 Bug ?
14 | description: 并且,还请写出您是如何触发这个 Bug 的。
15 | validations:
16 | required: true
17 | - type: dropdown
18 | id: os
19 | attributes:
20 | label: 您在使用哪个操作系统?
21 | multiple: false
22 | options:
23 | - Android
24 | - Windows
25 | - macOS / iOS
26 | - Linux
27 | validations:
28 | required: true
29 | - type: textarea
30 | id: osver
31 | attributes:
32 | label: 请具体提供设备、版本号等信息。
33 | description: 例如,“Redmi K40S,Android 13”、“Windows 10 22H2” 等。
34 | validations:
35 | required: true
36 | - type: textarea
37 | id: hardware
38 | attributes:
39 | label: (选填)一些与 Bug 相关的硬件信息。
40 | description: (选填)例如,有视频播放问题,可以填写“显卡型号”、“显卡驱动版本”等。
41 | - type: textarea
42 | id: logs
43 | attributes:
44 | label: 日志信息
45 | description: 请在 “我的 - 关于 - 错误日志” 界面复制错误日志,并粘贴在这里。
46 | value: |
47 | Log
48 |
49 | ```shell
50 | [在此处粘贴你的日志]
51 | ```
52 |
53 |
54 | validations:
55 | required: true
56 | - type: checkboxes
57 | id: terms
58 | attributes:
59 | label: 提交前确认
60 | description: 在提交前,请确认以下内容
61 | options:
62 | - label: issue 列表中,没有我发现的这个 Bug
63 | required: true
64 | - label: 我正在使用最新版本的 Kazumi
65 | required: true
66 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/other.yml:
--------------------------------------------------------------------------------
1 | name: 其他 issue
2 | description: 新功能需求、问题询问等
3 | body:
4 | - type: markdown
5 | attributes:
6 | value: |
7 | 请详细填写以下内容~
8 | - type: textarea
9 | id: buginfo
10 | attributes:
11 | label: issue 内容
12 | description: 请填写您的 issue 内容。要添加附件,请点击输入框后,直接将附件拖进输入框。
13 | validations:
14 | required: true
15 | - type: checkboxes
16 | id: terms
17 | attributes:
18 | label: 提交前确认
19 | description: 在提交前,请确认以下内容
20 | options:
21 | - label: issue 列表中,没有我的新功能需求 / 问题
22 | required: true
23 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .build/
9 | .buildlog/
10 | .history
11 | .svn/
12 | .swiftpm/
13 | migrate_working_dir/
14 |
15 | # IntelliJ related
16 | *.iml
17 | *.ipr
18 | *.iws
19 | .idea/
20 |
21 | # The .vscode folder contains launch configuration and tasks you configure in
22 | # VS Code which you may wish to be included in version control, so this line
23 | # is commented out by default.
24 | #.vscode/
25 |
26 | # Flutter/Dart/Pub related
27 | **/doc/api/
28 | **/ios/Flutter/.last_build_id
29 | .dart_tool/
30 | .flutter-plugins
31 | .flutter-plugins-dependencies
32 | .pub-cache/
33 | .pub/
34 | /build/
35 |
36 | # Symbolication related
37 | app.*.symbols
38 |
39 | # Obfuscation related
40 | app.*.map.json
41 |
42 | # Android Studio will place build artifacts here
43 | /android/app/debug
44 | /android/app/profile
45 | /android/app/release
46 |
47 | # Added after flutter 3.29
48 | /android/app/.cxx/
49 | android/build/reports/problems/
50 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "fastlane/.flutter"]
2 | path = fastlane/.flutter
3 | url = https://github.com/flutter/flutter.git
4 | branch = stable
5 | [submodule "fastlane/.libmpv-android-video-build"]
6 | path = fastlane/.libmpv-android-video-build
7 | url = https://github.com/Predidit/libmpv-android-video-build.git
8 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: "54e66469a933b60ddf175f858f82eaeb97e48c8d"
8 | channel: "stable"
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
17 | base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
18 | - platform: android
19 | create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
20 | base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
21 | - platform: ios
22 | create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
23 | base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
24 | - platform: linux
25 | create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
26 | base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
27 | - platform: macos
28 | create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
29 | base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
30 | - platform: web
31 | create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
32 | base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
33 | - platform: windows
34 | create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
35 | base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
36 |
37 | # User provided section
38 |
39 | # List of Local paths (relative to this file) that should be
40 | # ignored by the migrate tool.
41 | #
42 | # Files that are not part of the templates will be ignored by default.
43 | unmanaged_files:
44 | - 'lib/main.dart'
45 | - 'ios/Runner.xcodeproj/project.pbxproj'
46 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "cmake.ignoreCMakeListsMissing": true,
3 | "search.exclude": {
4 | "**/fastlane": true
5 | },
6 | "dart.analysisExcludedFolders": [
7 | "**/fastlane/**"
8 | ],
9 | "files.associations": {
10 | "xiosbase": "cpp",
11 | "utility": "cpp",
12 | "xstring": "cpp",
13 | "xtree": "cpp",
14 | "algorithm": "cpp",
15 | "any": "cpp",
16 | "array": "cpp",
17 | "atomic": "cpp",
18 | "bit": "cpp",
19 | "cctype": "cpp",
20 | "charconv": "cpp",
21 | "chrono": "cpp",
22 | "cinttypes": "cpp",
23 | "clocale": "cpp",
24 | "cmath": "cpp",
25 | "codecvt": "cpp",
26 | "compare": "cpp",
27 | "concepts": "cpp",
28 | "condition_variable": "cpp",
29 | "coroutine": "cpp",
30 | "cstddef": "cpp",
31 | "cstdint": "cpp",
32 | "cstdio": "cpp",
33 | "cstdlib": "cpp",
34 | "cstring": "cpp",
35 | "ctime": "cpp",
36 | "cwchar": "cpp",
37 | "exception": "cpp",
38 | "filesystem": "cpp",
39 | "format": "cpp",
40 | "forward_list": "cpp",
41 | "functional": "cpp",
42 | "future": "cpp",
43 | "initializer_list": "cpp",
44 | "iomanip": "cpp",
45 | "ios": "cpp",
46 | "iosfwd": "cpp",
47 | "iostream": "cpp",
48 | "istream": "cpp",
49 | "iterator": "cpp",
50 | "limits": "cpp",
51 | "list": "cpp",
52 | "locale": "cpp",
53 | "map": "cpp",
54 | "memory": "cpp",
55 | "mutex": "cpp",
56 | "new": "cpp",
57 | "optional": "cpp",
58 | "ostream": "cpp",
59 | "ratio": "cpp",
60 | "set": "cpp",
61 | "sstream": "cpp",
62 | "stdexcept": "cpp",
63 | "stop_token": "cpp",
64 | "streambuf": "cpp",
65 | "string": "cpp",
66 | "system_error": "cpp",
67 | "thread": "cpp",
68 | "tuple": "cpp",
69 | "type_traits": "cpp",
70 | "typeinfo": "cpp",
71 | "unordered_map": "cpp",
72 | "variant": "cpp",
73 | "vector": "cpp",
74 | "xfacet": "cpp",
75 | "xhash": "cpp",
76 | "xlocale": "cpp",
77 | "xlocbuf": "cpp",
78 | "xlocinfo": "cpp",
79 | "xlocmes": "cpp",
80 | "xlocmon": "cpp",
81 | "xlocnum": "cpp",
82 | "xloctime": "cpp",
83 | "xmemory": "cpp",
84 | "xtr1common": "cpp",
85 | "xutility": "cpp"
86 | }
87 | }
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at https://dart.dev/lints.
17 | #
18 | # Instead of disabling a lint rule for the entire project in the
19 | # section below, it can also be suppressed for a single line of code
20 | # or a specific dart file by using the `// ignore: name_of_lint` and
21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
22 | # producing the lint.
23 | rules:
24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
26 |
27 | # Additional information about this file can be found at
28 | # https://dart.dev/guides/language/analysis-options
29 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/kazumi/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.kazumi
2 |
3 | import android.content.Intent
4 | import android.os.Build;
5 | import android.net.Uri
6 | import android.os.Bundle
7 | import androidx.annotation.NonNull
8 | import io.flutter.embedding.engine.FlutterEngine
9 | import io.flutter.plugin.common.MethodChannel
10 | import io.flutter.embedding.android.FlutterActivity
11 |
12 | class MainActivity: FlutterActivity() {
13 | private val CHANNEL = "com.predidit.kazumi/intent"
14 |
15 | override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
16 | super.configureFlutterEngine(flutterEngine)
17 | MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
18 | if (call.method == "openWithMime") {
19 | val url = call.argument("url")
20 | val mimeType = call.argument("mimeType")
21 | if (url != null && mimeType != null) {
22 | openWithMime(url, mimeType)
23 | result.success(null)
24 | } else {
25 | result.error("INVALID_ARGUMENT", "URL and MIME type required", null)
26 | }
27 | }
28 | if (call.method == "checkIfInMultiWindowMode") {
29 | val isInMultiWindow = checkIfInMultiWindowMode()
30 | result.success(isInMultiWindow)
31 | }
32 | result.notImplemented()
33 | }
34 | }
35 |
36 | private fun openWithMime(url: String, mimeType: String) {
37 | val intent = Intent()
38 | intent.action = Intent.ACTION_VIEW
39 | intent.setDataAndType(Uri.parse(url), mimeType)
40 | startActivity(intent)
41 | }
42 |
43 | private fun checkIfInMultiWindowMode(): Boolean {
44 | return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
45 | this.isInMultiWindowMode
46 | } else {
47 | false
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
16 |
20 |
21 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #ffffff
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
16 |
20 |
21 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | allprojects {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | }
6 | }
7 |
8 | rootProject.buildDir = '../build'
9 | subprojects {
10 | project.buildDir = "${rootProject.buildDir}/${project.name}"
11 | }
12 | subprojects {
13 | project.evaluationDependsOn(':app')
14 | }
15 |
16 | tasks.register("clean", Delete) {
17 | delete rootProject.buildDir
18 | }
19 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4G
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
6 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | def flutterSdkPath = {
3 | def properties = new Properties()
4 | file("local.properties").withInputStream { properties.load(it) }
5 | def flutterSdkPath = properties.getProperty("flutter.sdk")
6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
7 | return flutterSdkPath
8 | }
9 | settings.ext.flutterSdkPath = flutterSdkPath()
10 |
11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
12 |
13 | repositories {
14 | google()
15 | mavenCentral()
16 | gradlePluginPortal()
17 | }
18 | }
19 |
20 | plugins {
21 | id "dev.flutter.flutter-plugin-loader" version "1.0.0"
22 | id "com.android.application" version "8.7.0" apply false
23 | id "org.jetbrains.kotlin.android" version "1.8.10" apply false
24 | }
25 |
26 | include ":app"
27 |
--------------------------------------------------------------------------------
/assets/bbcode/BBCode.g4:
--------------------------------------------------------------------------------
1 | grammar BBCode;
2 |
3 | options { language=Dart; }
4 |
5 | document
6 | : element* EOF
7 | ;
8 |
9 | element
10 | : tag
11 | | plain
12 | | bgm
13 | | sticker
14 | ;
15 |
16 | tag
17 | : '[' tagName=STRING ('=' attr=STRING)? ']' content=element* '[/' STRING ']'
18 | ;
19 |
20 | plain
21 | : (STRING | '=' | '/' | '[' | ']' | '(' | ')')+
22 | // workaround unless these will break tag reconginze
23 | | '[来自Bangumi for android]'
24 | | '[来自Bangumi for iOS]'
25 | ;
26 |
27 | bgm
28 | : ('(bgm' | '(BGM') id=STRING ')'
29 | ;
30 |
31 | sticker
32 | : '(=A=)'
33 | | '(=w=)'
34 | | '(-w=)'
35 | | '(S_S)'
36 | | '(=v=)'
37 | | '(@_@)'
38 | | '(=W=)'
39 | | '(TAT)'
40 | | '(T_T)'
41 | | '(=\'=)'
42 | | '(=3=)'
43 | | '(= =\')'
44 | | '(=///=)'
45 | | '(=.,=)'
46 | | '(:P)'
47 | | '(LOL)';
48 |
49 | STRING : ~[=[\]()]+;
50 |
--------------------------------------------------------------------------------
/assets/images/danmaku_off.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/danmaku_setting.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/forward_80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/assets/images/forward_80.png
--------------------------------------------------------------------------------
/assets/images/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/assets/images/loading.png
--------------------------------------------------------------------------------
/assets/images/logo/logo_android.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/assets/images/logo/logo_android.png
--------------------------------------------------------------------------------
/assets/images/logo/logo_ios.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/assets/images/logo/logo_ios.png
--------------------------------------------------------------------------------
/assets/images/logo/logo_lanczos.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/assets/images/logo/logo_lanczos.ico
--------------------------------------------------------------------------------
/assets/images/logo/logo_linux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/assets/images/logo/logo_linux.png
--------------------------------------------------------------------------------
/assets/images/logo/logo_rounded.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/assets/images/logo/logo_rounded.png
--------------------------------------------------------------------------------
/assets/images/logo/logo_windows.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/assets/images/logo/logo_windows.ico
--------------------------------------------------------------------------------
/assets/images/noface.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/assets/images/noface.jpeg
--------------------------------------------------------------------------------
/assets/images/playing.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/assets/images/playing.gif
--------------------------------------------------------------------------------
/assets/linux/DEBIAN/postinst:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | ln -sf /opt/Kazumi/kazumi /usr/bin/kazumi
3 | chmod +x /usr/bin/kazumi
4 | update-mime-database /usr/share/mime || true
5 | update-desktop-database /usr/share/applications || true
6 | exit 0
--------------------------------------------------------------------------------
/assets/linux/DEBIAN/postrm:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | rm /usr/bin/kazumi
3 | update-mime-database /usr/share/mime || true
4 | update-desktop-database /usr/share/applications || true
5 | exit 0
--------------------------------------------------------------------------------
/assets/linux/io.github.Predidit.Kazumi.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Name=Kazumi
3 | Comment=Watch Animes online with danmaku support.
4 | Comment[zh_CN]=一款好用的追番软件
5 | Exec=kazumi
6 | Icon=io.github.Predidit.Kazumi
7 | Terminal=false
8 | Type=Application
9 | Categories=AudioVideo;Audio;Video;
10 |
--------------------------------------------------------------------------------
/assets/plugins/DM84.json:
--------------------------------------------------------------------------------
1 | {
2 | "api": "1",
3 | "type": "anime",
4 | "name": "DM84",
5 | "version": "1.1",
6 | "muliSources": true,
7 | "useWebview": true,
8 | "useNativePlayer": true,
9 | "userAgent": "",
10 | "baseURL": "https://dm84.tv/",
11 | "searchURL":"https://dm84.tv/s----------.html?wd=@keyword",
12 | "searchList": "//div/div[3]/ul/li",
13 | "searchName": "//div/a[2]",
14 | "searchResult": "//div/a[2]",
15 | "chapterRoads": "//div/div[4]/div/ul",
16 | "chapterResult": "//li/a"
17 | }
--------------------------------------------------------------------------------
/assets/plugins/aafun.json:
--------------------------------------------------------------------------------
1 | {
2 | "api": "4",
3 | "type": "anime",
4 | "name": "aafun",
5 | "version": "1.0",
6 | "muliSources": true,
7 | "useWebview": true,
8 | "useNativePlayer": true,
9 | "userAgent": "",
10 | "baseURL": "https://www.aafun.cc/",
11 | "searchURL": "https://www.aafun.cc/feng-s.html?wd=@keyword&submit=",
12 | "searchList": "//div/div[2]/div/div[2]/div/div/div[1]/div/div[2]/div/ul/li",
13 | "searchName": "//div/div/div[2]/div[1]/div/a",
14 | "searchResult": "//div/div/div[2]/div[1]/div/a",
15 | "chapterRoads": "//div[2]/div[2]/div/div/div[2]/div/div[1]/div[2]/div/div/div/ul",
16 | "chapterResult": "//li/a"
17 | }
--------------------------------------------------------------------------------
/assets/plugins/xfdm.json:
--------------------------------------------------------------------------------
1 | {
2 | "api": "3",
3 | "type": "anime",
4 | "name": "xfdm",
5 | "version": "1.5",
6 | "muliSources": true,
7 | "useWebview": true,
8 | "useNativePlayer": true,
9 | "usePost": false,
10 | "useLegacyParser": true,
11 | "userAgent": "",
12 | "baseURL": "https://dm1.xfdm.pro/",
13 | "searchURL": "https://dm1.xfdm.pro/search.html?wd=@keyword",
14 | "searchList": "//div[contains(@class, 'search-box')]",
15 | "searchName": "//div[3]/div[1]/div[1]",
16 | "searchResult": "//div[3]/div[2]/a[1]",
17 | "chapterRoads": "//ul[contains(@class, 'anthology-list-play')]",
18 | "chapterResult": "//li/a",
19 | "referer": ""
20 | }
21 |
--------------------------------------------------------------------------------
/assets/shaders/Anime4K_AutoDownscalePre_x2.glsl:
--------------------------------------------------------------------------------
1 | // This is free and unencumbered software released into the public domain.
2 |
3 | // Anyone is free to copy, modify, publish, use, compile, sell, or
4 | // distribute this software, either in source code form or as a compiled
5 | // binary, for any purpose, commercial or non-commercial, and by any
6 | // means.
7 |
8 | // In jurisdictions that recognize copyright laws, the author or authors
9 | // of this software dedicate any and all copyright interest in the
10 | // software to the public domain. We make this dedication for the benefit
11 | // of the public at large and to the detriment of our heirs and
12 | // successors. We intend this dedication to be an overt act of
13 | // relinquishment in perpetuity of all present and future rights to this
14 | // software under copyright law.
15 |
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 | // IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 | // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | // OTHER DEALINGS IN THE SOFTWARE.
23 |
24 | // For more information, please refer to
25 |
26 | //!DESC Anime4K-v4.0-AutoDownscalePre-x2
27 | //!HOOK MAIN
28 | //!BIND HOOKED
29 | //!BIND NATIVE
30 | //!WHEN OUTPUT.w NATIVE.w / 2.0 < OUTPUT.h NATIVE.h / 2.0 < * OUTPUT.w NATIVE.w / 1.2 > OUTPUT.h NATIVE.h / 1.2 > * *
31 | //!WIDTH OUTPUT.w
32 | //!HEIGHT OUTPUT.h
33 |
34 | vec4 hook() {
35 | return HOOKED_tex(HOOKED_pos);
36 | }
37 |
--------------------------------------------------------------------------------
/assets/shaders/Anime4K_AutoDownscalePre_x4.glsl:
--------------------------------------------------------------------------------
1 | // This is free and unencumbered software released into the public domain.
2 |
3 | // Anyone is free to copy, modify, publish, use, compile, sell, or
4 | // distribute this software, either in source code form or as a compiled
5 | // binary, for any purpose, commercial or non-commercial, and by any
6 | // means.
7 |
8 | // In jurisdictions that recognize copyright laws, the author or authors
9 | // of this software dedicate any and all copyright interest in the
10 | // software to the public domain. We make this dedication for the benefit
11 | // of the public at large and to the detriment of our heirs and
12 | // successors. We intend this dedication to be an overt act of
13 | // relinquishment in perpetuity of all present and future rights to this
14 | // software under copyright law.
15 |
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 | // IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 | // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | // OTHER DEALINGS IN THE SOFTWARE.
23 |
24 | // For more information, please refer to
25 |
26 | //!DESC Anime4K-v3.2-AutoDownscalePre-x4
27 | //!HOOK MAIN
28 | //!BIND HOOKED
29 | //!BIND NATIVE
30 | //!WHEN OUTPUT.w NATIVE.w / 4.0 < OUTPUT.h NATIVE.h / 4.0 < * OUTPUT.w NATIVE.w / 2.4 > OUTPUT.h NATIVE.h / 2.4 > * *
31 | //!WIDTH OUTPUT.w 2 /
32 | //!HEIGHT OUTPUT.h 2 /
33 |
34 | vec4 hook() {
35 | return HOOKED_tex(HOOKED_pos);
36 | }
37 |
--------------------------------------------------------------------------------
/assets/shaders/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 bloc97
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/assets/statements/statements.txt:
--------------------------------------------------------------------------------
1 | 在使用本软件之前,请您仔细阅读以下内容,并确保您充分理解并同意以下条款:
2 | 1、本软件为开源软件,您应该免费获取和使用。如果您是从第三方付费获取,建议您向其索取赔偿。
3 | 2、本软件完全基于您个人意愿使用,您应该对自己的使用行为和所有结果承担全部责任。
4 | 3、本软件仅供学习交流、科研等非商业性质的用途,严禁将本软件用于商业目的。如有任何商业行为,均与本软件无关。
5 | 4、本软件并不保证与所有操作系统或硬件设备兼容。本软件作者或贡献者不对因使用本软件而产生的任何技术或安全问题承担责任。
6 | 5、本软件作者或贡献者不承担因使用本软件而造成的任何直接、间接、特殊或后果性的损失或损害的责任,包括但不限于财产损失、商业利润损失、信息或数据丢失或损坏等。
7 | 6、本软件使用者应遵守国家相关法律法规和使用规范,不得利用本软件从事任何违法违规行为。如因使用本软件而导致的违法行为,使用者应承担相应的法律责任。
8 | 7、本软件不会收集、存储、使用任何用户的个人信息,包括但不限于姓名、地址、电子邮件地址、电话号码等。在使用本软件过程中,不会进行任何形式的个人信息采集。
9 | 8、本软件作者或贡献者保留随时修改、增加、删除本免责声明中的内容而不另行通知的权利。
10 | 9、如果本软件存在侵犯您的合法权益的情况,请及时与作者联系,作者将会及时删除有关内容。
11 | 如您不同意本免责声明中的任何内容,请勿使用本软件。使用本软件即代表您已完全理解并同意上述内容。
--------------------------------------------------------------------------------
/devtools_options.yaml:
--------------------------------------------------------------------------------
1 | extensions:
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | A flutter app for collecting and watching anime online with custom rules. Use up to five lines of Xpath expressions to build your own rules. Supports rule import and rule sharing. Supports danmaku. In development (~ ̄▽ ̄)~
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
1 | ../../../../../android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png:
--------------------------------------------------------------------------------
1 | ../../../../../../static/screenshot/img_1.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png:
--------------------------------------------------------------------------------
1 | ../../../../../../static/screenshot/img_2.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png:
--------------------------------------------------------------------------------
1 | ../../../../../../static/screenshot/img_3.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png:
--------------------------------------------------------------------------------
1 | ../../../../../../static/screenshot/img_4.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png:
--------------------------------------------------------------------------------
1 | ../../../../../../static/screenshot/img_5.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png:
--------------------------------------------------------------------------------
1 | ../../../../../../static/screenshot/img_6.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | An anime collection APP based on custom rules.
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | Kazumi
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/full_description.txt:
--------------------------------------------------------------------------------
1 | 使用 flutter 开发的基于自定义规则的番剧采集与在线观看程序。使用最多五行基于 Xpath 语法的选择器构建自己的规则。支持规则导入与规则分享。绝赞开发中 (~ ̄▽ ̄)~
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/short_description.txt:
--------------------------------------------------------------------------------
1 | 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕。
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/title.txt:
--------------------------------------------------------------------------------
1 | Kazumi
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | **/dgph
2 | *.mode1v3
3 | *.mode2v3
4 | *.moved-aside
5 | *.pbxuser
6 | *.perspectivev3
7 | **/*sync/
8 | .sconsign.dblite
9 | .tags*
10 | **/.vagrant/
11 | **/DerivedData/
12 | Icon?
13 | **/Pods/
14 | **/.symlinks/
15 | profile
16 | xcuserdata
17 | **/.generated/
18 | Flutter/App.framework
19 | Flutter/Flutter.framework
20 | Flutter/Flutter.podspec
21 | Flutter/Generated.xcconfig
22 | Flutter/ephemeral/
23 | Flutter/app.flx
24 | Flutter/app.zip
25 | Flutter/flutter_assets/
26 | Flutter/flutter_export_environment.sh
27 | ServiceDefinitions.json
28 | Runner/GeneratedPluginRegistrant.*
29 |
30 | # Exceptions to above rules.
31 | !default.mode1v3
32 | !default.mode2v3
33 | !default.pbxuser
34 | !default.perspectivev3
35 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 12.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "background.png",
5 | "idiom" : "universal"
6 | },
7 | {
8 | "appearances" : [
9 | {
10 | "appearance" : "luminosity",
11 | "value" : "dark"
12 | }
13 | ],
14 | "filename" : "darkbackground.png",
15 | "idiom" : "universal"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "LaunchImage.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "dark"
13 | }
14 | ],
15 | "filename" : "LaunchImageDark.png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "filename" : "LaunchImage@2x.png",
21 | "idiom" : "universal",
22 | "scale" : "2x"
23 | },
24 | {
25 | "appearances" : [
26 | {
27 | "appearance" : "luminosity",
28 | "value" : "dark"
29 | }
30 | ],
31 | "filename" : "LaunchImageDark@2x.png",
32 | "idiom" : "universal",
33 | "scale" : "2x"
34 | },
35 | {
36 | "filename" : "LaunchImage@3x.png",
37 | "idiom" : "universal",
38 | "scale" : "3x"
39 | },
40 | {
41 | "appearances" : [
42 | {
43 | "appearance" : "luminosity",
44 | "value" : "dark"
45 | }
46 | ],
47 | "filename" : "LaunchImageDark@3x.png",
48 | "idiom" : "universal",
49 | "scale" : "3x"
50 | }
51 | ],
52 | "info" : {
53 | "author" : "xcode",
54 | "version" : 1
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Predidit/Kazumi/193c5e25d219817ad17277202ae86712ec39da67/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NSPhotoLibraryAddUsageDescription
6 |
7 | CADisableMinimumFrameDurationOnPhone
8 |
9 | CFBundleDevelopmentRegion
10 | $(DEVELOPMENT_LANGUAGE)
11 | CFBundleDisplayName
12 | Kazumi
13 | CFBundleExecutable
14 | $(EXECUTABLE_NAME)
15 | CFBundleIdentifier
16 | $(PRODUCT_BUNDLE_IDENTIFIER)
17 | CFBundleInfoDictionaryVersion
18 | 6.0
19 | CFBundleName
20 | kazumi
21 | CFBundlePackageType
22 | APPL
23 | CFBundleShortVersionString
24 | $(FLUTTER_BUILD_NAME)
25 | CFBundleSignature
26 | ????
27 | CFBundleVersion
28 | $(FLUTTER_BUILD_NUMBER)
29 | LSApplicationQueriesSchemes
30 |
31 | vlc-x-callback
32 |
33 | LSRequiresIPhoneOS
34 |
35 | NSAppTransportSecurity
36 |
37 | NSAllowsArbitraryLoads
38 |
39 |
40 | UIApplicationSupportsIndirectInputEvents
41 |
42 | UILaunchStoryboardName
43 | LaunchScreen
44 | UIMainStoryboardFile
45 | Main
46 | UISupportedInterfaceOrientations
47 |
48 | UIInterfaceOrientationPortrait
49 | UIInterfaceOrientationLandscapeLeft
50 | UIInterfaceOrientationLandscapeRight
51 |
52 | UISupportedInterfaceOrientations~ipad
53 |
54 | UIInterfaceOrientationPortrait
55 | UIInterfaceOrientationPortraitUpsideDown
56 | UIInterfaceOrientationLandscapeLeft
57 | UIInterfaceOrientationLandscapeRight
58 |
59 | UIStatusBarHidden
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/ios/RunnerTests/RunnerTests.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 | import XCTest
4 |
5 | class RunnerTests: XCTestCase {
6 |
7 | func testExample() {
8 | // If you add code to the Runner application, consider adding tests here.
9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/lib/app_module.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_modular/flutter_modular.dart';
2 | import 'package:kazumi/pages/index_module.dart';
3 |
4 | class AppModule extends Module {
5 | @override
6 | void binds(i) {
7 |
8 | }
9 |
10 | @override
11 | void routes(r) {
12 | r.module("/", module: IndexModule());
13 | }
14 | }
--------------------------------------------------------------------------------
/lib/bbcode/README.md:
--------------------------------------------------------------------------------
1 | # 基于 antlr4 的 BBCode 解析
2 |
3 | ## 相关文件
4 |
5 | - [assets/bbcode/BBCode.g4](../../assets/bbcode/BBCode.g4): antlr4 语法文件
6 | - [lib/bbcode/generated](../../lib/bbcode/generated): antlr4 生成的 dart 代码所在文件夹
7 |
8 | ## 关键文件
9 |
10 | - [lib/bbcode/bbcode_elements.dart](bbcode_elements.dart): BBCode 元素
11 | - [lib/bbcode/bbcode_base_listener.dart](bbcode_base_listener.dart): BBCode 解析器的入口文件
12 | - [lib/bbcode/bbcode_widget.dart](bbcode_widget.dart): BBCode 组件
13 |
14 | ## 如何开发
15 |
16 | ### 配置环境
17 |
18 | 1. 根据[官方文档](https://github.com/antlr/antlr4/blob/dev/doc/dart-target.md)配置环境
19 | 2. 在 IDE 中安装 `antlr v4` 插件
20 |
21 | ### 开发
22 |
23 | 1. 修改 [assets/bbcode/BBCode.g4](../../assets/bbcode/BBCode.g4) 文件,通过插件的 Preview 功能确定解析是否正确
24 | 2. 通过该文件生成新的 dart 文件到 [lib/bbcode/generated](../../lib/bbcode/generated) 文件夹内,删除无用文件
25 | 3. 参考文件内的注释进行修改
26 |
27 | ### 测试 BBCode
28 |
29 | ```dart
30 | import 'package:flutter/material.dart';
31 | import 'bbcode/bbcode_widget.dart';
32 |
33 | void main() {
34 | runApp(MyApp());
35 | }
36 |
37 | class MyApp extends StatelessWidget {
38 | @override
39 | Widget build(BuildContext context) {
40 | return MaterialApp(
41 | home: Scaffold(
42 | appBar: AppBar(title: const Text('BBCode Parser')),
43 | body: Card(
44 | color: Theme.of(context).colorScheme.secondaryContainer,
45 | child: const Padding(
46 | padding: EdgeInsets.all(8.0),
47 | child: Padding(
48 | padding: EdgeInsets.all(16),
49 | child: BBCodeWidget(
50 | bbcode:
51 | '[quote][b]用户[/b]说:[s]测试表情和删除线(bgm35)[/s][/quote]\n[mask]测试特殊符号[]()测试字符表情(TAT)[/mask][url=https://bangumi.tv/blog/348736]测试链接[/url][url]https://bangumi.tv/blog/348736[/url][img]https://bangumi.tv/img/rc3/logo_2x.png[/img]\n\n[color=grey][size=10][来自Bangumi for android] [url=https://bgm.tv/group/topic/350677][color=grey]获取[/color][/url][/size][/color]',
52 | ),
53 | ),
54 | ),
55 | ),
56 | ),
57 | );
58 | }
59 | }
60 | ```
61 |
--------------------------------------------------------------------------------
/lib/bbcode/bbcode_elements.dart:
--------------------------------------------------------------------------------
1 | // 记录进入 tag 时 list 所在位置
2 | class BBCodeTag {
3 | int? bold;
4 | int? italic;
5 | int? underline;
6 | int? strikeThrough;
7 | int? masked;
8 | int? quoted;
9 | int? code;
10 | int? size;
11 | int? color;
12 | int? link;
13 | int? img;
14 |
15 | void clear() {
16 | bold = null;
17 | italic = null;
18 | underline = null;
19 | strikeThrough = null;
20 | masked = null;
21 | quoted = null;
22 | code = null;
23 | size = null;
24 | color = null;
25 | link = null;
26 | img = null;
27 | }
28 | }
29 |
30 | class BBCodeText {
31 | String text;
32 |
33 | bool bold = false;
34 | bool italic = false;
35 | bool underline = false;
36 | bool strikeThrough = false;
37 | bool masked = false;
38 | bool quoted = false;
39 | bool code = false;
40 |
41 | int size = 14;
42 | String? color;
43 | String? link;
44 |
45 | BBCodeText({
46 | required this.text,
47 | this.bold = false,
48 | this.italic = false,
49 | this.underline = false,
50 | this.strikeThrough = false,
51 | this.masked = false,
52 | this.quoted = false,
53 | this.code = false,
54 | this.size = 14,
55 | this.color,
56 | this.link,
57 | });
58 | }
59 |
60 | class BBCodeBgm {
61 | int id;
62 |
63 | BBCodeBgm({required this.id});
64 | }
65 |
66 | class BBCodeSticker {
67 | int id;
68 |
69 | BBCodeSticker({required this.id});
70 | }
71 |
72 | class BBCodeImg {
73 | String imageUrl;
74 |
75 | BBCodeImg({required this.imageUrl});
76 | }
77 |
78 | BBCodeTag bbCodeTag = BBCodeTag();
79 |
--------------------------------------------------------------------------------
/lib/bbcode/generated/BBCode.tokens:
--------------------------------------------------------------------------------
1 | T__0=1
2 | T__1=2
3 | T__2=3
4 | T__3=4
5 | T__4=5
6 | T__5=6
7 | T__6=7
8 | T__7=8
9 | T__8=9
10 | T__9=10
11 | T__10=11
12 | T__11=12
13 | T__12=13
14 | T__13=14
15 | T__14=15
16 | T__15=16
17 | T__16=17
18 | T__17=18
19 | T__18=19
20 | T__19=20
21 | T__20=21
22 | T__21=22
23 | T__22=23
24 | T__23=24
25 | T__24=25
26 | T__25=26
27 | T__26=27
28 | STRING=28
29 | '['=1
30 | '='=2
31 | ']'=3
32 | '[/'=4
33 | '/'=5
34 | '('=6
35 | ')'=7
36 | '[来自Bangumi for android]'=8
37 | '[来自Bangumi for iOS]'=9
38 | '(bgm'=10
39 | '(BGM'=11
40 | '(=A=)'=12
41 | '(=w=)'=13
42 | '(-w=)'=14
43 | '(S_S)'=15
44 | '(=v=)'=16
45 | '(@_@)'=17
46 | '(=W=)'=18
47 | '(TAT)'=19
48 | '(T_T)'=20
49 | '(=\'=)'=21
50 | '(=3=)'=22
51 | '(= =\')'=23
52 | '(=///=)'=24
53 | '(=.,=)'=25
54 | '(:P)'=26
55 | '(LOL)'=27
56 |
--------------------------------------------------------------------------------
/lib/bbcode/generated/BBCodeListener.dart:
--------------------------------------------------------------------------------
1 | import 'package:antlr4/antlr4.dart';
2 |
3 | import 'BBCodeParser.dart';
4 |
5 | /// This abstract class defines a complete listener for a parse tree produced by
6 | /// [BBCodeParser].
7 | abstract class BBCodeListener extends ParseTreeListener {
8 | /// Enter a parse tree produced by [BBCodeParser.document].
9 | /// [ctx] the parse tree
10 | void enterDocument(DocumentContext ctx);
11 | /// Exit a parse tree produced by [BBCodeParser.document].
12 | /// [ctx] the parse tree
13 | void exitDocument(DocumentContext ctx);
14 |
15 | /// Enter a parse tree produced by [BBCodeParser.element].
16 | /// [ctx] the parse tree
17 | void enterElement(ElementContext ctx);
18 | /// Exit a parse tree produced by [BBCodeParser.element].
19 | /// [ctx] the parse tree
20 | void exitElement(ElementContext ctx);
21 |
22 | /// Enter a parse tree produced by [BBCodeParser.tag].
23 | /// [ctx] the parse tree
24 | void enterTag(TagContext ctx);
25 | /// Exit a parse tree produced by [BBCodeParser.tag].
26 | /// [ctx] the parse tree
27 | void exitTag(TagContext ctx);
28 |
29 | /// Enter a parse tree produced by [BBCodeParser.plain].
30 | /// [ctx] the parse tree
31 | void enterPlain(PlainContext ctx);
32 | /// Exit a parse tree produced by [BBCodeParser.plain].
33 | /// [ctx] the parse tree
34 | void exitPlain(PlainContext ctx);
35 |
36 | /// Enter a parse tree produced by [BBCodeParser.bgm].
37 | /// [ctx] the parse tree
38 | void enterBgm(BgmContext ctx);
39 | /// Exit a parse tree produced by [BBCodeParser.bgm].
40 | /// [ctx] the parse tree
41 | void exitBgm(BgmContext ctx);
42 |
43 | /// Enter a parse tree produced by [BBCodeParser.sticker].
44 | /// [ctx] the parse tree
45 | void enterSticker(StickerContext ctx);
46 | /// Exit a parse tree produced by [BBCodeParser.sticker].
47 | /// [ctx] the parse tree
48 | void exitSticker(StickerContext ctx);
49 | }
--------------------------------------------------------------------------------
/lib/bean/appbar/drag_to_move_bar.dart:
--------------------------------------------------------------------------------
1 | import 'package:kazumi/utils/utils.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:window_manager/window_manager.dart';
4 |
5 | /// A widget for drag to move window.
6 | ///
7 | /// When you have hidden the title bar, you can add this widget to move the window position.
8 | ///
9 | /// {@tool snippet}
10 | ///
11 | /// The sample creates a red box, drag the box to move the window.
12 | ///
13 | /// ```dart
14 | /// DragToMoveArea(
15 | /// child: Container(
16 | /// width: 300,
17 | /// height: 32,
18 | /// color: Colors.red,
19 | /// ),
20 | /// )
21 | /// ```
22 | /// {@end-tool}
23 | class DragToMoveArea extends StatelessWidget {
24 | const DragToMoveArea({
25 | super.key,
26 | required this.child,
27 | });
28 |
29 | final Widget child;
30 |
31 | @override
32 | Widget build(BuildContext context) {
33 | return GestureDetector(
34 | behavior: HitTestBehavior.translucent,
35 | onPanStart: (_) => (Utils.isDesktop()) ? windowManager.startDragging() : null,
36 | child: child,
37 | );
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/bean/card/character_card.dart:
--------------------------------------------------------------------------------
1 | import 'package:kazumi/utils/utils.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:kazumi/modules/characters/character_item.dart';
4 | import 'package:kazumi/pages/info/character_page.dart';
5 |
6 | class CharacterCard extends StatelessWidget {
7 | const CharacterCard({
8 | super.key,
9 | required this.characterItem,
10 | });
11 |
12 | final CharacterItem characterItem;
13 |
14 | @override
15 | Widget build(BuildContext context) {
16 | return ListTile(
17 | leading: CircleAvatar(
18 | backgroundImage: characterItem.avator.grid.isEmpty
19 | ? NetworkImage('https://bangumi.tv/img/info_only.png')
20 | : NetworkImage(characterItem.avator.grid),
21 | ),
22 | title: Text(
23 | characterItem.name,
24 | overflow: TextOverflow.ellipsis,
25 | maxLines: 1,
26 | ),
27 | subtitle: characterItem.actorList.isNotEmpty
28 | ? Text(characterItem.actorList[0].name)
29 | : null,
30 | trailing: Text(characterItem.relation),
31 | onTap: () {
32 | showModalBottomSheet(
33 | isScrollControlled: true,
34 | constraints: BoxConstraints(
35 | maxHeight: MediaQuery.of(context).size.height * 3 / 4,
36 | maxWidth: (Utils.isDesktop() || Utils.isTablet())
37 | ? MediaQuery.of(context).size.width * 9 / 16
38 | : MediaQuery.of(context).size.width),
39 | clipBehavior: Clip.antiAlias,
40 | context: context,
41 | builder: (context) {
42 | return CharacterPage(characterID: characterItem.id);
43 | });
44 | },
45 | );
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/lib/bean/card/staff_card.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:kazumi/modules/staff/staff_item.dart';
3 |
4 | class StaffCard extends StatelessWidget {
5 | const StaffCard({
6 | super.key,
7 | required this.staffFullItem,
8 | });
9 |
10 | final StaffFullItem staffFullItem;
11 |
12 | @override
13 | Widget build(BuildContext context) {
14 | return ListTile(
15 | leading: CircleAvatar(
16 | backgroundImage: staffFullItem.staff.images?.grid == null
17 | ? NetworkImage('https://bangumi.tv/img/info_only.png')
18 | : NetworkImage(staffFullItem.staff.images!.grid),
19 | ),
20 | title: Text(
21 | staffFullItem.staff.name,
22 | overflow: TextOverflow.ellipsis,
23 | maxLines: 1,
24 | ),
25 | subtitle: staffFullItem.staff.nameCN.isNotEmpty
26 | ? Text(staffFullItem.staff.nameCN)
27 | : null,
28 | trailing: Text(staffFullItem.positions.isNotEmpty
29 | ? (staffFullItem.positions[0].type.cn)
30 | : ''),
31 | );
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/lib/bean/settings/color_type.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | final List