diff --git a/.gitmodules b/.gitmodules
index a1f2e7cd..58decc31 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,6 @@
-[submodule "submodules/jellyfin_api"]
- path = submodules/jellyfin_api
- url = https://github.com/Kara-Zor-El/jellyfin_api
[submodule "submodules/jellybook_epub_view"]
path = submodules/jellybook_epub_view
url = https://github.com/Kara-Zor-El/jellybook_epub_view
+[submodule "submodules/tentacle"]
+ path = submodules/tentacle
+ url = https://github.com/TentacleOrg/Tentacle
diff --git a/README.md b/README.md
index e8c97f9a..a97481f2 100644
--- a/README.md
+++ b/README.md
@@ -42,6 +42,9 @@
| **F-Droid** |
Soon to be submitted to the F-Droid store
|
| **Other Platforms** | If you would like to see this app on your platform, please open an issue and I will see what I can do. |
+> [!NOTE]
+> Any distribution platforms listed above I consider official and trusted. Any sources not listed above are not official and may contain malware and are to be used at your own risk.
+
## :camera: Screenshots (and videos):
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 14cdb4b9..ace6ef18 100755
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -3,6 +3,7 @@ PODS:
- Flutter
- connectivity_plus (0.0.1):
- Flutter
+ - FlutterMacOS
- ReachabilitySwift
- device_info_plus (0.0.1):
- Flutter
@@ -26,14 +27,14 @@ PODS:
- Flutter
- permission_handler_apple (9.3.0):
- Flutter
- - ReachabilitySwift (5.0.0)
- - Sentry/HybridSDK (8.20.0):
- - SentryPrivate (= 8.20.0)
+ - ReachabilitySwift (5.2.1)
+ - Sentry/HybridSDK (8.21.0):
+ - SentryPrivate (= 8.21.0)
- sentry_flutter (0.0.1):
- Flutter
- FlutterMacOS
- - Sentry/HybridSDK (= 8.20.0)
- - SentryPrivate (8.20.0)
+ - Sentry/HybridSDK (= 8.21.0)
+ - SentryPrivate (8.21.0)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
@@ -43,15 +44,15 @@ PODS:
- unrar_file (0.0.1):
- Flutter
- UnrarKit
- - UnrarKit (2.9):
- - UnrarKit/unrar-lib (= 2.9)
- - UnrarKit/unrar-lib (2.9)
+ - UnrarKit (2.10):
+ - UnrarKit/unrar-lib (= 2.10)
+ - UnrarKit/unrar-lib (2.10)
- url_launcher_ios (0.0.1):
- Flutter
DEPENDENCIES:
- audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`)
- - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
+ - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- Flutter (from `Flutter`)
- flutter_background_service_ios (from `.symlinks/plugins/flutter_background_service_ios/ios`)
@@ -80,7 +81,7 @@ EXTERNAL SOURCES:
audioplayers_darwin:
:path: ".symlinks/plugins/audioplayers_darwin/ios"
connectivity_plus:
- :path: ".symlinks/plugins/connectivity_plus/ios"
+ :path: ".symlinks/plugins/connectivity_plus/darwin"
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
Flutter:
@@ -116,27 +117,27 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
- connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d
+ connectivity_plus: e2dad488011aeb593e219360e804c43cc1af5770
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_background_service_ios: e30e0d3ee69e4cee66272d0c78eacd48c2e94aac
flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
- image_picker_ios: 99dfe1854b4fa34d0364e74a78448a0151025425
+ image_picker_ios: b545a5f16c0fa88e3ecbbce3ed4de45567a8ec18
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4
package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
pdfx: 7b876b09de8b7a0bf444a4f82b439ffcff4ee1ec
- permission_handler_apple: 036b856153a2b1f61f21030ff725f3e6fece2b78
- ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
- Sentry: a8d7b373b9f9868442b02a0c425192f693103cbf
- sentry_flutter: 03e7660857a8cdb236e71456a7e8447b65c8a788
- SentryPrivate: 006b24af16828441f70e2ab6adf241bd0a8ad130
+ permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
+ ReachabilitySwift: 5ae15e16814b5f9ef568963fb2c87aeb49158c66
+ Sentry: ebc12276bd17613a114ab359074096b6b3725203
+ sentry_flutter: dff1df05dc39c83d04f9330b36360fc374574c5e
+ SentryPrivate: d651efb234cf385ec9a1cdd3eff94b5e78a0e0fe
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
unrar_file: ead248ffb2e777cb67f083bc1bb1fb45d4157dbd
- UnrarKit: 99e3f0222a98a212188e1a6975dcf5aa798d26dd
- url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812
+ UnrarKit: 62f535c7a34ec52d2514b9b148f33dcfa9a9dc39
+ url_launcher_ios: 6116280ddcfe98ab8820085d8d76ae7449447586
PODFILE CHECKSUM: 261aa5270d0bfaacfc50eed5f8260a8d156ff8c5
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
old mode 100755
new mode 100644
index 0fe5ae7e..b07bc2ff
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -140,6 +140,7 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
4703B9E427D52C737F4084E3 /* [CP] Embed Pods Frameworks */,
+ 2FA329B8FEA619317B636C63 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -199,6 +200,23 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
+ 2FA329B8FEA619317B636C63 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
diff --git a/lib/l10n/app_cs.arb b/lib/l10n/app_cs.arb
index 7fe00898..f65ac918 100644
--- a/lib/l10n/app_cs.arb
+++ b/lib/l10n/app_cs.arb
@@ -207,5 +207,7 @@
"yes": "Ano",
"@yes": {},
"no": "Ne",
- "@no": {}
+ "@no": {},
+ "giveFeedback": "Zpětná vazba",
+ "@giveFeedback": {}
}
diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb
index 5dd0ac76..13cdbf37 100644
--- a/lib/l10n/app_en.arb
+++ b/lib/l10n/app_en.arb
@@ -207,5 +207,7 @@
"yes": "Yes",
"@yes": {},
"no": "No",
- "@no": {}
+ "@no": {},
+ "giveFeedback": "Give Feedback",
+ "@giveFeedback": {}
}
diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb
index 5b662a4f..1d60ad13 100644
--- a/lib/l10n/app_es.arb
+++ b/lib/l10n/app_es.arb
@@ -207,5 +207,7 @@
"yes": "Sí",
"@yes": {},
"no": "No",
- "@no": {}
+ "@no": {},
+ "giveFeedback": "Opinar",
+ "@giveFeedback": {}
}
diff --git a/lib/l10n/app_hr.arb b/lib/l10n/app_hr.arb
index 08099118..6958f66f 100644
--- a/lib/l10n/app_hr.arb
+++ b/lib/l10n/app_hr.arb
@@ -136,7 +136,7 @@
"@dontBrewCoffee": {},
"refresh": "Aktualiziraj",
"@refresh": {},
- "lightTheme": "Svjetla",
+ "lightTheme": "Svijetla",
"@lightTheme": {},
"downloadingFile": "Preuzimanje datoteke:",
"@downloadingFile": {},
@@ -205,5 +205,9 @@
"yes": "Da",
"@yes": {},
"no": "Ne",
- "@no": {}
+ "@no": {},
+ "sentryExplanation": "Aktiviraj zapisivanje pomoću Sentry platforme za brzo dijagnosticiranje i rješavanje problema! To nam omogućuje praćenje grešaka u stvarnom vremenu bez ugrožavanja tvoje privatnosti. Pomogni podržati razvoj JellyBooka uključivanjem zapisivanja.",
+ "@sentryExplanation": {},
+ "giveFeedback": "Pošalji povratnu informaciju",
+ "@giveFeedback": {}
}
diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb
index 9a1b2ec4..0ed29b31 100644
--- a/lib/l10n/app_id.arb
+++ b/lib/l10n/app_id.arb
@@ -115,5 +115,27 @@
"invalidCredentials": "Nama pengguna atau sandi salah",
"@invalidCredentials": {},
"serverNotFound": "Server tidak ditemukan\nHarap periksa URL-nya",
- "@serverNotFound": {}
+ "@serverNotFound": {},
+ "systemTheme": "Sistem",
+ "@systemTheme": {},
+ "lightTheme": "Terang",
+ "@lightTheme": {},
+ "darkTheme": "Gelap",
+ "@darkTheme": {},
+ "amoledTheme": "Amoled",
+ "@amoledTheme": {},
+ "licenses": "Lisensi",
+ "@licenses": {},
+ "pageLoginAddress": "Alamat Web",
+ "@pageLoginAddress": {},
+ "reading": "Bacaan",
+ "@reading": {},
+ "requestTimeout": "Batas waktu permintaan habis \nSilakan periksa log server",
+ "@requestTimeout": {},
+ "badGateway": "Gateway buruk \nSilakan periksa log server",
+ "@badGateway": {},
+ "proxyAuthRequired": "Diperlukan autentikasi proxy \nSilakan periksa log server",
+ "@proxyAuthRequired": {},
+ "serverError": "Server error\nSilakan periksa log server",
+ "@serverError": {}
}
diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb
index c0426263..e3333950 100644
--- a/lib/l10n/app_pt.arb
+++ b/lib/l10n/app_pt.arb
@@ -199,5 +199,13 @@
"rating": "Avaliação: ",
"@rating": {},
"saveToDevice": "Gravar no dispositivo",
- "@saveToDevice": {}
+ "@saveToDevice": {},
+ "useSentry": "Usar Sentinela",
+ "@useSentry": {},
+ "yes": "Sim",
+ "@yes": {},
+ "no": "Não",
+ "@no": {},
+ "sentryExplanation": "Ative o registro do Sentinela para diagnosticar e corrigir problemas rapidamente! Isso nos fornece rastreamento de erros em tempo real sem comprometer sua privacidade. Por favor, ajude a apoiar o desenvolvimento do JellyBook ativando o registro.",
+ "@sentryExplanation": {}
}
diff --git a/lib/l10n/app_pt_BR.arb b/lib/l10n/app_pt_BR.arb
new file mode 100644
index 00000000..20731453
--- /dev/null
+++ b/lib/l10n/app_pt_BR.arb
@@ -0,0 +1,212 @@
+{
+ "pageLoginUsername": "Nome de usuário",
+ "@pageLoginUsername": {},
+ "pageLoginPassword": "Senha",
+ "@pageLoginPassword": {},
+ "pageLoginOfflineReader": "Leitor off-line",
+ "@pageLoginOfflineReader": {},
+ "connect": "Conectar",
+ "@connect": {},
+ "permissionExplanation": "JellyBook precisa de permissão para acessar seus arquivos para ler seus quadrinhos",
+ "@permissionExplanation": {},
+ "ok": "OK",
+ "@ok": {},
+ "downloadRequired": "Necessário baixar",
+ "@downloadRequired": {},
+ "unsupportedFileType": "Tipo de arquivo não suportado",
+ "@unsupportedFileType": {},
+ "unsupportedFileTypeExplanation": "JellyBook não suporta este tipo de arquivo. Baixe um arquivo diferente",
+ "@unsupportedFileTypeExplanation": {},
+ "loadingComic": "Aguarde enquanto carregamos seu quadrinho/livro",
+ "@loadingComic": {},
+ "refresh": "Atualizar",
+ "@refresh": {},
+ "noResultsFound": "Nenhum resultado encontrado nesta pasta",
+ "@noResultsFound": {},
+ "unknownError": "Ocorreu um erro desconhecido.",
+ "@unknownError": {},
+ "error": "Erro",
+ "@error": {},
+ "offlineBookReader": "Leitor de livros off-line",
+ "@offlineBookReader": {},
+ "collections": "Coleções",
+ "@collections": {},
+ "library": "Biblioteca",
+ "@library": {},
+ "noContent": "Sinto muito, mas você ainda não baixou nenhum conteúdo.",
+ "@noContent": {},
+ "noContent2": "Se você não estiver conectado à Internet, conecte-se à Internet e clique no botão Atualizar no canto superior esquerdo da tela.",
+ "@noContent2": {},
+ "noBooks": "Nenhum livro encontrado",
+ "@noBooks": {},
+ "waitToFetchDB": "Aguarde enquanto buscamos o conteúdo do banco de dados",
+ "@waitToFetchDB": {},
+ "experimentalFeatures": "Recursos experimentais",
+ "@experimentalFeatures": {},
+ "madeBy": "Feito por",
+ "@madeBy": {},
+ "delete": "Excluir",
+ "@delete": {},
+ "noResults": "Nenhum resultado encontrado",
+ "@noResults": {},
+ "noHttp": "URL não contém http:// ou https://",
+ "@noHttp": {},
+ "selectCategories": "Selecione uma categorias",
+ "@selectCategories": {},
+ "noDot": "URL não contém um .",
+ "@noDot": {},
+ "noSlash": "URL não contém um /",
+ "@noSlash": {},
+ "systemTheme": "Sistema",
+ "@systemTheme": {},
+ "selectAudioFile": "Selecione o arquivo de áudio",
+ "@selectAudioFile": {},
+ "noAudiobooksDownloaded": "Nenhum audiolivro baixado",
+ "@noAudiobooksDownloaded": {},
+ "pleaseDownloadAudiobookFirst": "Baixe um audiolivro primeiro",
+ "@pleaseDownloadAudiobookFirst": {},
+ "readingDirection": "Direção de leitura",
+ "@readingDirection": {},
+ "ltr": "Da esquerda para direita",
+ "@ltr": {},
+ "rtl": "Direita para esquerda",
+ "@rtl": {},
+ "vertical": "Vertical",
+ "@vertical": {},
+ "downloadFailed": "O download não foi concluído. Por favor, tente novamente mais tarde.",
+ "@downloadFailed": {},
+ "credits": "Créditos",
+ "@credits": {},
+ "writer": "Escritor",
+ "@writer": {},
+ "editor": "Editor",
+ "@editor": {},
+ "colorist": "Colorista",
+ "@colorist": {},
+ "letterer": "Cartaz",
+ "@letterer": {},
+ "penciller": "Desenhador",
+ "@penciller": {},
+ "publisher": "Editora",
+ "@publisher": {},
+ "coverArtist": "Artista da capa",
+ "@coverArtist": {},
+ "imprint": "Imprimir",
+ "@imprint": {},
+ "read": "Ler",
+ "@read": {},
+ "inker": "Tinta",
+ "@inker": {},
+ "playbackSpeed": "Velocidade de reprodução",
+ "@playbackSpeed": {},
+ "currentSpeed": "Velocidade atual:",
+ "@currentSpeed": {},
+ "speedMultiplier": "x",
+ "@speedMultiplier": {},
+ "verticalSeamless": "Rolagem vertical contínua",
+ "@verticalSeamless": {},
+ "saveToServer": "Salvar no servidor",
+ "@saveToServer": {},
+ "description": "Descrição: ",
+ "@description": {},
+ "releaseDate": "Data de lançamento: ",
+ "@releaseDate": {},
+ "rating": "Avaliação: ",
+ "@rating": {},
+ "edit": "Editar",
+ "@edit": {},
+ "yes": "Sim",
+ "@yes": {},
+ "no": "Não",
+ "@no": {},
+ "appName": "JellyBook",
+ "@appName": {},
+ "pageLoginAddress": "Endereço da Web",
+ "@pageLoginAddress": {},
+ "permissionRequired": "Permissão necessária",
+ "@permissionRequired": {},
+ "downloadFirst": "Você precisa baixar o quadrinho primeiro",
+ "@downloadFirst": {},
+ "downloadOffline": "Você está off-line, conecte-se à Internet e recarregue este aplicativo para baixar esta história em quadrinhos",
+ "@downloadOffline": {},
+ "downloadExplanation": "JellyBook precisa baixar o quadrinho antes que você possa lê-lo",
+ "@downloadExplanation": {},
+ "noBooksStarted": "Você ainda não iniciou nenhum livro/quadrinhos.",
+ "@noBooksStarted": {},
+ "deleteConfirm": "Tem certeza de que deseja excluir este livro/quadrinho?",
+ "@deleteConfirm": {},
+ "invalidUrl": "URL não válida. Verifique o URL e tente novamente.",
+ "@invalidUrl": {},
+ "invalidCredentials": "Usuário ou senha incorretos",
+ "@invalidCredentials": {},
+ "downloading": "Baixando",
+ "@downloading": {},
+ "redownloadVerify": "Tem certeza de que deseja baixar este arquivo novamente?",
+ "@redownloadVerify": {},
+ "downloadingFile": "Baixando arquivo:",
+ "@downloadingFile": {},
+ "noBooksFound": "Nenhum livro foi encontrado para ser baixado",
+ "@noBooksFound": {},
+ "serverNotFound": "Servidor não encontrado\nVerifique o URL",
+ "@serverNotFound": {},
+ "searchBook": "Por favor procure um livro",
+ "@searchBook": {},
+ "proxyAuthRequired": "Autenticação de proxy necessária\nPor favor, verifique os logs do servidor",
+ "@proxyAuthRequired": {},
+ "redownload": "Baixar novamente",
+ "@redownload": {},
+ "extractingContent": "Extraindo Conteúdo",
+ "@extractingContent": {},
+ "requestTimeout": "Solicitar tempo limite\nPor favor, verifique os logs do servidor",
+ "@requestTimeout": {},
+ "cancel": "Cancelar",
+ "@cancel": {},
+ "pageTransition": "Transição de página",
+ "@pageTransition": {},
+ "dontBrewCoffee": "Não faça café comigo. Eu sou um bule",
+ "@dontBrewCoffee": {},
+ "serverError": "Erro de servidor\nPor favor, verifique os logs do servidor",
+ "@serverError": {},
+ "fileDownloaded": "Arquivo baixado",
+ "@fileDownloaded": {},
+ "badGateway": "Gateway ruim\nPor favor, verifique os logs do servidor",
+ "@badGateway": {},
+ "home": "Início",
+ "@home": {},
+ "downloads": "Transferências",
+ "@downloads": {},
+ "lightTheme": "Claro",
+ "@lightTheme": {},
+ "darkTheme": "Escuro",
+ "@darkTheme": {},
+ "reading": "Leitura",
+ "@reading": {},
+ "amoledTheme": "Amolado",
+ "@amoledTheme": {},
+ "settings": "Configurações",
+ "@settings": {},
+ "continueReading": "Continue lendo",
+ "@continueReading": {},
+ "licenses": "Licenças",
+ "@licenses": {},
+ "search": "Procurar",
+ "@search": {},
+ "lookupMissingImages": "Pesquisar imagens ausentes",
+ "@lookupMissingImages": {},
+ "theme": "Tema",
+ "@theme": {},
+ "language": "Idioma",
+ "@language": {},
+ "version": "Versão: ",
+ "@version": {},
+ "unknown": "Desconhecido",
+ "@unknown": {},
+ "saveToDevice": "Salvar no dispositivo",
+ "@saveToDevice": {},
+ "useSentry": "Usar Sentinela",
+ "@useSentry": {},
+ "sentryExplanation": "Ative o registro do Sentinela para diagnosticar e corrigir problemas rapidamente! Isso nos fornece rastreamento de erros em tempo real sem comprometer sua privacidade. Por favor, ajude a apoiar o desenvolvimento do JellyBook ativando o registro.",
+ "@sentryExplanation": {},
+ "giveFeedback": "Dar comentários",
+ "@giveFeedback": {}
+}
diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb
index 3204591a..1842e021 100644
--- a/lib/l10n/app_ru.arb
+++ b/lib/l10n/app_ru.arb
@@ -120,7 +120,7 @@
"@requestTimeout": {},
"dontBrewCoffee": "Не варите со мной кофе. Я чайник",
"@dontBrewCoffee": {},
- "badGateway": "Bad gateway\nПожалуйста, проверьте логи сервера",
+ "badGateway": "Bad gateway (Плохой шлюз)\nПожалуйста, проверьте логи сервера",
"@badGateway": {},
"permissionRequired": "Требуется разрешение",
"@permissionRequired": {},
@@ -187,5 +187,25 @@
"amoledTheme": "AMOLED",
"@amoledTheme": {},
"credits": "Заслуги",
- "@credits": {}
+ "@credits": {},
+ "releaseDate": "Дата выхода: ",
+ "@releaseDate": {},
+ "description": "Описание: ",
+ "@description": {},
+ "rating": "Рейтинг: ",
+ "@rating": {},
+ "saveToDevice": "Сохранить на устройство",
+ "@saveToDevice": {},
+ "saveToServer": "Сохранить на сервер",
+ "@saveToServer": {},
+ "edit": "Редактировать",
+ "@edit": {},
+ "useSentry": "Использовать Sentry",
+ "@useSentry": {},
+ "sentryExplanation": "Включите Sentry логирование, что бы быстро диагностировать и чинить неисправности! Это даст нам возможность отслеживать неполадки в реально времени, зберегая вашу конфиденциальность. Пожалуйста поддержите развитие JellyBook включив логирование.",
+ "@sentryExplanation": {},
+ "yes": "Да",
+ "@yes": {},
+ "no": "Нет",
+ "@no": {}
}
diff --git a/lib/l10n/app_uk.arb b/lib/l10n/app_uk.arb
index 26be1404..43b58d43 100644
--- a/lib/l10n/app_uk.arb
+++ b/lib/l10n/app_uk.arb
@@ -6,7 +6,7 @@
"@pageLoginUsername": {},
"pageLoginOfflineReader": "Офлайн-читалка",
"@pageLoginOfflineReader": {},
- "connect": "Підключатися",
+ "connect": "Підключитися",
"@connect": {},
"permissionRequired": "Потрібен дозвіл",
"@permissionRequired": {},
@@ -98,7 +98,7 @@
"@noContent2": {},
"noBooks": "Книжок не знайдено",
"@noBooks": {},
- "madeBy": "Зробив",
+ "madeBy": "Зроблено",
"@madeBy": {},
"delete": "Видалити",
"@delete": {},
@@ -122,7 +122,7 @@
"@noDot": {},
"invalidCredentials": "Неправильне ім'я користувача або пароль",
"@invalidCredentials": {},
- "badGateway": "Bad gateway\nБудь ласка, перевірте логи сервера",
+ "badGateway": "Bad gateway (Поганий шлюз)\nБудь ласка, перевірте логи сервера",
"@badGateway": {},
"serverNotFound": "Сервер не знайдено\nБудь ласка, перевірте URL-адресу",
"@serverNotFound": {},
@@ -130,22 +130,82 @@
"@proxyAuthRequired": {},
"serverError": "Помилка сервера\nБудь ласка, перевірте логи сервера",
"@serverError": {},
- "selectAudioFile": "Виберіть аудіофайл",
+ "selectAudioFile": "Оберіть аудіофайл",
"@selectAudioFile": {},
"noAudiobooksDownloaded": "Немає завантажених аудіокниг",
"@noAudiobooksDownloaded": {},
"pleaseDownloadAudiobookFirst": "Будь ласка, спочатку завантажте аудіокнигу",
"@pleaseDownloadAudiobookFirst": {},
- "systemTheme": "Система",
+ "systemTheme": "Системна",
"@systemTheme": {},
- "lightTheme": "Світлий",
+ "lightTheme": "Світла",
"@lightTheme": {},
- "darkTheme": "Темний",
+ "darkTheme": "Темна",
"@darkTheme": {},
"amoledTheme": "Амолед",
"@amoledTheme": {},
"licenses": "Ліцензії",
"@licenses": {},
"lookupMissingImages": "Пошук відсутніх зображень",
- "@lookupMissingImages": {}
+ "@lookupMissingImages": {},
+ "useSentry": "Використовувати Sentry",
+ "@useSentry": {},
+ "credits": "Титри",
+ "@credits": {},
+ "imprint": "Видавничий бренд",
+ "@imprint": {},
+ "penciller": "Художник-карандашист",
+ "@penciller": {},
+ "writer": "Автор",
+ "@writer": {},
+ "editor": "Редактор",
+ "@editor": {},
+ "letterer": "Літератор",
+ "@letterer": {},
+ "colorist": "Колорист",
+ "@colorist": {},
+ "publisher": "Видавник",
+ "@publisher": {},
+ "coverArtist": "Художник обкладинки",
+ "@coverArtist": {},
+ "read": "Прочитано",
+ "@read": {},
+ "inker": "Чорнильщик",
+ "@inker": {},
+ "readingDirection": "Напрямок читання",
+ "@readingDirection": {},
+ "ltr": "Зліва на право",
+ "@ltr": {},
+ "rtl": "Справа наліво",
+ "@rtl": {},
+ "vertical": "Вертикально",
+ "@vertical": {},
+ "downloadFailed": "Не вдалося завершити завантаження. Будь ласка спробуйте пізніше.",
+ "@downloadFailed": {},
+ "verticalSeamless": "Плавне вертикальне прокручування",
+ "@verticalSeamless": {},
+ "playbackSpeed": "Швидкість відтворення",
+ "@playbackSpeed": {},
+ "currentSpeed": "Поточна швидкість:",
+ "@currentSpeed": {},
+ "speedMultiplier": "х",
+ "@speedMultiplier": {},
+ "releaseDate": "Дата видачі: ",
+ "@releaseDate": {},
+ "description": "Опис: ",
+ "@description": {},
+ "rating": "Рейтинг: ",
+ "@rating": {},
+ "saveToDevice": "Зберегти на пристрій",
+ "@saveToDevice": {},
+ "saveToServer": "Зберегти на сервер",
+ "@saveToServer": {},
+ "edit": "Редагувати",
+ "@edit": {},
+ "sentryExplanation": "Увімкніть логування Sentry, щоб швидкого діагностування та полагодження несправностей! Це надасть нам можливість відстежувати несправності у реальному часі, не порушуючи вашої конфіденційності. Будь ласка підтримайте розвиток JellyBook, увімкнувши Sentry логування.",
+ "@sentryExplanation": {},
+ "yes": "Так",
+ "@yes": {},
+ "no": "Ні",
+ "@no": {}
}
diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb
index ed23d55e..8afb0d03 100644
--- a/lib/l10n/app_zh.arb
+++ b/lib/l10n/app_zh.arb
@@ -207,5 +207,7 @@
"yes": "是",
"@yes": {},
"no": "否",
- "@no": {}
+ "@no": {},
+ "giveFeedback": "给予反馈",
+ "@giveFeedback": {}
}
diff --git a/lib/providers/fetchBooks.dart b/lib/providers/fetchBooks.dart
index 48bce764..33efbdc0 100644
--- a/lib/providers/fetchBooks.dart
+++ b/lib/providers/fetchBooks.dart
@@ -2,7 +2,7 @@
import 'package:dio/dio.dart';
import 'package:shared_preferences/shared_preferences.dart';
-import 'package:openapi/openapi.dart';
+import 'package:tentacle/tentacle.dart';
import 'package:built_collection/built_collection.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
@@ -46,7 +46,7 @@ Future getComics(String comicsId) async {
]);
// turn into built list
- final api = Openapi(basePathOverride: url).getItemsApi();
+ final api = Tentacle(basePathOverride: url).getItemsApi();
Response? response;
bool useSentry = prefs.getBool('useSentry') ?? false;
try {
diff --git a/lib/providers/fetchCategories.dart b/lib/providers/fetchCategories.dart
index 28bfd9fb..01cce4ab 100644
--- a/lib/providers/fetchCategories.dart
+++ b/lib/providers/fetchCategories.dart
@@ -1,7 +1,7 @@
// The purpose of this file is to fetch the categories from the database
import 'package:shared_preferences/shared_preferences.dart';
-import 'package:openapi/openapi.dart';
+import 'package:tentacle/tentacle.dart';
import 'package:jellybook/providers/fetchBooks.dart';
import 'package:jellybook/providers/folderProvider.dart';
import 'package:jellybook/models/entry.dart';
@@ -50,7 +50,7 @@ Future<(List, List)> getServerCategories({
logger.d("got prefs");
Map headers =
getHeaders(url, client, device, deviceId, version, token);
- final api = Openapi(basePathOverride: url).getUserViewsApi();
+ final api = Tentacle(basePathOverride: url).getUserViewsApi();
var response;
try {
response = await api.getUserViews(
diff --git a/lib/providers/login.dart b/lib/providers/login.dart
index 2dfd5559..e9afa844 100644
--- a/lib/providers/login.dart
+++ b/lib/providers/login.dart
@@ -11,7 +11,7 @@ import 'package:package_info_plus/package_info_plus.dart' as package_info;
import 'package:isar/isar.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:jellybook/models/login.dart';
-import 'package:openapi/openapi.dart';
+import 'package:tentacle/tentacle.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:jellybook/variables.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
@@ -95,12 +95,12 @@ class LoginProvider {
"URL is not valid. Please check the URL and try again.";
}
- final api = Openapi(basePathOverride: _url);
+ final api = Tentacle(basePathOverride: _url);
final apiInstance = api.getUserApi();
Response response;
try {
- // use the authenticateUserByNameRequest from openapi/lib/src/model/authenticate_user_by_name_request.g.dart
+ // use the authenticateUserByNameRequest from tentacle/lib/src/model/authenticate_user_by_name_request.g.dart
var authenticateUserByNameRequest = AuthenticateUserByNameRequest((b) => b
..username = username
..pw = password);
diff --git a/lib/providers/updateLike.dart b/lib/providers/updateLike.dart
index 36893031..ee391029 100644
--- a/lib/providers/updateLike.dart
+++ b/lib/providers/updateLike.dart
@@ -2,7 +2,7 @@
import 'package:isar/isar.dart';
import 'package:jellybook/models/entry.dart';
-import 'package:openapi/openapi.dart';
+import 'package:tentacle/tentacle.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:package_info_plus/package_info_plus.dart' as p_info;
import 'package:jellybook/variables.dart';
@@ -38,7 +38,7 @@ Future updateLike(String id) async {
'Host': server.substring(server.indexOf("//") + 2, server.length),
'Content-Length': '0',
};
- final api = Openapi(basePathOverride: server).getUserLibraryApi();
+ final api = Tentacle(basePathOverride: server).getUserLibraryApi();
logger.d(url);
bool useSentry = prefs.getBool('useSentry') ?? false;
if (entries?.isFavorited == false) {
diff --git a/lib/providers/updatePagenum.dart b/lib/providers/updatePagenum.dart
index ace20c1d..89fa52a5 100644
--- a/lib/providers/updatePagenum.dart
+++ b/lib/providers/updatePagenum.dart
@@ -1,5 +1,5 @@
// the purpose of this file is to update the page number of the current page on jellyfin
-import 'package:openapi/openapi.dart';
+import 'package:tentacle/tentacle.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:package_info_plus/package_info_plus.dart' as p_info;
import 'package:jellybook/variables.dart';
@@ -31,7 +31,7 @@ Future updatePagenum(String id, int pagenum) async {
'Host': server.substring(server.indexOf("//") + 2, server.length),
'Content-Length': '0',
};
- final api = Openapi(basePathOverride: server).getPlaystateApi();
+ final api = Tentacle(basePathOverride: server).getPlaystateApi();
try {
final response = await api.onPlaybackProgress(
userId: userId,
diff --git a/lib/screens/EditScreen.dart b/lib/screens/EditScreen.dart
index b9611939..4cbea24b 100644
--- a/lib/screens/EditScreen.dart
+++ b/lib/screens/EditScreen.dart
@@ -18,7 +18,7 @@ import 'package:jellybook/models/entry.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:jellybook/variables.dart';
import 'package:package_info_plus/package_info_plus.dart' as p_info;
-import 'package:openapi/openapi.dart';
+import 'package:tentacle/tentacle.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:image_picker/image_picker.dart';
import 'package:built_collection/built_collection.dart';
@@ -185,7 +185,7 @@ class _EditScreenState extends State {
'Origin': server,
'Host': server.substring(server.indexOf("//") + 2, server.length),
};
- final api = Openapi(basePathOverride: server).getItemUpdateApi();
+ final api = Tentacle(basePathOverride: server).getItemUpdateApi();
DateTime? dateTime;
bool useSentry = prefs.getBool('useSentry') ?? false;
try {
@@ -245,7 +245,7 @@ class _EditScreenState extends State {
);
}
if (imageChanged) {
- final api2 = Openapi(basePathOverride: server).getImageApi();
+ final api2 = Tentacle(basePathOverride: server).getImageApi();
// get the image encoded in base64
File imagefile = File(entry.imagePath);
MultipartFile file = await MultipartFile.fromFile(
diff --git a/lib/screens/MainScreens/settingsScreen.dart b/lib/screens/MainScreens/settingsScreen.dart
index abfc90b8..fe4be7b8 100644
--- a/lib/screens/MainScreens/settingsScreen.dart
+++ b/lib/screens/MainScreens/settingsScreen.dart
@@ -16,7 +16,7 @@ import 'package:jellybook/variables.dart';
import 'package:palette_generator/palette_generator.dart';
import 'package:sentry/sentry.dart';
-import 'package:openapi/openapi.dart';
+import 'package:tentacle/tentacle.dart';
class SettingsScreen extends StatefulWidget {
@override
@@ -309,7 +309,7 @@ class _SettingsScreenState extends State {
'Host': server.substring(server.indexOf("//") + 2, server.length),
'Content-Length': '0',
};
- final api = Openapi(basePathOverride: server).getImageApi();
+ final api = Tentacle(basePathOverride: server).getImageApi();
Uint8List image = Uint8List(0);
ImageProvider imageProvider = Image.asset('assets/images/Logo.png').image;
try {
diff --git a/lib/screens/collectionScreen.dart b/lib/screens/collectionScreen.dart
index 73f00979..87227a51 100644
--- a/lib/screens/collectionScreen.dart
+++ b/lib/screens/collectionScreen.dart
@@ -96,8 +96,10 @@ class _collectionScreenState extends State {
),
);
if (result != null) {
- snapshot.data[index].isFavorited = result.$1;
- snapshot.data[index].downloaded = result.$2;
+ snapshot.data[index].isFavorited =
+ result.$1 ?? snapshot.data[index].isFavorited;
+ snapshot.data[index].downloaded =
+ result.$2 ?? snapshot.data[index].downloaded;
await isar?.writeTxn(() async {
await isar?.entrys.put(snapshot.data[index]);
});
diff --git a/lib/screens/downloaderScreen.dart b/lib/screens/downloaderScreen.dart
index 68e76b19..4dac038b 100644
--- a/lib/screens/downloaderScreen.dart
+++ b/lib/screens/downloaderScreen.dart
@@ -15,7 +15,7 @@ import 'package:unrar_file/unrar_file.dart';
import 'package:jellybook/providers/fileNameFromTitle.dart';
import 'package:jellybook/providers/parseEpub.dart';
import 'package:jellybook/providers/ComicInfoXML.dart';
-import 'package:openapi/openapi.dart';
+import 'package:tentacle/tentacle.dart';
// import the database
import 'package:jellybook/models/entry.dart';
@@ -153,7 +153,7 @@ class _DownloadScreenState extends State {
entry.filePath = dir;
logger.d('Directory created');
logger.d('Attempting to download file');
- final api = Openapi(basePathOverride: entry.url).getLibraryApi();
+ final api = Tentacle(basePathOverride: entry.url).getLibraryApi();
Response download;
downloading = true;
download = await api
diff --git a/lib/screens/homeScreen.dart b/lib/screens/homeScreen.dart
index 5ecdfae9..75c5489b 100644
--- a/lib/screens/homeScreen.dart
+++ b/lib/screens/homeScreen.dart
@@ -47,14 +47,15 @@ class _HomeScreenState extends State {
@override
void initState() {
- Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
+ Connectivity()
+ .onConnectivityChanged
+ .listen((List status) {
// Get the network status
- var status = result;
if (prefs == null) {
setSharedPrefs();
}
// if the user is offline
- if (status == ConnectivityResult.none) {
+ if (status.contains(ConnectivityResult.none)) {
// show the offline book reader
Navigator.push(
context,
diff --git a/lib/screens/infoScreen.dart b/lib/screens/infoScreen.dart
index c19d8214..72760512 100644
--- a/lib/screens/infoScreen.dart
+++ b/lib/screens/infoScreen.dart
@@ -19,7 +19,7 @@ import 'package:jellybook/models/entry.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:jellybook/variables.dart';
import 'package:package_info_plus/package_info_plus.dart' as p_info;
-import 'package:openapi/openapi.dart';
+import 'package:tentacle/tentacle.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:jellybook/providers/Author.dart';
@@ -274,7 +274,7 @@ class _InfoScreenState extends State {
'Content-Length': '0',
};
- final api = Openapi(basePathOverride: server).getPersonsApi();
+ final api = Tentacle(basePathOverride: server).getPersonsApi();
final person = await api.getPerson(name: author, headers: headers);
if (person.data!.imageTags == null || person.data!.imageTags!.isEmpty) {
return "asset";
diff --git a/lib/screens/offlineBookReader.dart b/lib/screens/offlineBookReader.dart
index 07b84ec5..be77b16d 100644
--- a/lib/screens/offlineBookReader.dart
+++ b/lib/screens/offlineBookReader.dart
@@ -41,12 +41,13 @@ class _OfflineBookReaderState extends State {
@override
void initState() {
- Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
- var status = result;
+ Connectivity()
+ .onConnectivityChanged
+ .listen((List status) {
// if the user is online
- if (status == ConnectivityResult.wifi ||
- status == ConnectivityResult.mobile ||
- status == ConnectivityResult.ethernet) {
+ if (status.contains(ConnectivityResult.wifi) ||
+ status.contains(ConnectivityResult.mobile) ||
+ status.contains(ConnectivityResult.ethernet)) {
final isar = Isar.getInstance();
final login = isar!.logins.where().findFirstSync();
if (login!.serverUrl.isNotEmpty && login.username.isNotEmpty) {
@@ -84,7 +85,7 @@ class _OfflineBookReaderState extends State {
// create a listener to see if the user is online or offline
Future checkConnectivity() async {
var connectivityResult = await (Connectivity().checkConnectivity());
- if (connectivityResult == ConnectivityResult.none) {
+ if (connectivityResult.contains(ConnectivityResult.none)) {
return false;
} else {
return true;
diff --git a/lib/screens/readingScreens/epubReader.dart b/lib/screens/readingScreens/epubReader.dart
index cc0ca2f1..7b72e83d 100644
--- a/lib/screens/readingScreens/epubReader.dart
+++ b/lib/screens/readingScreens/epubReader.dart
@@ -3,7 +3,7 @@
import 'dart:io';
import 'package:flutter/material.dart';
// import 'package:epub_view_enhanced/epub_view_enhanced.dart';
-import 'package:jellybook_epub_view/epub_view.dart';
+import 'package:jellybook_epub_view/jellybook_epub_view.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:isar/isar.dart';
import 'package:isar_flutter_libs/isar_flutter_libs.dart';
diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc
index 726c8b0d..56f3d0e8 100644
--- a/linux/flutter/generated_plugin_registrant.cc
+++ b/linux/flutter/generated_plugin_registrant.cc
@@ -7,20 +7,28 @@
#include "generated_plugin_registrant.h"
#include
+#include
#include
#include
+#include
#include
void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin");
audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar);
+ g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
+ fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
+ file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterSecureStorageLinuxPlugin");
flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar);
g_autoptr(FlPluginRegistrar) isar_flutter_libs_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "IsarFlutterLibsPlugin");
isar_flutter_libs_plugin_register_with_registrar(isar_flutter_libs_registrar);
+ g_autoptr(FlPluginRegistrar) sentry_flutter_registrar =
+ fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin");
+ sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar);
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake
index 557d1b24..548341a3 100644
--- a/linux/flutter/generated_plugins.cmake
+++ b/linux/flutter/generated_plugins.cmake
@@ -4,8 +4,10 @@
list(APPEND FLUTTER_PLUGIN_LIST
audioplayers_linux
+ file_selector_linux
flutter_secure_storage_linux
isar_flutter_libs
+ sentry_flutter
url_launcher_linux
)
diff --git a/pubspec.lock b/pubspec.lock
index 10a75514..0162182b 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -253,18 +253,18 @@ packages:
dependency: "direct main"
description:
name: connectivity_plus
- sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0"
+ sha256: e9feae83b1849f61bad9f6f33ee00646e3410d54ce0821e02f262f9901dad3c9
url: "https://pub.dev"
source: hosted
- version: "5.0.2"
+ version: "6.0.1"
connectivity_plus_platform_interface:
dependency: transitive
description:
name: connectivity_plus_platform_interface
- sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a
+ sha256: b6a56efe1e6675be240de39107281d4034b64ac23438026355b4234042a35adb
url: "https://pub.dev"
source: hosted
- version: "1.2.4"
+ version: "2.0.0"
convert:
dependency: transitive
description:
@@ -357,10 +357,10 @@ packages:
dependency: "direct main"
description:
name: dio
- sha256: "49af28382aefc53562459104f64d16b9dfd1e8ef68c862d5af436cc8356ce5a8"
+ sha256: "50fec96118958b97c727d0d8f67255d3683f16cc1f90d9bc917b5d4fe3abeca9"
url: "https://pub.dev"
source: hosted
- version: "5.4.1"
+ version: "5.4.2"
drop_cap_text:
dependency: "direct main"
description:
@@ -514,10 +514,10 @@ packages:
dependency: "direct dev"
description:
name: flutter_lints
- sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7
+ sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1"
url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
flutter_localizations:
dependency: "direct main"
description: flutter
@@ -527,10 +527,10 @@ packages:
dependency: "direct main"
description:
name: flutter_markdown
- sha256: "21b085a1c185e46701373866144ced56cfb7a0c33f63c916bb8fe2d0c1491278"
+ sha256: "87e11b9df25a42e2db315b8b7a51fae8e66f57a4b2f50ec4b822d0fa155e6b52"
url: "https://pub.dev"
source: hosted
- version: "0.6.19"
+ version: "0.6.22"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
@@ -732,10 +732,10 @@ packages:
dependency: transitive
description:
name: image_picker_ios
- sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3
+ sha256: "917a5cadd67d052554cfb258595e54217de53fac5b52939426e26319a02e6297"
url: "https://pub.dev"
source: hosted
- version: "0.8.9+1"
+ version: "0.8.9+2"
image_picker_linux:
dependency: transitive
description:
@@ -756,10 +756,10 @@ packages:
dependency: transitive
description:
name: image_picker_platform_interface
- sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b
+ sha256: "3d2c323daea9d60608f1caf30be32a938916f4975434b8352e6f73dae496da38"
url: "https://pub.dev"
source: hosted
- version: "2.9.3"
+ version: "2.9.4"
image_picker_windows:
dependency: transitive
description:
@@ -788,18 +788,10 @@ packages:
dependency: "direct main"
description:
name: intl
- sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
- url: "https://pub.dev"
- source: hosted
- version: "0.18.1"
- intl_utils:
- dependency: "direct main"
- description:
- name: intl_utils
- sha256: "5cad11e11ff7662c3cd0ef04729248591d71ed023d4ef0903a137528b4568adf"
+ sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
url: "https://pub.dev"
source: hosted
- version: "2.8.5"
+ version: "0.19.0"
io:
dependency: transitive
description:
@@ -835,11 +827,9 @@ packages:
jellybook_epub_view:
dependency: "direct main"
description:
- path: "."
- ref: HEAD
- resolved-ref: e7eac4b6ad357c498ff7b204891db33b7935b22c
- url: "https://github.com/Kara-Zor-El/jellybook_epub_view.git"
- source: git
+ path: "submodules/jellybook_epub_view"
+ relative: true
+ source: path
version: "3.0.0"
js:
dependency: transitive
@@ -885,10 +875,10 @@ packages:
dependency: "direct main"
description:
name: logger
- sha256: "6bbb9d6f7056729537a4309bda2e74e18e5d9f14302489cc1e93f33b3fe32cac"
+ sha256: "8c94b8c219e7e50194efc8771cd0e9f10807d8d3e219af473d89b06cc2ee4e04"
url: "https://pub.dev"
source: hosted
- version: "2.0.2+1"
+ version: "2.2.0"
logging:
dependency: transitive
description:
@@ -901,10 +891,10 @@ packages:
dependency: transitive
description:
name: markdown
- sha256: "1b134d9f8ff2da15cb298efe6cd8b7d2a78958c1b00384ebcbdf13fe340a6c90"
+ sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
url: "https://pub.dev"
source: hosted
- version: "7.2.1"
+ version: "7.2.2"
matcher:
dependency: transitive
description:
@@ -925,10 +915,10 @@ packages:
dependency: transitive
description:
name: meta
- sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
+ sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
url: "https://pub.dev"
source: hosted
- version: "1.11.0"
+ version: "1.12.0"
mime:
dependency: transitive
description:
@@ -993,15 +983,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.4.0"
- openapi:
- dependency: "direct main"
- description:
- path: "."
- ref: HEAD
- resolved-ref: f1ec0659fd18d1ba338c4560fff5cfa21668468f
- url: "https://github.com/Kara-Zor-El/jellyfin_api.git"
- source: git
- version: "1.0.0"
package_config:
dependency: transitive
description:
@@ -1110,10 +1091,10 @@ packages:
dependency: "direct main"
description:
name: permission_handler
- sha256: "74e962b7fad7ff75959161bb2c0ad8fe7f2568ee82621c9c2660b751146bfe44"
+ sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb"
url: "https://pub.dev"
source: hosted
- version: "11.3.0"
+ version: "11.3.1"
permission_handler_android:
dependency: transitive
description:
@@ -1126,10 +1107,10 @@ packages:
dependency: transitive
description:
name: permission_handler_apple
- sha256: bdafc6db74253abb63907f4e357302e6bb786ab41465e8635f362ee71fd8707b
+ sha256: e9ad66020b89ff1b63908f247c2c6f931c6e62699b756ef8b3c4569350cd8662
url: "https://pub.dev"
source: hosted
- version: "9.4.0"
+ version: "9.4.4"
permission_handler_html:
dependency: transitive
description:
@@ -1142,10 +1123,10 @@ packages:
dependency: transitive
description:
name: permission_handler_platform_interface
- sha256: "23dfba8447c076ab5be3dee9ceb66aad345c4a648f0cac292c77b1eb0e800b78"
+ sha256: "48d4fcf201a1dad93ee869ab0d4101d084f49136ec82a8a06ed9cfeacab9fd20"
url: "https://pub.dev"
source: hosted
- version: "4.2.0"
+ version: "4.2.1"
permission_handler_windows:
dependency: transitive
description:
@@ -1222,10 +1203,10 @@ packages:
dependency: "direct main"
description:
name: provider
- sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096"
+ sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
url: "https://pub.dev"
source: hosted
- version: "6.1.1"
+ version: "6.1.2"
pub_semver:
dependency: transitive
description:
@@ -1270,10 +1251,10 @@ packages:
dependency: transitive
description:
name: sentry
- sha256: d2ee9c850d876d285f22e2e662f400ec2438df9939fe4acd5d780df9841794ce
+ sha256: a460aa48568d47140dd0557410b624d344ffb8c05555107ac65035c1097cf1ad
url: "https://pub.dev"
source: hosted
- version: "7.16.1"
+ version: "7.18.0"
sentry_dart_plugin:
dependency: "direct dev"
description:
@@ -1286,10 +1267,10 @@ packages:
dependency: "direct main"
description:
name: sentry_flutter
- sha256: "5b428c189c825f16fb14e9166529043f06b965d5b59bfc3a1415e39c082398c0"
+ sha256: "3d0d1d4e0e407d276ae8128d123263ccbc37e988bae906765efd6f37d544f4c6"
url: "https://pub.dev"
source: hosted
- version: "7.16.1"
+ version: "7.18.0"
shared_preferences:
dependency: "direct main"
description:
@@ -1451,10 +1432,10 @@ packages:
dependency: transitive
description:
name: sqflite_common
- sha256: "28d8c66baee4968519fb8bd6cdbedad982d6e53359091f0b74544a9f32ec72d5"
+ sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4"
url: "https://pub.dev"
source: hosted
- version: "2.5.3"
+ version: "2.5.4"
stack_trace:
dependency: transitive
description:
@@ -1511,6 +1492,13 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.0.0"
+ tentacle:
+ dependency: "direct main"
+ description:
+ path: "submodules/tentacle"
+ relative: true
+ source: path
+ version: "3.1.0"
term_glyph:
dependency: transitive
description:
@@ -1611,10 +1599,10 @@ packages:
dependency: "direct main"
description:
name: url_launcher
- sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c
+ sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e"
url: "https://pub.dev"
source: hosted
- version: "6.2.4"
+ version: "6.2.5"
url_launcher_android:
dependency: transitive
description:
@@ -1627,10 +1615,10 @@ packages:
dependency: transitive
description:
name: url_launcher_ios
- sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03"
+ sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5"
url: "https://pub.dev"
source: hosted
- version: "6.2.4"
+ version: "6.2.5"
url_launcher_linux:
dependency: transitive
description:
@@ -1691,10 +1679,10 @@ packages:
dependency: transitive
description:
name: vm_service
- sha256: a2662fb1f114f4296cf3f5a50786a2d888268d7776cf681aa17d660ffa23b246
+ sha256: a75f83f14ad81d5fe4b3319710b90dec37da0e22612326b696c9e1b8f34bbf48
url: "https://pub.dev"
source: hosted
- version: "14.0.0"
+ version: "14.2.0"
watcher:
dependency: transitive
description:
@@ -1731,10 +1719,10 @@ packages:
dependency: transitive
description:
name: win32
- sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8"
+ sha256: "8cb58b45c47dcb42ab3651533626161d6b67a2921917d8d429791f76972b3480"
url: "https://pub.dev"
source: hosted
- version: "5.2.0"
+ version: "5.3.0"
win32_registry:
dependency: transitive
description:
@@ -1776,5 +1764,5 @@ packages:
source: hosted
version: "3.1.2"
sdks:
- dart: ">=3.3.0-279.1.beta <4.0.0"
- flutter: ">=3.16.0"
+ dart: ">=3.3.0 <4.0.0"
+ flutter: ">=3.19.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 8f9c702a..08742a53 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -54,8 +54,8 @@ dependencies:
# flutter_pdfview: ^1.2.5
open_filex: ^4.3.1
jellybook_epub_view:
- git: https://github.com/Kara-Zor-El/jellybook_epub_view.git
- # path: ./submodules/jellybook_epub_view
+ # git: https://github.com/Kara-Zor-El/jellybook_epub_view.git
+ path: ./submodules/jellybook_epub_view
isar: ^3.0.5
isar_flutter_libs: ^3.0.5
pdfx: ^2.6.0
@@ -64,16 +64,15 @@ dependencies:
google_nav_bar: ^5.0.6
cached_network_image: ^3.2.3
fancy_shimmer_image: ^2.0.2
- openapi:
- git: https://github.com/Kara-Zor-El/jellyfin_api.git
+ tentacle:
+ path: ./submodules/tentacle/
string_similarity: ^2.0.0
- connectivity_plus: ^5.0.1
+ connectivity_plus: ^6.0.1
# Translations
flutter_localizations:
sdk: flutter
- intl: ^0.18.0
- intl_utils: ^2.8.2
+ intl: ^0.19.0
device_info_plus: ^9.0.3
audioplayers: ^5.1.0
flutter_background_service: ^5.0.0
diff --git a/submodules/jellyfin_api b/submodules/jellyfin_api
deleted file mode 160000
index f1ec0659..00000000
--- a/submodules/jellyfin_api
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit f1ec0659fd18d1ba338c4560fff5cfa21668468f