From 7b20d26a16cc76adb43fc177e5337c41c532484e Mon Sep 17 00:00:00 2001 From: Anton Stubenbord Date: Thu, 15 Jun 2023 17:08:08 +0200 Subject: [PATCH] feat: Add setting to always upload scans as pdf --- lib/core/database/tables/global_settings.dart | 4 ++ .../document_scan/view/scanner_page.dart | 3 + .../view/pages/application_settings_page.dart | 36 ----------- .../view/pages/security_settings_page.dart | 27 -------- .../view/pages/storage_settings_page.dart | 21 ------ lib/features/settings/view/settings_page.dart | 60 ++++++++++------- .../view/widgets/clear_storage_settings.dart | 64 ++++++++----------- .../widgets/enforce_pdf_upload_setting.dart | 22 +++++++ .../view/widgets/theme_mode_setting.dart | 2 +- lib/l10n/intl_ca.arb | 38 ++++++++++- lib/l10n/intl_cs.arb | 34 +++++++++- lib/l10n/intl_de.arb | 36 ++++++++++- lib/l10n/intl_en.arb | 34 +++++++++- lib/l10n/intl_fr.arb | 34 +++++++++- lib/l10n/intl_pl.arb | 34 +++++++++- lib/l10n/intl_ru.arb | 34 +++++++++- lib/l10n/intl_tr.arb | 34 +++++++++- 17 files changed, 360 insertions(+), 157 deletions(-) delete mode 100644 lib/features/settings/view/pages/application_settings_page.dart delete mode 100644 lib/features/settings/view/pages/security_settings_page.dart delete mode 100644 lib/features/settings/view/pages/storage_settings_page.dart create mode 100644 lib/features/settings/view/widgets/enforce_pdf_upload_setting.dart diff --git a/lib/core/database/tables/global_settings.dart b/lib/core/database/tables/global_settings.dart index 369e8c5..6ee55c9 100644 --- a/lib/core/database/tables/global_settings.dart +++ b/lib/core/database/tables/global_settings.dart @@ -29,6 +29,9 @@ class GlobalSettings with HiveObjectMixin { @HiveField(6) FileDownloadType defaultShareType; + @HiveField(7, defaultValue: false) + bool enforceSinglePagePdfUpload; + GlobalSettings({ required this.preferredLocaleSubtag, this.preferredThemeMode = ThemeMode.system, @@ -37,5 +40,6 @@ class GlobalSettings with HiveObjectMixin { this.currentLoggedInUser, this.defaultDownloadType = FileDownloadType.alwaysAsk, this.defaultShareType = FileDownloadType.alwaysAsk, + this.enforceSinglePagePdfUpload = false, }); } diff --git a/lib/features/document_scan/view/scanner_page.dart b/lib/features/document_scan/view/scanner_page.dart index bd7c756..776c36e 100644 --- a/lib/features/document_scan/view/scanner_page.dart +++ b/lib/features/document_scan/view/scanner_page.dart @@ -254,6 +254,9 @@ class _ScannerPageState extends State void _onPrepareDocumentUpload(BuildContext context) async { final file = await _assembleFileBytes( context.read().state, + forcePdf: Hive.box(HiveBoxes.globalSettings) + .getValue()! + .enforceSinglePagePdfUpload, ); final uploadResult = await pushDocumentUploadPreparationPage( context, diff --git a/lib/features/settings/view/pages/application_settings_page.dart b/lib/features/settings/view/pages/application_settings_page.dart deleted file mode 100644 index d55675a..0000000 --- a/lib/features/settings/view/pages/application_settings_page.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:paperless_mobile/features/settings/view/widgets/color_scheme_option_setting.dart'; -import 'package:paperless_mobile/features/settings/view/widgets/default_download_file_type_setting.dart'; -import 'package:paperless_mobile/features/settings/view/widgets/default_share_file_type_setting.dart'; -import 'package:paperless_mobile/features/settings/view/widgets/language_selection_setting.dart'; -import 'package:paperless_mobile/features/settings/view/widgets/theme_mode_setting.dart'; -import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; - -class ApplicationSettingsPage extends StatelessWidget { - const ApplicationSettingsPage({super.key}); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(S.of(context)!.applicationSettings), - actions: const [ - Padding( - padding: EdgeInsets.all(16.0), - child: Icon(Icons.public), - ) - ], - ), - body: ListView( - children: const [ - LanguageSelectionSetting(), - ThemeModeSetting(), - ColorSchemeOptionSetting(), - Divider(), - DefaultDownloadFileTypeSetting(), - DefaultShareFileTypeSetting(), - ], - ), - ); - } -} diff --git a/lib/features/settings/view/pages/security_settings_page.dart b/lib/features/settings/view/pages/security_settings_page.dart deleted file mode 100644 index c98b2c8..0000000 --- a/lib/features/settings/view/pages/security_settings_page.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:paperless_mobile/features/settings/view/widgets/biometric_authentication_setting.dart'; -import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; - -class SecuritySettingsPage extends StatelessWidget { - const SecuritySettingsPage({super.key}); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(S.of(context)!.security), - actions: const [ - Padding( - padding: EdgeInsets.all(16.0), - child: Icon(Icons.person_outline), - ) - ], - ), - body: ListView( - children: const [ - BiometricAuthenticationSetting(), - ], - ), - ); - } -} diff --git a/lib/features/settings/view/pages/storage_settings_page.dart b/lib/features/settings/view/pages/storage_settings_page.dart deleted file mode 100644 index 6926c00..0000000 --- a/lib/features/settings/view/pages/storage_settings_page.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:paperless_mobile/features/settings/view/widgets/clear_storage_settings.dart'; -import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; - -class StorageSettingsPage extends StatelessWidget { - const StorageSettingsPage({super.key}); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(S.of(context)!.storage), - ), - body: ListView( - children: const [ - ClearCacheSetting(), - ], - ), - ); - } -} diff --git a/lib/features/settings/view/settings_page.dart b/lib/features/settings/view/settings_page.dart index 5bc2fcf..2740172 100644 --- a/lib/features/settings/view/settings_page.dart +++ b/lib/features/settings/view/settings_page.dart @@ -1,7 +1,13 @@ import 'package:flutter/material.dart'; import 'package:paperless_api/paperless_api.dart'; -import 'package:paperless_mobile/features/settings/view/pages/application_settings_page.dart'; -import 'package:paperless_mobile/features/settings/view/pages/security_settings_page.dart'; +import 'package:paperless_mobile/features/settings/view/widgets/biometric_authentication_setting.dart'; +import 'package:paperless_mobile/features/settings/view/widgets/clear_storage_settings.dart'; +import 'package:paperless_mobile/features/settings/view/widgets/color_scheme_option_setting.dart'; +import 'package:paperless_mobile/features/settings/view/widgets/default_download_file_type_setting.dart'; +import 'package:paperless_mobile/features/settings/view/widgets/default_share_file_type_setting.dart'; +import 'package:paperless_mobile/features/settings/view/widgets/enforce_pdf_upload_setting.dart'; +import 'package:paperless_mobile/features/settings/view/widgets/language_selection_setting.dart'; +import 'package:paperless_mobile/features/settings/view/widgets/theme_mode_setting.dart'; import 'package:paperless_mobile/features/settings/view/widgets/user_settings_builder.dart'; import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; import 'package:provider/provider.dart'; @@ -15,6 +21,22 @@ class SettingsPage extends StatelessWidget { appBar: AppBar( title: Text(S.of(context)!.settings), ), + body: ListView( + children: [ + _buildSectionHeader(context, S.of(context)!.appearance), + const LanguageSelectionSetting(), + const ThemeModeSetting(), + const ColorSchemeOptionSetting(), + _buildSectionHeader(context, S.of(context)!.security), + const BiometricAuthenticationSetting(), + _buildSectionHeader(context, S.of(context)!.behavior), + const DefaultDownloadFileTypeSetting(), + const DefaultShareFileTypeSetting(), + const EnforcePdfUploadSetting(), + _buildSectionHeader(context, S.of(context)!.storage), + const ClearCacheSetting(), + ], + ), bottomNavigationBar: UserAccountBuilder( builder: (context, user) { assert(user != null); @@ -63,28 +85,18 @@ class SettingsPage extends StatelessWidget { ); }, ), - body: ListView( - children: [ - ListTile( - // leading: const Icon(Icons.style_outlined), - title: Text(S.of(context)!.applicationSettings), - subtitle: Text(S.of(context)!.languageAndVisualAppearance), - onTap: () => _goto(const ApplicationSettingsPage(), context), - ), - ListTile( - // leading: const Icon(Icons.security_outlined), - title: Text(S.of(context)!.security), - subtitle: Text(S.of(context)!.biometricAuthentication), - onTap: () => _goto(const SecuritySettingsPage(), context), - ), - // ListTile( - // // leading: const Icon(Icons.storage_outlined), - // title: Text(S.of(context)!.storage), - // subtitle: - // Text(S.of(context)!.mangeFilesAndStorageSpace), - // onTap: () => _goto(const StorageSettingsPage(), context), - // ), - ], + ); + } + + Widget _buildSectionHeader(BuildContext context, String text) { + return Padding( + padding: const EdgeInsets.only(left: 16, top: 16), + child: Text( + text, + style: Theme.of(context) + .textTheme + .labelLarge + ?.copyWith(color: Theme.of(context).colorScheme.primary), ), ); } diff --git a/lib/features/settings/view/widgets/clear_storage_settings.dart b/lib/features/settings/view/widgets/clear_storage_settings.dart index 5f30dd4..b5aa166 100644 --- a/lib/features/settings/view/widgets/clear_storage_settings.dart +++ b/lib/features/settings/view/widgets/clear_storage_settings.dart @@ -1,70 +1,60 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_cache_manager/flutter_cache_manager.dart' as cm; import 'package:paperless_mobile/core/service/file_service.dart'; +import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; import 'package:paperless_mobile/helpers/format_helpers.dart'; import 'package:paperless_mobile/helpers/message_helpers.dart'; -import 'package:provider/provider.dart'; -class ClearCacheSetting extends StatelessWidget { +class ClearCacheSetting extends StatefulWidget { const ClearCacheSetting({super.key}); + @override + State createState() => _ClearCacheSettingState(); +} + +class _ClearCacheSettingState extends State { @override Widget build(BuildContext context) { return ListTile( - title: const Text("Clear downloaded files"), //TODO: INTL - subtitle: const Text( - "Deletes all files downloaded from this app."), //TODO: INTL + title: Text(S.of(context)!.clearCache), + subtitle: FutureBuilder( + future: FileService.temporaryDirectory.then(_dirSize), + builder: (context, snapshot) { + if (!snapshot.hasData) { + return Text(S.of(context)!.calculatingDots); + } + return Text(S.of(context)!.freeBytes(snapshot.data!)); + }, + ), onTap: () async { - final dir = await FileService.downloadsDirectory; - final deletedSize = _dirSize(dir); + final dir = await FileService.temporaryDirectory; + final deletedSize = await _dirSize(dir); await dir.delete(recursive: true); - // await context.read().emptyCache(); showSnackBar( context, - "Downloads successfully cleared, removed $deletedSize.", + S.of(context)!.freedDiskSpace(deletedSize), ); }, ); } } -class ClearDownloadsSetting extends StatelessWidget { - const ClearDownloadsSetting({super.key}); - - @override - Widget build(BuildContext context) { - return ListTile( - title: const Text("Clear downloads"), //TODO: INTL - subtitle: const Text( - "Remove downloaded files, scans and clear the cache's content"), //TODO: INTL - onTap: () { - FileService.documentsDirectory; - FileService.downloadsDirectory; - context.read().emptyCache(); - FileService.clearUserData(); - //TODO: Show notification about clearing (include size?) - }, - ); - } -} - -String _dirSize(Directory dir) { +Future _dirSize(Directory dir) async { int totalSize = 0; try { - if (dir.existsSync()) { + if (await dir.exists()) { dir .listSync(recursive: true, followLinks: false) - .forEach((FileSystemEntity entity) { + .forEach((FileSystemEntity entity) async { if (entity is File) { - totalSize += entity.lengthSync(); + totalSize += (await entity.length()); } }); } - } catch (e) { - print(e.toString()); + } catch (error) { + debugPrint(error.toString()); } - return formatBytes(totalSize, 2); + return formatBytes(totalSize, 0); } diff --git a/lib/features/settings/view/widgets/enforce_pdf_upload_setting.dart b/lib/features/settings/view/widgets/enforce_pdf_upload_setting.dart new file mode 100644 index 0000000..9b1908c --- /dev/null +++ b/lib/features/settings/view/widgets/enforce_pdf_upload_setting.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; +import 'package:paperless_mobile/features/settings/view/widgets/global_settings_builder.dart'; +import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; + +class EnforcePdfUploadSetting extends StatelessWidget { + const EnforcePdfUploadSetting({super.key}); + + @override + Widget build(BuildContext context) { + return GlobalSettingsBuilder(builder: (context, settings) { + return SwitchListTile( + title: Text(S.of(context)!.uploadScansAsPdf), + subtitle: Text(S.of(context)!.convertSinglePageScanToPdf), + value: settings.enforceSinglePagePdfUpload, + onChanged: (value) { + settings.enforceSinglePagePdfUpload = value; + settings.save(); + }, + ); + }); + } +} diff --git a/lib/features/settings/view/widgets/theme_mode_setting.dart b/lib/features/settings/view/widgets/theme_mode_setting.dart index 5e736fb..50c2700 100644 --- a/lib/features/settings/view/widgets/theme_mode_setting.dart +++ b/lib/features/settings/view/widgets/theme_mode_setting.dart @@ -11,7 +11,7 @@ class ThemeModeSetting extends StatelessWidget { return GlobalSettingsBuilder( builder: (context, settings) { return ListTile( - title: Text(S.of(context)!.appearance), + title: Text(S.of(context)!.theme), subtitle: Text(_mapThemeModeToLocalizedString( settings.preferredThemeMode, context)), onTap: () => showDialog( diff --git a/lib/l10n/intl_ca.arb b/lib/l10n/intl_ca.arb index abb8dbb..ced470a 100644 --- a/lib/l10n/intl_ca.arb +++ b/lib/l10n/intl_ca.arb @@ -816,13 +816,45 @@ "@export": { "description": "Label for button that exports scanned images to pdf (before upload)" }, - "invalidFilenameCharacter": "Invalid character(s) found in filename: {characters}", + "invalidFilenameCharacter": "Caràcter(s) invàlids trobats a nom d'arxiu: {characters}", "@invalidFilenameCharacter": { "description": "For validating filename in export dialogue" }, - "exportScansToPdf": "Export scans to PDF", + "exportScansToPdf": "Exporta escanejos a PDF", "@exportScansToPdf": { "description": "title of the alert dialog when exporting scans to pdf" }, - "allScansWillBeMerged": "All scans will be merged into a single PDF file." + "allScansWillBeMerged": "Els escanejos s'uniran en un únic document PDF.", + "behavior": "Behavior", + "@behavior": { + "description": "Title of the settings concerning app beahvior" + }, + "theme": "Theme", + "@theme": { + "description": "Title of the theme mode setting" + }, + "clearCache": "Clear cache", + "@clearCache": { + "description": "Title of the clear cache setting" + }, + "freeBytes": "Free {bytes}", + "@freeBytes": { + "description": "Text shown for clear storage settings" + }, + "calculatingDots": "Calculating...", + "@calculatingDots": { + "description": "Text shown when the byte size is still being calculated" + }, + "freedDiskSpace": "Successfully freed {bytes} of disk space.", + "@freedDiskSpace": { + "description": "Message shown after clearing storage" + }, + "uploadScansAsPdf": "Upload scans as PDF", + "@uploadScansAsPdf": { + "description": "Title of the setting which toggles whether scans are always uploaded as pdf" + }, + "convertSinglePageScanToPdf": "Always convert single page scans to PDF before uploading", + "@convertSinglePageScanToPdf": { + "description": "description of the upload scans as pdf setting" + } } \ No newline at end of file diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index eafbf76..90bd99f 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -824,5 +824,37 @@ "@exportScansToPdf": { "description": "title of the alert dialog when exporting scans to pdf" }, - "allScansWillBeMerged": "All scans will be merged into a single PDF file." + "allScansWillBeMerged": "All scans will be merged into a single PDF file.", + "behavior": "Behavior", + "@behavior": { + "description": "Title of the settings concerning app beahvior" + }, + "theme": "Theme", + "@theme": { + "description": "Title of the theme mode setting" + }, + "clearCache": "Clear cache", + "@clearCache": { + "description": "Title of the clear cache setting" + }, + "freeBytes": "Free {bytes}", + "@freeBytes": { + "description": "Text shown for clear storage settings" + }, + "calculatingDots": "Calculating...", + "@calculatingDots": { + "description": "Text shown when the byte size is still being calculated" + }, + "freedDiskSpace": "Successfully freed {bytes} of disk space.", + "@freedDiskSpace": { + "description": "Message shown after clearing storage" + }, + "uploadScansAsPdf": "Upload scans as PDF", + "@uploadScansAsPdf": { + "description": "Title of the setting which toggles whether scans are always uploaded as pdf" + }, + "convertSinglePageScanToPdf": "Always convert single page scans to PDF before uploading", + "@convertSinglePageScanToPdf": { + "description": "description of the upload scans as pdf setting" + } } \ No newline at end of file diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index d33e552..ebe7c53 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -47,7 +47,7 @@ "@authenticateOnAppStart": { "description": "Description of the biometric authentication settings tile" }, - "biometricAuthentication": "Biometrische Authentifizierung aktivieren", + "biometricAuthentication": "Biometrische Authentifizierung", "@biometricAuthentication": {}, "authenticateToToggleBiometricAuthentication": "{mode, select, enable{Authentifizieren, um die biometrische Authentifizierung zu aktivieren} disable{Authentifizieren, um die biometrische Authentifizierung zu deaktivieren} other{}}", "@authenticateToToggleBiometricAuthentication": { @@ -824,5 +824,37 @@ "@exportScansToPdf": { "description": "title of the alert dialog when exporting scans to pdf" }, - "allScansWillBeMerged": "Alle Scans werden in eine einzige PDF-Datei zusammengeführt." + "allScansWillBeMerged": "Alle Scans werden in eine einzige PDF-Datei zusammengeführt.", + "behavior": "Verhalten", + "@behavior": { + "description": "Title of the settings concerning app beahvior" + }, + "theme": "Erscheinungsbild", + "@theme": { + "description": "Title of the theme mode setting" + }, + "clearCache": "Cache leeren", + "@clearCache": { + "description": "Title of the clear cache setting" + }, + "freeBytes": "{bytes} freigeben", + "@freeBytes": { + "description": "Text shown for clear storage settings" + }, + "calculatingDots": "Berechne...", + "@calculatingDots": { + "description": "Text shown when the byte size is still being calculated" + }, + "freedDiskSpace": "{bytes} erfolgreich freigegeben.", + "@freedDiskSpace": { + "description": "Message shown after clearing storage" + }, + "uploadScansAsPdf": "Scans als PDF hochladen", + "@uploadScansAsPdf": { + "description": "Title of the setting which toggles whether scans are always uploaded as pdf" + }, + "convertSinglePageScanToPdf": "Einseitige Scans vor dem Hochladen immer in PDF umwandeln", + "@convertSinglePageScanToPdf": { + "description": "description of the upload scans as pdf setting" + } } \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index c07a420..58a2572 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -824,5 +824,37 @@ "@exportScansToPdf": { "description": "title of the alert dialog when exporting scans to pdf" }, - "allScansWillBeMerged": "All scans will be merged into a single PDF file." + "allScansWillBeMerged": "All scans will be merged into a single PDF file.", + "behavior": "Behavior", + "@behavior": { + "description": "Title of the settings concerning app beahvior" + }, + "theme": "Theme", + "@theme": { + "description": "Title of the theme mode setting" + }, + "clearCache": "Clear cache", + "@clearCache": { + "description": "Title of the clear cache setting" + }, + "freeBytes": "Free {bytes}", + "@freeBytes": { + "description": "Text shown for clear storage settings" + }, + "calculatingDots": "Calculating...", + "@calculatingDots": { + "description": "Text shown when the byte size is still being calculated" + }, + "freedDiskSpace": "Successfully freed {bytes} of disk space.", + "@freedDiskSpace": { + "description": "Message shown after clearing storage" + }, + "uploadScansAsPdf": "Upload scans as PDF", + "@uploadScansAsPdf": { + "description": "Title of the setting which toggles whether scans are always uploaded as pdf" + }, + "convertSinglePageScanToPdf": "Always convert single page scans to PDF before uploading", + "@convertSinglePageScanToPdf": { + "description": "description of the upload scans as pdf setting" + } } \ No newline at end of file diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 47d1aea..c184164 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -824,5 +824,37 @@ "@exportScansToPdf": { "description": "title of the alert dialog when exporting scans to pdf" }, - "allScansWillBeMerged": "All scans will be merged into a single PDF file." + "allScansWillBeMerged": "All scans will be merged into a single PDF file.", + "behavior": "Behavior", + "@behavior": { + "description": "Title of the settings concerning app beahvior" + }, + "theme": "Theme", + "@theme": { + "description": "Title of the theme mode setting" + }, + "clearCache": "Clear cache", + "@clearCache": { + "description": "Title of the clear cache setting" + }, + "freeBytes": "Free {bytes}", + "@freeBytes": { + "description": "Text shown for clear storage settings" + }, + "calculatingDots": "Calculating...", + "@calculatingDots": { + "description": "Text shown when the byte size is still being calculated" + }, + "freedDiskSpace": "Successfully freed {bytes} of disk space.", + "@freedDiskSpace": { + "description": "Message shown after clearing storage" + }, + "uploadScansAsPdf": "Upload scans as PDF", + "@uploadScansAsPdf": { + "description": "Title of the setting which toggles whether scans are always uploaded as pdf" + }, + "convertSinglePageScanToPdf": "Always convert single page scans to PDF before uploading", + "@convertSinglePageScanToPdf": { + "description": "description of the upload scans as pdf setting" + } } \ No newline at end of file diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index 9dcb967..5da20b2 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -824,5 +824,37 @@ "@exportScansToPdf": { "description": "title of the alert dialog when exporting scans to pdf" }, - "allScansWillBeMerged": "All scans will be merged into a single PDF file." + "allScansWillBeMerged": "All scans will be merged into a single PDF file.", + "behavior": "Behavior", + "@behavior": { + "description": "Title of the settings concerning app beahvior" + }, + "theme": "Theme", + "@theme": { + "description": "Title of the theme mode setting" + }, + "clearCache": "Clear cache", + "@clearCache": { + "description": "Title of the clear cache setting" + }, + "freeBytes": "Free {bytes}", + "@freeBytes": { + "description": "Text shown for clear storage settings" + }, + "calculatingDots": "Calculating...", + "@calculatingDots": { + "description": "Text shown when the byte size is still being calculated" + }, + "freedDiskSpace": "Successfully freed {bytes} of disk space.", + "@freedDiskSpace": { + "description": "Message shown after clearing storage" + }, + "uploadScansAsPdf": "Upload scans as PDF", + "@uploadScansAsPdf": { + "description": "Title of the setting which toggles whether scans are always uploaded as pdf" + }, + "convertSinglePageScanToPdf": "Always convert single page scans to PDF before uploading", + "@convertSinglePageScanToPdf": { + "description": "description of the upload scans as pdf setting" + } } \ No newline at end of file diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index 2636866..071742e 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -824,5 +824,37 @@ "@exportScansToPdf": { "description": "title of the alert dialog when exporting scans to pdf" }, - "allScansWillBeMerged": "All scans will be merged into a single PDF file." + "allScansWillBeMerged": "All scans will be merged into a single PDF file.", + "behavior": "Behavior", + "@behavior": { + "description": "Title of the settings concerning app beahvior" + }, + "theme": "Theme", + "@theme": { + "description": "Title of the theme mode setting" + }, + "clearCache": "Clear cache", + "@clearCache": { + "description": "Title of the clear cache setting" + }, + "freeBytes": "Free {bytes}", + "@freeBytes": { + "description": "Text shown for clear storage settings" + }, + "calculatingDots": "Calculating...", + "@calculatingDots": { + "description": "Text shown when the byte size is still being calculated" + }, + "freedDiskSpace": "Successfully freed {bytes} of disk space.", + "@freedDiskSpace": { + "description": "Message shown after clearing storage" + }, + "uploadScansAsPdf": "Upload scans as PDF", + "@uploadScansAsPdf": { + "description": "Title of the setting which toggles whether scans are always uploaded as pdf" + }, + "convertSinglePageScanToPdf": "Always convert single page scans to PDF before uploading", + "@convertSinglePageScanToPdf": { + "description": "description of the upload scans as pdf setting" + } } \ No newline at end of file diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb index a86b54a..32c8108 100644 --- a/lib/l10n/intl_tr.arb +++ b/lib/l10n/intl_tr.arb @@ -824,5 +824,37 @@ "@exportScansToPdf": { "description": "title of the alert dialog when exporting scans to pdf" }, - "allScansWillBeMerged": "All scans will be merged into a single PDF file." + "allScansWillBeMerged": "All scans will be merged into a single PDF file.", + "behavior": "Behavior", + "@behavior": { + "description": "Title of the settings concerning app beahvior" + }, + "theme": "Theme", + "@theme": { + "description": "Title of the theme mode setting" + }, + "clearCache": "Clear cache", + "@clearCache": { + "description": "Title of the clear cache setting" + }, + "freeBytes": "Free {bytes}", + "@freeBytes": { + "description": "Text shown for clear storage settings" + }, + "calculatingDots": "Calculating...", + "@calculatingDots": { + "description": "Text shown when the byte size is still being calculated" + }, + "freedDiskSpace": "Successfully freed {bytes} of disk space.", + "@freedDiskSpace": { + "description": "Message shown after clearing storage" + }, + "uploadScansAsPdf": "Upload scans as PDF", + "@uploadScansAsPdf": { + "description": "Title of the setting which toggles whether scans are always uploaded as pdf" + }, + "convertSinglePageScanToPdf": "Always convert single page scans to PDF before uploading", + "@convertSinglePageScanToPdf": { + "description": "description of the upload scans as pdf setting" + } } \ No newline at end of file