├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── question.yml │ ├── report_issue.yml │ └── request_feature.yml ├── pull_request_template.md └── workflows │ ├── batch_close_issues.yml │ ├── bug_greetings.yml │ ├── dart.yml │ ├── extension-issue-handling.yml │ ├── feature_greetings.yml │ ├── pr_greetings.yml │ └── release.yml ├── .gitignore ├── .idx └── dev.nix ├── .metadata ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── TOS.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── aayush262 │ │ │ │ └── dantotsu │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ ├── anim_splash.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ ├── launch_background.xml │ │ │ └── mono.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_banner.xml │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_banner.png │ │ │ ├── ic_banner_foreground.png │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ ├── ic_banner_background.xml │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── fonts │ ├── poppins.ttf │ ├── poppins_bold.ttf │ ├── poppins_semi_bold.ttf │ └── poppins_thin.ttf ├── images │ ├── logo.png │ └── lol.ico ├── svg │ ├── anilist.svg │ ├── bmc-button.svg │ ├── discord.svg │ ├── extensions.svg │ ├── kitsu.svg │ ├── mal.svg │ └── simkl.svg └── translations │ ├── app_am.arb │ ├── app_ar.arb │ ├── app_as.arb │ ├── app_bn.arb │ ├── app_da.arb │ ├── app_de.arb │ ├── app_el.arb │ ├── app_en.arb │ ├── app_es.arb │ ├── app_fa.arb │ ├── app_fil.arb │ ├── app_fr.arb │ ├── app_ha.arb │ ├── app_he.arb │ ├── app_hi.arb │ ├── app_hr.arb │ ├── app_id.arb │ ├── app_it.arb │ ├── app_ja.arb │ ├── app_kn.arb │ ├── app_ko.arb │ ├── app_ml.arb │ ├── app_mr.arb │ ├── app_ms.arb │ ├── app_ne.arb │ ├── app_nl.arb │ ├── app_or.arb │ ├── app_pl.arb │ ├── app_ps.arb │ ├── app_pt.arb │ ├── app_ru.arb │ ├── app_sa.arb │ ├── app_si.arb │ ├── app_so.arb │ ├── app_sw.arb │ ├── app_ta.arb │ ├── app_te.arb │ ├── app_th.arb │ ├── app_tr.arb │ ├── app_uk.arb │ ├── app_vi.arb │ └── app_zh.arb ├── devtools_options.yaml ├── epubx ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── analysis_options.yaml ├── example │ ├── README.md │ ├── dart_ex │ │ ├── README.md │ │ ├── alicesAdventuresUnderGround.epub │ │ ├── bin │ │ │ └── main.dart │ │ └── pubspec.yaml │ ├── flutter_ex │ │ ├── .gitignore │ │ ├── .metadata │ │ ├── README.md │ │ ├── analysis_options.yaml │ │ ├── android │ │ │ ├── .gitignore │ │ │ ├── app │ │ │ │ ├── build.gradle │ │ │ │ └── src │ │ │ │ │ ├── debug │ │ │ │ │ └── AndroidManifest.xml │ │ │ │ │ ├── main │ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ │ ├── kotlin │ │ │ │ │ │ └── com │ │ │ │ │ │ │ └── example │ │ │ │ │ │ │ └── flutter_ex │ │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ │ └── res │ │ │ │ │ │ ├── drawable-v21 │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ │ ├── drawable │ │ │ │ │ │ └── launch_background.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 │ │ │ │ │ │ └── styles.xml │ │ │ │ │ └── profile │ │ │ │ │ └── AndroidManifest.xml │ │ │ ├── build.gradle │ │ │ ├── gradle.properties │ │ │ ├── gradle │ │ │ │ └── wrapper │ │ │ │ │ └── gradle-wrapper.properties │ │ │ └── settings.gradle │ │ ├── example.png │ │ ├── examplewithcover.png │ │ ├── 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-60x60@2x.png │ │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ │ │ └── LaunchImage.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── LaunchImage.png │ │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ │ └── README.md │ │ │ │ ├── Base.lproj │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ └── Main.storyboard │ │ │ │ ├── Info.plist │ │ │ │ └── Runner-Bridging-Header.h │ │ ├── lib │ │ │ └── main.dart │ │ ├── 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 │ │ ├── pubspec.yaml │ │ └── web │ │ │ ├── favicon.png │ │ │ ├── icons │ │ │ ├── Icon-192.png │ │ │ ├── Icon-512.png │ │ │ ├── Icon-maskable-192.png │ │ │ └── Icon-maskable-512.png │ │ │ ├── index.html │ │ │ └── manifest.json │ └── web_ex │ │ ├── .gitignore │ │ ├── README.md │ │ ├── analysis_options.yaml │ │ ├── pubspec.yaml │ │ └── web │ │ ├── alicesAdventuresUnderGround.epub │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── main.dart │ │ └── styles.css ├── lib │ ├── epubx.dart │ └── src │ │ ├── entities │ │ ├── epub_book.dart │ │ ├── epub_byte_content_file.dart │ │ ├── epub_chapter.dart │ │ ├── epub_content.dart │ │ ├── epub_content_file.dart │ │ ├── epub_content_type.dart │ │ ├── epub_schema.dart │ │ └── epub_text_content_file.dart │ │ ├── epub_reader.dart │ │ ├── epub_writer.dart │ │ ├── readers │ │ ├── book_cover_reader.dart │ │ ├── chapter_reader.dart │ │ ├── content_reader.dart │ │ ├── navigation_reader.dart │ │ ├── package_reader.dart │ │ ├── root_file_path_reader.dart │ │ └── schema_reader.dart │ │ ├── ref_entities │ │ ├── epub_book_ref.dart │ │ ├── epub_byte_content_file_ref.dart │ │ ├── epub_chapter_ref.dart │ │ ├── epub_content_file_ref.dart │ │ ├── epub_content_ref.dart │ │ └── epub_text_content_file_ref.dart │ │ ├── schema │ │ ├── navigation │ │ │ ├── epub_metadata.dart │ │ │ ├── epub_navigation.dart │ │ │ ├── epub_navigation_doc_author.dart │ │ │ ├── epub_navigation_doc_title.dart │ │ │ ├── epub_navigation_head.dart │ │ │ ├── epub_navigation_head_meta.dart │ │ │ ├── epub_navigation_label.dart │ │ │ ├── epub_navigation_list.dart │ │ │ ├── epub_navigation_map.dart │ │ │ ├── epub_navigation_page_list.dart │ │ │ ├── epub_navigation_page_target.dart │ │ │ ├── epub_navigation_page_target_type.dart │ │ │ ├── epub_navigation_point.dart │ │ │ └── epub_navigation_target.dart │ │ └── opf │ │ │ ├── epub_guide.dart │ │ │ ├── epub_guide_reference.dart │ │ │ ├── epub_manifest.dart │ │ │ ├── epub_manifest_item.dart │ │ │ ├── epub_metadata.dart │ │ │ ├── epub_metadata_contributor.dart │ │ │ ├── epub_metadata_creator.dart │ │ │ ├── epub_metadata_date.dart │ │ │ ├── epub_metadata_identifier.dart │ │ │ ├── epub_metadata_meta.dart │ │ │ ├── epub_package.dart │ │ │ ├── epub_spine.dart │ │ │ ├── epub_spine_item_ref.dart │ │ │ └── epub_version.dart │ │ ├── utils │ │ ├── enum_from_string.dart │ │ └── zip_path_utils.dart │ │ └── writers │ │ ├── epub_guide_writer.dart │ │ ├── epub_manifest_writer.dart │ │ ├── epub_metadata_writer.dart │ │ ├── epub_navigation_writer.dart │ │ ├── epub_package_writer.dart │ │ └── epub_spine_writer.dart ├── pubspec.yaml ├── test │ ├── entities │ │ ├── epub_book_test.dart │ │ ├── epub_byte_content_file_test.dart │ │ ├── epub_chapter_test.dart │ │ ├── epub_content_test.dart │ │ ├── epub_schema_test.dart │ │ └── epub_text_content_file_test.dart │ ├── enum_string_test.dart │ ├── epub_image_tests.dart │ ├── epub_reader_tests.dart │ ├── epub_writer_tests.dart │ ├── random_data_generator.dart │ ├── ref_entities │ │ ├── epub_book_ref_test.dart │ │ ├── epub_byte_content_file_ref_test.dart │ │ ├── epub_chapter_ref_test.dart │ │ ├── epub_content_ref_test.dart │ │ └── epub_text_content_file_ref_test.dart │ ├── res │ │ ├── alicesAdventuresUnderGround.epub │ │ ├── hittelOnGoldMines.epub │ │ └── std │ │ │ ├── WCAG.epub │ │ │ ├── accessible_epub_3.epub │ │ │ ├── childrens-literature.epub │ │ │ ├── childrens-media-query.epub │ │ │ ├── cole-voyage-of-life-tol.epub │ │ │ ├── cole-voyage-of-life.epub │ │ │ ├── epub30-spec.epub │ │ │ ├── figure-gallery-bindings.epub │ │ │ ├── georgia-cfi.epub │ │ │ ├── georgia-pls-ssml.epub │ │ │ ├── hefty-water.epub │ │ │ ├── igp-year5-school-maths.epub │ │ │ ├── indexing-for-eds-and-auths-3f.epub │ │ │ ├── indexing-for-eds-and-auths-3md.epub │ │ │ ├── internallinks.epub │ │ │ ├── israelsailing.epub │ │ │ ├── linear-algebra.epub │ │ │ ├── moby-dick.epub │ │ │ ├── mymedia_lite.epub │ │ │ ├── quiz-bindings.epub │ │ │ ├── svg-in-spine.epub │ │ │ ├── trees.epub │ │ │ ├── wasteland-otf-obf.epub │ │ │ ├── wasteland-otf.epub │ │ │ ├── wasteland-woff-obf.epub │ │ │ ├── wasteland-woff.epub │ │ │ └── wasteland.epub │ └── schema │ │ ├── navigation │ │ ├── epub_navigation_doc_author_test.dart │ │ ├── epub_navigation_doc_title_test.dart │ │ ├── epub_navigation_head_meta_test.dart │ │ ├── epub_navigation_head_test.dart │ │ ├── epub_navigation_label_test.dart │ │ ├── epub_navigation_point_test.dart │ │ └── epub_navigation_target_test.dart │ │ └── opf │ │ ├── epub_guide_reference_test.dart │ │ ├── epub_guide_test.dart │ │ ├── epub_manifest_item_test.dart │ │ ├── epub_manifest_test.dart │ │ ├── epub_metadata_contributor_test.dart │ │ ├── epub_metadata_creator_test.dart │ │ ├── epub_metadata_date_test.dart │ │ ├── epub_metadata_identifier_test.dart │ │ ├── epub_metadata_meta_test.dart │ │ ├── epub_metadata_test.dart │ │ ├── epub_package_test.dart │ │ ├── epub_spine_item_ref_test.dart │ │ └── epub_spine_test.dart └── tool │ ├── publish.sh │ └── travis.sh ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Podfile.lock ├── 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 │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ └── README.md │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h └── RunnerTests │ └── RunnerTests.swift ├── l10n.yaml ├── lib ├── Adaptor │ ├── Chapter │ │ ├── ChapterAdaptor.dart │ │ ├── ChapterCompactViewHolder.dart │ │ └── ChapterListViewHolder.dart │ ├── Charactes │ │ ├── CharacterViewHolder.dart │ │ ├── EntityAdaptor.dart │ │ ├── StaffViewHolder.dart │ │ └── Widgets │ │ │ └── EntitySection.dart │ ├── Episode │ │ ├── EpisodeAdaptor.dart │ │ ├── EpisodeCompactViewHolder.dart │ │ ├── EpisodeGridViewHolder.dart │ │ ├── EpisodeListViewHolder.dart │ │ └── Widget │ │ │ └── HandleProgress.dart │ ├── Media │ │ ├── MediaAdaptor.dart │ │ ├── MediaExpandedViewHolder.dart │ │ ├── MediaLargeViewHolder.dart │ │ ├── MediaPageSmallViewHolder.dart │ │ ├── MediaViewHolder.dart │ │ └── Widgets │ │ │ ├── Chips.dart │ │ │ ├── MediaCard.dart │ │ │ ├── MediaReleaseingIndicator.dart │ │ │ ├── MediaScoreBadge.dart │ │ │ └── MediaSection.dart │ ├── Settings │ │ ├── SettingsAdaptor.dart │ │ └── SettingsItem.dart │ └── User │ │ ├── UserAdaptor.dart │ │ ├── UserLargeViewHolder.dart │ │ ├── UserViewHolder.dart │ │ └── Widgets │ │ └── UserSection.dart ├── Animation │ ├── ScaleAnimation.dart │ ├── SlideInAnimation.dart │ └── SlideUpAnimation.dart ├── Api │ ├── Anilist │ │ ├── Anilist.dart │ │ ├── AnilistMutations.dart │ │ ├── AnilistMutations │ │ │ ├── DeleteFromList.dart │ │ │ ├── SetProgress.dart │ │ │ └── SetUserList.dart │ │ ├── AnilistQueries.dart │ │ ├── AnilistQueries │ │ │ ├── GetAnimeMangaListData.dart │ │ │ ├── GetBannerImages.dart │ │ │ ├── GetCalendarData.dart │ │ │ ├── GetGenresAndTags.dart │ │ │ ├── GetHomePageData.dart │ │ │ ├── GetMediaData.dart │ │ │ ├── GetMediaDetails.dart │ │ │ ├── GetUserData.dart │ │ │ ├── GetUserMediaList.dart │ │ │ └── Search.dart │ │ ├── AnilistService.dart │ │ ├── Data │ │ │ ├── Generated │ │ │ │ ├── character.g.dart │ │ │ │ ├── data.g.dart │ │ │ │ ├── fuzzyData.g.dart │ │ │ │ ├── media.g.dart │ │ │ │ ├── others.g.dart │ │ │ │ ├── page.g.dart │ │ │ │ ├── recommendations.g.dart │ │ │ │ ├── staff.g.dart │ │ │ │ └── user.g.dart │ │ │ ├── character.dart │ │ │ ├── data.dart │ │ │ ├── fuzzyData.dart │ │ │ ├── media.dart │ │ │ ├── others.dart │ │ │ ├── page.dart │ │ │ ├── recommendations.dart │ │ │ ├── staff.dart │ │ │ └── user.dart │ │ ├── ListEditor.dart │ │ ├── Login.dart │ │ └── Screen │ │ │ ├── AnilistAnimeScreen.dart │ │ │ ├── AnilistHomeScreen.dart │ │ │ ├── AnilistMangaScreen.dart │ │ │ ├── AnilistSearchScreen.dart │ │ │ └── Widgets │ │ │ └── SearchFilter.dart │ ├── Discord │ │ ├── Discord.dart │ │ ├── DiscordService.dart │ │ ├── DiscordWebSocket.dart │ │ ├── Login.dart │ │ └── RpcExternalAsset.dart │ ├── EpisodeDetails │ │ ├── Anify │ │ │ ├── Anify.dart │ │ │ └── Anify.g.dart │ │ ├── Aniskip │ │ │ └── Aniskip.dart │ │ ├── GetMediaIDs │ │ │ ├── GetMediaIDs.dart │ │ │ └── GetMediaIDs.g.dart │ │ ├── Jikan │ │ │ ├── Jikan.dart │ │ │ └── Jikan.g.dart │ │ └── Kitsu │ │ │ ├── Kitsu.dart │ │ │ └── Kitsu.g.dart │ ├── Extensions │ │ ├── ExtensionsData.dart │ │ ├── ExtensionsQueries.dart │ │ ├── ExtensionsQueries │ │ │ ├── GetHomePageData.dart │ │ │ ├── GetMediaDetails.dart │ │ │ └── GetUserData.dart │ │ ├── ExtensionsService.dart │ │ └── Screens │ │ │ ├── ExtensionsAnimeScreen.dart │ │ │ ├── ExtensionsHomeScreen.dart │ │ │ ├── ExtensionsMangaScreen.dart │ │ │ └── ExtensionsSearchScreen.dart │ ├── Kitsu │ │ ├── KitsuData.dart │ │ └── KitsuService.dart │ ├── MyAnimeList │ │ ├── Data │ │ │ ├── Generated │ │ │ │ ├── data.g.dart │ │ │ │ ├── media.g.dart │ │ │ │ ├── user.g.dart │ │ │ │ └── userData.g.dart │ │ │ ├── data.dart │ │ │ ├── media.dart │ │ │ ├── user.dart │ │ │ └── userData.dart │ │ ├── Login.dart │ │ ├── Mal.dart │ │ ├── MalQueries.dart │ │ ├── MalQueries │ │ │ ├── GetAnimeMangaListData.dart │ │ │ ├── GetHomePageData.dart │ │ │ ├── GetUserData.dart │ │ │ └── MalStrings.dart │ │ ├── MalService.dart │ │ └── Screen │ │ │ ├── MalAnimeScreen.dart │ │ │ ├── MalHomeScreen.dart │ │ │ └── MalMangaScreen.dart │ ├── Simkl │ │ ├── Data │ │ │ ├── Activity.dart │ │ │ ├── Generated │ │ │ │ ├── Media.g.dart │ │ │ │ └── User.g.dart │ │ │ ├── Media.dart │ │ │ └── User.dart │ │ ├── Login.dart │ │ ├── Screen │ │ │ ├── SimklAnimeScreen.dart │ │ │ ├── SimklHomeScreen.dart │ │ │ └── SimklMovieScreen.dart │ │ ├── Simkl.dart │ │ ├── SimklQueries.dart │ │ ├── SimklQueries │ │ │ ├── GetAnimeMangaListData.dart │ │ │ ├── GetHomePageData.dart │ │ │ └── GetUserData.dart │ │ └── SimklService.dart │ ├── Sources │ │ ├── Eval │ │ │ ├── dart │ │ │ │ ├── bridge │ │ │ │ │ ├── document.dart │ │ │ │ │ ├── element.dart │ │ │ │ │ ├── filter.dart │ │ │ │ │ ├── http.dart │ │ │ │ │ ├── m_chapter.dart │ │ │ │ │ ├── m_manga.dart │ │ │ │ │ ├── m_pages.dart │ │ │ │ │ ├── m_provider.dart │ │ │ │ │ ├── m_source.dart │ │ │ │ │ ├── m_status.dart │ │ │ │ │ ├── m_track.dart │ │ │ │ │ ├── m_video.dart │ │ │ │ │ ├── registrer.dart │ │ │ │ │ └── source_preference.dart │ │ │ │ ├── model │ │ │ │ │ ├── document.dart │ │ │ │ │ ├── element.dart │ │ │ │ │ ├── filter.dart │ │ │ │ │ ├── m_bridge.dart │ │ │ │ │ ├── m_chapter.dart │ │ │ │ │ ├── m_manga.dart │ │ │ │ │ ├── m_pages.dart │ │ │ │ │ ├── m_provider.dart │ │ │ │ │ ├── m_source.dart │ │ │ │ │ ├── m_video.dart │ │ │ │ │ ├── page.dart │ │ │ │ │ ├── source_preference.dart │ │ │ │ │ ├── source_preference.g.dart │ │ │ │ │ └── video.dart │ │ │ │ └── service.dart │ │ │ └── javascript │ │ │ │ ├── dom_selector.dart │ │ │ │ ├── extractors.dart │ │ │ │ ├── http.dart │ │ │ │ ├── preferences.dart │ │ │ │ ├── service.dart │ │ │ │ └── utils.dart │ │ ├── Extensions │ │ │ ├── GetSourceList.dart │ │ │ ├── extensions_provider.dart │ │ │ ├── extensions_provider.g.dart │ │ │ ├── fetch_anime_sources.dart │ │ │ ├── fetch_anime_sources.g.dart │ │ │ ├── fetch_manga_sources.dart │ │ │ ├── fetch_manga_sources.g.dart │ │ │ ├── fetch_novel_sources.dart │ │ │ └── fetch_novel_sources.g.dart │ │ ├── Model │ │ │ ├── Manga.dart │ │ │ ├── Manga.g.dart │ │ │ ├── Source.dart │ │ │ ├── Source.g.dart │ │ │ ├── chapter.dart │ │ │ ├── chapter.g.dart │ │ │ ├── settings.dart │ │ │ └── settings.g.dart │ │ ├── Search │ │ │ ├── getVideo.dart │ │ │ ├── get_detail.dart │ │ │ ├── get_pages.dart │ │ │ ├── get_popular.dart │ │ │ └── search.dart │ │ ├── anime_extractors │ │ │ ├── dood_extractor.dart │ │ │ ├── filemoon.dart │ │ │ ├── gogocdn_extractor.dart │ │ │ ├── mp4upload_extractor.dart │ │ │ ├── mystream_extractor.dart │ │ │ ├── mytv_extractor.dart │ │ │ ├── okru_extractor.dart │ │ │ ├── quarkuc_extractor.dart │ │ │ ├── sendvid_extractor.dart │ │ │ ├── sibnet_extractor.dart │ │ │ ├── streamlare_extractor.dart │ │ │ ├── streamtape_extractor.dart │ │ │ ├── streamwish_extractor.dart │ │ │ ├── vidbom_extractor.dart │ │ │ ├── voe_extractor.dart │ │ │ └── your_upload_extractor.dart │ │ ├── cryptoaes │ │ │ ├── crypto_aes.dart │ │ │ ├── deobfuscator.dart │ │ │ └── js_unpacker.dart │ │ ├── dom_extensions.dart │ │ ├── extension_preferences_providers.dart │ │ ├── get_source_preference.dart │ │ ├── http │ │ │ └── m_client.dart │ │ ├── interface.dart │ │ ├── lib.dart │ │ ├── reg_exp_matcher.dart │ │ └── xpath_selector.dart │ └── TypeFactory.dart ├── DataClass │ ├── Anime.dart │ ├── Author.dart │ ├── Chapter.dart │ ├── Character.dart │ ├── Data │ │ ├── Anime.g.dart │ │ ├── Author.g.dart │ │ ├── Chapter.g.dart │ │ ├── Character.g.dart │ │ ├── Episode.g.dart │ │ ├── Manga.g.dart │ │ ├── Media.g.dart │ │ ├── SearchResults.g.dart │ │ └── User.g.dart │ ├── Episode.dart │ ├── Manga.dart │ ├── MangaChapter.dart │ ├── Media.dart │ ├── Media │ │ ├── AnilistMedia.dart │ │ ├── MalMedia.dart │ │ └── SimklMedia.dart │ ├── MediaSection.dart │ ├── SearchResults.dart │ ├── Setting.dart │ ├── Studio.dart │ └── User.dart ├── Functions │ ├── Extensions.dart │ ├── Function.dart │ ├── GetExtensions.dart │ ├── RegisterProtocol │ │ ├── Api.dart │ │ └── WindowProtocol.dart │ └── string_extensions.dart ├── Preferences │ ├── IsarDataClasses │ │ ├── DefaultPlayerSettings │ │ │ ├── DefaultPlayerSettings.dart │ │ │ └── DefaultPlayerSettings.g.dart │ │ ├── DefaultReaderSettings │ │ │ ├── DafaultReaderSettings.dart │ │ │ └── DafaultReaderSettings.g.dart │ │ ├── KeyValue │ │ │ ├── KeyValues.dart │ │ │ └── KeyValues.g.dart │ │ ├── MalToken │ │ │ ├── MalToken.dart │ │ │ └── MalToken.g.dart │ │ ├── MediaSettings │ │ │ ├── MediaSettings.dart │ │ │ └── MediaSettings.g.dart │ │ └── ShowResponse │ │ │ ├── ShowResponse.dart │ │ │ └── ShowResponse.g.dart │ ├── PrefManager.dart │ └── Preferences.dart ├── Screens │ ├── Anime │ │ ├── AnimeScreen.dart │ │ └── Player │ │ │ ├── Platform │ │ │ ├── BasePlayer.dart │ │ │ └── WindowsPlayer.dart │ │ │ ├── Player.dart │ │ │ ├── PlayerController.dart │ │ │ └── Widgets │ │ │ └── Indicator.dart │ ├── Calendar │ │ ├── CalendarScreen.dart │ │ └── CalendarViewModel.dart │ ├── Character │ │ └── CharacterScreen.dart │ ├── Detail │ │ ├── MediaScreen.dart │ │ ├── MediaScreenViewModel.dart │ │ ├── Tabs │ │ │ ├── Info │ │ │ │ ├── InfoPage.dart │ │ │ │ └── Widgets │ │ │ │ │ ├── FollowerWidget.dart │ │ │ │ │ ├── GenreWidget.dart │ │ │ │ │ └── ItemFollower.dart │ │ │ └── Watch │ │ │ │ ├── Anime │ │ │ │ ├── AnimeParser.dart │ │ │ │ ├── AnimeWatchScreen.dart │ │ │ │ └── Widget │ │ │ │ │ ├── AnimeCompactSettings.dart │ │ │ │ │ ├── BuildChunkSelector.dart │ │ │ │ │ └── ContinueCard.dart │ │ │ │ ├── BaseParser.dart │ │ │ │ ├── BaseWatchScreen.dart │ │ │ │ ├── Functions │ │ │ │ └── ParseChapterNumber.dart │ │ │ │ ├── Manga │ │ │ │ ├── MangaParser.dart │ │ │ │ ├── MangaWatchScreen.dart │ │ │ │ └── Widget │ │ │ │ │ ├── BuildChunkSelector.dart │ │ │ │ │ ├── ContinueCard.dart │ │ │ │ │ ├── DateFormat.dart │ │ │ │ │ └── MangaCompactSettings.dart │ │ │ │ ├── Source │ │ │ │ └── Source.dart │ │ │ │ └── Widgets │ │ │ │ ├── SourceSelector.dart │ │ │ │ └── WrongTitle.dart │ │ └── Widgets │ │ │ ├── Countdown.dart │ │ │ └── Releasing.dart │ ├── Extensions │ │ ├── ExtensionItem.dart │ │ ├── ExtensionList.dart │ │ ├── ExtensionScreen.dart │ │ └── ExtensionSettings │ │ │ ├── ExtensionSettings.dart │ │ │ └── ListTileChapterFilter.dart │ ├── Home │ │ ├── HomeScreen.dart │ │ └── Widgets │ │ │ ├── AvtarWidget.dart │ │ │ ├── LoadingWidget.dart │ │ │ ├── NotificationBadge.dart │ │ │ └── ServiceSwitcherBar.dart │ ├── HomeNavbar.dart │ ├── Login │ │ └── LoginScreen.dart │ ├── Manga │ │ ├── MangaReader │ │ │ ├── Reader.dart │ │ │ └── ReaderController.dart │ │ └── MangaScreen.dart │ ├── MediaList │ │ ├── MediaListScreen.dart │ │ ├── MediaListTabs.dart │ │ └── MediaListViewModel.dart │ ├── Search │ │ └── SearchScreen.dart │ ├── Settings │ │ ├── BaseSettingsScreen.dart │ │ ├── SettingsAboutScreen.dart │ │ ├── SettingsAccountScreen.dart │ │ ├── SettingsAnimeScreen.dart │ │ ├── SettingsBottomSheet.dart │ │ ├── SettingsCommonScreen.dart │ │ ├── SettingsExtensionsScreen.dart │ │ ├── SettingsMangaScreen.dart │ │ ├── SettingsPlayerScreen.dart │ │ ├── SettingsReaderScreen.dart │ │ ├── SettingsScreen.dart │ │ ├── SettingsThemeScreen.dart │ │ └── language.dart │ ├── Staff │ │ └── StaffScreen.dart │ └── WebView │ │ └── WebView.dart ├── Services │ ├── Api │ │ ├── Mutations.dart │ │ └── Queries.dart │ ├── BaseServiceData.dart │ ├── MediaService.dart │ ├── Screens │ │ ├── BaseAnimeScreen.dart │ │ ├── BaseHomeScreen.dart │ │ ├── BaseLoginScreen.dart │ │ ├── BaseMangaScreen.dart │ │ ├── BaseMediaScreen.dart │ │ └── BaseSearchScreen.dart │ └── ServiceSwitcher.dart ├── StorageProvider.dart ├── Theme │ ├── Colors.dart │ ├── CustomColorPicker.dart │ ├── LanguageSwitcher.dart │ ├── ThemeManager.dart │ ├── ThemeProvider.dart │ └── Themes │ │ ├── blue.dart │ │ ├── fromCode.dart │ │ ├── green.dart │ │ ├── lavender.dart │ │ ├── material.dart │ │ ├── ocean.dart │ │ ├── oriax.dart │ │ ├── pink.dart │ │ ├── purple.dart │ │ ├── red.dart │ │ └── saikou.dart ├── Widgets │ ├── AlertDialogBuilder.dart │ ├── CachedNetworkImage.dart │ ├── CustomBottomDialog.dart │ ├── CustomElevatedButton.dart │ ├── DropdownMenu.dart │ ├── GenreItem.dart │ ├── LoadSvg.dart │ └── ScrollConfig.dart ├── l10n │ ├── app_localizations.dart │ ├── app_localizations_am.dart │ ├── app_localizations_ar.dart │ ├── app_localizations_as.dart │ ├── app_localizations_bn.dart │ ├── app_localizations_da.dart │ ├── app_localizations_de.dart │ ├── app_localizations_el.dart │ ├── app_localizations_en.dart │ ├── app_localizations_es.dart │ ├── app_localizations_fa.dart │ ├── app_localizations_fil.dart │ ├── app_localizations_fr.dart │ ├── app_localizations_ha.dart │ ├── app_localizations_he.dart │ ├── app_localizations_hi.dart │ ├── app_localizations_hr.dart │ ├── app_localizations_id.dart │ ├── app_localizations_it.dart │ ├── app_localizations_ja.dart │ ├── app_localizations_kn.dart │ ├── app_localizations_ko.dart │ ├── app_localizations_ml.dart │ ├── app_localizations_mr.dart │ ├── app_localizations_ms.dart │ ├── app_localizations_ne.dart │ ├── app_localizations_nl.dart │ ├── app_localizations_or.dart │ ├── app_localizations_pl.dart │ ├── app_localizations_ps.dart │ ├── app_localizations_pt.dart │ ├── app_localizations_ru.dart │ ├── app_localizations_sa.dart │ ├── app_localizations_si.dart │ ├── app_localizations_so.dart │ ├── app_localizations_sw.dart │ ├── app_localizations_ta.dart │ ├── app_localizations_te.dart │ ├── app_localizations_th.dart │ ├── app_localizations_tr.dart │ ├── app_localizations_uk.dart │ ├── app_localizations_vi.dart │ └── app_localizations_zh.dart ├── logger.dart └── main.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.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 ├── scripts ├── tel_commit_parser.sed └── tel_parser.sed ├── shorebird.yaml ├── 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 ├── flutter_window.cpp ├── flutter_window.h ├── main.cpp ├── resource.h ├── resources └── app_icon.ico ├── runner.exe.manifest ├── utils.cpp ├── utils.h ├── win32_window.cpp └── win32_window.h /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [aayush2622] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: ['https://www.buymeacoffee.com/aayush262'] 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: 🧑‍💻 Dartotsu Help on Discord 4 | url: https://discord.gg/eyQdCpdubF 5 | about: Get support, ask questions, and join the community discussions. 6 | 7 | - name: 📱 Dartotsu Help on Telegram 8 | url: https://t.me/Dartotsu 9 | about: Connect with the community, ask questions, and get help directly on Telegram. 10 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # 🚀 Pull Request 2 | **Description:** 3 | Submit changes or improvements to Dartotsu 4 | 5 | **Title:** 6 | Provide a concise and descriptive title for your pull request 7 | 8 | **Description:** 9 | Clearly describe the purpose and scope of your pull request 10 | 11 | **Summary of Changes:** 12 | Outline the key changes introduced in this pull request 13 | 14 | **Type of Changes:** 15 | - Bug Fix 16 | - Feature 17 | - Enhancement 18 | - Documentation 19 | 20 | **Testing Notes:** 21 | Provide details on how this change has been tested 22 | 23 | **Linked Issue(s):** 24 | Mention any related issues using their GitHub issue numbers 25 | 26 | **Additional Context:** 27 | Include any other relevant information or context for your pull request 28 | 29 | **Submission Checklist:** 30 | - [ ] I have read and followed the project's contributing guidelines 31 | - [ ] My code follows the code style of this project 32 | - [ ] I have tested the changes and ensured they do not break existing functionality 33 | - [ ] I have added or updated documentation as needed 34 | - [ ] I have linked related issues in the description above 35 | - [ ] I have tagged the appropriate reviewers for this pull request 36 | -------------------------------------------------------------------------------- /.github/workflows/batch_close_issues.yml: -------------------------------------------------------------------------------- 1 | name: "Batch close stale bug and question issues" 2 | on: 3 | schedule: 4 | - cron: '0 0 1 * *' 5 | workflow_dispatch: 6 | inputs: 7 | 8 | jobs: 9 | stale: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9 13 | with: 14 | repo-token: ${{ secrets.GITHUB_TOKEN }} 15 | # Close issues after 3 months of inactivity 16 | days-before-issue-stale: 90 17 | days-before-issue-close: 0 18 | only-issue-labels: "bug,question" 19 | exempt-issue-labels: "do-not-autoclose,Meta request" 20 | close-issue-message: "To have a more manageable issue backlog, we're closing older bug reports and questions that weren't addressed within three months. If this issue is still relevant, please [open a new issue](https://github.com/aayush2622/Dartotsu/issues/new/choose)." 21 | close-issue-reason: not_planned 22 | ascending: true 23 | operations-per-run: 250 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | *.env 13 | .env 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 | *.jks 27 | *.keystore 28 | 29 | # Flutter/Dart/Pub related 30 | **/doc/api/ 31 | **/ios/Flutter/.last_build_id 32 | .dart_tool/ 33 | .flutter-plugins 34 | .flutter-plugins-dependencies 35 | .pub-cache/ 36 | .pub/ 37 | /build/ 38 | 39 | # Symbolication related 40 | app.*.symbols 41 | 42 | # Obfuscation related 43 | app.*.map.json 44 | 45 | # Android Studio will place build artifacts here 46 | /android/app/debug 47 | /android/app/profile 48 | /android/app/release 49 | /android/app/.cxx/ 50 | -------------------------------------------------------------------------------- /.idx/dev.nix: -------------------------------------------------------------------------------- 1 | {pkgs}: { 2 | channel = "stable-23.11"; 3 | packages = [ 4 | pkgs.nodePackages.firebase-tools 5 | pkgs.jdk17 6 | pkgs.unzip 7 | pkgs.apt 8 | pkgs.cmake 9 | ]; 10 | idx.extensions = [ 11 | 12 | 13 | "Dart-Code.dart-code" 14 | "Dart-Code.flutter"]; 15 | idx.previews = { 16 | previews = { 17 | web = { 18 | command = [ 19 | "flutter" 20 | "run" 21 | "--machine" 22 | "-d" 23 | "web-server" 24 | "--web-hostname" 25 | "0.0.0.0" 26 | "--web-port" 27 | "$PORT" 28 | ]; 29 | manager = "flutter"; 30 | }; 31 | android = { 32 | command = [ 33 | "flutter" 34 | "run" 35 | "--machine" 36 | "-d" 37 | "android" 38 | "-d" 39 | "emulator-5554" 40 | ]; 41 | manager = "flutter"; 42 | }; 43 | }; 44 | }; 45 | } -------------------------------------------------------------------------------- /.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: "17025dd88227cd9532c33fa78f5250d548d87e9a" 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: 17025dd88227cd9532c33fa78f5250d548d87e9a 17 | base_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a 18 | - platform: macos 19 | create_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a 20 | base_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a 21 | 22 | # User provided section 23 | 24 | # List of Local paths (relative to this file) that should be 25 | # ignored by the migrate tool. 26 | # 27 | # Files that are not part of the templates will be ignored by default. 28 | unmanaged_files: 29 | - 'lib/main.dart' 30 | - 'ios/Runner.xcodeproj/project.pbxproj' 31 | -------------------------------------------------------------------------------- /TOS.md: -------------------------------------------------------------------------------- 1 | ## Terms of Service 2 | 3 | By downloading, installing, or using this repository, you agree to: 4 | - Use the code in compliance with all applicable laws. 5 | - Not use the repository to infringe on copyrighted content. 6 | - Take full responsibility for any third-party extensions you install or use. 7 | - Understand that the developer(s) are not responsible for any third-party extensions or user actions. 8 | 9 | This repository is designed for anime tracking and legal streaming service integration. The developers do not provide, maintain, or endorse any extensions that enable access to unauthorized content. 10 | -------------------------------------------------------------------------------- /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/aayush262/dantotsu/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package ani.aayush262.dartotsu 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() 6 | -------------------------------------------------------------------------------- /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/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_banner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-xhdpi/ic_banner.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_banner_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-xhdpi/ic_banner_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_banner_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /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 | afterEvaluate { project -> 11 | if (project.plugins.hasPlugin("com.android.application") || 12 | project.plugins.hasPlugin("com.android.library")) { 13 | project.android { 14 | compileSdkVersion 35 15 | buildToolsVersion "36.0.0" 16 | } 17 | } 18 | if (project.hasProperty("android")) { 19 | project.android { 20 | if (namespace == null) { 21 | namespace project.group 22 | } 23 | } 24 | } 25 | } 26 | project.buildDir = "${rootProject.buildDir}/${project.name}" 27 | } 28 | subprojects { 29 | project.evaluationDependsOn(":app") 30 | } 31 | 32 | tasks.register("clean", Delete) { 33 | delete rootProject.buildDir 34 | } 35 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError 2 | android.useAndroidX=true 3 | android.enableJetifier=true -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /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 | 10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") 11 | 12 | repositories { 13 | google() 14 | mavenCentral() 15 | gradlePluginPortal() 16 | } 17 | } 18 | 19 | plugins { 20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 21 | id "com.android.application" version "8.10.0" apply false 22 | id "org.jetbrains.kotlin.android" version "2.0.20" apply false 23 | } 24 | 25 | include ":app" 26 | -------------------------------------------------------------------------------- /assets/fonts/poppins.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/assets/fonts/poppins.ttf -------------------------------------------------------------------------------- /assets/fonts/poppins_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/assets/fonts/poppins_bold.ttf -------------------------------------------------------------------------------- /assets/fonts/poppins_semi_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/assets/fonts/poppins_semi_bold.ttf -------------------------------------------------------------------------------- /assets/fonts/poppins_thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/assets/fonts/poppins_thin.ttf -------------------------------------------------------------------------------- /assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/assets/images/logo.png -------------------------------------------------------------------------------- /assets/images/lol.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/assets/images/lol.ico -------------------------------------------------------------------------------- /assets/svg/anilist.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/svg/extensions.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/svg/mal.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /devtools_options.yaml: -------------------------------------------------------------------------------- 1 | description: This file stores settings for Dart & Flutter DevTools. 2 | documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states 3 | extensions: 4 | - provider: true -------------------------------------------------------------------------------- /epubx/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://www.dartlang.org/tools/private-files.html 2 | 3 | # Files and directories created by pub 4 | .buildlog 5 | .packages 6 | .project 7 | .pub/ 8 | build/ 9 | **/packages/ 10 | .dart_tool/ 11 | 12 | # Files created by dart2js 13 | # (Most Dart developers will use pub build to compile Dart, use/modify these 14 | # rules if you intend to use dart2js directly 15 | # Convention is to use extension '.dart.js' for Dart compiled to Javascript to 16 | # differentiate from explicit Javascript files) 17 | *.dart.js 18 | *.part.js 19 | *.js.deps 20 | *.js.map 21 | *.info.json 22 | 23 | # Directory created by dartdoc 24 | doc/api/ 25 | 26 | # Don't commit pubspec lock file 27 | # (Library packages only! Remove pattern if developing an application package) 28 | pubspec.lock 29 | 30 | #Ignore VSCode Directory 31 | .vscode/ 32 | -------------------------------------------------------------------------------- /epubx/.travis.yml: -------------------------------------------------------------------------------- 1 | language: dart 2 | dart: 3 | - stable 4 | sudo: false 5 | before_script: 6 | - chmod +x ./tool/travis.sh 7 | - chmod +x ./tool/publish.sh 8 | - pub get 9 | script: ./tool/travis.sh 10 | deploy: 11 | provider: script 12 | script: ./tool/publish.sh 13 | skip_cleanup: true 14 | on: 15 | branch: master 16 | dart: stable -------------------------------------------------------------------------------- /epubx/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Colin Nelson 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. 22 | -------------------------------------------------------------------------------- /epubx/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # Defines a default set of lint rules enforced for 2 | # projects at Google. For details and rationale, 3 | # see https://github.com/dart-lang/pedantic#enabled-lints. 4 | # include: package:pedantic/analysis_options.yaml 5 | 6 | # For lint rules and documentation, see http://dart-lang.github.io/linter/lints. 7 | # Uncomment to specify additional rules. 8 | # linter: 9 | # rules: 10 | # - camel_case_types 11 | 12 | analyzer: 13 | exclude: 14 | - example/** 15 | - test/** 16 | -------------------------------------------------------------------------------- /epubx/example/README.md: -------------------------------------------------------------------------------- 1 | # Examples 2 | 3 | ## dart_ex 4 | 5 | This example reads an EPUB from disk and logs various information about it. 6 | 7 | ## flutter_ex 8 | 9 | This example fetches an EPUB from a user-inputted URL and displays the Title and Author. -------------------------------------------------------------------------------- /epubx/example/dart_ex/README.md: -------------------------------------------------------------------------------- 1 | # dart_ex 2 | 3 | An example of using the `epub` library in a "standard" command line application. 4 | 5 | ## To Run 6 | 7 | ```shell 8 | dart bin/main.dart 9 | ``` -------------------------------------------------------------------------------- /epubx/example/dart_ex/alicesAdventuresUnderGround.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/dart_ex/alicesAdventuresUnderGround.epub -------------------------------------------------------------------------------- /epubx/example/dart_ex/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: dart_ex 2 | description: Example dart project 3 | version: 1.0.0+1 4 | 5 | environment: 6 | sdk: '>=2.12.0 <3.0.0' 7 | 8 | dependencies: 9 | # Epub 10 | epubx: 11 | path: ../../ 12 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/.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: 7a4c33425ddd78c54aba07d86f3f9a4a0051769b 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/README.md: -------------------------------------------------------------------------------- 1 | # flutter_ex 2 | 3 | A sample application that fetches an epub from a given URL and displays the Title and Author 4 | 5 | Place a URL in the text box (e.g. https://www.gutenberg.org/ebooks/11.epub.images), hit the "Inspect Book" button and watch the application download the book and extract some relevant information. 6 | 7 | ## Examples 8 | 9 | ### With Cover Image 10 | ![](examplewithcover.png) 11 | 12 | ### Without Cover Image 13 | ![](example.png) 14 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/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 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/main/kotlin/com/example/flutter_ex/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.flutter_ex 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:4.1.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | project.evaluationDependsOn(':app') 25 | } 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip 7 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/example.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/examplewithcover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/examplewithcover.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/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 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/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 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/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. -------------------------------------------------------------------------------- /epubx/example/flutter_ex/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | 9 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 10 | } 11 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = flutter_ex 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterEx 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2021 com.example. All rights reserved. 15 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.client 10 | 11 | com.apple.security.network.server 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController.init() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.client 8 | 9 | com.apple.security.network.server 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_ex 2 | description: A new Flutter project. 3 | publish_to: none 4 | version: 1.0.0+1 5 | 6 | environment: 7 | sdk: ">=2.12.0 <3.0.0" 8 | 9 | dependencies: 10 | flutter: 11 | sdk: flutter 12 | # Epub 13 | epubx: 14 | path: ../../ 15 | # To get the epub from the internet 16 | http: ^0.13.4 17 | image: ^3.0.8 18 | 19 | dev_dependencies: 20 | flutter_test: 21 | sdk: flutter 22 | 23 | # The following section is specific to Flutter. 24 | flutter: 25 | # The following line ensures that the Material Icons font is 26 | # included with your application, so that you can use the icons in 27 | # the material Icons class. 28 | uses-material-design: true 29 | -------------------------------------------------------------------------------- /epubx/example/flutter_ex/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/web/favicon.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/web/icons/Icon-192.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/web/icons/Icon-512.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/flutter_ex/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /epubx/example/flutter_ex/web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flutter_ex", 3 | "short_name": "flutter_ex", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | }, 22 | { 23 | "src": "icons/Icon-maskable-192.png", 24 | "sizes": "192x192", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | }, 28 | { 29 | "src": "icons/Icon-maskable-512.png", 30 | "sizes": "512x512", 31 | "type": "image/png", 32 | "purpose": "maskable" 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /epubx/example/web_ex/.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub 2 | .dart_tool/ 3 | .packages 4 | # Remove the following pattern if you wish to check in your lock file 5 | pubspec.lock 6 | 7 | # Conventional directory for build outputs 8 | build/ 9 | 10 | # Directory created by dartdoc 11 | doc/api/ 12 | -------------------------------------------------------------------------------- /epubx/example/web_ex/README.md: -------------------------------------------------------------------------------- 1 | # web_ex 2 | 3 | An absolute bare-bones web app which uses the epub package. 4 | 5 | ## To run 6 | 7 | Install webdev 8 | ```bash 9 | pub global activate webdev 10 | ``` 11 | 12 | Get dependencies 13 | ```bash 14 | pub get 15 | ``` 16 | 17 | Run the application 18 | ```bash 19 | webdev serve 20 | ``` 21 | 22 | Browse to `localhost:8080` 23 | 24 | 25 | ## Notices 26 | Created from templates made available by Stagehand under a BSD-style 27 | [license](https://github.com/dart-lang/stagehand/blob/master/LICENSE). 28 | -------------------------------------------------------------------------------- /epubx/example/web_ex/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # Defines a default set of lint rules enforced for 2 | # projects at Google. For details and rationale, 3 | # see https://github.com/dart-lang/pedantic#enabled-lints. 4 | include: package:pedantic/analysis_options.yaml 5 | 6 | # For lint rules and documentation, see http://dart-lang.github.io/linter/lints. 7 | # Uncomment to specify additional rules. 8 | # linter: 9 | # rules: 10 | # - camel_case_types 11 | 12 | analyzer: 13 | # exclude: 14 | # - path/to/excluded/files/** 15 | -------------------------------------------------------------------------------- /epubx/example/web_ex/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: web_ex 2 | description: An absolute bare-bones web app. 3 | # version: 1.0.0 4 | #homepage: https://www.example.com 5 | #author: Colin Nelson 6 | 7 | environment: 8 | sdk: '>=2.2.0 <3.0.0' 9 | 10 | dependencies: 11 | # path: ^1.4.1 12 | http: ^0.12.0+2 13 | epub: ^2.0.6 14 | 15 | dev_dependencies: 16 | build_runner: ^1.1.2 17 | build_web_compilers: ^1.0.0 18 | pedantic: ^1.0.0 19 | -------------------------------------------------------------------------------- /epubx/example/web_ex/web/alicesAdventuresUnderGround.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/web_ex/web/alicesAdventuresUnderGround.epub -------------------------------------------------------------------------------- /epubx/example/web_ex/web/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/example/web_ex/web/favicon.ico -------------------------------------------------------------------------------- /epubx/example/web_ex/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | web_ex 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |

