├── LOG.txt
├── linux
├── .gitignore
├── assets
│ └── otzaria.png
├── main.cc
├── flutter
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
├── my_application.h
└── packaging
│ ├── deb
│ └── make_config.yaml
│ ├── rpm
│ └── make_config.yaml
│ └── README.md
├── version.json
├── analysis_options.yaml
├── sivan22.pfx
├── ios
├── Runner
│ ├── Runner-Bridging-Header.h
│ ├── Assets.xcassets
│ │ ├── LaunchImage.imageset
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ ├── README.md
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ ├── 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-1024x1024@1x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ └── Main.storyboard
│ └── Info.plist
├── Flutter
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── AppFrameworkInfo.plist
├── Runner.xcodeproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
├── RunnerTests
│ └── RunnerTests.swift
├── .gitignore
└── Podfile
├── images
├── logo.png
├── Orayta.png
├── dicta_logo.jpg
├── screenshot.png
├── toratemet.png
├── safria logo.png
├── OnYourWay_logo.jpg
├── JewishBook-logo-שקוף.png
├── white_sketch128x128.ico
├── Project Ben-Yehuda logo.jpg
└── logo.svg
├── sivan22.pfx.bak
├── web
├── favicon.png
├── icons
│ ├── Icon-192.png
│ ├── Icon-512.png
│ ├── Icon-maskable-192.png
│ └── Icon-maskable-512.png
├── manifest.json
└── index.html
├── assets
├── icon
│ ├── icon.png
│ ├── זכור ושמור.png
│ ├── שמור וזכור.png
│ ├── logo_nedarim.png
│ ├── שמור וזכור מקור.png
│ ├── shamor_zachor_with_v.png
│ └── memorial_candle.svg
├── logos
│ ├── otzar.ico
│ └── hebrew_books.png
└── shamor_zachor
│ └── data
│ └── yerushalmi.json
├── fonts
├── ShofarRegular.ttf
├── Tinos-Regular.ttf
├── KeterYG-Medium.ttf
├── FrankRuehlCLM-Bold.ttf
├── FrankRuehlCLM-Medium.ttf
├── TaameyAshkenaz-Medium.ttf
├── TaameyDavidCLM-Medium.ttf
├── Rubik-VariableFont_wght.ttf
├── NotoRashiHebrew-VariableFont_wght.ttf
└── NotoSerifHebrew-VariableFont_wdth,wght.ttf
├── installer
├── white_sketch128x128.ico
├── .gitignore
├── uninstall_msix.ps1
├── reset_settings.ps1
└── otzaria.iss
├── android
├── gradle.properties
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ ├── xml
│ │ │ │ │ └── network_security_config.xml
│ │ │ │ ├── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night
│ │ │ │ │ └── styles.xml
│ │ │ ├── kotlin
│ │ │ │ └── com
│ │ │ │ │ └── example
│ │ │ │ │ └── otzaria
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── AndroidManifest.xml
│ │ ├── profile
│ │ │ └── AndroidManifest.xml
│ │ └── debug
│ │ │ └── AndroidManifest.xml
│ └── build.gradle
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── .gitignore
├── settings.gradle
└── build.gradle
├── macos
├── Runner
│ ├── Configs
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ ├── Warnings.xcconfig
│ │ └── AppInfo.xcconfig
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── app_icon_16.png
│ │ │ ├── app_icon_32.png
│ │ │ ├── app_icon_64.png
│ │ │ ├── app_icon_1024.png
│ │ │ ├── app_icon_128.png
│ │ │ ├── app_icon_256.png
│ │ │ ├── app_icon_512.png
│ │ │ └── Contents.json
│ ├── AppDelegate.swift
│ ├── MainFlutterWindow.swift
│ ├── Release.entitlements
│ ├── DebugProfile.entitlements
│ └── Info.plist
├── .gitignore
├── Flutter
│ ├── Flutter-Debug.xcconfig
│ └── Flutter-Release.xcconfig
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Runner.xcodeproj
│ └── project.xcworkspace
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── RunnerTests
│ └── RunnerTests.swift
└── Podfile
├── windows
├── runner
│ ├── resources
│ │ └── app_icon.ico
│ ├── resource.h
│ ├── utils.h
│ ├── runner.exe.manifest
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── CMakeLists.txt
│ └── utils.cpp
├── .gitignore
└── flutter
│ ├── generated_plugin_registrant.h
│ ├── generated_plugins.cmake
│ └── generated_plugin_registrant.cc
├── devtools_options.yaml
├── test
├── unit
│ ├── mocks
│ │ ├── mock_settings_wrapper.dart
│ │ ├── mock_settings.dart
│ │ ├── mock_settings_repository.dart
│ │ ├── mock_settings.mocks.dart
│ │ └── mock_settings_wrapper.mocks.dart
│ └── settings
│ │ └── history
│ │ └── bookmark_model_test.dart
├── widget_test.dart
├── services
│ └── data_collection_service_test.dart
├── calendar_cubit_test.dart
└── models
│ └── phone_report_data_test.dart
├── update_version.bat
├── lib
├── widgets
│ ├── filter_list
│ │ └── src
│ │ │ ├── theme
│ │ │ └── theme.dart
│ │ │ ├── widget
│ │ │ ├── search_field_widget.dart
│ │ │ └── control_button.dart
│ │ │ └── state
│ │ │ └── filter_state.dart
│ ├── password_dialog.dart
│ └── reusable_items_dialog.dart
├── utils
│ ├── extraction.dart
│ ├── color_utils.dart
│ └── settings_wrapper.dart
├── models
│ └── isar_collections
│ │ ├── line.dart
│ │ └── ref.dart
├── history
│ ├── history_dialog.dart
│ ├── bloc
│ │ ├── history_state.dart
│ │ └── history_event.dart
│ └── history_repository.dart
├── bookmarks
│ ├── bloc
│ │ ├── bookmark_state.dart
│ │ └── bookmark_bloc.dart
│ ├── bookmarks_dialog.dart
│ └── repository
│ │ └── bookmark_repository.dart
├── personal_notes
│ ├── utils
│ │ ├── note_collection_utils.dart
│ │ └── note_text_utils.dart
│ ├── personal_notes_system.dart
│ └── bloc
│ │ ├── personal_notes_state.dart
│ │ └── personal_notes_event.dart
├── file_sync
│ ├── file_sync_event.dart
│ └── file_sync_state.dart
├── search
│ ├── view
│ │ ├── tantivy_search_field.dart
│ │ └── full_text_search_screen.dart
│ ├── models
│ │ └── search_terms_model.dart
│ └── bloc
│ │ └── search_event.dart
├── text_book
│ ├── models
│ │ ├── search_results.dart
│ │ └── commentator_group.dart
│ ├── editing
│ │ ├── helpers
│ │ │ └── editor_settings_helper.dart
│ │ ├── models
│ │ │ ├── editor_settings.dart
│ │ │ ├── editor_state.dart
│ │ │ └── text_draft.dart
│ │ └── repository
│ │ │ └── overrides_repository.dart
│ ├── view
│ │ └── text_book_scaffold.dart
│ └── text_book_repository.dart
├── navigation
│ ├── navigation_repository.dart
│ ├── bloc
│ │ ├── navigation_event.dart
│ │ ├── navigation_state.dart
│ │ └── navigation_bloc.dart
│ ├── about_dialog.dart
│ └── favoriets_screen.dart
├── find_ref
│ ├── find_ref_event.dart
│ ├── find_ref_state.dart
│ ├── find_ref_bloc.dart
│ └── find_ref_repository.dart
├── app_bloc_observer.dart
├── daf_yomi
│ └── calendar.dart
├── indexing
│ └── bloc
│ │ ├── indexing_event.dart
│ │ └── indexing_state.dart
├── tabs
│ ├── bloc
│ │ ├── tabs_state.dart
│ │ └── tabs_event.dart
│ ├── tabs_repository.dart
│ └── models
│ │ └── tab.dart
├── data
│ └── repository
│ │ ├── base_list_repository.dart
│ │ └── hive_list_repository.dart
├── empty_library
│ └── bloc
│ │ ├── empty_library_event.dart
│ │ └── empty_library_state.dart
├── workspaces
│ ├── workspace.dart
│ ├── bloc
│ │ ├── workspace_state.dart
│ │ └── workspace_event.dart
│ └── workspace_repository.dart
├── focus
│ └── focus_repository.dart
├── library
│ └── bloc
│ │ └── library_event.dart
└── core
│ └── window_listener.dart
├── distribute_options.yaml
├── create.bat
├── .github
├── ISSUE_TEMPLATE
│ ├── feature-request---.md
│ └── bug-report---.md
└── workflows
│ └── claude.yml
├── packages
└── shamor_zachor
│ ├── lib
│ ├── shamor_zachor.dart
│ ├── shamor_zachor_config.dart
│ └── utils
│ │ ├── category_aliases.dart
│ │ └── json_utils.dart
│ ├── pubspec.yaml
│ ├── test
│ ├── category_aliases_test.dart
│ └── shamor_zachor_test.dart
│ └── assets
│ └── data
│ └── yerushalmi.json
├── .metadata
├── .gitignore
├── sivan22.crt
├── sivan22.crt.bak
└── webhooks
├── main.py
└── yemot.py
/LOG.txt:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/linux/.gitignore:
--------------------------------------------------------------------------------
1 | flutter/ephemeral
2 |
--------------------------------------------------------------------------------
/version.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.9.71"
3 | }
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:flutter_lints/flutter.yaml
2 |
--------------------------------------------------------------------------------
/sivan22.pfx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/sivan22.pfx
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/images/logo.png
--------------------------------------------------------------------------------
/sivan22.pfx.bak:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/sivan22.pfx.bak
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/web/favicon.png
--------------------------------------------------------------------------------
/images/Orayta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/images/Orayta.png
--------------------------------------------------------------------------------
/assets/icon/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/assets/icon/icon.png
--------------------------------------------------------------------------------
/images/dicta_logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/images/dicta_logo.jpg
--------------------------------------------------------------------------------
/images/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/images/screenshot.png
--------------------------------------------------------------------------------
/images/toratemet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/images/toratemet.png
--------------------------------------------------------------------------------
/assets/logos/otzar.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/assets/logos/otzar.ico
--------------------------------------------------------------------------------
/fonts/ShofarRegular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/fonts/ShofarRegular.ttf
--------------------------------------------------------------------------------
/fonts/Tinos-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/fonts/Tinos-Regular.ttf
--------------------------------------------------------------------------------
/images/safria logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/images/safria logo.png
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/assets/icon/זכור ושמור.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/assets/icon/זכור ושמור.png
--------------------------------------------------------------------------------
/assets/icon/שמור וזכור.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/assets/icon/שמור וזכור.png
--------------------------------------------------------------------------------
/fonts/KeterYG-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/fonts/KeterYG-Medium.ttf
--------------------------------------------------------------------------------
/images/OnYourWay_logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/images/OnYourWay_logo.jpg
--------------------------------------------------------------------------------
/linux/assets/otzaria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/linux/assets/otzaria.png
--------------------------------------------------------------------------------
/assets/icon/logo_nedarim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/assets/icon/logo_nedarim.png
--------------------------------------------------------------------------------
/fonts/FrankRuehlCLM-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/fonts/FrankRuehlCLM-Bold.ttf
--------------------------------------------------------------------------------
/assets/icon/שמור וזכור מקור.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/assets/icon/שמור וזכור מקור.png
--------------------------------------------------------------------------------
/assets/logos/hebrew_books.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/assets/logos/hebrew_books.png
--------------------------------------------------------------------------------
/fonts/FrankRuehlCLM-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/fonts/FrankRuehlCLM-Medium.ttf
--------------------------------------------------------------------------------
/fonts/TaameyAshkenaz-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/fonts/TaameyAshkenaz-Medium.ttf
--------------------------------------------------------------------------------
/fonts/TaameyDavidCLM-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/fonts/TaameyDavidCLM-Medium.ttf
--------------------------------------------------------------------------------
/images/JewishBook-logo-שקוף.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/images/JewishBook-logo-שקוף.png
--------------------------------------------------------------------------------
/images/white_sketch128x128.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/images/white_sketch128x128.ico
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/web/icons/Icon-maskable-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/web/icons/Icon-maskable-512.png
--------------------------------------------------------------------------------
/fonts/Rubik-VariableFont_wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/fonts/Rubik-VariableFont_wght.ttf
--------------------------------------------------------------------------------
/installer/white_sketch128x128.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/installer/white_sketch128x128.ico
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4G
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
5 |
--------------------------------------------------------------------------------
/assets/icon/shamor_zachor_with_v.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/assets/icon/shamor_zachor_with_v.png
--------------------------------------------------------------------------------
/images/Project Ben-Yehuda logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/images/Project Ben-Yehuda logo.jpg
--------------------------------------------------------------------------------
/macos/Runner/Configs/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Debug.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Release.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/windows/runner/resources/app_icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/windows/runner/resources/app_icon.ico
--------------------------------------------------------------------------------
/macos/.gitignore:
--------------------------------------------------------------------------------
1 | # Flutter-related
2 | **/Flutter/ephemeral/
3 | **/Pods/
4 |
5 | # Xcode-related
6 | **/dgph
7 | **/xcuserdata/
8 |
--------------------------------------------------------------------------------
/fonts/NotoRashiHebrew-VariableFont_wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/fonts/NotoRashiHebrew-VariableFont_wght.ttf
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/fonts/NotoSerifHebrew-VariableFont_wdth,wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/fonts/NotoSerifHebrew-VariableFont_wdth,wght.ttf
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/android/app/src/main/res/mipmap-hdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/android/app/src/main/res/mipmap-mdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/macos/Flutter/Flutter-Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "ephemeral/Flutter-Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/macos/Flutter/Flutter-Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "ephemeral/Flutter-Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/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/Otzaria/otzaria/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Otzaria/otzaria/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/otzaria/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.otzaria
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/linux/main.cc:
--------------------------------------------------------------------------------
1 | #include "my_application.h"
2 |
3 | int main(int argc, char** argv) {
4 | g_autoptr(MyApplication) app = my_application_new();
5 | return g_application_run(G_APPLICATION(app), argc, argv);
6 | }
7 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/test/unit/mocks/mock_settings_wrapper.dart:
--------------------------------------------------------------------------------
1 | import 'package:mockito/annotations.dart';
2 | import 'package:otzaria/utils/settings_wrapper.dart';
3 |
4 | @GenerateNiceMocks([MockSpec()])
5 | void main() {}
6 |
--------------------------------------------------------------------------------
/test/unit/mocks/mock_settings.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_settings_screens/flutter_settings_screens.dart';
2 | import 'package:mockito/annotations.dart';
3 |
4 | @GenerateNiceMocks([MockSpec()])
5 | void main() {}
6 |
--------------------------------------------------------------------------------
/test/unit/mocks/mock_settings_repository.dart:
--------------------------------------------------------------------------------
1 | import 'package:mockito/annotations.dart';
2 | import 'package:otzaria/settings/settings_repository.dart';
3 |
4 | @GenerateNiceMocks([MockSpec()])
5 | void main() {}
6 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip
6 |
--------------------------------------------------------------------------------
/update_version.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | echo Running version update script...
3 | powershell -ExecutionPolicy Bypass -File update_version.ps1
4 | if %ERRORLEVEL% EQU 0 (
5 | echo Version update completed successfully!
6 | ) else (
7 | echo Version update failed!
8 | )
9 | pause
--------------------------------------------------------------------------------
/lib/widgets/filter_list/src/theme/theme.dart:
--------------------------------------------------------------------------------
1 | export 'choice_chip_theme.dart';
2 | export 'contol_button_theme.dart';
3 | export 'control_button_bar_theme.dart';
4 | export 'filter_list_delegate_theme.dart';
5 | export 'filter_list_theme.dart';
6 | export 'header_theme.dart';
7 |
--------------------------------------------------------------------------------
/installer/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore Visual C++ Redistributable file (large file, should be downloaded separately)
2 | VisualCppRedist_AIO_x86_x64.exe
3 |
4 | # Ignore built installers (but not icon file)
5 | otzaria-*.exe
6 |
7 | # Ignore Inno Setup output directory if it exists
8 | Output/
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/distribute_options.yaml:
--------------------------------------------------------------------------------
1 | output: dist/
2 | releases:
3 | - name: production
4 | jobs:
5 | - name: release-linux-deb
6 | package:
7 | platform: linux
8 | target: deb
9 | - name: release-linux-rpm
10 | package:
11 | platform: linux
12 | target: rpm
13 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Runner.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 |
--------------------------------------------------------------------------------
/android/app/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/macos/RunnerTests/RunnerTests.swift:
--------------------------------------------------------------------------------
1 | import FlutterMacOS
2 | import Cocoa
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 |
--------------------------------------------------------------------------------
/windows/.gitignore:
--------------------------------------------------------------------------------
1 | flutter/ephemeral/
2 |
3 | # Visual Studio user-specific files.
4 | *.suo
5 | *.user
6 | *.userosscache
7 | *.sln.docstates
8 |
9 | # Visual Studio build-related files.
10 | x64/
11 | x86/
12 |
13 | # Visual Studio cache files
14 | # files ending in .cache can be ignored
15 | *.[Cc]ache
16 | # but keep track of directories ending in .cache
17 | !*.[Cc]ache/
18 |
--------------------------------------------------------------------------------
/macos/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import FlutterMacOS
3 |
4 | @main
5 | class AppDelegate: FlutterAppDelegate {
6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
7 | return true
8 | }
9 |
10 | override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
11 | return true
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/linux/flutter/generated_plugin_registrant.h:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | // clang-format off
6 |
7 | #ifndef GENERATED_PLUGIN_REGISTRANT_
8 | #define GENERATED_PLUGIN_REGISTRANT_
9 |
10 | #include
11 |
12 | // Registers Flutter plugins.
13 | void fl_register_plugins(FlPluginRegistry* registry);
14 |
15 | #endif // GENERATED_PLUGIN_REGISTRANT_
16 |
--------------------------------------------------------------------------------
/windows/flutter/generated_plugin_registrant.h:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | // clang-format off
6 |
7 | #ifndef GENERATED_PLUGIN_REGISTRANT_
8 | #define GENERATED_PLUGIN_REGISTRANT_
9 |
10 | #include
11 |
12 | // Registers Flutter plugins.
13 | void RegisterPlugins(flutter::PluginRegistry* registry);
14 |
15 | #endif // GENERATED_PLUGIN_REGISTRANT_
16 |
--------------------------------------------------------------------------------
/lib/utils/extraction.dart:
--------------------------------------------------------------------------------
1 | import 'package:otzaria/models/books.dart';
2 |
3 | List getAllTopics(List books) {
4 | List topics = [];
5 | for (var book in books) {
6 | for (var topic in book.topics.split(', ')) {
7 | if (!topics.contains(topic)) {
8 | topics.add(topic);
9 | }
10 | }
11 | }
12 | topics.sort((a, b) => a.compareTo(b));
13 | return topics;
14 | }
15 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/create.bat:
--------------------------------------------------------------------------------
1 | REM Clean Flutter build
2 | call flutter clean
3 |
4 | REM Build Flutter Windows app
5 | call flutter build windows
6 |
7 | REM Run Inno Setup scripts
8 | call iscc installer\otzaria.iss
9 | call iscc installer\otzaria_full.iss
10 |
11 | REM Build Flutter Android app
12 | call flutter build apk
13 |
14 | REM build Flutter linux binaries
15 | call flutter build linux
16 |
17 | echo Build and packaging complete.
18 | pause
--------------------------------------------------------------------------------
/lib/models/isar_collections/line.dart:
--------------------------------------------------------------------------------
1 | import 'package:isar/isar.dart';
2 |
3 | part 'line.g.dart';
4 |
5 | @Collection()
6 | class Line {
7 | final int id;
8 | final String text;
9 | final String bookTitle;
10 | final String topics;
11 | final int index;
12 |
13 | Line(
14 | {required this.id,
15 | required this.text,
16 | required this.bookTitle,
17 | required this.topics,
18 | required this.index});
19 | }
20 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @main
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 |
--------------------------------------------------------------------------------
/installer/uninstall_msix.ps1:
--------------------------------------------------------------------------------
1 | # Uninstall the MSIX package with the specified package name
2 |
3 | $packageName = "sivan22.Otzaria"
4 |
5 | # Get the package
6 | $package = Get-AppxPackage -Name $packageName
7 |
8 | if ($null -ne $package) {
9 | Write-Host "Uninstalling package: $packageName"
10 | Remove-AppxPackage -Package $package.PackageFullName
11 | Write-Host "Uninstallation complete."
12 | } else {
13 | Write-Host "Package '$packageName' not found."
14 | }
--------------------------------------------------------------------------------
/lib/history/history_dialog.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:otzaria/history/history_screen.dart';
3 | import 'package:otzaria/widgets/reusable_items_dialog.dart';
4 |
5 | class HistoryDialog extends StatelessWidget {
6 | const HistoryDialog({super.key});
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | return ReusableItemsDialog(
11 | title: 'היסטוריה',
12 | child: const HistoryView(),
13 | );
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/linux/my_application.h:
--------------------------------------------------------------------------------
1 | #ifndef FLUTTER_MY_APPLICATION_H_
2 | #define FLUTTER_MY_APPLICATION_H_
3 |
4 | #include
5 |
6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,
7 | GtkApplication)
8 |
9 | /**
10 | * my_application_new:
11 | *
12 | * Creates a new Flutter-based application.
13 | *
14 | * Returns: a new #MyApplication.
15 | */
16 | MyApplication* my_application_new();
17 |
18 | #endif // FLUTTER_MY_APPLICATION_H_
19 |
--------------------------------------------------------------------------------
/macos/Runner/MainFlutterWindow.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import FlutterMacOS
3 |
4 | class MainFlutterWindow: NSWindow {
5 | override func awakeFromNib() {
6 | let flutterViewController = FlutterViewController()
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 |
--------------------------------------------------------------------------------
/lib/bookmarks/bloc/bookmark_state.dart:
--------------------------------------------------------------------------------
1 | import 'package:otzaria/bookmarks/models/bookmark.dart';
2 |
3 | class BookmarkState {
4 | final List bookmarks;
5 |
6 | BookmarkState({required this.bookmarks});
7 |
8 | factory BookmarkState.initial() {
9 | return BookmarkState(bookmarks: const []);
10 | }
11 |
12 | BookmarkState copyWith({List? bookmarks}) {
13 | return BookmarkState(
14 | bookmarks: bookmarks ?? this.bookmarks,
15 | );
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/lib/bookmarks/bookmarks_dialog.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:otzaria/bookmarks/bookmark_screen.dart';
3 | import 'package:otzaria/widgets/reusable_items_dialog.dart';
4 |
5 | class BookmarksDialog extends StatelessWidget {
6 | const BookmarksDialog({super.key});
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | return ReusableItemsDialog(
11 | title: 'סימניות',
12 | child: const BookmarkView(),
13 | );
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/lib/personal_notes/utils/note_collection_utils.dart:
--------------------------------------------------------------------------------
1 | import 'package:otzaria/personal_notes/models/personal_note.dart';
2 |
3 | List sortPersonalNotes(List notes) {
4 | final located = notes.where((n) => n.hasLocation).toList()
5 | ..sort((a, b) => a.lineNumber!.compareTo(b.lineNumber!));
6 | final missing = notes.where((n) => !n.hasLocation).toList()
7 | ..sort((a, b) => b.updatedAt.compareTo(a.updatedAt));
8 | return [...located, ...missing];
9 | }
10 |
--------------------------------------------------------------------------------
/installer/reset_settings.ps1:
--------------------------------------------------------------------------------
1 | # Define the target directory path using environment variable
2 | $targetPath = "${env:APPDATA}\com.example\otzaria"
3 |
4 | # Check if the path exists
5 | if (Test-Path -Path $targetPath) {
6 | # Remove all items recursively (including subfolders)
7 | Remove-Item -Path $targetPath -Force -Recurse
8 |
9 | Write-Host "Successfully erased contents of '$targetPath'."
10 | }
11 | else {
12 | Write-Host "Directory '$targetPath' not found. Skipping deletion."
13 | }
14 |
--------------------------------------------------------------------------------
/lib/models/isar_collections/ref.dart:
--------------------------------------------------------------------------------
1 | import 'package:isar/isar.dart';
2 |
3 | part 'ref.g.dart';
4 |
5 | @Collection()
6 | class Ref {
7 | @Id()
8 | final int id;
9 | final String ref;
10 | final String bookTitle;
11 | final int index;
12 | final bool pdfBook;
13 | final String? pdfPath;
14 | Ref(
15 | {required this.id,
16 | required this.ref,
17 | required this.bookTitle,
18 | required this.index,
19 | required this.pdfBook,
20 | this.pdfPath});
21 | }
22 |
--------------------------------------------------------------------------------
/test/unit/settings/history/bookmark_model_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_test/flutter_test.dart';
2 | import 'package:otzaria/bookmarks/models/bookmark.dart';
3 |
4 | void main() {
5 | test('Bookmark.fromJson handles missing commentators field', () {
6 | final json = {
7 | 'ref': 'test ref',
8 | 'index': 1,
9 | 'book': {'title': 'Book A', 'type': 'TextBook'}
10 | };
11 | final bookmark = Bookmark.fromJson(json);
12 | expect(bookmark.commentatorsToShow, isEmpty);
13 | });
14 | }
15 |
--------------------------------------------------------------------------------
/windows/runner/resource.h:
--------------------------------------------------------------------------------
1 | //{{NO_DEPENDENCIES}}
2 | // Microsoft Visual C++ generated include file.
3 | // Used by Runner.rc
4 | //
5 | #define IDI_APP_ICON 101
6 |
7 | // Next default values for new objects
8 | //
9 | #ifdef APSTUDIO_INVOKED
10 | #ifndef APSTUDIO_READONLY_SYMBOLS
11 | #define _APS_NEXT_RESOURCE_VALUE 102
12 | #define _APS_NEXT_COMMAND_VALUE 40001
13 | #define _APS_NEXT_CONTROL_VALUE 1001
14 | #define _APS_NEXT_SYMED_VALUE 101
15 | #endif
16 | #endif
17 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature-request---.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: "Feature request \U0001F680 בקשה להוספת תכונה"
3 | about: Suggest an idea | רעיון לשיפור או שדרוג
4 | labels: enhancement
5 |
6 | ---
7 |
8 | ## Summary | סיכום
9 | Brief explanation of the feature.
10 | הסבר קצר של התכונה
11 |
12 | ### Basic example | דוגמה
13 | Include a basic example or links here.
14 | דוגמה פשוטה או קישורים מתאימים
15 |
16 | ### Motivation | תועלת
17 | Why are we doing this? What use cases does it support? What is the expected outcome?
18 | למה לעשות זאת? מה התועלת?
19 |
--------------------------------------------------------------------------------
/lib/file_sync/file_sync_event.dart:
--------------------------------------------------------------------------------
1 | sealed class FileSyncEvent {
2 | const FileSyncEvent();
3 | }
4 |
5 | class StartSync extends FileSyncEvent {
6 | const StartSync();
7 | }
8 |
9 | class StopSync extends FileSyncEvent {
10 | const StopSync();
11 | }
12 |
13 | class UpdateProgress extends FileSyncEvent {
14 | final int current;
15 | final int total;
16 |
17 | const UpdateProgress({
18 | required this.current,
19 | required this.total,
20 | });
21 | }
22 |
23 | class ResetState extends FileSyncEvent {
24 | const ResetState();
25 | }
26 |
--------------------------------------------------------------------------------
/lib/personal_notes/personal_notes_system.dart:
--------------------------------------------------------------------------------
1 | export 'bloc/personal_notes_bloc.dart';
2 | export 'bloc/personal_notes_event.dart';
3 | export 'bloc/personal_notes_state.dart';
4 | export 'models/personal_note.dart';
5 | export 'services/personal_notes_service.dart';
6 | export 'repository/personal_notes_repository.dart';
7 | export 'migration/legacy_notes_converter.dart';
8 | export 'storage/personal_notes_storage.dart';
9 | export 'utils/note_text_utils.dart';
10 | export 'view/personal_notes_screen.dart';
11 | export 'widgets/personal_note_editor_dialog.dart';
12 |
--------------------------------------------------------------------------------
/linux/packaging/deb/make_config.yaml:
--------------------------------------------------------------------------------
1 | display_name: Otzaria
2 | package_name: otzaria
3 |
4 | maintainer:
5 | name: Sivan22
6 | email: sivan.ratson@gmail.com
7 |
8 | priority: optional
9 |
10 | section: x11
11 |
12 | installed_size: 50000
13 |
14 | dependencies: []
15 |
16 | essential: false
17 |
18 | icon: assets/icon/icon.png
19 |
20 | keywords:
21 | - Hebrew
22 | - Books
23 | - Library
24 | - Jewish
25 | - Text
26 |
27 | generic_name: Hebrew Library
28 |
29 | categories:
30 | - Education
31 | - Utility
32 |
33 | startup_notify: true
34 |
--------------------------------------------------------------------------------
/lib/search/view/tantivy_search_field.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:otzaria/search/view/tantivy_full_text_search.dart';
3 | import 'package:otzaria/search/view/enhanced_search_field.dart';
4 |
5 | class TantivySearchField extends StatelessWidget {
6 | const TantivySearchField({
7 | super.key,
8 | required this.widget,
9 | });
10 |
11 | final TantivyFullTextSearch widget;
12 |
13 | @override
14 | Widget build(BuildContext context) {
15 | // נבדוק את השדה החדש
16 | return EnhancedSearchField(widget: widget);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/linux/packaging/rpm/make_config.yaml:
--------------------------------------------------------------------------------
1 | display_name: Otzaria
2 | icon: assets/icon/icon.png
3 | summary: A Hebrew library application for studying Jewish texts
4 | group: Applications/Education
5 | vendor: Sivan22
6 | packager: Sivan22
7 | packagerEmail: sivan.ratson@gmail.com
8 | license: UNLICENSE
9 | url: https://github.com/sivan22/otzaria
10 |
11 | build_arch: x86_64
12 |
13 | requires: []
14 |
15 | keywords:
16 | - Hebrew
17 | - Books
18 | - Library
19 | - Jewish
20 | - Text
21 |
22 | generic_name: Hebrew Library
23 |
24 | categories:
25 | - Education
26 | - Utility
27 |
28 | startup_notify: true
29 |
--------------------------------------------------------------------------------
/packages/shamor_zachor/lib/shamor_zachor.dart:
--------------------------------------------------------------------------------
1 | // Main widget - the only public API
2 | export 'shamor_zachor_widget.dart';
3 |
4 | // Configuration class for optional initialization
5 | export 'shamor_zachor_config.dart';
6 |
7 | // New services for dynamic book management
8 | export 'services/dynamic_data_loader_service.dart';
9 | export 'services/book_scanner_service.dart';
10 | export 'services/custom_books_service.dart';
11 | export 'services/shamor_zachor_service_factory.dart';
12 |
13 | // Models
14 | export 'models/tracked_book_model.dart';
15 |
16 | // Configuration
17 | export 'config/built_in_books_config.dart';
--------------------------------------------------------------------------------
/lib/text_book/models/search_results.dart:
--------------------------------------------------------------------------------
1 | class TextSearchResult {
2 | final String snippet;
3 | final int index;
4 | final String query;
5 | final String address;
6 |
7 | TextSearchResult({
8 | required this.snippet,
9 | required this.index,
10 | required this.query,
11 | required this.address,
12 | });
13 | }
14 |
15 | class BookTextSearchResult extends TextSearchResult {
16 | final String path;
17 | BookTextSearchResult(
18 | {required this.path,
19 | required super.snippet,
20 | required super.index,
21 | required super.query,
22 | required super.address});
23 | }
24 |
--------------------------------------------------------------------------------
/packages/shamor_zachor/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: shamor_zachor
2 | description: שמור וזכור - מערכת מעקב לימוד תורני
3 | version: 1.0.0
4 |
5 | environment:
6 | sdk: ^3.5.4
7 |
8 | dependencies:
9 | flutter:
10 | sdk: flutter
11 | provider: ^6.0.5
12 | shared_preferences: ^2.2.0
13 | path_provider: ^2.1.1
14 | path: ^1.9.0
15 | uuid: ^4.5.1
16 | kosher_dart: ^2.0.18
17 | confetti: ^0.8.0
18 | logging: ^1.3.0
19 |
20 | dev_dependencies:
21 | flutter_test:
22 | sdk: flutter
23 | flutter_lints: ^6.0.0
24 |
25 | dependency_overrides:
26 | lints: ^6.0.0
27 |
28 | flutter:
29 | assets:
30 | - assets/data/
--------------------------------------------------------------------------------
/lib/history/bloc/history_state.dart:
--------------------------------------------------------------------------------
1 | import 'package:otzaria/bookmarks/models/bookmark.dart';
2 |
3 | abstract class HistoryState {
4 | final List history;
5 | HistoryState(this.history);
6 | }
7 |
8 | class HistoryInitial extends HistoryState {
9 | HistoryInitial() : super([]);
10 | }
11 |
12 | class HistoryLoading extends HistoryState {
13 | HistoryLoading(super.history);
14 | }
15 |
16 | class HistoryLoaded extends HistoryState {
17 | HistoryLoaded(super.history);
18 | }
19 |
20 | class HistoryError extends HistoryState {
21 | final String message;
22 | HistoryError(super.history, this.message);
23 | }
24 |
--------------------------------------------------------------------------------
/lib/utils/color_utils.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class ColorUtils {
4 | static Color colorFromString(String? colorString) {
5 | if (colorString == null) {
6 | return const Color(0xff2c1b02); // Default color
7 | }
8 | if (colorString.startsWith('#')) {
9 | colorString = colorString.substring(1);
10 | }
11 | if (colorString.length == 6) {
12 | colorString = 'ff$colorString';
13 | }
14 | return Color(int.parse(colorString, radix: 16));
15 | }
16 |
17 | static String colorToString(Color color) {
18 | return color.toARGB32().toRadixString(16);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug-report---.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: "Bug report \U0001F41E דיווח על באג"
3 | about: Create a bug report | משהו אינו עובד כצפוי
4 | labels: באג
5 |
6 | ---
7 |
8 | ## Describe the bug | תיאור הבאג
9 | A clear and concise description of what the bug is.
10 | תיאור מפורט וברור שמגדיר מהו הבאג
11 |
12 | ### Steps to reproduce | צעדים לשחזור
13 | Steps to reproduce the behavior.
14 | כיצד ניתן לשחזר שוב את הבאג?
15 |
16 | ### Expected behavior | התנהגות צפוייה
17 | A clear and concise description of what you expected to happen.
18 | תיאור ברור של מה שמצופה מהתוכנה לעשות.
19 |
20 | ### Environment | סביבה
21 | - OS | מערכת הפעלה: [e.g. Arch Linux]
22 | - version | גרסת התוכנה:
23 |
--------------------------------------------------------------------------------
/lib/bookmarks/repository/bookmark_repository.dart:
--------------------------------------------------------------------------------
1 | import 'package:otzaria/bookmarks/models/bookmark.dart';
2 | import 'package:otzaria/data/repository/base_list_repository.dart';
3 |
4 | class BookmarkRepository extends BaseListRepository {
5 | BookmarkRepository()
6 | : super(
7 | boxName: 'bookmarks',
8 | key: 'key-bookmarks',
9 | fromJson: (json) => Bookmark.fromJson(json),
10 | toJson: (bookmark) => bookmark.toJson(),
11 | );
12 |
13 | Future> loadBookmarks() async => load();
14 |
15 | Future saveBookmarks(List bookmarks) async => save(bookmarks);
16 |
17 | Future clearBookmarks() async => clear();
18 | }
19 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 = otzaria
9 |
10 | MACOSX_DEPLOYMENT_TARGET = 10.15
11 |
12 |
13 | // The application's bundle identifier
14 | PRODUCT_BUNDLE_IDENTIFIER = com.example.otzaria
15 |
16 | // The copyright displayed in application information
17 | PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved.
18 |
--------------------------------------------------------------------------------
/windows/runner/utils.h:
--------------------------------------------------------------------------------
1 | #ifndef RUNNER_UTILS_H_
2 | #define RUNNER_UTILS_H_
3 |
4 | #include
5 | #include
6 |
7 | // Creates a console for the process, and redirects stdout and stderr to
8 | // it for both the runner and the Flutter library.
9 | void CreateAndAttachConsole();
10 |
11 | // Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string
12 | // encoded in UTF-8. Returns an empty std::string on failure.
13 | std::string Utf8FromUtf16(const wchar_t* utf16_string);
14 |
15 | // Gets the command line arguments passed in as a std::vector,
16 | // encoded in UTF-8. Returns an empty std::vector on failure.
17 | std::vector GetCommandLineArguments();
18 |
19 | #endif // RUNNER_UTILS_H_
20 |
--------------------------------------------------------------------------------
/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_settings_screens/flutter_settings_screens.dart';
3 | import 'package:flutter_test/flutter_test.dart';
4 | import 'package:otzaria/navigation/main_window_screen.dart';
5 |
6 | void main() {
7 | testWidgets('finds main window', (WidgetTester tester) async {
8 | await Settings.init();
9 |
10 | // Build our app and trigger a frame.
11 | await tester.pumpWidget(const MaterialApp(home: MainWindowScreen()));
12 |
13 | // Verify that main window is shown
14 | expect(find.byType(MainWindowScreen), findsOneWidget);
15 |
16 | //if the oriention is landscape Verify that the navigation bar is shown
17 | expect(find.byType(Scaffold), findsOneWidget);
18 | });
19 | }
20 |
--------------------------------------------------------------------------------
/lib/navigation/navigation_repository.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 | import 'package:flutter_settings_screens/flutter_settings_screens.dart';
3 |
4 | class NavigationRepository {
5 | bool checkLibraryIsEmpty() {
6 | final libraryPath = Settings.getValue('key-library-path');
7 | if (libraryPath == null) {
8 | return true;
9 | }
10 |
11 | final libraryDir = Directory('$libraryPath${Platform.pathSeparator}אוצריא');
12 | if (!libraryDir.existsSync() || libraryDir.listSync().isEmpty) {
13 | return true;
14 | }
15 |
16 | return false;
17 | }
18 |
19 | Future refreshLibrary() async {
20 | // This will be implemented when we migrate the library bloc
21 | // For now, it's a placeholder for the refresh functionality
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/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.files.user-selected.read-write
10 |
11 | com.apple.security.files.downloads.read-write
12 |
13 | com.apple.security.temporary-exception.mach-lookup.global-name
14 |
15 | com.apple.mail
16 |
17 | com.apple.security.temporary-exception.apple-events
18 |
19 | com.apple.mail
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/lib/text_book/editing/helpers/editor_settings_helper.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_settings_screens/flutter_settings_screens.dart';
2 | import '../models/editor_settings.dart';
3 |
4 | /// Helper class to get editor settings from SharedPreferences
5 | class EditorSettingsHelper {
6 | static EditorSettings getSettings() {
7 | return EditorSettings(
8 | previewDebounce: Duration(
9 | milliseconds:
10 | Settings.getValue('key-editor-preview-debounce')?.toInt() ??
11 | 150,
12 | ),
13 | globalDraftsQuotaMB:
14 | Settings.getValue('key-editor-drafts-quota')?.toInt() ?? 100,
15 | draftCleanupDays:
16 | Settings.getValue('key-editor-draft-cleanup-days')?.toInt() ??
17 | 30,
18 | );
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/lib/utils/settings_wrapper.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_settings_screens/flutter_settings_screens.dart';
2 |
3 | /// A wrapper around the static Settings class to make it more testable.
4 | /// This allows us to mock the Settings class in tests.
5 | class SettingsWrapper {
6 | /// Gets a value from settings with a default value if not found.
7 | T getValue(String key, {required T defaultValue}) {
8 | return Settings.getValue(key, defaultValue: defaultValue) ??
9 | defaultValue;
10 | }
11 |
12 | /// Sets a value in settings.
13 | Future setValue(String key, T value) {
14 | return Settings.setValue(key, value);
15 | }
16 |
17 | /// Removes a value from settings.
18 | Future remove(String key) {
19 | return Settings.setValue(key, null);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/packages/shamor_zachor/lib/shamor_zachor_config.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | /// Configuration class for ShamorZachor widget
4 | class ShamorZachorConfig {
5 | /// Optional asset path override for data files
6 | final String? assetsBasePath;
7 |
8 | /// Optional theme data to inherit from host app
9 | final ThemeData? themeData;
10 |
11 | /// Optional text direction override
12 | final TextDirection? textDirection;
13 |
14 | /// Optional locale override
15 | final Locale? locale;
16 |
17 | const ShamorZachorConfig({
18 | this.assetsBasePath,
19 | this.themeData,
20 | this.textDirection,
21 | this.locale,
22 | });
23 |
24 | /// Default configuration with sensible defaults
25 | static const ShamorZachorConfig defaultConfig = ShamorZachorConfig();
26 | }
--------------------------------------------------------------------------------
/lib/history/bloc/history_event.dart:
--------------------------------------------------------------------------------
1 | import 'package:otzaria/bookmarks/models/bookmark.dart';
2 | import 'package:otzaria/tabs/models/tab.dart';
3 |
4 | abstract class HistoryEvent {}
5 |
6 | class LoadHistory extends HistoryEvent {}
7 |
8 | class AddHistory extends HistoryEvent {
9 | final OpenedTab tab;
10 | AddHistory(this.tab);
11 | }
12 |
13 | class CaptureStateForHistory extends HistoryEvent {
14 | final OpenedTab tab;
15 | CaptureStateForHistory(this.tab);
16 | }
17 |
18 | class FlushHistory extends HistoryEvent {}
19 |
20 | class BulkAddHistory extends HistoryEvent {
21 | final List snapshots;
22 | BulkAddHistory(this.snapshots);
23 | }
24 |
25 | class RemoveHistory extends HistoryEvent {
26 | final int index;
27 | RemoveHistory(this.index);
28 | }
29 |
30 | class ClearHistory extends HistoryEvent {}
31 |
--------------------------------------------------------------------------------
/lib/find_ref/find_ref_event.dart:
--------------------------------------------------------------------------------
1 | import 'package:otzaria/models/books.dart'; // Import Book models
2 | import 'package:equatable/equatable.dart';
3 |
4 | abstract class FindRefEvent extends Equatable {
5 | const FindRefEvent();
6 |
7 | @override
8 | List