├── .github
└── FUNDING.yml
├── .gitignore
├── .metadata
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-web.png
│ │ ├── kotlin
│ │ │ └── dev
│ │ │ │ └── jideguru
│ │ │ │ └── flutter_ebook_app
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── 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
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── network_security_config.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── settings.gradle
└── settings_aar.gradle
├── assets
└── images
│ ├── app-icon.png
│ ├── empty.png
│ └── place.png
├── ios
├── .gitignore
├── Flutter
│ ├── .last_build_id
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── book-icon-1024.png
│ │ ├── book-icon-20.png
│ │ ├── book-icon-20@2x.png
│ │ ├── book-icon-20@3x.png
│ │ ├── book-icon-29.png
│ │ ├── book-icon-29@2x.png
│ │ ├── book-icon-29@3x.png
│ │ ├── book-icon-40.png
│ │ ├── book-icon-40@2x.png
│ │ ├── book-icon-40@3x.png
│ │ ├── book-icon-60@2x.png
│ │ ├── book-icon-60@3x.png
│ │ ├── book-icon-76.png
│ │ ├── book-icon-76@2x.png
│ │ └── book-icon-83.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
└── src
│ ├── app.dart
│ ├── common
│ ├── application
│ │ ├── application.dart
│ │ └── services
│ │ │ ├── current_app_theme_service.dart
│ │ │ └── services.dart
│ ├── common.dart
│ ├── constants
│ │ ├── api.dart
│ │ ├── constants.dart
│ │ ├── shared_preferences_key.dart
│ │ ├── strings.dart
│ │ └── utils.dart
│ ├── data
│ │ ├── data.dart
│ │ ├── data_sources
│ │ │ ├── data_sources.dart
│ │ │ ├── downloads
│ │ │ │ ├── downloads_local_data_source.dart
│ │ │ │ └── downloads_local_data_source_impl.dart
│ │ │ └── favorites
│ │ │ │ ├── favorites_local_data_source.dart
│ │ │ │ └── favorites_local_data_source_impl.dart
│ │ ├── database
│ │ │ ├── database.dart
│ │ │ └── database_config.dart
│ │ ├── failures
│ │ │ └── http_failure.dart
│ │ ├── local
│ │ │ └── local_storage.dart
│ │ ├── remote
│ │ │ ├── adapter
│ │ │ │ ├── adapter.dart
│ │ │ │ ├── mobile_adapter.dart
│ │ │ │ ├── unsupported.dart
│ │ │ │ └── web_adapter.dart
│ │ │ └── app_dio.dart
│ │ └── repositories
│ │ │ ├── book
│ │ │ └── book_repository.dart
│ │ │ ├── downloads
│ │ │ └── downloads_repository.dart
│ │ │ ├── favorites
│ │ │ └── favorites_repository.dart
│ │ │ └── repositories.dart
│ ├── domain
│ │ ├── domain.dart
│ │ └── models
│ │ │ ├── category_feed.dart
│ │ │ └── models.dart
│ ├── extensions
│ │ ├── context_extensions.dart
│ │ ├── extensions.dart
│ │ └── theme_extensions.dart
│ ├── presentation
│ │ ├── notifiers
│ │ │ ├── current_app_theme
│ │ │ │ ├── current_app_theme_notifier.dart
│ │ │ │ └── current_app_theme_notifier.g.dart
│ │ │ ├── downloads
│ │ │ │ ├── downloads_notifier.dart
│ │ │ │ └── downloads_notifier.g.dart
│ │ │ ├── favorites
│ │ │ │ ├── favorites_notifier.dart
│ │ │ │ └── favorites_notifier.g.dart
│ │ │ └── notifiers.dart
│ │ ├── presentation.dart
│ │ ├── providers
│ │ │ ├── database_provider.dart
│ │ │ ├── dio_provider.dart
│ │ │ ├── providers.dart
│ │ │ └── shared_preferences_provider.dart
│ │ ├── theme
│ │ │ └── theme_config.dart
│ │ └── ui
│ │ │ ├── ui.dart
│ │ │ └── widgets
│ │ │ ├── animated_page_splitter.dart
│ │ │ ├── book_card.dart
│ │ │ ├── book_item.dart
│ │ │ ├── book_list_item.dart
│ │ │ ├── description_text.dart
│ │ │ ├── empty_view.dart
│ │ │ ├── error_widget.dart
│ │ │ ├── loading_widget.dart
│ │ │ ├── modal_dialogs
│ │ │ ├── custom_alert.dart
│ │ │ ├── download_alert.dart
│ │ │ ├── exit_modal_dialog.dart
│ │ │ └── modal_dialogs.dart
│ │ │ ├── responsive_widget.dart
│ │ │ └── widgets.dart
│ ├── router
│ │ ├── app_router.dart
│ │ └── app_router.gr.dart
│ └── utils
│ │ ├── riverpod_observer.dart
│ │ └── utils.dart
│ ├── debug_page.dart
│ └── features
│ ├── book_details
│ ├── book_details.dart
│ ├── data
│ │ ├── data.dart
│ │ └── repositories
│ │ │ ├── book_details_repository.dart
│ │ │ └── repositories.dart
│ └── presentation
│ │ ├── notifier
│ │ ├── book_details_notifier.dart
│ │ ├── book_details_notifier.g.dart
│ │ └── notifiers.dart
│ │ ├── presentation.dart
│ │ └── ui
│ │ ├── screens
│ │ ├── book_details_screen.dart
│ │ └── screens.dart
│ │ └── ui.dart
│ ├── downloads
│ ├── downloads.dart
│ └── presentation
│ │ ├── presentation.dart
│ │ └── ui
│ │ ├── screens
│ │ ├── download_screen.dart
│ │ └── screens.dart
│ │ └── ui.dart
│ ├── explore
│ ├── data
│ │ ├── data.dart
│ │ └── repositories
│ │ │ ├── explore_repository.dart
│ │ │ └── repositories.dart
│ ├── explore.dart
│ └── presentation
│ │ ├── notifiers
│ │ ├── genre_feed
│ │ │ ├── genre_feed_notifier.dart
│ │ │ └── genre_feed_notifier.g.dart
│ │ └── notifiers.dart
│ │ ├── presentation.dart
│ │ └── ui
│ │ ├── screens
│ │ ├── explore_screen.dart
│ │ ├── explore_screen_large.dart
│ │ ├── explore_screen_small.dart
│ │ ├── genre_screen.dart
│ │ └── screens.dart
│ │ └── ui.dart
│ ├── favorites
│ ├── favourites.dart
│ └── presentation
│ │ ├── presentation.dart
│ │ └── ui
│ │ ├── screens
│ │ ├── favorites_screen.dart
│ │ └── screens.dart
│ │ └── ui.dart
│ ├── features.dart
│ ├── home
│ ├── data
│ │ ├── data.dart
│ │ └── repositories
│ │ │ ├── home_repository.dart
│ │ │ └── repositories.dart
│ ├── home.dart
│ └── presentation
│ │ ├── notifiers
│ │ ├── home_feed_notifier.dart
│ │ ├── home_feed_notifier.g.dart
│ │ └── notifiers.dart
│ │ ├── presentation.dart
│ │ └── ui
│ │ ├── screens
│ │ ├── home_screen.dart
│ │ ├── home_screen_large.dart
│ │ ├── home_screen_small.dart
│ │ └── screens.dart
│ │ └── ui.dart
│ ├── settings
│ ├── presentation
│ │ ├── presentation.dart
│ │ └── ui
│ │ │ ├── screens
│ │ │ ├── licenses_screen.dart
│ │ │ ├── screens.dart
│ │ │ ├── settings_screen.dart
│ │ │ ├── settings_screen_large.dart
│ │ │ └── settings_screen_small.dart
│ │ │ └── ui.dart
│ └── settings.dart
│ ├── splash
│ ├── presentation
│ │ ├── presentation.dart
│ │ └── ui
│ │ │ ├── screens
│ │ │ ├── screens.dart
│ │ │ └── splash_screen.dart
│ │ │ └── ui.dart
│ └── splash.dart
│ └── tabs
│ ├── presentation
│ ├── notifiers
│ │ ├── current_tab_notifier.dart
│ │ └── notifiers.dart
│ ├── presentation.dart
│ └── ui
│ │ ├── screens
│ │ ├── screens.dart
│ │ ├── tabs_screen.dart
│ │ ├── tabs_screen_large.dart
│ │ └── tabs_screen_small.dart
│ │ └── ui.dart
│ └── tabs.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
├── Podfile.lock
├── 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
├── packages
└── iridium
│ ├── components
│ ├── commons
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── example
│ │ │ ├── lib
│ │ │ │ └── main.dart
│ │ │ └── pubspec.yaml
│ │ ├── lib
│ │ │ ├── extensions
│ │ │ │ ├── data.dart
│ │ │ │ ├── files.dart
│ │ │ │ ├── strings.dart
│ │ │ │ └── uri.dart
│ │ │ ├── io.dart
│ │ │ ├── io
│ │ │ │ └── file_not_found_exception.dart
│ │ │ └── utils
│ │ │ │ ├── condition_predicate.dart
│ │ │ │ ├── condition_type.dart
│ │ │ │ ├── exceptions.dart
│ │ │ │ ├── file_utils.dart
│ │ │ │ ├── functions.dart
│ │ │ │ ├── href.dart
│ │ │ │ ├── injectable.dart
│ │ │ │ ├── jsonable.dart
│ │ │ │ ├── predicate.dart
│ │ │ │ ├── ref.dart
│ │ │ │ ├── take.dart
│ │ │ │ ├── try.dart
│ │ │ │ └── uri_template.dart
│ │ ├── pubspec.yaml
│ │ └── test
│ │ │ ├── extensions
│ │ │ ├── file_test.dart
│ │ │ ├── json_test.dart
│ │ │ └── url_test.dart
│ │ │ └── util
│ │ │ ├── href_test.dart
│ │ │ └── uri_template_test.dart
│ ├── lcp
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── assets
│ │ │ └── prod-license.lcpl
│ │ ├── example
│ │ │ ├── lib
│ │ │ │ └── main.dart
│ │ │ └── pubspec.yaml
│ │ ├── lib
│ │ │ ├── auth
│ │ │ │ └── lcp_passphrase_authentication.dart
│ │ │ ├── drm
│ │ │ │ ├── drm_context.dart
│ │ │ │ ├── drm_error.dart
│ │ │ │ ├── drm_exception.dart
│ │ │ │ └── lcp_result.dart
│ │ │ ├── i18n
│ │ │ │ ├── lcp_localizations.dart
│ │ │ │ └── localizations
│ │ │ │ │ ├── messages_all.dart
│ │ │ │ │ ├── messages_de.dart
│ │ │ │ │ ├── messages_en.dart
│ │ │ │ │ ├── messages_es.dart
│ │ │ │ │ └── messages_fr.dart
│ │ │ ├── io
│ │ │ │ ├── file_util.dart
│ │ │ │ └── uint8list_converter.dart
│ │ │ ├── lcp.dart
│ │ │ ├── lcp_authenticating.dart
│ │ │ ├── lcp_client.dart
│ │ │ ├── lcp_content_protection.dart
│ │ │ ├── lcp_content_protection_service.dart
│ │ │ ├── lcp_decryptor.dart
│ │ │ ├── lcp_error.dart
│ │ │ ├── lcp_exception.dart
│ │ │ ├── lcp_license.dart
│ │ │ ├── lcp_native.dart
│ │ │ ├── lcp_parsing_error.dart
│ │ │ ├── lcp_service.dart
│ │ │ ├── license
│ │ │ │ ├── container
│ │ │ │ │ ├── bytes_license_container.dart
│ │ │ │ │ ├── epub_license_container.dart
│ │ │ │ │ ├── lcpl_license_container.dart
│ │ │ │ │ ├── license_container.dart
│ │ │ │ │ ├── web_pub_license_container.dart
│ │ │ │ │ └── zip_license_container.dart
│ │ │ │ ├── license.dart
│ │ │ │ ├── license_validation.dart
│ │ │ │ ├── license_validation_events.dart
│ │ │ │ ├── license_validation_state_machine.dart
│ │ │ │ ├── license_validation_states.dart
│ │ │ │ └── model
│ │ │ │ │ ├── components
│ │ │ │ │ ├── lcp
│ │ │ │ │ │ ├── content_key.dart
│ │ │ │ │ │ ├── encryption.dart
│ │ │ │ │ │ ├── rights.dart
│ │ │ │ │ │ ├── signature.dart
│ │ │ │ │ │ ├── user.dart
│ │ │ │ │ │ └── user_key.dart
│ │ │ │ │ ├── link.dart
│ │ │ │ │ ├── links.dart
│ │ │ │ │ └── lsd
│ │ │ │ │ │ ├── event.dart
│ │ │ │ │ │ └── potential_rights.dart
│ │ │ │ │ ├── license_document.dart
│ │ │ │ │ └── status_document.dart
│ │ │ ├── material_renew_listener.dart
│ │ │ ├── native
│ │ │ │ ├── lcp_client_native.dart
│ │ │ │ └── lcp_native.dart
│ │ │ ├── persistence
│ │ │ │ ├── lcp_database.dart
│ │ │ │ ├── licenses.dart
│ │ │ │ └── transactions.dart
│ │ │ ├── service
│ │ │ │ ├── crl_service.dart
│ │ │ │ ├── device_repository.dart
│ │ │ │ ├── device_service.dart
│ │ │ │ ├── licenses_repository.dart
│ │ │ │ ├── licenses_service.dart
│ │ │ │ ├── network_service.dart
│ │ │ │ ├── passphrases_repository.dart
│ │ │ │ └── passphrases_service.dart
│ │ │ └── utils
│ │ │ │ └── zip_utils.dart
│ │ └── pubspec.yaml
│ ├── navigator
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── assets
│ │ │ ├── _scripts
│ │ │ │ ├── .eslintrc.json
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .prettierignore
│ │ │ │ ├── .prettierrc.json
│ │ │ │ ├── README.md
│ │ │ │ ├── babel.config.json
│ │ │ │ ├── package.json
│ │ │ │ ├── src
│ │ │ │ │ ├── decorator.js
│ │ │ │ │ ├── flutter.js
│ │ │ │ │ ├── gestures.js
│ │ │ │ │ ├── highlight.js
│ │ │ │ │ ├── index-fixed.js
│ │ │ │ │ ├── index-reflowable.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── rect.js
│ │ │ │ │ ├── selection.js
│ │ │ │ │ ├── utils.js
│ │ │ │ │ └── vendor
│ │ │ │ │ │ └── hypothesis
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── anchoring
│ │ │ │ │ │ ├── html.js
│ │ │ │ │ │ ├── match-quote.js
│ │ │ │ │ │ ├── pdf.js
│ │ │ │ │ │ ├── placeholder.js
│ │ │ │ │ │ ├── test
│ │ │ │ │ │ ├── fake-pdf-viewer-application.js
│ │ │ │ │ │ ├── html-anchoring-fixture.html
│ │ │ │ │ │ ├── html-baselines
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ ├── minimal.html
│ │ │ │ │ │ │ ├── minimal.json
│ │ │ │ │ │ │ ├── wikipedia-regression-testing.html
│ │ │ │ │ │ │ └── wikipedia-regression-testing.json
│ │ │ │ │ │ ├── html-test.js
│ │ │ │ │ │ ├── match-quote-test.js
│ │ │ │ │ │ ├── pdf-test.js
│ │ │ │ │ │ ├── placeholder-test.js
│ │ │ │ │ │ ├── text-range-test.js
│ │ │ │ │ │ ├── types-test.js
│ │ │ │ │ │ └── xpath-test.js
│ │ │ │ │ │ ├── text-range.js
│ │ │ │ │ │ ├── types.js
│ │ │ │ │ │ └── xpath.js
│ │ │ │ ├── webpack.config.js
│ │ │ │ └── yarn.lock
│ │ │ ├── readium
│ │ │ │ ├── assets
│ │ │ │ │ ├── bookmark.svg
│ │ │ │ │ └── edit.svg
│ │ │ │ ├── divina
│ │ │ │ │ ├── divinaPlayer.html
│ │ │ │ │ ├── divinaPlayer.js
│ │ │ │ │ └── divinaTouchHandling.js
│ │ │ │ ├── fonts
│ │ │ │ │ └── OpenDyslexic-Regular.otf
│ │ │ │ ├── readium-css
│ │ │ │ │ ├── ReadMe.md
│ │ │ │ │ ├── ReadiumCSS-after.css
│ │ │ │ │ ├── ReadiumCSS-before.css
│ │ │ │ │ ├── ReadiumCSS-default.css
│ │ │ │ │ ├── ReadiumCSS-ebpaj_fonts_patch.css
│ │ │ │ │ ├── ReadiumCSS-pagination.css
│ │ │ │ │ ├── cjk-horizontal
│ │ │ │ │ │ ├── ReadiumCSS-after.css
│ │ │ │ │ │ ├── ReadiumCSS-before.css
│ │ │ │ │ │ └── ReadiumCSS-default.css
│ │ │ │ │ ├── cjk-vertical
│ │ │ │ │ │ ├── ReadiumCSS-after.css
│ │ │ │ │ │ ├── ReadiumCSS-before.css
│ │ │ │ │ │ └── ReadiumCSS-default.css
│ │ │ │ │ ├── fonts
│ │ │ │ │ │ ├── AccessibleDfA.otf
│ │ │ │ │ │ ├── LICENSE-AccessibleDfa
│ │ │ │ │ │ ├── LICENSE-IaWriterDuospace.md
│ │ │ │ │ │ └── iAWriterDuospace-Regular.ttf
│ │ │ │ │ └── rtl
│ │ │ │ │ │ ├── ReadiumCSS-after.css
│ │ │ │ │ │ ├── ReadiumCSS-before.css
│ │ │ │ │ │ └── ReadiumCSS-default.css
│ │ │ │ └── scripts
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── readium-fixed.js
│ │ │ │ │ └── readium-reflowable.js
│ │ │ ├── xpub-assets
│ │ │ │ └── bookmark.svg
│ │ │ ├── xpub-js
│ │ │ │ ├── Gestures.js
│ │ │ │ ├── Main.js
│ │ │ │ ├── ReadiumCSS-after.css
│ │ │ │ ├── ReadiumCSS-before.css
│ │ │ │ ├── ReadiumCSS-default.css
│ │ │ │ ├── Recordings.js
│ │ │ │ ├── Reflowable_Viewport.js
│ │ │ │ ├── Storage.js
│ │ │ │ ├── Theme.js
│ │ │ │ ├── controllers
│ │ │ │ │ ├── bookmarks.js
│ │ │ │ │ ├── highlight.js
│ │ │ │ │ └── tts.js
│ │ │ │ ├── fonts.css
│ │ │ │ ├── model
│ │ │ │ │ ├── bookmark_data.js
│ │ │ │ │ ├── current_pages_info.js
│ │ │ │ │ ├── location.js
│ │ │ │ │ ├── package.js
│ │ │ │ │ ├── package_data.js
│ │ │ │ │ ├── page_open_request.js
│ │ │ │ │ └── spine_item.js
│ │ │ │ ├── pagination.css
│ │ │ │ ├── utils
│ │ │ │ │ ├── cfi.js
│ │ │ │ │ ├── cfi_navigation_logic.js
│ │ │ │ │ ├── rangefix.js
│ │ │ │ │ └── tools.js
│ │ │ │ ├── xpub.css
│ │ │ │ ├── xpub_location.js
│ │ │ │ ├── xpub_navigation.js
│ │ │ │ ├── xpub_navigation_fixed_layout.js
│ │ │ │ └── xpub_navigation_reflow_layout.js
│ │ │ └── xpub-shared-js
│ │ │ │ ├── globals.js
│ │ │ │ ├── helpers.js
│ │ │ │ ├── jquery-2.1.0.min.js
│ │ │ │ ├── jquery-3.6.0.min.js
│ │ │ │ ├── jquery.mobile-1.4.5.min.js
│ │ │ │ ├── jquerymobile-swipeupdown.js
│ │ │ │ ├── polyfill.js
│ │ │ │ ├── readium-cfi-js.js
│ │ │ │ └── underscore-min.js
│ │ ├── lib
│ │ │ ├── cbz.dart
│ │ │ ├── epub.dart
│ │ │ ├── publication.dart
│ │ │ └── src
│ │ │ │ ├── cbz
│ │ │ │ ├── cbz_controller.dart
│ │ │ │ └── widget
│ │ │ │ │ └── cbz_navigator.dart
│ │ │ │ ├── epub
│ │ │ │ ├── bloc
│ │ │ │ │ ├── current_spine_item_bloc.dart
│ │ │ │ │ ├── reader_theme_bloc.dart
│ │ │ │ │ └── viewer_settings_bloc.dart
│ │ │ │ ├── callbacks
│ │ │ │ │ ├── epub_callbacks.dart
│ │ │ │ │ ├── epub_webview_listener.dart
│ │ │ │ │ ├── javascript_channels.dart
│ │ │ │ │ ├── launcher_ui_channels.dart
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── pagination_info.dart
│ │ │ │ │ │ └── tap_event.dart
│ │ │ │ │ ├── navigation_controller.dart
│ │ │ │ │ ├── readium_channels.dart
│ │ │ │ │ └── webview_listener.dart
│ │ │ │ ├── decoration.dart
│ │ │ │ ├── decoration_change.dart
│ │ │ │ ├── epub_controller.dart
│ │ │ │ ├── extensions
│ │ │ │ │ └── decoration_change.dart
│ │ │ │ ├── html
│ │ │ │ │ └── html_decoration_template.dart
│ │ │ │ ├── js
│ │ │ │ │ └── js_api.dart
│ │ │ │ ├── model
│ │ │ │ │ ├── annotation_mark_template.dart
│ │ │ │ │ ├── decoration_style_annotation_mark.dart
│ │ │ │ │ ├── epub_reader_state.dart
│ │ │ │ │ ├── open_page_request.dart
│ │ │ │ │ └── selection.dart
│ │ │ │ ├── selection
│ │ │ │ │ ├── annotation_popup.dart
│ │ │ │ │ ├── highlight_popup.dart
│ │ │ │ │ ├── new_selection_popup.dart
│ │ │ │ │ ├── selection_listener.dart
│ │ │ │ │ ├── selection_listener_factory.dart
│ │ │ │ │ ├── selection_popup.dart
│ │ │ │ │ └── simple_selection_listener.dart
│ │ │ │ ├── settings
│ │ │ │ │ ├── letter_spacing.dart
│ │ │ │ │ ├── line_height.dart
│ │ │ │ │ ├── reader_theme_config.dart
│ │ │ │ │ ├── readium_theme_values.dart
│ │ │ │ │ ├── screenshot_config.dart
│ │ │ │ │ ├── text_align.dart
│ │ │ │ │ ├── text_margin.dart
│ │ │ │ │ ├── value_settings.dart
│ │ │ │ │ ├── viewer_settings.dart
│ │ │ │ │ └── word_spacing.dart
│ │ │ │ ├── utils
│ │ │ │ │ └── toc_utils.dart
│ │ │ │ └── widget
│ │ │ │ │ ├── epub_navigator.dart
│ │ │ │ │ ├── listeners
│ │ │ │ │ └── web_view_horizontal_gesture_recognizer.dart
│ │ │ │ │ ├── webview_screen.dart
│ │ │ │ │ ├── webview_screen_state.dart
│ │ │ │ │ └── webview_screen_state_stub.dart
│ │ │ │ └── publication
│ │ │ │ ├── model
│ │ │ │ ├── annotation_type.dart
│ │ │ │ ├── annotation_type_and_idref_predicate.dart
│ │ │ │ ├── annotation_type_predicate.dart
│ │ │ │ ├── highlight_style.dart
│ │ │ │ ├── in_memory_reader_annotation_repository.dart
│ │ │ │ ├── reader_annotation.dart
│ │ │ │ └── reader_annotation_repository.dart
│ │ │ │ ├── publication_controller.dart
│ │ │ │ ├── reader_command_processor.dart
│ │ │ │ ├── reader_commands.dart
│ │ │ │ ├── reader_context.dart
│ │ │ │ └── widget
│ │ │ │ ├── publication_navigator.dart
│ │ │ │ ├── spine_item_context.dart
│ │ │ │ └── tap_gesture.dart
│ │ └── pubspec.yaml
│ ├── opds
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── example
│ │ │ ├── lib
│ │ │ │ ├── acquisition-feed.atom
│ │ │ │ └── main.dart
│ │ │ └── pubspec.yaml
│ │ ├── lib
│ │ │ ├── mno_opds.dart
│ │ │ └── src
│ │ │ │ └── opds
│ │ │ │ ├── opds1parser.dart
│ │ │ │ └── opds2parser.dart
│ │ ├── pubspec.yaml
│ │ └── test
│ │ │ └── opds
│ │ │ ├── acquisition-feed.atom
│ │ │ ├── entry.atom
│ │ │ ├── nav-feed.atom
│ │ │ └── opds1parser_test.dart
│ ├── rec_pub_get.sh
│ ├── server
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── example
│ │ │ ├── lib
│ │ │ │ └── main.dart
│ │ │ └── pubspec.yaml
│ │ ├── lib
│ │ │ ├── mno_server.dart
│ │ │ └── src
│ │ │ │ └── blocs
│ │ │ │ └── server
│ │ │ │ ├── asset_provider.dart
│ │ │ │ ├── handlers
│ │ │ │ ├── android
│ │ │ │ │ ├── android_request.dart
│ │ │ │ │ └── android_response.dart
│ │ │ │ ├── assets_request_handler.dart
│ │ │ │ ├── fetcher_request_handler.dart
│ │ │ │ ├── http
│ │ │ │ │ ├── http_request.dart
│ │ │ │ │ └── http_response.dart
│ │ │ │ ├── request.dart
│ │ │ │ ├── request_handler.dart
│ │ │ │ └── response.dart
│ │ │ │ ├── html_injector.dart
│ │ │ │ ├── request_controller.dart
│ │ │ │ ├── resources.dart
│ │ │ │ ├── server_bloc.dart
│ │ │ │ ├── server_event.dart
│ │ │ │ └── server_state.dart
│ │ └── pubspec.yaml
│ ├── shared
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── example
│ │ │ ├── lib
│ │ │ │ └── main.dart
│ │ │ └── pubspec.yaml
│ │ ├── lib
│ │ │ ├── archive.dart
│ │ │ ├── container.dart
│ │ │ ├── epub.dart
│ │ │ ├── fetcher.dart
│ │ │ ├── i18n
│ │ │ │ ├── locale_utils.dart
│ │ │ │ ├── localizations
│ │ │ │ │ ├── messages_all.dart
│ │ │ │ │ ├── messages_de.dart
│ │ │ │ │ ├── messages_en.dart
│ │ │ │ │ ├── messages_es.dart
│ │ │ │ │ └── messages_fr.dart
│ │ │ │ ├── localizations_repository.dart
│ │ │ │ └── reader_shared_localizations.dart
│ │ │ ├── mediatype.dart
│ │ │ ├── opds.dart
│ │ │ ├── publication.dart
│ │ │ ├── src
│ │ │ │ ├── container
│ │ │ │ │ ├── container.dart
│ │ │ │ │ ├── file_container.dart
│ │ │ │ │ └── zip_container.dart
│ │ │ │ ├── fetcher
│ │ │ │ │ ├── archive_fetcher.dart
│ │ │ │ │ ├── bytes_resource.dart
│ │ │ │ │ ├── fetcher.dart
│ │ │ │ │ ├── file_fetcher.dart
│ │ │ │ │ ├── filter.dart
│ │ │ │ │ ├── http_fetcher.dart
│ │ │ │ │ ├── resource.dart
│ │ │ │ │ ├── resource_exception.dart
│ │ │ │ │ ├── routing_fetcher.dart
│ │ │ │ │ └── transforming_fetcher.dart
│ │ │ │ ├── mediatype
│ │ │ │ │ ├── charset.dart
│ │ │ │ │ ├── charsets.dart
│ │ │ │ │ ├── mediatype.dart
│ │ │ │ │ ├── sniffer.dart
│ │ │ │ │ ├── sniffer_content.dart
│ │ │ │ │ └── sniffer_context.dart
│ │ │ │ ├── opds
│ │ │ │ │ ├── acquisition.dart
│ │ │ │ │ ├── availability.dart
│ │ │ │ │ ├── copies.dart
│ │ │ │ │ ├── facet.dart
│ │ │ │ │ ├── feed.dart
│ │ │ │ │ ├── group.dart
│ │ │ │ │ ├── holds.dart
│ │ │ │ │ ├── opds_metadata.dart
│ │ │ │ │ └── price.dart
│ │ │ │ ├── publication
│ │ │ │ │ ├── asset
│ │ │ │ │ │ ├── file_asset.dart
│ │ │ │ │ │ ├── http_asset.dart
│ │ │ │ │ │ └── publication_asset.dart
│ │ │ │ │ ├── collection.dart
│ │ │ │ │ ├── content_protection.dart
│ │ │ │ │ ├── contributor.dart
│ │ │ │ │ ├── drm.dart
│ │ │ │ │ ├── encryption.dart
│ │ │ │ │ ├── epub
│ │ │ │ │ │ └── publication.dart
│ │ │ │ │ ├── format.dart
│ │ │ │ │ ├── html
│ │ │ │ │ │ ├── dom_range.dart
│ │ │ │ │ │ └── locator.dart
│ │ │ │ │ ├── link.dart
│ │ │ │ │ ├── link_list_extension.dart
│ │ │ │ │ ├── link_pagination.dart
│ │ │ │ │ ├── localized_string.dart
│ │ │ │ │ ├── locator.dart
│ │ │ │ │ ├── manifest.dart
│ │ │ │ │ ├── metadata.dart
│ │ │ │ │ ├── opds
│ │ │ │ │ │ ├── properties.dart
│ │ │ │ │ │ └── publication.dart
│ │ │ │ │ ├── opening_exception.dart
│ │ │ │ │ ├── pagination_info_service.dart
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── metadata.dart
│ │ │ │ │ │ ├── presentation.dart
│ │ │ │ │ │ └── properties.dart
│ │ │ │ │ ├── properties.dart
│ │ │ │ │ ├── publication.dart
│ │ │ │ │ ├── publication_collection.dart
│ │ │ │ │ ├── reading_progression.dart
│ │ │ │ │ ├── root_file.dart
│ │ │ │ │ ├── services
│ │ │ │ │ │ ├── content_protection_service.dart
│ │ │ │ │ │ ├── cover_service.dart
│ │ │ │ │ │ ├── locator_service.dart
│ │ │ │ │ │ ├── positions_service.dart
│ │ │ │ │ │ └── route_handler.dart
│ │ │ │ │ ├── subcollection_map.dart
│ │ │ │ │ ├── subject.dart
│ │ │ │ │ └── user_exception.dart
│ │ │ │ ├── readium_css.dart
│ │ │ │ ├── streams
│ │ │ │ │ ├── file_stream.dart
│ │ │ │ │ ├── raw_stream.dart
│ │ │ │ │ ├── stream.dart
│ │ │ │ │ └── zip_stream.dart
│ │ │ │ ├── util
│ │ │ │ │ ├── archive
│ │ │ │ │ │ ├── archive.dart
│ │ │ │ │ │ ├── exploded_archive.dart
│ │ │ │ │ │ └── zip_archive.dart
│ │ │ │ │ └── image_size.dart
│ │ │ │ └── zip
│ │ │ │ │ ├── file_buffer.dart
│ │ │ │ │ ├── lazy_archive.dart
│ │ │ │ │ ├── lazy_archive_file.dart
│ │ │ │ │ ├── lazy_zip_decoder.dart
│ │ │ │ │ ├── lazy_zip_directory.dart
│ │ │ │ │ ├── lazy_zip_file.dart
│ │ │ │ │ ├── lazy_zip_file_header.dart
│ │ │ │ │ ├── zip_header.dart
│ │ │ │ │ └── zip_package.dart
│ │ │ ├── streams.dart
│ │ │ ├── xml.dart
│ │ │ └── zip.dart
│ │ ├── pubspec.yaml
│ │ ├── test
│ │ │ ├── extensions
│ │ │ │ └── link_test.dart
│ │ │ ├── fetcher
│ │ │ │ ├── archive_fetcher_test.dart
│ │ │ │ └── file_fetcher_test.dart
│ │ │ ├── fixtures.dart
│ │ │ ├── opds
│ │ │ │ ├── acquisition_test.dart
│ │ │ │ ├── availability_test.dart
│ │ │ │ ├── copies_test.dart
│ │ │ │ ├── holds_test.dart
│ │ │ │ └── price_test.dart
│ │ │ ├── publication
│ │ │ │ ├── contributor_test.dart
│ │ │ │ ├── encryption
│ │ │ │ │ ├── encryption_test.dart
│ │ │ │ │ └── properties_test.dart
│ │ │ │ ├── epub
│ │ │ │ │ ├── epub_layout_test.dart
│ │ │ │ │ ├── presentation_test.dart
│ │ │ │ │ ├── properties_test.dart
│ │ │ │ │ └── publication_test.dart
│ │ │ │ ├── html
│ │ │ │ │ ├── dom_range_test.dart
│ │ │ │ │ └── locator_test.dart
│ │ │ │ ├── link_test.dart
│ │ │ │ ├── localized_string_test.dart
│ │ │ │ ├── locator_test.dart
│ │ │ │ ├── manifest_test.dart
│ │ │ │ ├── metadata_test.dart
│ │ │ │ ├── opds
│ │ │ │ │ ├── properties_test.dart
│ │ │ │ │ └── publication_test.dart
│ │ │ │ ├── presentation
│ │ │ │ │ ├── metadata_test.dart
│ │ │ │ │ ├── presentation_test.dart
│ │ │ │ │ └── properties_test.dart
│ │ │ │ ├── properties_test.dart
│ │ │ │ ├── publication_collection_test.dart
│ │ │ │ ├── publication_test.dart
│ │ │ │ ├── reading_progression_test.dart
│ │ │ │ ├── services
│ │ │ │ │ ├── cover_service_test.dart
│ │ │ │ │ ├── locator_service_test.dart
│ │ │ │ │ └── positions_service_test.dart
│ │ │ │ ├── services_builder_test.dart
│ │ │ │ └── subject_test.dart
│ │ │ └── util
│ │ │ │ ├── archive
│ │ │ │ └── archive_test.dart
│ │ │ │ └── mediatype
│ │ │ │ ├── media_type_test.dart
│ │ │ │ └── sniffer_test.dart
│ │ └── test_resources
│ │ │ ├── fetcher
│ │ │ ├── directory
│ │ │ │ ├── subdirectory
│ │ │ │ │ ├── hello.mp3
│ │ │ │ │ └── text2.txt
│ │ │ │ └── text1.txt
│ │ │ ├── epub.epub
│ │ │ └── text.txt
│ │ │ ├── format
│ │ │ ├── audiobook-lcp.unknown
│ │ │ ├── audiobook-package.unknown
│ │ │ ├── audiobook-wrongtype.json
│ │ │ ├── audiobook.json
│ │ │ ├── cbz.unknown
│ │ │ ├── divina-package.unknown
│ │ │ ├── divina.json
│ │ │ ├── epub.unknown
│ │ │ ├── html.unknown
│ │ │ ├── lcpl.unknown
│ │ │ ├── lpf-index-html.unknown
│ │ │ ├── lpf.unknown
│ │ │ ├── opds-authentication.json
│ │ │ ├── opds1-entry.unknown
│ │ │ ├── opds1-feed.unknown
│ │ │ ├── opds2-feed.json
│ │ │ ├── opds2-publication.json
│ │ │ ├── pdf-lcp.unknown
│ │ │ ├── pdf.unknown
│ │ │ ├── png.unknown
│ │ │ ├── unknown
│ │ │ ├── unknown.zip
│ │ │ ├── w3c-wpub.json
│ │ │ ├── webpub-package.unknown
│ │ │ ├── webpub.json
│ │ │ ├── xhtml.unknown
│ │ │ └── zab.unknown
│ │ │ ├── publication
│ │ │ └── services
│ │ │ │ └── cover.jpg
│ │ │ └── util
│ │ │ └── archive
│ │ │ ├── epub.epub
│ │ │ └── epub
│ │ │ ├── EPUB
│ │ │ ├── cover.xhtml
│ │ │ ├── css
│ │ │ │ ├── epub.css
│ │ │ │ └── nav.css
│ │ │ ├── images
│ │ │ │ └── cover.png
│ │ │ ├── nav.xhtml
│ │ │ ├── package.opf
│ │ │ ├── s04.xhtml
│ │ │ └── toc.ncx
│ │ │ ├── META-INF
│ │ │ └── container.xml
│ │ │ └── mimetype
│ ├── streamer
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── example
│ │ │ ├── lib
│ │ │ │ ├── links.opf
│ │ │ │ └── main.dart
│ │ │ └── pubspec.yaml
│ │ ├── lib
│ │ │ ├── parser.dart
│ │ │ ├── pdf.dart
│ │ │ ├── publication_parser.dart
│ │ │ └── src
│ │ │ │ ├── cbz
│ │ │ │ └── cbz_parser.dart
│ │ │ │ ├── container
│ │ │ │ ├── container.dart
│ │ │ │ └── publication_container.dart
│ │ │ │ ├── epub
│ │ │ │ ├── clock_value_parser.dart
│ │ │ │ ├── constants.dart
│ │ │ │ ├── encryption_parser.dart
│ │ │ │ ├── epub_deobfuscator.dart
│ │ │ │ ├── epub_parser.dart
│ │ │ │ ├── epub_positions_service.dart
│ │ │ │ ├── extensions
│ │ │ │ │ └── xml_node.dart
│ │ │ │ ├── metadata_parser.dart
│ │ │ │ ├── navigation_document_parser.dart
│ │ │ │ ├── ncx_parser.dart
│ │ │ │ ├── package_document.dart
│ │ │ │ ├── property_data_type.dart
│ │ │ │ ├── publication_factory.dart
│ │ │ │ └── readium_css_layout.dart
│ │ │ │ ├── image
│ │ │ │ └── image_parser.dart
│ │ │ │ ├── pdf
│ │ │ │ ├── pdf_bookmark.dart
│ │ │ │ ├── pdf_document.dart
│ │ │ │ ├── pdf_document_factory.dart
│ │ │ │ ├── pdf_page.dart
│ │ │ │ ├── pdf_parser.dart
│ │ │ │ └── pdf_positions_service.dart
│ │ │ │ ├── readium
│ │ │ │ ├── lcpdf_positions_service.dart
│ │ │ │ └── readium_web_pub_parser.dart
│ │ │ │ └── streamer.dart
│ │ ├── pubspec.yaml
│ │ ├── test
│ │ │ └── parser
│ │ │ │ ├── epub
│ │ │ │ ├── clock_value_parser_test.dart
│ │ │ │ ├── encryption_parser_test.dart
│ │ │ │ ├── epub_deobfuscator_test.dart
│ │ │ │ ├── epub_positions_service_test.dart
│ │ │ │ ├── metadata_test.dart
│ │ │ │ ├── navigation_document_parser_test.dart
│ │ │ │ ├── package_document_test.dart
│ │ │ │ └── property_data_type_test.dart
│ │ │ │ ├── image
│ │ │ │ └── image_parser_test.dart
│ │ │ │ └── pdf
│ │ │ │ └── pdf_positions_service_test.dart
│ │ └── test_resources
│ │ │ ├── epub
│ │ │ ├── deobfuscation
│ │ │ │ ├── cut-cut.adb.woff
│ │ │ │ ├── cut-cut.obf.woff
│ │ │ │ └── cut-cut.woff
│ │ │ ├── encryption
│ │ │ │ ├── encryption-lcp-prefixes.xml
│ │ │ │ ├── encryption-lcp-xmlns.xml
│ │ │ │ └── encryption-unknown-method.xml
│ │ │ ├── navigation
│ │ │ │ ├── nav-children.xhtml
│ │ │ │ ├── nav-complex.xhtml
│ │ │ │ ├── nav-empty.xhtml
│ │ │ │ ├── nav-section.xhtml
│ │ │ │ └── nav-titles.xhtml
│ │ │ ├── ncx
│ │ │ │ ├── ncx-children.ncx
│ │ │ │ ├── ncx-complex.ncx
│ │ │ │ ├── ncx-empty.ncx
│ │ │ │ └── ncx-titles.ncx
│ │ │ └── package
│ │ │ │ ├── collections-epub2.opf
│ │ │ │ ├── collections-epub3.opf
│ │ │ │ ├── contributors-epub2.opf
│ │ │ │ ├── contributors-epub3.opf
│ │ │ │ ├── cover-epub2.opf
│ │ │ │ ├── cover-epub3.opf
│ │ │ │ ├── cover-mix.opf
│ │ │ │ ├── dates-epub2.opf
│ │ │ │ ├── dates-epub3.opf
│ │ │ │ ├── fallbacks-termination.opf
│ │ │ │ ├── fallbacks.opf
│ │ │ │ ├── identifier-unique.opf
│ │ │ │ ├── links-properties.opf
│ │ │ │ ├── links.opf
│ │ │ │ ├── meta-others.opf
│ │ │ │ ├── meta-termination.opf
│ │ │ │ ├── presentation-metadata.opf
│ │ │ │ ├── progression-default.opf
│ │ │ │ ├── progression-ltr.opf
│ │ │ │ ├── progression-none.opf
│ │ │ │ ├── progression-rtl.opf
│ │ │ │ ├── subjects-complex.opf
│ │ │ │ ├── subjects-multiple.opf
│ │ │ │ ├── subjects-single.opf
│ │ │ │ ├── title-localized.opf
│ │ │ │ ├── title-main-precedence.opf
│ │ │ │ ├── title-multiple-subtitles.opf
│ │ │ │ ├── titles-epub2.opf
│ │ │ │ ├── titles-epub3.opf
│ │ │ │ ├── version-default.opf
│ │ │ │ ├── version-epub2.opf
│ │ │ │ └── version-epub3.opf
│ │ │ └── image
│ │ │ ├── futuristic_tales.cbz
│ │ │ └── futuristic_tales.jpg
│ └── webview
│ │ ├── .gitignore
│ │ ├── .metadata
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── lib
│ │ ├── src
│ │ │ ├── flutter_inappwebview_stub.dart
│ │ │ ├── headless_in_app_web_view_stub.dart
│ │ │ └── main.dart
│ │ └── webview.dart
│ │ └── pubspec.yaml
│ └── reader_widget
│ ├── .gitignore
│ ├── .metadata
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── assets
│ ├── appainter_dark_theme.json
│ ├── appainter_light_theme.json
│ ├── fonts
│ │ ├── times-new-roman bold-italic.ttf
│ │ ├── times-new-roman-bold.ttf
│ │ ├── times-new-roman-italic.ttf
│ │ └── times-new-roman.ttf
│ └── images
│ │ ├── app-icon.ai
│ │ ├── app-icon.png
│ │ ├── app-play-feature-image.ai
│ │ ├── app-play-feature-image.png
│ │ ├── baseline_fast_forward_white_24.png
│ │ ├── baseline_fast_rewind_white_24.png
│ │ ├── baseline_forward_10_white_24.png
│ │ ├── baseline_replay_10_white_24.png
│ │ ├── baseline_search_white_24.png
│ │ ├── cnl.png
│ │ ├── cover.png
│ │ ├── empty.png
│ │ ├── home_web.png
│ │ ├── ic_forward_5_white_24dp.png
│ │ ├── ic_pause_white_24dp.png
│ │ ├── ic_play_arrow_white_24dp.png
│ │ ├── ic_replay_5_white_24dp.png
│ │ ├── ic_skip_left_white_24dp.png
│ │ ├── ic_skip_right_white_24dp.png
│ │ ├── icon_audio.png
│ │ ├── icon_bookmark.png
│ │ ├── icon_decrease.png
│ │ ├── icon_drm.png
│ │ ├── icon_font_decrease.png
│ │ ├── icon_font_increase.png
│ │ ├── icon_increse.png
│ │ ├── icon_justify.png
│ │ ├── icon_justify_white.png
│ │ ├── icon_left.png
│ │ ├── icon_left_white.png
│ │ ├── icon_menu.png
│ │ ├── icon_minus.png
│ │ ├── icon_overflow.png
│ │ ├── icon_plus.png
│ │ ├── icon_plus_white.png
│ │ ├── icon_settings.png
│ │ └── place.png
│ ├── example
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android
│ │ ├── .gitignore
│ │ ├── app
│ │ │ ├── build.gradle
│ │ │ └── src
│ │ │ │ ├── debug
│ │ │ │ └── AndroidManifest.xml
│ │ │ │ ├── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin
│ │ │ │ │ └── com
│ │ │ │ │ │ └── mantano
│ │ │ │ │ │ └── example
│ │ │ │ │ │ └── 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
│ ├── assets
│ │ ├── appainter_dark_theme.json
│ │ ├── appainter_light_theme.json
│ │ ├── books
│ │ │ ├── 39419251_rtl.epub
│ │ │ ├── 9089_rtl.epub
│ │ │ ├── 9782067179578_GM_PARIS_2012_ANDROID.epub
│ │ │ ├── Code du travail.epub
│ │ │ └── accessible_epub_3.epub
│ │ └── images
│ │ │ ├── ic_skip_left_white_24dp.png
│ │ │ └── ic_skip_right_white_24dp.png
│ ├── ios
│ │ ├── .gitignore
│ │ ├── Flutter
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── 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
│ │ └── utils
│ │ │ └── utils.dart
│ ├── macos
│ │ ├── .gitignore
│ │ ├── Flutter
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ └── Flutter-Release.xcconfig
│ │ ├── 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
│ ├── pubspec.yaml
│ ├── 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
│ │ └── 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
│ ├── lib
│ ├── iridium_reader_widget.dart
│ ├── util
│ │ └── router.dart
│ └── views
│ │ └── viewers
│ │ ├── book_screen.dart
│ │ ├── book_toolbar.dart
│ │ ├── epub_screen.dart
│ │ ├── model
│ │ └── fonts.dart
│ │ └── ui
│ │ ├── annotations_panel.dart
│ │ ├── content_panel.dart
│ │ ├── reader_app_bar.dart
│ │ ├── reader_navigation_screen.dart
│ │ ├── reader_toolbar.dart
│ │ ├── settings
│ │ ├── advanced_settings_panel.dart
│ │ ├── alignment_button.dart
│ │ ├── color_theme.dart
│ │ ├── font_size_button.dart
│ │ ├── general_settings_panel.dart
│ │ ├── settings_panel.dart
│ │ └── settings_row.dart
│ │ ├── toolbar_button.dart
│ │ └── toolbar_page_number.dart
│ └── pubspec.yaml
├── pubspec.lock
├── pubspec.yaml
├── ss
├── 1.png
├── 10.png
├── 11.png
├── 12.png
├── 13.png
├── 14.png
├── 15.png
├── 16.png
├── 2.png
├── 3.png
├── 4.png
├── 5.png
├── 6.png
├── 7.png
├── 8.png
├── 9.png
├── desktop_1.png
└── logo_feedbooks.png
├── 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: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: jideguru
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 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
13 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:lint/strict.yaml
2 |
3 | analyzer:
4 | exclude:
5 | - build/**
6 | - "**/*.g.dart"
7 | - "**/*.freezed.dart"
8 | - "**/*.gr.dart"
9 | - packages/**
10 | - "**/category_feed.dart"
11 |
12 | linter:
13 | rules:
14 | avoid_print: true
15 | prefer_single_quotes: true
16 | always_use_package_imports: true
17 | empty_statements: true
18 | always_declare_return_types: true
19 | camel_case_extensions: true
20 | require_trailing_commas: true
21 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/android/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/android/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/dev/jideguru/flutter_ebook_app/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package dev.jideguru.flutter_ebook_app
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | feedbooks.com
5 | feedbooks.net
6 |
7 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.enableR8=true
3 | android.useAndroidX=true
4 | android.enableJetifier=true
--------------------------------------------------------------------------------
/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-7.5-all.zip
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
4 |
5 | def plugins = new Properties()
6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
7 | if (pluginsFile.exists()) {
8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
9 | }
10 |
11 | plugins.each { name, path ->
12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
13 | include ":$name"
14 | project(":$name").projectDir = pluginDirectory
15 | }
16 |
--------------------------------------------------------------------------------
/android/settings_aar.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/assets/images/app-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/assets/images/app-icon.png
--------------------------------------------------------------------------------
/assets/images/empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/assets/images/empty.png
--------------------------------------------------------------------------------
/assets/images/place.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/assets/images/place.png
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | *.mode1v3
2 | *.mode2v3
3 | *.moved-aside
4 | *.pbxuser
5 | *.perspectivev3
6 | **/*sync/
7 | .sconsign.dblite
8 | .tags*
9 | **/.vagrant/
10 | **/DerivedData/
11 | Icon?
12 | **/Pods/
13 | **/.symlinks/
14 | profile
15 | xcuserdata
16 | **/.generated/
17 | Flutter/App.framework
18 | Flutter/Flutter.framework
19 | Flutter/Flutter.podspec
20 | Flutter/Generated.xcconfig
21 | Flutter/app.flx
22 | Flutter/app.zip
23 | Flutter/flutter_assets/
24 | Flutter/flutter_export_environment.sh
25 | ServiceDefinitions.json
26 | Runner/GeneratedPluginRegistrant.*
27 |
28 | # Exceptions to above rules.
29 | !default.mode1v3
30 | !default.mode2v3
31 | !default.pbxuser
32 | !default.perspectivev3
33 |
--------------------------------------------------------------------------------
/ios/Flutter/.last_build_id:
--------------------------------------------------------------------------------
1 | 11c8c6490f0058a1aeea4510aaba39be
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-1024.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-20.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-29.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-40.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-76.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/AppIcon.appiconset/book-icon-83.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/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JideGuru/FlutterEbookApp/b09736833197a9cfb3de39ffe8db2f7c1508056a/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"
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter_ebook_app/src/app.dart';
4 | import 'package:flutter_ebook_app/src/common/common.dart';
5 | import 'package:flutter_riverpod/flutter_riverpod.dart';
6 | import 'package:flutter_web_plugins/url_strategy.dart';
7 | import 'package:sembast/sembast.dart';
8 |
9 | void main() async {
10 | WidgetsFlutterBinding.ensureInitialized();
11 | LocalStorage();
12 | await DatabaseConfig.init(StoreRef.main());
13 | if (kIsWeb) usePathUrlStrategy();
14 | runApp(
15 | ProviderScope(
16 | observers: [RiverpodObserver()],
17 | child: MyApp(),
18 | ),
19 | );
20 | }
21 |
--------------------------------------------------------------------------------
/lib/src/common/application/application.dart:
--------------------------------------------------------------------------------
1 | export 'services/services.dart';
2 |
--------------------------------------------------------------------------------
/lib/src/common/application/services/services.dart:
--------------------------------------------------------------------------------
1 | export 'current_app_theme_service.dart';
2 |
--------------------------------------------------------------------------------
/lib/src/common/common.dart:
--------------------------------------------------------------------------------
1 | export 'application/application.dart';
2 | export 'constants/constants.dart';
3 | export 'data/data.dart';
4 | export 'domain/domain.dart';
5 | export 'extensions/extensions.dart';
6 | export 'presentation/presentation.dart';
7 | export 'router/app_router.dart';
8 | export 'utils/utils.dart';
9 |
--------------------------------------------------------------------------------
/lib/src/common/constants/constants.dart:
--------------------------------------------------------------------------------
1 | export 'api.dart';
2 | export 'shared_preferences_key.dart';
3 | export 'strings.dart';
4 | export 'utils.dart';
5 |
--------------------------------------------------------------------------------
/lib/src/common/constants/shared_preferences_key.dart:
--------------------------------------------------------------------------------
1 | String get isDarkModeKey => 'isDarkMode';
2 |
--------------------------------------------------------------------------------
/lib/src/common/constants/strings.dart:
--------------------------------------------------------------------------------
1 | const String appName = 'OpenLeaf';
2 |
--------------------------------------------------------------------------------
/lib/src/common/constants/utils.dart:
--------------------------------------------------------------------------------
1 | import 'dart:math';
2 |
3 | String formatBytes(int bytes, int decimals) {
4 | if (bytes == 0) return '0.0';
5 | const k = 1024;
6 | final dm = decimals <= 0 ? 0 : decimals;
7 | final sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
8 | final i = (log(bytes) / log(k)).floor();
9 | return '${(bytes / pow(k, i)).toStringAsFixed(dm)} ${sizes[i]}';
10 | }
11 |
--------------------------------------------------------------------------------
/lib/src/common/data/data.dart:
--------------------------------------------------------------------------------
1 | export 'data_sources/data_sources.dart';
2 | export 'database/database.dart';
3 | export 'failures/http_failure.dart';
4 | export 'local/local_storage.dart';
5 | export 'remote/adapter/adapter.dart';
6 | export 'remote/app_dio.dart';
7 | export 'repositories/repositories.dart';
8 |
--------------------------------------------------------------------------------
/lib/src/common/data/data_sources/data_sources.dart:
--------------------------------------------------------------------------------
1 | export 'downloads/downloads_local_data_source.dart';
2 | export 'downloads/downloads_local_data_source_impl.dart';
3 | export 'favorites/favorites_local_data_source.dart';
4 | export 'favorites/favorites_local_data_source_impl.dart';
5 |
--------------------------------------------------------------------------------
/lib/src/common/data/data_sources/downloads/downloads_local_data_source.dart:
--------------------------------------------------------------------------------
1 | abstract class DownloadsLocalDataSource {
2 | const DownloadsLocalDataSource();
3 |
4 | Future addBook(Map book, String id);
5 |
6 | Future deleteBook(String id);
7 |
8 | Future deleteAllBooksWithId(String id);
9 |
10 | Future>> downloadList();
11 |
12 | Stream>> downloadListStream();
13 |
14 | Future