Title

20 |
21 |

Author

22 |
23 |

Number of Chapters

24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /epubx/example/web_ex/web/main.dart: -------------------------------------------------------------------------------- 1 | import 'dart:html'; 2 | import 'package:http/http.dart' as http; 3 | import 'package:epubx/epub.dart' as epub; 4 | 5 | void main() async { 6 | querySelector('#output').text = 'Your Dart app is running.'; 7 | 8 | var epubRes = await http.get('alicesAdventuresUnderGround.epub'); 9 | if (epubRes.statusCode == 200) { 10 | var book = await epub.EpubReader.openBook(epubRes.bodyBytes); 11 | querySelector('#title').text = book.Title; 12 | querySelector('#author').text = book.Author; 13 | var chapters = await book.getChapters(); 14 | querySelector('#nchapters').text = chapters.length.toString(); 15 | querySelectorAll('h2').style.visibility = 'visible'; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /epubx/example/web_ex/web/styles.css: -------------------------------------------------------------------------------- 1 | @import url(https://fonts.googleapis.com/css?family=Roboto); 2 | 3 | html, body { 4 | width: 100%; 5 | height: 100%; 6 | margin: 0; 7 | padding: 0; 8 | font-family: 'Roboto', sans-serif; 9 | } 10 | 11 | div, h2 { 12 | padding: 20px; 13 | text-align: center; 14 | } 15 | 16 | h2{ 17 | visibility: hidden 18 | } 19 | -------------------------------------------------------------------------------- /epubx/lib/src/entities/epub_byte_content_file.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | import 'epub_content_file.dart'; 5 | 6 | class EpubByteContentFile extends EpubContentFile { 7 | List? Content; 8 | 9 | @override 10 | int get hashCode { 11 | var objects = [ 12 | ContentMimeType.hashCode, 13 | ContentType.hashCode, 14 | FileName.hashCode, 15 | ...Content?.map((content) => content.hashCode) ?? [0], 16 | ]; 17 | return hashObjects(objects); 18 | } 19 | 20 | @override 21 | bool operator ==(other) { 22 | if (!(other is EpubByteContentFile)) { 23 | return false; 24 | } 25 | return collections.listsEqual(Content, other.Content) && 26 | ContentMimeType == other.ContentMimeType && 27 | ContentType == other.ContentType && 28 | FileName == other.FileName; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /epubx/lib/src/entities/epub_chapter.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | class EpubChapter { 5 | String? Title; 6 | String? ContentFileName; 7 | String? Anchor; 8 | String? HtmlContent; 9 | List? SubChapters; 10 | List OtherContentFileNames = []; 11 | 12 | @override 13 | int get hashCode { 14 | var objects = [ 15 | Title.hashCode, 16 | ContentFileName.hashCode, 17 | OtherContentFileNames.hashCode, 18 | Anchor.hashCode, 19 | HtmlContent.hashCode, 20 | ...SubChapters?.map((subChapter) => subChapter.hashCode) ?? [0], 21 | ]; 22 | return hashObjects(objects); 23 | } 24 | 25 | @override 26 | bool operator ==(other) { 27 | if (!(other is EpubChapter)) { 28 | return false; 29 | } 30 | return Title == other.Title && 31 | ContentFileName == other.ContentFileName && 32 | OtherContentFileNames == other.OtherContentFileNames && 33 | Anchor == other.Anchor && 34 | HtmlContent == other.HtmlContent && 35 | collections.listsEqual(SubChapters, other.SubChapters); 36 | } 37 | 38 | @override 39 | String toString() { 40 | return 'Title: $Title, Subchapter count: ${SubChapters!.length}'; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /epubx/lib/src/entities/epub_content_file.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | import 'epub_content_type.dart'; 4 | 5 | abstract class EpubContentFile { 6 | String? FileName; 7 | EpubContentType? ContentType; 8 | String? ContentMimeType; 9 | 10 | @override 11 | int get hashCode => 12 | hash3(FileName.hashCode, ContentType.hashCode, ContentMimeType.hashCode); 13 | 14 | @override 15 | bool operator ==(other) { 16 | if (!(other is EpubContentFile)) { 17 | return false; 18 | } 19 | return FileName == other.FileName && 20 | ContentType == other.ContentType && 21 | ContentMimeType == other.ContentMimeType; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /epubx/lib/src/entities/epub_content_type.dart: -------------------------------------------------------------------------------- 1 | enum EpubContentType { 2 | XHTML_1_1, 3 | DTBOOK, 4 | DTBOOK_NCX, 5 | OEB1_DOCUMENT, 6 | XML, 7 | CSS, 8 | OEB1_CSS, 9 | IMAGE_GIF, 10 | IMAGE_JPEG, 11 | IMAGE_PNG, 12 | IMAGE_SVG, 13 | IMAGE_BMP, 14 | FONT_TRUETYPE, 15 | FONT_OPENTYPE, 16 | OTHER 17 | } 18 | -------------------------------------------------------------------------------- /epubx/lib/src/entities/epub_schema.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | import '../schema/navigation/epub_navigation.dart'; 4 | import '../schema/opf/epub_package.dart'; 5 | 6 | class EpubSchema { 7 | EpubPackage? Package; 8 | EpubNavigation? Navigation; 9 | String? ContentDirectoryPath; 10 | 11 | @override 12 | int get hashCode => hash3( 13 | Package.hashCode, Navigation.hashCode, ContentDirectoryPath.hashCode); 14 | 15 | @override 16 | bool operator ==(other) { 17 | if (!(other is EpubSchema)) { 18 | return false; 19 | } 20 | 21 | return Package == other.Package && 22 | Navigation == other.Navigation && 23 | ContentDirectoryPath == other.ContentDirectoryPath; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /epubx/lib/src/entities/epub_text_content_file.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | import 'epub_content_file.dart'; 4 | 5 | class EpubTextContentFile extends EpubContentFile { 6 | String? Content; 7 | 8 | @override 9 | int get hashCode => hash4(Content, ContentMimeType, ContentType, FileName); 10 | 11 | @override 12 | bool operator ==(other) { 13 | if (!(other is EpubTextContentFile)) { 14 | return false; 15 | } 16 | 17 | return Content == other.Content && 18 | ContentMimeType == other.ContentMimeType && 19 | ContentType == other.ContentType && 20 | FileName == other.FileName; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /epubx/lib/src/readers/schema_reader.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:archive/archive.dart'; 4 | 5 | import '../entities/epub_schema.dart'; 6 | import '../utils/zip_path_utils.dart'; 7 | import 'navigation_reader.dart'; 8 | import 'package_reader.dart'; 9 | import 'root_file_path_reader.dart'; 10 | 11 | class SchemaReader { 12 | static Future readSchema(Archive epubArchive) async { 13 | var result = EpubSchema(); 14 | 15 | var rootFilePath = (await RootFilePathReader.getRootFilePath(epubArchive))!; 16 | var contentDirectoryPath = ZipPathUtils.getDirectoryPath(rootFilePath); 17 | result.ContentDirectoryPath = contentDirectoryPath; 18 | 19 | var package = await PackageReader.readPackage(epubArchive, rootFilePath); 20 | result.Package = package; 21 | 22 | var navigation = await NavigationReader.readNavigation( 23 | epubArchive, contentDirectoryPath, package); 24 | result.Navigation = navigation; 25 | 26 | return result; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /epubx/lib/src/ref_entities/epub_byte_content_file_ref.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'epub_book_ref.dart'; 4 | import 'epub_content_file_ref.dart'; 5 | 6 | class EpubByteContentFileRef extends EpubContentFileRef { 7 | EpubByteContentFileRef(EpubBookRef epubBookRef) : super(epubBookRef); 8 | 9 | Future> readContent() { 10 | return readContentAsBytes(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /epubx/lib/src/ref_entities/epub_text_content_file_ref.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'epub_book_ref.dart'; 4 | import 'epub_content_file_ref.dart'; 5 | 6 | class EpubTextContentFileRef extends EpubContentFileRef { 7 | EpubTextContentFileRef(EpubBookRef epubBookRef) : super(epubBookRef); 8 | 9 | Future ReadContentAsync() async { 10 | return readContentAsText(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/navigation/epub_metadata.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | class EpubNavigationContent { 4 | String? Id; 5 | String? Source; 6 | 7 | @override 8 | int get hashCode => hash2(Id.hashCode, Source.hashCode); 9 | 10 | @override 11 | bool operator ==(other) { 12 | if (!(other is EpubNavigationContent)) { 13 | return false; 14 | } 15 | return Id == other.Id && Source == other.Source; 16 | } 17 | 18 | @override 19 | String toString() { 20 | return 'Source: $Source'; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/navigation/epub_navigation_doc_author.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | class EpubNavigationDocAuthor { 5 | List? Authors; 6 | 7 | EpubNavigationDocAuthor() { 8 | Authors = []; 9 | } 10 | 11 | @override 12 | int get hashCode { 13 | var objects = [...Authors!.map((author) => author.hashCode)]; 14 | return hashObjects(objects); 15 | } 16 | 17 | @override 18 | bool operator ==(other) { 19 | var otherAs = other as EpubNavigationDocAuthor?; 20 | if (otherAs == null) return false; 21 | 22 | return collections.listsEqual(Authors, otherAs.Authors); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/navigation/epub_navigation_doc_title.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | class EpubNavigationDocTitle { 5 | List? Titles; 6 | 7 | EpubNavigationDocTitle() { 8 | Titles = []; 9 | } 10 | 11 | @override 12 | int get hashCode { 13 | var objects = [...Titles!.map((title) => title.hashCode)]; 14 | return hashObjects(objects); 15 | } 16 | 17 | @override 18 | bool operator ==(other) { 19 | var otherAs = other as EpubNavigationDocTitle?; 20 | if (otherAs == null) return false; 21 | 22 | return collections.listsEqual(Titles, otherAs.Titles); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/navigation/epub_navigation_head.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | import 'epub_navigation_head_meta.dart'; 5 | 6 | class EpubNavigationHead { 7 | List? Metadata; 8 | 9 | EpubNavigationHead() { 10 | Metadata = []; 11 | } 12 | 13 | @override 14 | int get hashCode { 15 | var objects = [...Metadata!.map((meta) => meta.hashCode)]; 16 | return hashObjects(objects); 17 | } 18 | 19 | @override 20 | bool operator ==(other) { 21 | var otherAs = other as EpubNavigationHead?; 22 | if (otherAs == null) { 23 | return false; 24 | } 25 | 26 | return collections.listsEqual(Metadata, otherAs.Metadata); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/navigation/epub_navigation_head_meta.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | class EpubNavigationHeadMeta { 4 | String? Name; 5 | String? Content; 6 | String? Scheme; 7 | 8 | @override 9 | int get hashCode => hash3(Name.hashCode, Content.hashCode, Scheme.hashCode); 10 | 11 | @override 12 | bool operator ==(other) { 13 | var otherAs = other as EpubNavigationHeadMeta?; 14 | if (otherAs == null) { 15 | return false; 16 | } 17 | 18 | return Name == otherAs.Name && 19 | Content == otherAs.Content && 20 | Scheme == otherAs.Scheme; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/navigation/epub_navigation_label.dart: -------------------------------------------------------------------------------- 1 | class EpubNavigationLabel { 2 | String? Text; 3 | 4 | @override 5 | int get hashCode => Text.hashCode; 6 | 7 | @override 8 | bool operator ==(other) { 9 | var otherAs = other as EpubNavigationLabel?; 10 | if (otherAs == null) return false; 11 | return Text == otherAs.Text; 12 | } 13 | 14 | @override 15 | String toString() { 16 | return Text!; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/navigation/epub_navigation_list.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | import 'epub_navigation_label.dart'; 5 | import 'epub_navigation_target.dart'; 6 | 7 | class EpubNavigationList { 8 | String? Id; 9 | String? Class; 10 | List? NavigationLabels; 11 | List? NavigationTargets; 12 | 13 | @override 14 | int get hashCode { 15 | var objects = [ 16 | Id.hashCode, 17 | Class.hashCode, 18 | ...NavigationLabels?.map((label) => label.hashCode) ?? [0], 19 | ...NavigationTargets?.map((target) => target.hashCode) ?? [0] 20 | ]; 21 | return hashObjects(objects); 22 | } 23 | 24 | @override 25 | bool operator ==(other) { 26 | var otherAs = other as EpubNavigationList?; 27 | if (otherAs == null) return false; 28 | 29 | if (!(Id == otherAs.Id && Class == otherAs.Class)) { 30 | return false; 31 | } 32 | 33 | if (!collections.listsEqual(NavigationLabels, otherAs.NavigationLabels)) { 34 | return false; 35 | } 36 | if (!collections.listsEqual(NavigationTargets, otherAs.NavigationTargets)) { 37 | return false; 38 | } 39 | return true; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/navigation/epub_navigation_map.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | import 'epub_navigation_point.dart'; 5 | 6 | class EpubNavigationMap { 7 | List? Points; 8 | 9 | @override 10 | int get hashCode { 11 | return hashObjects(Points?.map((point) => point.hashCode) ?? [0]); 12 | } 13 | 14 | @override 15 | bool operator ==(other) { 16 | var otherAs = other as EpubNavigationMap?; 17 | if (otherAs == null) return false; 18 | 19 | return collections.listsEqual(Points, otherAs.Points); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/navigation/epub_navigation_page_list.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | import 'epub_navigation_page_target.dart'; 5 | 6 | class EpubNavigationPageList { 7 | List? Targets; 8 | 9 | @override 10 | int get hashCode { 11 | return hashObjects(Targets?.map((target) => target.hashCode) ?? [0]); 12 | } 13 | 14 | @override 15 | bool operator ==(other) { 16 | var otherAs = other as EpubNavigationPageList?; 17 | if (otherAs == null) return false; 18 | 19 | return collections.listsEqual(Targets, otherAs.Targets); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/navigation/epub_navigation_page_target_type.dart: -------------------------------------------------------------------------------- 1 | enum EpubNavigationPageTargetType { UNDEFINED, FRONT, NORMAL, SPECIAL } 2 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/navigation/epub_navigation_target.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | import 'epub_metadata.dart'; 5 | import 'epub_navigation_label.dart'; 6 | 7 | class EpubNavigationTarget { 8 | String? Id; 9 | String? Class; 10 | String? Value; 11 | String? PlayOrder; 12 | List? NavigationLabels; 13 | EpubNavigationContent? Content; 14 | 15 | @override 16 | int get hashCode { 17 | var objects = [ 18 | Id.hashCode, 19 | Class.hashCode, 20 | Value.hashCode, 21 | PlayOrder.hashCode, 22 | Content.hashCode, 23 | ...NavigationLabels!.map((label) => label.hashCode) 24 | ]; 25 | return hashObjects(objects); 26 | } 27 | 28 | @override 29 | bool operator ==(other) { 30 | var otherAs = other as EpubNavigationTarget?; 31 | if (otherAs == null) return false; 32 | 33 | if (!(Id == otherAs.Id && 34 | Class == otherAs.Class && 35 | Value == otherAs.Value && 36 | PlayOrder == otherAs.PlayOrder && 37 | Content == otherAs.Content)) { 38 | return false; 39 | } 40 | 41 | return collections.listsEqual(NavigationLabels, otherAs.NavigationLabels); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_guide.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | import 'epub_guide_reference.dart'; 5 | 6 | class EpubGuide { 7 | List? Items; 8 | 9 | EpubGuide() { 10 | Items = []; 11 | } 12 | 13 | @override 14 | int get hashCode { 15 | var objects = []; 16 | objects.addAll(Items!.map((item) => item.hashCode)); 17 | return hashObjects(objects); 18 | } 19 | 20 | @override 21 | bool operator ==(other) { 22 | var otherAs = other as EpubGuide?; 23 | if (otherAs == null) { 24 | return false; 25 | } 26 | 27 | return collections.listsEqual(Items, otherAs.Items); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_guide_reference.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | class EpubGuideReference { 4 | String? Type; 5 | String? Title; 6 | String? Href; 7 | 8 | @override 9 | int get hashCode => hash3(Type.hashCode, Title.hashCode, Href.hashCode); 10 | 11 | @override 12 | bool operator ==(other) { 13 | var otherAs = other as EpubGuideReference?; 14 | if (otherAs == null) { 15 | return false; 16 | } 17 | 18 | return Type == otherAs.Type && 19 | Title == otherAs.Title && 20 | Href == otherAs.Href; 21 | } 22 | 23 | @override 24 | String toString() { 25 | return 'Type: $Type, Href: $Href'; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_manifest.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | import 'epub_manifest_item.dart'; 5 | 6 | class EpubManifest { 7 | List? Items; 8 | 9 | EpubManifest() { 10 | Items = []; 11 | } 12 | 13 | @override 14 | int get hashCode { 15 | return hashObjects(Items!.map((item) => item.hashCode)); 16 | } 17 | 18 | @override 19 | bool operator ==(other) { 20 | var otherAs = other as EpubManifest?; 21 | if (otherAs == null) { 22 | return false; 23 | } 24 | return collections.listsEqual(Items, otherAs.Items); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_metadata_contributor.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | class EpubMetadataContributor { 4 | String? Contributor; 5 | String? FileAs; 6 | String? Role; 7 | 8 | @override 9 | int get hashCode => 10 | hash3(Contributor.hashCode, FileAs.hashCode, Role.hashCode); 11 | 12 | @override 13 | bool operator ==(other) { 14 | var otherAs = other as EpubMetadataContributor?; 15 | if (otherAs == null) return false; 16 | 17 | return Contributor == otherAs.Contributor && 18 | FileAs == otherAs.FileAs && 19 | Role == otherAs.Role; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_metadata_creator.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | class EpubMetadataCreator { 4 | String? Creator; 5 | String? FileAs; 6 | String? Role; 7 | 8 | @override 9 | int get hashCode => hash3(Creator.hashCode, FileAs.hashCode, Role.hashCode); 10 | 11 | @override 12 | bool operator ==(other) { 13 | var otherAs = other as EpubMetadataCreator?; 14 | if (otherAs == null) return false; 15 | return Creator == otherAs.Creator && 16 | FileAs == otherAs.FileAs && 17 | Role == otherAs.Role; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_metadata_date.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | class EpubMetadataDate { 4 | String? Date; 5 | String? Event; 6 | 7 | @override 8 | int get hashCode => hash2(Date.hashCode, Event.hashCode); 9 | 10 | @override 11 | bool operator ==(other) { 12 | var otherAs = other as EpubMetadataDate?; 13 | if (otherAs == null) return false; 14 | return Date == otherAs.Date && Event == otherAs.Event; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_metadata_identifier.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | class EpubMetadataIdentifier { 4 | String? Id; 5 | String? Scheme; 6 | String? Identifier; 7 | 8 | @override 9 | int get hashCode => hash3(Id.hashCode, Scheme.hashCode, Identifier.hashCode); 10 | 11 | @override 12 | bool operator ==(other) { 13 | var otherAs = other as EpubMetadataIdentifier?; 14 | if (otherAs == null) return false; 15 | return Id == otherAs.Id && 16 | Scheme == otherAs.Scheme && 17 | Identifier == otherAs.Identifier; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_metadata_meta.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | class EpubMetadataMeta { 4 | String? Name; 5 | String? Content; 6 | String? Id; 7 | String? Refines; 8 | String? Property; 9 | String? Scheme; 10 | Map? Attributes; 11 | 12 | @override 13 | int get hashCode => hashObjects([ 14 | Name.hashCode, 15 | Content.hashCode, 16 | Id.hashCode, 17 | Refines.hashCode, 18 | Property.hashCode, 19 | Scheme.hashCode 20 | ]); 21 | 22 | @override 23 | bool operator ==(other) { 24 | var otherAs = other as EpubMetadataMeta?; 25 | if (otherAs == null) return false; 26 | return Name == otherAs.Name && 27 | Content == otherAs.Content && 28 | Id == otherAs.Id && 29 | Refines == otherAs.Refines && 30 | Property == otherAs.Property && 31 | Scheme == otherAs.Scheme; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_package.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | import 'epub_guide.dart'; 4 | import 'epub_manifest.dart'; 5 | import 'epub_metadata.dart'; 6 | import 'epub_spine.dart'; 7 | import 'epub_version.dart'; 8 | 9 | class EpubPackage { 10 | EpubVersion? Version; 11 | EpubMetadata? Metadata; 12 | EpubManifest? Manifest; 13 | EpubSpine? Spine; 14 | EpubGuide? Guide; 15 | 16 | @override 17 | int get hashCode => hashObjects([ 18 | Version.hashCode, 19 | Metadata.hashCode, 20 | Manifest.hashCode, 21 | Spine.hashCode, 22 | Guide.hashCode 23 | ]); 24 | 25 | @override 26 | bool operator ==(other) { 27 | var otherAs = other as EpubPackage?; 28 | if (otherAs == null) { 29 | return false; 30 | } 31 | 32 | return Version == otherAs.Version && 33 | Metadata == otherAs.Metadata && 34 | Manifest == otherAs.Manifest && 35 | Spine == otherAs.Spine && 36 | Guide == otherAs.Guide; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_spine.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/collection.dart' as collections; 2 | import 'package:quiver/core.dart'; 3 | 4 | import 'epub_spine_item_ref.dart'; 5 | 6 | class EpubSpine { 7 | String? TableOfContents; 8 | List? Items; 9 | bool? ltr; 10 | 11 | @override 12 | int get hashCode { 13 | var objs = [ 14 | TableOfContents.hashCode, 15 | ltr.hashCode, 16 | ...Items!.map((item) => item.hashCode) 17 | ]; 18 | return hashObjects(objs); 19 | } 20 | 21 | @override 22 | bool operator ==(other) { 23 | var otherAs = other as EpubSpine?; 24 | if (otherAs == null) return false; 25 | 26 | if (!collections.listsEqual(Items, otherAs.Items)) { 27 | return false; 28 | } 29 | return ((TableOfContents == otherAs.TableOfContents) && 30 | (ltr == otherAs.ltr)); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_spine_item_ref.dart: -------------------------------------------------------------------------------- 1 | import 'package:quiver/core.dart'; 2 | 3 | class EpubSpineItemRef { 4 | String? IdRef; 5 | bool? IsLinear; 6 | 7 | @override 8 | int get hashCode => hash2(IdRef.hashCode, IsLinear.hashCode); 9 | 10 | @override 11 | bool operator ==(other) { 12 | var otherAs = other as EpubSpineItemRef?; 13 | if (otherAs == null) { 14 | return false; 15 | } 16 | 17 | return IdRef == otherAs.IdRef && IsLinear == otherAs.IsLinear; 18 | } 19 | 20 | @override 21 | String toString() { 22 | return 'IdRef: $IdRef'; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /epubx/lib/src/schema/opf/epub_version.dart: -------------------------------------------------------------------------------- 1 | enum EpubVersion { Epub2, Epub3 } 2 | -------------------------------------------------------------------------------- /epubx/lib/src/utils/enum_from_string.dart: -------------------------------------------------------------------------------- 1 | class EnumFromString { 2 | List enumValues; 3 | 4 | EnumFromString(this.enumValues); 5 | 6 | T? get(String value) { 7 | value = '$T.$value'; 8 | try { 9 | var x = enumValues 10 | .firstWhere((f) => f.toString().toUpperCase() == value.toUpperCase()); 11 | return x; 12 | } catch (e) { 13 | return null; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /epubx/lib/src/utils/zip_path_utils.dart: -------------------------------------------------------------------------------- 1 | class ZipPathUtils { 2 | static String getDirectoryPath(String filePath) { 3 | var lastSlashIndex = filePath.lastIndexOf('/'); 4 | if (lastSlashIndex == -1) { 5 | return ''; 6 | } else { 7 | return filePath.substring(0, lastSlashIndex); 8 | } 9 | } 10 | 11 | static String? combine(String? directory, String? fileName) { 12 | var path; 13 | if (directory == null || directory == '') { 14 | path = fileName; 15 | } else { 16 | path = directory + '/' + fileName!; 17 | } 18 | return Uri.parse(path).normalizePath().path; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /epubx/lib/src/writers/epub_guide_writer.dart: -------------------------------------------------------------------------------- 1 | import 'package:epubx/src/schema/opf/epub_guide.dart'; 2 | import 'package:xml/src/xml/builder.dart' show XmlBuilder; 3 | 4 | class EpubGuideWriter { 5 | static void writeGuide(XmlBuilder builder, EpubGuide? guide) { 6 | builder.element('guide', nest: () { 7 | guide!.Items!.forEach((guideItem) => builder.element('reference', 8 | attributes: { 9 | 'type': guideItem.Type!, 10 | 'title': guideItem.Title!, 11 | 'href': guideItem.Href! 12 | })); 13 | }); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /epubx/lib/src/writers/epub_manifest_writer.dart: -------------------------------------------------------------------------------- 1 | import 'package:epubx/src/schema/opf/epub_manifest.dart'; 2 | import 'package:xml/src/xml/builder.dart' show XmlBuilder; 3 | 4 | class EpubManifestWriter { 5 | static void writeManifest(XmlBuilder builder, EpubManifest? manifest) { 6 | builder.element('manifest', nest: () { 7 | manifest!.Items!.forEach((item) { 8 | builder.element('item', nest: () { 9 | builder 10 | ..attribute('id', item.Id!) 11 | ..attribute('href', item.Href!) 12 | ..attribute('media-type', item.MediaType!); 13 | }); 14 | }); 15 | }); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /epubx/lib/src/writers/epub_spine_writer.dart: -------------------------------------------------------------------------------- 1 | import 'package:epubx/src/schema/opf/epub_spine.dart'; 2 | import 'package:xml/src/xml/builder.dart' show XmlBuilder; 3 | 4 | class EpubSpineWriter { 5 | static void writeSpine(XmlBuilder builder, EpubSpine spine) { 6 | builder.element('spine', attributes: {'toc': spine.TableOfContents!}, 7 | nest: () { 8 | spine.Items!.forEach((spineitem) => builder.element('itemref', 9 | attributes: { 10 | 'idref': spineitem.IdRef!, 11 | 'linear': spineitem.IsLinear! ? 'yes' : 'no' 12 | })); 13 | }); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /epubx/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: epubx 2 | description: Epub Parser for Dart. Epub package fork. Suitable for use on the Server, the Web, or in Flutter 3 | homepage: https://github.com/rbcprolabs/epubx.dart 4 | issue_tracker: https://github.com/rbcprolabs/epubx.dart 5 | version: 4.0.3 6 | 7 | environment: 8 | sdk: ">=3.0.0 <4.0.0" 9 | 10 | dependencies: 11 | archive: ^4.0.5 12 | quiver: ^3.0.1+1 13 | path: ^1.9.1 14 | xml: ^6.0.1 15 | image: ^4.5.3 16 | collection: ^1.15.0 17 | 18 | dev_dependencies: 19 | test: ^1.16.7 20 | lints: ^5.1.1 21 | -------------------------------------------------------------------------------- /epubx/test/enum_string_test.dart: -------------------------------------------------------------------------------- 1 | library epubtest; 2 | 3 | import 'package:test/test.dart'; 4 | 5 | import 'package:epubx/epub.dart'; 6 | 7 | main() { 8 | test("Enum One", () { 9 | expect(new EnumFromString(Simple.values).get("ONE"), 10 | equals(Simple.ONE)); 11 | }); 12 | test("Enum Two", () { 13 | expect(new EnumFromString(Simple.values).get("TWO"), 14 | equals(Simple.TWO)); 15 | }); 16 | test("Enum One", () { 17 | expect(new EnumFromString(Simple.values).get("THREE"), 18 | equals(Simple.THREE)); 19 | }); 20 | test("Enum One Lower Case", () { 21 | expect(new EnumFromString(Simple.values).get("one"), 22 | equals(Simple.ONE)); 23 | }); 24 | } 25 | 26 | enum Simple { ONE, TWO, THREE } 27 | -------------------------------------------------------------------------------- /epubx/test/epub_writer_tests.dart: -------------------------------------------------------------------------------- 1 | library epubreadertest; 2 | 3 | import 'dart:io' as io; 4 | 5 | import 'package:epubx/epub.dart'; 6 | import 'package:path/path.dart' as path; 7 | import 'package:test/test.dart'; 8 | 9 | main() async { 10 | String fileName = "alicesAdventuresUnderGround.epub"; 11 | String fullPath = 12 | path.join(io.Directory.current.path, "test", "res", fileName); 13 | var targetFile = new io.File(fullPath); 14 | if (!(await targetFile.exists())) { 15 | throw new Exception("Specified epub file not found: ${fullPath}"); 16 | } 17 | 18 | List bytes = await targetFile.readAsBytes(); 19 | 20 | test("Book Round Trip", () async { 21 | EpubBook book = await EpubReader.readBook(bytes); 22 | 23 | var written = await EpubWriter.writeBook(book); 24 | var bookRoundTrip = await EpubReader.readBook(written); 25 | 26 | expect(bookRoundTrip, equals(book)); 27 | }); 28 | } 29 | -------------------------------------------------------------------------------- /epubx/test/res/alicesAdventuresUnderGround.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/alicesAdventuresUnderGround.epub -------------------------------------------------------------------------------- /epubx/test/res/hittelOnGoldMines.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/hittelOnGoldMines.epub -------------------------------------------------------------------------------- /epubx/test/res/std/WCAG.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/WCAG.epub -------------------------------------------------------------------------------- /epubx/test/res/std/accessible_epub_3.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/accessible_epub_3.epub -------------------------------------------------------------------------------- /epubx/test/res/std/childrens-literature.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/childrens-literature.epub -------------------------------------------------------------------------------- /epubx/test/res/std/childrens-media-query.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/childrens-media-query.epub -------------------------------------------------------------------------------- /epubx/test/res/std/cole-voyage-of-life-tol.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/cole-voyage-of-life-tol.epub -------------------------------------------------------------------------------- /epubx/test/res/std/cole-voyage-of-life.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/cole-voyage-of-life.epub -------------------------------------------------------------------------------- /epubx/test/res/std/epub30-spec.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/epub30-spec.epub -------------------------------------------------------------------------------- /epubx/test/res/std/figure-gallery-bindings.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/figure-gallery-bindings.epub -------------------------------------------------------------------------------- /epubx/test/res/std/georgia-cfi.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/georgia-cfi.epub -------------------------------------------------------------------------------- /epubx/test/res/std/georgia-pls-ssml.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/georgia-pls-ssml.epub -------------------------------------------------------------------------------- /epubx/test/res/std/hefty-water.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/hefty-water.epub -------------------------------------------------------------------------------- /epubx/test/res/std/igp-year5-school-maths.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/igp-year5-school-maths.epub -------------------------------------------------------------------------------- /epubx/test/res/std/indexing-for-eds-and-auths-3f.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/indexing-for-eds-and-auths-3f.epub -------------------------------------------------------------------------------- /epubx/test/res/std/indexing-for-eds-and-auths-3md.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/indexing-for-eds-and-auths-3md.epub -------------------------------------------------------------------------------- /epubx/test/res/std/internallinks.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/internallinks.epub -------------------------------------------------------------------------------- /epubx/test/res/std/israelsailing.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/israelsailing.epub -------------------------------------------------------------------------------- /epubx/test/res/std/linear-algebra.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/linear-algebra.epub -------------------------------------------------------------------------------- /epubx/test/res/std/moby-dick.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/moby-dick.epub -------------------------------------------------------------------------------- /epubx/test/res/std/mymedia_lite.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/mymedia_lite.epub -------------------------------------------------------------------------------- /epubx/test/res/std/quiz-bindings.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/quiz-bindings.epub -------------------------------------------------------------------------------- /epubx/test/res/std/svg-in-spine.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/svg-in-spine.epub -------------------------------------------------------------------------------- /epubx/test/res/std/trees.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/trees.epub -------------------------------------------------------------------------------- /epubx/test/res/std/wasteland-otf-obf.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/wasteland-otf-obf.epub -------------------------------------------------------------------------------- /epubx/test/res/std/wasteland-otf.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/wasteland-otf.epub -------------------------------------------------------------------------------- /epubx/test/res/std/wasteland-woff-obf.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/wasteland-woff-obf.epub -------------------------------------------------------------------------------- /epubx/test/res/std/wasteland-woff.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/wasteland-woff.epub -------------------------------------------------------------------------------- /epubx/test/res/std/wasteland.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/epubx/test/res/std/wasteland.epub -------------------------------------------------------------------------------- /epubx/tool/publish.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | mkdir -p .pub-cache 3 | 4 | cat < ~/.pub-cache/credentials.json 5 | { 6 | "accessToken":"$accessToken", 7 | "refreshToken":"$refreshToken", 8 | "tokenEndpoint":"$tokenEndpoint", 9 | "scopes":["$scopes"], 10 | "expiration":$expiration 11 | } 12 | EOF 13 | 14 | pub publish -f -------------------------------------------------------------------------------- /epubx/tool/travis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Fast fail the script on failures. 4 | set -e 5 | 6 | # Analyze the code. 7 | dartanalyzer --strong --fatal-warnings . 8 | 9 | # Test the entire test directory 10 | pub run test test/ -------------------------------------------------------------------------------- /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/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | 4 | import app_links 5 | 6 | @main 7 | @objc class AppDelegate: FlutterAppDelegate { 8 | override func application( 9 | _ application: UIApplication, 10 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 11 | ) -> Bool { 12 | GeneratedPluginRegistrant.register(with: self) 13 | if let url = AppLinks.shared.getLink(launchOptions: launchOptions) { 14 | AppLinks.shared.handleLink(url: url) 15 | return true 16 | } 17 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/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/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aayush2622/Dartotsu/52823a4c55b7883ad768026ee9cb72152c810a06/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@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/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 | -------------------------------------------------------------------------------- /l10n.yaml: -------------------------------------------------------------------------------- 1 | 2 | arb-dir: assets/translations 3 | template-arb-file: app_en.arb 4 | output-dir: lib/l10n 5 | output-localization-file: app_localizations.dart 6 | synthetic-package: false 7 | preferred-supported-locales: 8 | - en 9 | -------------------------------------------------------------------------------- /lib/Adaptor/Episode/Widget/HandleProgress.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:provider/provider.dart'; 3 | 4 | import '../../../Preferences/PrefManager.dart'; 5 | import '../../../Services/ServiceSwitcher.dart'; 6 | 7 | Widget handleProgress({ 8 | required BuildContext context, 9 | required int mediaId, 10 | required dynamic ep, 11 | required double width, 12 | }) { 13 | var sourceName = 14 | Provider.of(context).currentService.getName; 15 | var currentProgress = loadCustomData("$mediaId-$ep-$sourceName-current"); 16 | var maxProgress = loadCustomData("$mediaId-$ep-$sourceName-max"); 17 | if (currentProgress == null || maxProgress == null || maxProgress == 0) { 18 | return const SizedBox.shrink(); 19 | } 20 | 21 | double progressValue = (currentProgress / maxProgress).clamp(0.0, 1.0); 22 | 23 | return SizedBox( 24 | width: width, 25 | height: 3.4, 26 | child: Stack( 27 | children: [ 28 | Container( 29 | color: Colors.grey, 30 | ), 31 | FractionallySizedBox( 32 | widthFactor: progressValue, 33 | child: Container( 34 | color: Theme.of(context).primaryColor, 35 | ), 36 | ), 37 | ], 38 | ), 39 | ); 40 | } 41 | -------------------------------------------------------------------------------- /lib/Adaptor/Media/Widgets/MediaReleaseingIndicator.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | Widget ReleasingIndicator() { 4 | return Positioned( 5 | bottom: -3, 6 | left: -2, 7 | child: Card( 8 | shape: RoundedRectangleBorder( 9 | borderRadius: BorderRadius.circular(8.0), 10 | ), 11 | child: Container( 12 | width: 16, 13 | height: 16, 14 | decoration: BoxDecoration( 15 | color: const Color(0xFF6BF170), 16 | border: Border.all( 17 | color: const Color(0xFF208358), 18 | width: 2.0, 19 | ), 20 | borderRadius: BorderRadius.circular(8.0), 21 | ), 22 | ), 23 | ), 24 | ); 25 | } 26 | -------------------------------------------------------------------------------- /lib/Adaptor/Settings/SettingsAdaptor.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | 3 | import '../../DataClass/Setting.dart'; 4 | import 'SettingsItem.dart'; 5 | 6 | class SettingsAdaptor extends StatelessWidget { 7 | final List settings; 8 | 9 | const SettingsAdaptor({super.key, required this.settings}); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | // adaptor for settings so that it can be reused, see Settings.dart to see what can be passed 14 | return Column( 15 | children: settings.map((setting) { 16 | switch (setting.type) { 17 | case SettingType.normal: 18 | return SettingItem(setting: setting); 19 | case SettingType.switchType: 20 | return SettingSwitchItem(setting: setting); 21 | case SettingType.slider: 22 | return SettingSliderItem(setting: setting); 23 | case SettingType.inputBox: 24 | return SettingInputBoxItem(setting: setting); 25 | } 26 | }).toList(), 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/Api/Anilist/AnilistMutations.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartotsu/DataClass/Media.dart'; 2 | import 'package:dartotsu/Functions/Function.dart'; 3 | import 'package:dartotsu/Functions/string_extensions.dart'; 4 | import 'package:dartotsu/Services/Api/Mutations.dart'; 5 | import 'package:flutter/cupertino.dart'; 6 | 7 | import 'Anilist.dart'; 8 | import 'Data/data.dart'; 9 | 10 | part 'AnilistMutations/DeleteFromList.dart'; 11 | part 'AnilistMutations/SetProgress.dart'; 12 | part 'AnilistMutations/SetUserList.dart'; 13 | 14 | class AnilistMutations extends Mutations { 15 | final Future Function( 16 | String query, { 17 | String variables, 18 | bool force, 19 | bool useToken, 20 | bool show, 21 | }) executeQuery; 22 | 23 | AnilistMutations(this.executeQuery); 24 | 25 | @override 26 | Future editList(Media media, {List? customList}) => 27 | _editList(media, customList: customList); 28 | 29 | @override 30 | Future deleteFromList(Media media) => _deleteFromList(media); 31 | 32 | @override 33 | Future setProgress(Media media, String episode) => _setProgress(media, episode); 34 | } 35 | -------------------------------------------------------------------------------- /lib/Api/Anilist/AnilistMutations/DeleteFromList.dart: -------------------------------------------------------------------------------- 1 | part of '../AnilistMutations.dart'; 2 | 3 | extension on AnilistMutations { 4 | Future _deleteFromList(Media media) async { 5 | 6 | if (media.userListId == null) { 7 | var id = await getMediaListId(media); 8 | if (id == null) { 9 | debugPrint('MediaListId not found for media: ${media.name}'); 10 | return; 11 | } 12 | media.userListId = id; 13 | } 14 | var query = ''' 15 | mutation(\$id: Int) { 16 | DeleteMediaListEntry(id: \$id) { 17 | deleted 18 | } 19 | } 20 | '''.trim(); 21 | var variables = '{''"id": ${media.userListId}''}'; 22 | await executeQuery>(query, variables: variables); 23 | } 24 | Future getMediaListId(Media media) async { 25 | var query = '''{Media(id:${media.id}){id,mediaListEntry{id}}}'''; 26 | var res = await executeQuery(query, useToken: true); 27 | return res?.data?.media?.mediaListEntry?.id; 28 | } 29 | } 30 | 31 | -------------------------------------------------------------------------------- /lib/Api/Anilist/AnilistMutations/SetProgress.dart: -------------------------------------------------------------------------------- 1 | part of '../AnilistMutations.dart'; 2 | 3 | 4 | extension on AnilistMutations { 5 | Future _setProgress(Media media, String episode) async { 6 | if (Anilist.userid == null) return; 7 | 8 | media.userProgress = episode.toDouble().toInt(); 9 | await _editList(media); 10 | Refresh.activity[RefreshId.Anilist.homePage]?.value = true; 11 | snackString("Setting progress to ${media.userProgress}"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/Api/Anilist/AnilistQueries/GetMediaData.dart: -------------------------------------------------------------------------------- 1 | part of '../AnilistQueries.dart'; 2 | 3 | extension on AnilistQueries { 4 | Future _getMedia(int id, {bool mal = true}) async => Media.mediaData( 5 | ((await executeQuery(_queryMediaData(id, mal: mal), 6 | force: true)) 7 | ?.data 8 | ?.media)!); 9 | } 10 | 11 | String _queryMediaData(int id, {bool mal = false}) => '''{ 12 | Media(${mal ? 'idMal' : 'id'}: $id) { 13 | id 14 | idMal 15 | status 16 | chapters 17 | episodes 18 | nextAiringEpisode { 19 | episode 20 | } 21 | type 22 | meanScore 23 | isAdult 24 | isFavourite 25 | format 26 | bannerImage 27 | coverImage { 28 | large 29 | } 30 | title { 31 | english 32 | romaji 33 | userPreferred 34 | } 35 | mediaListEntry { 36 | progress 37 | private 38 | score(format: POINT_100) 39 | status 40 | } 41 | } 42 | }'''; 43 | -------------------------------------------------------------------------------- /lib/Api/Anilist/Data/Generated/fuzzyData.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of '../fuzzyData.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | FuzzyDate _$FuzzyDateFromJson(Map json) => FuzzyDate( 10 | year: (json['year'] as num?)?.toInt(), 11 | month: (json['month'] as num?)?.toInt(), 12 | day: (json['day'] as num?)?.toInt(), 13 | ); 14 | 15 | Map _$FuzzyDateToJson(FuzzyDate instance) => { 16 | 'year': instance.year, 17 | 'month': instance.month, 18 | 'day': instance.day, 19 | }; 20 | -------------------------------------------------------------------------------- /lib/Api/Anilist/Data/others.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartotsu/Api/Anilist/Data/user.dart'; 2 | import 'package:json_annotation/json_annotation.dart'; 3 | 4 | part 'Generated/others.g.dart'; 5 | 6 | @JsonSerializable() 7 | class Review { 8 | final int id; 9 | final int mediaId; 10 | final String mediaType; 11 | final String summary; 12 | final String body; 13 | final int rating; 14 | final int ratingAmount; 15 | final String userRating; 16 | final int score; 17 | final bool private; 18 | final String siteUrl; 19 | final int createdAt; 20 | final int? updatedAt; 21 | final User? user; 22 | 23 | Review({ 24 | required this.id, 25 | required this.mediaId, 26 | required this.mediaType, 27 | required this.summary, 28 | required this.body, 29 | required this.rating, 30 | required this.ratingAmount, 31 | required this.userRating, 32 | required this.score, 33 | required this.private, 34 | required this.siteUrl, 35 | required this.createdAt, 36 | this.updatedAt, 37 | this.user, 38 | }); 39 | 40 | factory Review.fromJson(Map json) => _$ReviewFromJson(json); 41 | 42 | Map toJson() => _$ReviewToJson(this); 43 | } 44 | -------------------------------------------------------------------------------- /lib/Api/Anilist/Data/recommendations.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartotsu/Api/Anilist/Data/user.dart'; 2 | import 'package:json_annotation/json_annotation.dart'; 3 | 4 | import 'media.dart'; 5 | 6 | part 'Generated/recommendations.g.dart'; 7 | 8 | @JsonSerializable() 9 | class Recommendation { 10 | final int? id; 11 | final int? rating; 12 | final Media? media; 13 | final Media? mediaRecommendation; 14 | final User? user; 15 | 16 | Recommendation({ 17 | this.id, 18 | this.rating, 19 | this.media, 20 | this.mediaRecommendation, 21 | this.user, 22 | }); 23 | 24 | factory Recommendation.fromJson(Map json) => 25 | _$RecommendationFromJson(json); 26 | 27 | Map toJson() => _$RecommendationToJson(this); 28 | } 29 | 30 | // RecommendationConnection class 31 | @JsonSerializable() 32 | class RecommendationConnection { 33 | final List? nodes; 34 | 35 | RecommendationConnection({ 36 | this.nodes, 37 | }); 38 | 39 | factory RecommendationConnection.fromJson(Map json) => 40 | _$RecommendationConnectionFromJson(json); 41 | 42 | Map toJson() => _$RecommendationConnectionToJson(this); 43 | } 44 | -------------------------------------------------------------------------------- /lib/Api/Discord/RpcExternalAsset.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:http/http.dart' as http; 5 | 6 | import 'Discord.dart'; 7 | 8 | extension DiscordUrlExtension on String { 9 | Future getDiscordUrl() async { 10 | var token = Discord.token.value; 11 | if (token.isEmpty) return null; 12 | 13 | const String api = 14 | "https://discord.com/api/v9/applications/$applicationId/external-assets"; 15 | if (startsWith("mp:")) return this; 16 | final response = await http.post( 17 | Uri.parse(api), 18 | headers: { 19 | 'Authorization': token, 20 | 'Content-Type': 'application/json', 21 | }, 22 | body: jsonEncode({ 23 | "urls": [this] 24 | }), 25 | ); 26 | 27 | if (response.statusCode == 200) { 28 | final responseBody = jsonDecode(response.body); 29 | return "mp: ${responseBody[0]['external_asset_path']}"; 30 | } else { 31 | debugPrint('Error: ${response.statusCode}'); 32 | return null; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/Api/Extensions/ExtensionsData.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartotsu/Api/Extensions/ExtensionsQueries.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:get/get.dart'; 4 | 5 | import '../../Services/BaseServiceData.dart'; 6 | 7 | var ExtensionsC = Get.put(ExtensionsController()); 8 | 9 | class ExtensionsController extends BaseServiceData { 10 | @override 11 | get token => 'OnePiece is peak'.obs; 12 | 13 | ExtensionsController() { 14 | query = ExtensionsQueries(); 15 | } 16 | 17 | @override 18 | getSavedToken() => true; 19 | 20 | @override 21 | login(BuildContext context) {} 22 | 23 | @override 24 | removeSavedToken() {} 25 | 26 | @override 27 | saveToken(String token) async {} 28 | } 29 | -------------------------------------------------------------------------------- /lib/Api/Extensions/ExtensionsQueries/GetUserData.dart: -------------------------------------------------------------------------------- 1 | part of '../ExtensionsQueries.dart'; 2 | 3 | extension on ExtensionsQueries { 4 | Future _getUserData() async { 5 | if (ExtensionsC.isInitialized.value == true) { 6 | return true; 7 | } 8 | if (ExtensionsC.run.value == false) { 9 | while (ExtensionsC.isInitialized.value == false) { 10 | await Future.delayed(const Duration(milliseconds: 100)); 11 | } 12 | return true; 13 | } 14 | ExtensionsC.run.value = false; 15 | ExtensionsC.userid = 26; 16 | ExtensionsC.username.value = 'Dartotsu'; 17 | ExtensionsC.bg = 18 | 'https://camo.githubusercontent.com/6c1f656dd81f1faf1d80ceb0885b68c2ec5b38d0d5b876bf812b37c76d348733/68747470733a2f2f66696c65732e636174626f782e6d6f652f746e6d3173722e706e67'; 19 | ExtensionsC.avatar.value = 20 | 'https://cdn.discordapp.com/emojis/1305525420938100787.gif?size=48&animated=true&name=dartotsu'; 21 | ExtensionsC.episodesWatched = 0; 22 | ExtensionsC.chapterRead = 0; 23 | ExtensionsC.adult = true; 24 | ExtensionsC.unreadNotificationCount = 0; 25 | ExtensionsC.isInitialized.value = true; 26 | return true; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/Api/Kitsu/KitsuData.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | 3 | import '../../Services/BaseServiceData.dart'; 4 | 5 | class KitsuController extends BaseServiceData { 6 | @override 7 | bool getSavedToken() { 8 | // TODO: implement getSavedToken 9 | throw UnimplementedError(); 10 | } 11 | 12 | @override 13 | void login(BuildContext context) { 14 | // TODO: implement login 15 | } 16 | 17 | @override 18 | void removeSavedToken() { 19 | // TODO: implement removeSavedToken 20 | } 21 | 22 | @override 23 | Future saveToken(String token) { 24 | // TODO: implement saveToken 25 | throw UnimplementedError(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/Api/Kitsu/KitsuService.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartotsu/Api/Kitsu/KitsuData.dart'; 2 | import 'package:dartotsu/Services/Screens/BaseAnimeScreen.dart'; 3 | import 'package:dartotsu/Services/Screens/BaseHomeScreen.dart'; 4 | import 'package:dartotsu/Services/Screens/BaseMangaScreen.dart'; 5 | 6 | import '../../Services/BaseServiceData.dart'; 7 | import '../../Services/MediaService.dart'; 8 | import '../../Theme/LanguageSwitcher.dart'; 9 | 10 | class KitsuService extends MediaService { 11 | @override 12 | String get getName => getString.kitsu; 13 | 14 | @override 15 | String get iconPath => "assets/svg/kitsu.svg"; 16 | 17 | @override 18 | BaseServiceData get data => KitsuController(); 19 | 20 | @override 21 | BaseHomeScreen? get homeScreen => null; 22 | 23 | @override 24 | BaseAnimeScreen? get animeScreen => null; 25 | 26 | @override 27 | BaseMangaScreen? get mangaScreen => null; 28 | } 29 | -------------------------------------------------------------------------------- /lib/Api/MyAnimeList/Data/user.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'Generated/user.g.dart'; 4 | 5 | @JsonSerializable() 6 | class User { 7 | @JsonKey(name: "id") 8 | int? id; 9 | @JsonKey(name: "name") 10 | String? name; 11 | @JsonKey(name: "birthday") 12 | DateTime? birthday; 13 | @JsonKey(name: "location") 14 | String? location; 15 | @JsonKey(name: "joined_at") 16 | DateTime? joinedAt; 17 | @JsonKey(name: "picture") 18 | String? picture; 19 | @JsonKey(name: "anime_statistics") 20 | Map? animeStatistics; 21 | 22 | User({ 23 | this.id, 24 | this.name, 25 | this.birthday, 26 | this.location, 27 | this.joinedAt, 28 | this.picture, 29 | this.animeStatistics, 30 | }); 31 | 32 | factory User.fromJson(Map json) => _$UserFromJson(json); 33 | 34 | Map toJson() => _$UserToJson(this); 35 | } 36 | -------------------------------------------------------------------------------- /lib/Api/MyAnimeList/MalQueries/GetUserData.dart: -------------------------------------------------------------------------------- 1 | part of '../MalQueries.dart'; 2 | 3 | extension on MalQueries { 4 | Future _getUserData() async { 5 | if (Mal.isInitialized.value == true) { 6 | return true; 7 | } 8 | if (Mal.run.value == false) { 9 | while (Mal.isInitialized.value == false) { 10 | await Future.delayed(const Duration(milliseconds: 100)); 11 | } 12 | return true; 13 | } 14 | Mal.run.value = false; 15 | var user = (await executeQuery( 16 | '${MalStrings.endPoint}users/@me?fields=anime_statistics,manga_statistics')); 17 | if (user == null) return false; 18 | 19 | var res = (await executeQuery( 20 | 'https://api.jikan.moe/v4/users/${user.name}/full')) 21 | ?.data; 22 | Mal.userid = user.id; 23 | Mal.username.value = user.name ?? ''; 24 | Mal.bg = user.picture ?? ''; 25 | Mal.avatar.value = user.picture ?? ''; 26 | Mal.episodesWatched = res?.statistics?.anime?.episodesWatched; 27 | Mal.chapterRead = res?.statistics?.manga?.chaptersRead; 28 | Mal.adult = false; 29 | Mal.unreadNotificationCount = 0; 30 | Mal.isInitialized.value = true; 31 | return true; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/Api/Simkl/SimklQueries/GetUserData.dart: -------------------------------------------------------------------------------- 1 | part of '../SimklQueries.dart'; 2 | 3 | extension on SimklQueries { 4 | Future _getUserData() async { 5 | if (Simkl.isInitialized.value == true) { 6 | return true; 7 | } 8 | if (Simkl.run.value == false) { 9 | while (Simkl.isInitialized.value == false) { 10 | await Future.delayed(const Duration(milliseconds: 100)); 11 | } 12 | return true; 13 | } 14 | Simkl.run.value = false; 15 | var user = 16 | (await executeQuery('https://api.simkl.com/users/settings')); 17 | if (user == null) return false; 18 | 19 | var res = (await executeQuery( 20 | 'https://api.simkl.com/users/${user.account?.id}/stats')); 21 | Simkl.userid = user.account?.id; 22 | Simkl.username.value = user.user?.name ?? ''; 23 | Simkl.bg = user.user?.avatar ?? ''; 24 | Simkl.avatar.value = user.user?.avatar ?? ''; 25 | Simkl.episodesWatched = res?.anime?.completed?.watchedEpisodesCount; 26 | Simkl.chapterRead = res?.tv?.completed?.watchedEpisodesCount; 27 | Simkl.adult = false; 28 | Simkl.unreadNotificationCount = 0; 29 | Simkl.isInitialized.value = true; 30 | return true; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/Api/Sources/Eval/dart/bridge/m_pages.dart: -------------------------------------------------------------------------------- 1 | import 'package:d4rt/d4rt.dart'; 2 | 3 | import '../model/m_manga.dart'; 4 | import '../model/m_pages.dart'; 5 | 6 | class MPagesBridge { 7 | final mPageBridgedClass = BridgedClassDefinition( 8 | nativeType: MPages, 9 | name: 'MPages', 10 | constructors: { 11 | '': (visitor, positionalArgs, namedArgs) { 12 | return MPages( 13 | list: (positionalArgs[0] as List).map((e) => e as MManga).toList(), 14 | hasNextPage: positionalArgs[1] as bool, 15 | ); 16 | }, 17 | }, 18 | getters: { 19 | 'list': (visitor, target) => (target as MPages).list, 20 | 'hasNextPage': (visitor, target) => (target as MPages).hasNextPage, 21 | }, 22 | setters: { 23 | 'list': (visitor, target, value) => 24 | (target as MPages).list = (value as List).cast(), 25 | 'hasNextPage': (visitor, target, value) => 26 | (target as MPages).hasNextPage = value as bool, 27 | }, 28 | ); 29 | 30 | void registerBridgedClasses(D4rt interpreter) { 31 | interpreter.registerBridgedClass( 32 | mPageBridgedClass, 33 | 'package:mangayomi/bridge_lib.dart', 34 | ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/Api/Sources/Eval/dart/bridge/m_status.dart: -------------------------------------------------------------------------------- 1 | import 'package:d4rt/d4rt.dart'; 2 | 3 | import '../../../Model/Manga.dart'; 4 | 5 | class MStatusBridge { 6 | final statusDefinition = BridgedEnumDefinition( 7 | name: 'MStatus', 8 | values: Status.values, 9 | ); 10 | 11 | void registerBridgedEnum(D4rt interpreter) { 12 | interpreter.registerBridgedEnum( 13 | statusDefinition, 14 | 'package:mangayomi/bridge_lib.dart', 15 | ); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/Api/Sources/Eval/dart/bridge/m_track.dart: -------------------------------------------------------------------------------- 1 | import 'package:d4rt/d4rt.dart'; 2 | 3 | import '../model/video.dart'; 4 | 5 | class MTrackBridge { 6 | final mTrackBridgedClass = BridgedClassDefinition( 7 | nativeType: Track, 8 | name: 'MTrack', 9 | constructors: { 10 | '': (visitor, positionalArgs, namedArgs) { 11 | return Track( 12 | file: namedArgs.get('file'), 13 | label: namedArgs.get('label'), 14 | ); 15 | }, 16 | }, 17 | getters: { 18 | 'file': (visitor, target) => (target as Track).file, 19 | 'label': (visitor, target) => (target as Track).label, 20 | }, 21 | setters: { 22 | 'file': (visitor, target, value) => 23 | (target as Track).file = value as String?, 24 | 'label': (visitor, target, value) => 25 | (target as Track).label = value as String?, 26 | }, 27 | ); 28 | 29 | void registerBridgedClasses(D4rt interpreter) { 30 | interpreter.registerBridgedClass( 31 | mTrackBridgedClass, 32 | 'package:mangayomi/bridge_lib.dart', 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/Api/Sources/Eval/dart/model/m_chapter.dart: -------------------------------------------------------------------------------- 1 | class MChapter { 2 | String? name; 3 | 4 | String? url; 5 | 6 | String? dateUpload; 7 | 8 | String? scanlator; 9 | 10 | MChapter({this.name, this.url, this.dateUpload, this.scanlator}); 11 | 12 | factory MChapter.fromJson(Map json) { 13 | return MChapter( 14 | name: json['name'], 15 | url: json['url'], 16 | dateUpload: json['dateUpload'], 17 | scanlator: json['scanlator'], 18 | ); 19 | } 20 | 21 | Map toJson() => { 22 | 'name': name, 23 | 'url': url, 24 | 'dateUpload': dateUpload, 25 | 'scanlator': scanlator, 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /lib/Api/Sources/Eval/dart/model/m_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartotsu/Api/Sources/Eval/dart/model/video.dart'; 2 | 3 | import 'filter.dart'; 4 | import 'm_manga.dart'; 5 | import 'm_pages.dart'; 6 | 7 | abstract class MProvider { 8 | MProvider(); 9 | 10 | bool get supportsLatest => true; 11 | 12 | String? get baseUrl; 13 | 14 | Map get headers; 15 | 16 | Future getLatestUpdates(int page); 17 | 18 | Future getPopular(int page); 19 | 20 | Future search(String query, int page, FilterList filterList); 21 | 22 | Future getDetail(String url); 23 | 24 | Future> getPageList(String url); 25 | 26 | Future> getVideoList(String url); 27 | 28 | Future getHtmlContent(String name, String url); 29 | 30 | Future cleanHtmlContent(String html); 31 | 32 | List getFilterList(); 33 | 34 | List getSourcePreferences(); 35 | } 36 | -------------------------------------------------------------------------------- /lib/Api/Sources/Eval/dart/model/m_source.dart: -------------------------------------------------------------------------------- 1 | class MSource { 2 | int? id; 3 | 4 | String? name; 5 | 6 | String? baseUrl; 7 | 8 | String? lang; 9 | 10 | bool? isFullData; 11 | 12 | bool? hasCloudflare; 13 | 14 | String? dateFormat; 15 | 16 | String? dateFormatLocale; 17 | 18 | String? apiUrl; 19 | 20 | String? additionalParams; 21 | 22 | String? notes; 23 | 24 | MSource({ 25 | this.id, 26 | this.name, 27 | this.baseUrl, 28 | this.lang, 29 | this.isFullData, 30 | this.hasCloudflare, 31 | this.dateFormat, 32 | this.dateFormatLocale, 33 | this.apiUrl, 34 | this.additionalParams, 35 | this.notes, 36 | }); 37 | 38 | Map toJson() => { 39 | 'apiUrl': apiUrl, 40 | 'baseUrl': baseUrl, 41 | 'dateFormat': dateFormat, 42 | 'dateFormatLocale': dateFormatLocale, 43 | 'hasCloudflare': hasCloudflare, 44 | 'id': id, 45 | 'isFullData': isFullData, 46 | 'lang': lang, 47 | 'name': name, 48 | 'additionalParams': additionalParams, 49 | 'notes': notes, 50 | }; 51 | } 52 | -------------------------------------------------------------------------------- /lib/Api/Sources/Eval/dart/model/m_video.dart: -------------------------------------------------------------------------------- 1 | class MVideo { 2 | String url; 3 | String quality; 4 | String originalUrl; 5 | Map? headers; 6 | List? subtitles; 7 | List? audios; 8 | 9 | MVideo(this.url, 10 | this.quality, 11 | this.originalUrl, { 12 | this.headers, 13 | this.subtitles, 14 | this.audios, 15 | }); 16 | } 17 | 18 | class MTrack { 19 | String? file; 20 | String? label; 21 | 22 | MTrack({this.file, this.label}); 23 | } 24 | -------------------------------------------------------------------------------- /lib/Api/Sources/Eval/dart/model/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartotsu/Api/Sources/Eval/javascript/http.dart'; 2 | 3 | class PageUrl { 4 | String url; 5 | Map? headers; 6 | 7 | PageUrl(this.url, {this.headers}); 8 | 9 | factory PageUrl.fromJson(Map json) { 10 | return PageUrl( 11 | json['url'].toString().trim(), 12 | headers: (json['headers'] as Map?)?.toMapStringString, 13 | ); 14 | } 15 | 16 | Map toJson() => {'url': url, 'headers': headers}; 17 | } 18 | -------------------------------------------------------------------------------- /lib/Api/Sources/Extensions/extensions_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:isar/isar.dart'; 2 | import 'package:riverpod_annotation/riverpod_annotation.dart'; 3 | 4 | import '../../../main.dart'; 5 | import '../Model/Manga.dart'; 6 | import '../Model/Source.dart'; 7 | 8 | part 'extensions_provider.g.dart'; 9 | 10 | @riverpod 11 | Stream> getExtensionsStream( 12 | GetExtensionsStreamRef ref, ItemType itemType) async* { 13 | yield* isar.sources 14 | .filter() 15 | .idIsNotNull() 16 | .and() 17 | .isActiveEqualTo(true) 18 | .itemTypeEqualTo(itemType) 19 | .watch(fireImmediately: true); 20 | } 21 | -------------------------------------------------------------------------------- /lib/Api/Sources/Extensions/fetch_anime_sources.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartotsu/Functions/GetExtensions.dart'; 2 | import 'package:riverpod_annotation/riverpod_annotation.dart'; 3 | 4 | import '../../../Preferences/PrefManager.dart'; 5 | import '../Model/Manga.dart'; 6 | import 'GetSourceList.dart'; 7 | 8 | part 'fetch_anime_sources.g.dart'; 9 | 10 | @riverpod 11 | Future fetchAnimeSourcesList(FetchAnimeSourcesListRef ref, 12 | {int? id, required bool reFresh}) async { 13 | var repo = Extensions.animeRepo.value; 14 | if ((loadData(PrefName.autoUpdateExtensions) || reFresh) && repo.isNotEmpty) { 15 | await fetchSourcesList( 16 | sourcesIndexUrl: repo, 17 | refresh: reFresh, 18 | id: id, 19 | ref: ref, 20 | itemType: ItemType.anime, 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/Api/Sources/Extensions/fetch_manga_sources.dart: -------------------------------------------------------------------------------- 1 | import 'package:riverpod_annotation/riverpod_annotation.dart'; 2 | 3 | import '../../../Functions/GetExtensions.dart'; 4 | import '../../../Preferences/PrefManager.dart'; 5 | import '../Model/Manga.dart'; 6 | import 'GetSourceList.dart'; 7 | 8 | part 'fetch_manga_sources.g.dart'; 9 | 10 | @riverpod 11 | Future fetchMangaSourcesList(FetchMangaSourcesListRef ref, 12 | {int? id, required reFresh}) async { 13 | var repo = Extensions.mangaRepo.value; 14 | if ((loadData(PrefName.autoUpdateExtensions) || reFresh) && repo.isNotEmpty) { 15 | await fetchSourcesList( 16 | sourcesIndexUrl: repo, 17 | refresh: reFresh, 18 | id: id, 19 | ref: ref, 20 | itemType: ItemType.manga, 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/Api/Sources/Extensions/fetch_novel_sources.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 2 | import 'package:riverpod_annotation/riverpod_annotation.dart'; 3 | 4 | import '../../../Functions/GetExtensions.dart'; 5 | import '../../../Preferences/PrefManager.dart'; 6 | import '../Model/Manga.dart'; 7 | import 'GetSourceList.dart'; 8 | 9 | part 'fetch_novel_sources.g.dart'; 10 | 11 | @riverpod 12 | Future fetchNovelSourcesList(Ref ref, {int? id, required reFresh}) async { 13 | var repo = Extensions.novelRepo.value; 14 | if ((loadData(PrefName.autoUpdateExtensions) || reFresh) && repo.isNotEmpty) { 15 | await fetchSourcesList( 16 | sourcesIndexUrl: repo, 17 | refresh: reFresh, 18 | id: id, 19 | ref: ref, 20 | itemType: ItemType.novel, 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/Api/Sources/Search/getVideo.dart: -------------------------------------------------------------------------------- 1 | import '../Eval/dart/model/video.dart'; 2 | import '../Model/Source.dart'; 3 | import '../lib.dart'; 4 | 5 | Future> getVideo({ 6 | required Source source, 7 | required String url, 8 | }) async { 9 | List