diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml
index 955b3b3fb..21a469b13 100644
--- a/.github/workflows/dependency-review.yml
+++ b/.github/workflows/dependency-review.yml
@@ -17,11 +17,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
- uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2
with:
egress-policy: audit
- name: 'Checkout Repository'
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: 'Dependency Review'
- uses: actions/dependency-review-action@4081bf99e2866ebe428fc0477b69eb4fcda7220a # v4.4.0
+ uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0
diff --git a/.github/workflows/quality-check.yml b/.github/workflows/quality-check.yml
index 4051df96a..6f573c642 100644
--- a/.github/workflows/quality-check.yml
+++ b/.github/workflows/quality-check.yml
@@ -18,7 +18,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
- uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2
with:
egress-policy: audit
@@ -52,7 +52,7 @@ jobs:
build-mode: manual
steps:
- name: Harden Runner
- uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2
with:
egress-policy: audit
@@ -69,7 +69,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4
+ uses: github/codeql-action/init@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
@@ -83,6 +83,6 @@ jobs:
./flutterw build apk --profile -t lib/main_play.dart --flavor play
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4
+ uses: github/codeql-action/analyze@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5
with:
category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 17147aa87..e82037478 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -18,7 +18,7 @@ jobs:
id-token: write
steps:
- name: Harden Runner
- uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2
with:
egress-policy: audit
@@ -98,7 +98,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
- uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2
with:
egress-policy: audit
diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml
index a2291978f..781659b9f 100644
--- a/.github/workflows/scorecards.yml
+++ b/.github/workflows/scorecards.yml
@@ -31,7 +31,7 @@ jobs:
steps:
- name: Harden Runner
- uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ uses: step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2
with:
egress-policy: audit
@@ -71,6 +71,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4
+ uses: github/codeql-action/upload-sarif@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5
with:
sarif_file: results.sarif
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 741cb66d8..c67508ef8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
+## [v1.11.19] - 2024-11-24
+
+### Added
+
+- integrate with OS app language settings on Android >=14
+
+### Changed
+
+- remember title filter visibility by page
+
## [v1.11.18] - 2024-11-18
### Changed
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt
index 3fe35ae01..15cd66c86 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt
@@ -1,11 +1,14 @@
package deckers.thibault.aves.channel.calls
+import android.app.LocaleConfig
+import android.app.LocaleManager
import android.content.Context
import android.content.Intent
import android.content.res.Resources
import android.location.Geocoder
import android.net.Uri
import android.os.Build
+import android.os.LocaleList
import android.provider.MediaStore
import android.provider.Settings
import androidx.core.content.pm.ShortcutManagerCompat
@@ -30,8 +33,8 @@ class DeviceHandler(private val context: Context) : MethodCallHandler {
when (call.method) {
"canManageMedia" -> safe(call, result, ::canManageMedia)
"getCapabilities" -> defaultScope.launch { safe(call, result, ::getCapabilities) }
- "getDefaultTimeZoneRawOffsetMillis" -> safe(call, result, ::getDefaultTimeZoneRawOffsetMillis)
"getLocales" -> safe(call, result, ::getLocales)
+ "setLocaleConfig" -> safe(call, result, ::setLocaleConfig)
"getPerformanceClass" -> safe(call, result, ::getPerformanceClass)
"isLocked" -> safe(call, result, ::isLocked)
"isSystemFilePickerEnabled" -> safe(call, result, ::isSystemFilePickerEnabled)
@@ -63,10 +66,6 @@ class DeviceHandler(private val context: Context) : MethodCallHandler {
)
}
- private fun getDefaultTimeZoneRawOffsetMillis(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
- result.success(TimeZone.getDefault().rawOffset)
- }
-
private fun getLocales(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
fun toMap(locale: Locale): FieldMap = hashMapOf(
"language" to locale.language,
@@ -88,6 +87,21 @@ class DeviceHandler(private val context: Context) : MethodCallHandler {
result.success(locales)
}
+ private fun setLocaleConfig(call: MethodCall, result: MethodChannel.Result) {
+ val locales = call.argument>("locales")
+ if (locales.isNullOrEmpty()) {
+ result.error("setLocaleConfig-args", "missing arguments", null)
+ return
+ }
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ val lm = context.getSystemService(Context.LOCALE_SERVICE) as? LocaleManager
+ lm?.overrideLocaleConfig = LocaleConfig(LocaleList.forLanguageTags(locales.joinToString(",")))
+ }
+
+ result.success(true)
+ }
+
private fun getPerformanceClass(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val performanceClass = Build.VERSION.MEDIA_PERFORMANCE_CLASS
diff --git a/android/app/src/main/res/values-hi/strings.xml b/android/app/src/main/res/values-hi/strings.xml
index 0447c8eb1..9b6676a4d 100644
--- a/android/app/src/main/res/values-hi/strings.xml
+++ b/android/app/src/main/res/values-hi/strings.xml
@@ -8,4 +8,5 @@
मीडिया जाँचे
ऐवीज
वीडियो
+ मैप
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/138.txt b/fastlane/metadata/android/en-US/changelogs/138.txt
new file mode 100644
index 000000000..e405b5830
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/138.txt
@@ -0,0 +1,5 @@
+In v1.11.19:
+- peruse your videos frame by frame
+- create map shortcuts to filtered collections
+- enjoy the app in Shavian
+Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/13801.txt b/fastlane/metadata/android/en-US/changelogs/13801.txt
new file mode 100644
index 000000000..e405b5830
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/13801.txt
@@ -0,0 +1,5 @@
+In v1.11.19:
+- peruse your videos frame by frame
+- create map shortcuts to filtered collections
+- enjoy the app in Shavian
+Full changelog available on GitHub
\ No newline at end of file
diff --git a/lib/l10n/app_en_Shaw.arb b/lib/l10n/app_en_Shaw.arb
index 65a149a47..e9451a13a 100644
--- a/lib/l10n/app_en_Shaw.arb
+++ b/lib/l10n/app_en_Shaw.arb
@@ -1589,5 +1589,7 @@
"videoActionShowPreviousFrame": "𐑖𐑴 𐑐𐑮𐑰𐑝𐑾𐑕 𐑓𐑮𐑱𐑥",
"@videoActionShowPreviousFrame": {},
"videoActionShowNextFrame": "𐑖𐑴 𐑯𐑧𐑒𐑕𐑑 𐑓𐑮𐑱𐑥",
- "@videoActionShowNextFrame": {}
+ "@videoActionShowNextFrame": {},
+ "newAlbumDialogAlbumAlreadyExistsHelper": "𐑨𐑤𐑚𐑩𐑥 𐑷𐑤𐑮𐑧𐑛𐑦 𐑦𐑜𐑟𐑦𐑕𐑑𐑕",
+ "@newAlbumDialogAlbumAlreadyExistsHelper": {}
}
diff --git a/lib/l10n/app_et.arb b/lib/l10n/app_et.arb
index 9bc9c3e5c..af5471797 100644
--- a/lib/l10n/app_et.arb
+++ b/lib/l10n/app_et.arb
@@ -464,5 +464,178 @@
"videoLoopModeAlways": "Alati",
"@videoLoopModeAlways": {},
"unitSystemMetric": "Meetermõõdustik",
- "@unitSystemMetric": {}
+ "@unitSystemMetric": {},
+ "viewerTransitionZoomIn": "Sissesuumimine",
+ "@viewerTransitionZoomIn": {},
+ "wallpaperTargetLock": "Lukustusvaade",
+ "@wallpaperTargetLock": {},
+ "wallpaperTargetHomeLock": "Avaleht ja lukustusvaade",
+ "@wallpaperTargetHomeLock": {},
+ "widgetDisplayedItemRandom": "Juhuslik",
+ "@widgetDisplayedItemRandom": {},
+ "widgetDisplayedItemMostRecent": "Viimane",
+ "@widgetDisplayedItemMostRecent": {},
+ "widgetOpenPageHome": "Mine avalehele",
+ "@widgetOpenPageHome": {},
+ "widgetOpenPageCollection": "Ava kogumik",
+ "@widgetOpenPageCollection": {},
+ "widgetOpenPageViewer": "Ava sirvija",
+ "@widgetOpenPageViewer": {},
+ "widgetTapUpdateWidget": "Värskenda vidinat",
+ "@widgetTapUpdateWidget": {},
+ "storageVolumeDescriptionFallbackPrimary": "Sisemine andmehoidla",
+ "@storageVolumeDescriptionFallbackPrimary": {},
+ "rootDirectoryDescription": "juurkaust",
+ "@rootDirectoryDescription": {},
+ "viewerTransitionNone": "Määratlemata",
+ "@viewerTransitionNone": {},
+ "wallpaperTargetHome": "Avaleht",
+ "@wallpaperTargetHome": {},
+ "storageVolumeDescriptionFallbackNonPrimary": "SD-kaart",
+ "@storageVolumeDescriptionFallbackNonPrimary": {},
+ "unitSystemImperial": "Inglise mõõdustik",
+ "@unitSystemImperial": {},
+ "viewerTransitionSlide": "Äraliuglemine",
+ "@viewerTransitionSlide": {},
+ "viewerTransitionFade": "Hajumine",
+ "@viewerTransitionFade": {},
+ "viewerTransitionParallax": "Parallaks",
+ "@viewerTransitionParallax": {},
+ "otherDirectoryDescription": "„{name}“ kaust",
+ "@otherDirectoryDescription": {
+ "placeholders": {
+ "name": {
+ "type": "String",
+ "example": "Pictures",
+ "description": "the name of a specific directory"
+ }
+ }
+ },
+ "notEnoughSpaceDialogMessage": "See tegevus vajab „{volume}“ andmeruumis „{neededSize}“ vaba andmemahtu, kuid alles on vaid „{freeSize}“.",
+ "@notEnoughSpaceDialogMessage": {
+ "placeholders": {
+ "neededSize": {
+ "type": "String",
+ "example": "314 MB"
+ },
+ "freeSize": {
+ "type": "String",
+ "example": "123 MB"
+ },
+ "volume": {
+ "type": "String",
+ "example": "SD card",
+ "description": "the name of a storage volume"
+ }
+ }
+ },
+ "missingSystemFilePickerDialogMessage": "Süsteemi failihaldur/failivalija on puudu või kasutuselt eemaldatud. Palun pane ta tööle ja proovi siis uuesti.",
+ "@missingSystemFilePickerDialogMessage": {},
+ "nameConflictDialogSingleSourceMessage": "Mõnedel sihtkausta failidel on sama nimi.",
+ "@nameConflictDialogSingleSourceMessage": {},
+ "videoStartOverButtonLabel": "ALUSTA UUESTI",
+ "@videoStartOverButtonLabel": {},
+ "videoResumeButtonLabel": "JÄTKA",
+ "@videoResumeButtonLabel": {},
+ "setCoverDialogLatest": "Viimane objekt",
+ "@setCoverDialogLatest": {},
+ "setCoverDialogAuto": "Automaatne",
+ "@setCoverDialogAuto": {},
+ "nameConflictDialogMultipleSourceMessage": "Mõnedel failidel on sama nimi.",
+ "@nameConflictDialogMultipleSourceMessage": {},
+ "addShortcutDialogLabel": "Kiirnupu silt",
+ "@addShortcutDialogLabel": {},
+ "addShortcutButtonLabel": "LISA",
+ "@addShortcutButtonLabel": {},
+ "noMatchingAppDialogMessage": "Pole rakendusi, mis oskaks seda kasutada.",
+ "@noMatchingAppDialogMessage": {},
+ "binEntriesConfirmationDialogMessage": "{count, plural, =1{Kas viskame selle objekti prügikasti?} other{Kas viskame need {count} objekti prügikasti?}}",
+ "@binEntriesConfirmationDialogMessage": {
+ "placeholders": {
+ "count": {
+ "format": "decimalPattern"
+ }
+ }
+ },
+ "moveUndatedConfirmationDialogMessage": "Kas enne jätkamist salvestame objekti kuupäevad?",
+ "@moveUndatedConfirmationDialogMessage": {},
+ "moveUndatedConfirmationDialogSetDate": "Salvesta kuupäevad",
+ "@moveUndatedConfirmationDialogSetDate": {},
+ "videoResumeDialogMessage": "Kas sa soovid jätkata esitamist {time} kohalt?",
+ "@videoResumeDialogMessage": {
+ "placeholders": {
+ "time": {
+ "type": "String",
+ "example": "13:37"
+ }
+ }
+ },
+ "patternDialogEnter": "Sisesta viipemuster",
+ "@patternDialogEnter": {},
+ "patternDialogConfirm": "Korda viipemustrit",
+ "@patternDialogConfirm": {},
+ "pinDialogEnter": "Sisesta PIN-kood",
+ "@pinDialogEnter": {},
+ "pinDialogConfirm": "Korda PIN-koodi",
+ "@pinDialogConfirm": {},
+ "passwordDialogEnter": "Sisesta salasõna",
+ "@passwordDialogEnter": {},
+ "passwordDialogConfirm": "Korda salasõna",
+ "@passwordDialogConfirm": {},
+ "renameAlbumDialogLabel": "Uus nimi",
+ "@renameAlbumDialogLabel": {},
+ "renameAlbumDialogLabelAlreadyExistsHelper": "Selline kaust on juba olemas",
+ "@renameAlbumDialogLabelAlreadyExistsHelper": {},
+ "renameEntrySetPageTitle": "Muuda nime",
+ "@renameEntrySetPageTitle": {},
+ "renameEntrySetPagePatternFieldLabel": "Failide nimemuster",
+ "@renameEntrySetPagePatternFieldLabel": {},
+ "renameEntrySetPageInsertTooltip": "Lisa väli",
+ "@renameEntrySetPageInsertTooltip": {},
+ "renameEntrySetPagePreviewSectionTitle": "Eelvaade",
+ "@renameEntrySetPagePreviewSectionTitle": {},
+ "renameProcessorCounter": "Loendur",
+ "@renameProcessorCounter": {},
+ "renameProcessorHash": "Räsi",
+ "@renameProcessorHash": {},
+ "renameProcessorName": "Nimi",
+ "@renameProcessorName": {},
+ "storageAccessDialogMessage": "Palun anna sellele rakendusele järgmises ekraanivaates õigused „{directory}“ kaustale „{volume}“ andmekogus.",
+ "@storageAccessDialogMessage": {
+ "placeholders": {
+ "directory": {
+ "type": "String",
+ "description": "the name of a directory, using the output of `rootDirectoryDescription` or `otherDirectoryDescription`"
+ },
+ "volume": {
+ "type": "String",
+ "example": "SD card",
+ "description": "the name of a storage volume"
+ }
+ }
+ },
+ "restrictedAccessDialogMessage": "Sellel rakendusel pole õigusi muuta faile „{volume}“ andmekogu „{directory}“ kaustas.\n\nPalun kasuta failihaldurit või galeriirakendust failide tõstmiseks muude asukohta.",
+ "@restrictedAccessDialogMessage": {
+ "placeholders": {
+ "directory": {
+ "type": "String",
+ "description": "the name of a directory, using the output of `rootDirectoryDescription` or `otherDirectoryDescription`"
+ },
+ "volume": {
+ "type": "String",
+ "example": "SD card",
+ "description": "the name of a storage volume"
+ }
+ }
+ },
+ "setCoverDialogCustom": "Sinu valik",
+ "@setCoverDialogCustom": {},
+ "deleteEntriesConfirmationDialogMessage": "{count, plural, =1{Kas kustutame selle objekti?} other{Kas kustutame need {count} objekti?}}",
+ "@deleteEntriesConfirmationDialogMessage": {
+ "placeholders": {
+ "count": {
+ "format": "decimalPattern"
+ }
+ }
+ }
}
diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb
index c027bc9ca..bca107eb8 100644
--- a/lib/l10n/app_hi.arb
+++ b/lib/l10n/app_hi.arb
@@ -964,5 +964,31 @@
"drawerCollectionImages": "इमेजेस",
"@drawerCollectionImages": {},
"aboutDataUsageMisc": "विविध",
- "@aboutDataUsageMisc": {}
+ "@aboutDataUsageMisc": {},
+ "sortByName": "नाम से",
+ "@sortByName": {},
+ "sortByDate": "दिनांक से",
+ "@sortByDate": {},
+ "videoActionShowPreviousFrame": "पिछला फ्रेम दिखाए",
+ "@videoActionShowPreviousFrame": {},
+ "videoActionShowNextFrame": "अगला फ्रेम दिखाए",
+ "@videoActionShowNextFrame": {},
+ "newAlbumDialogAlbumAlreadyExistsHelper": "एल्बम पहले से उपलब्ध हैं",
+ "@newAlbumDialogAlbumAlreadyExistsHelper": {},
+ "drawerCountryPage": "देश",
+ "@drawerCountryPage": {},
+ "collectionPickPageTitle": "चुने",
+ "@collectionPickPageTitle": {},
+ "drawerCollectionPanoramas": "पैनोरामा",
+ "@drawerCollectionPanoramas": {},
+ "drawerCollectionRaws": "रॉ फ़ोटो",
+ "@drawerCollectionRaws": {},
+ "drawerAlbumPage": "एल्बम",
+ "@drawerAlbumPage": {},
+ "drawerCollectionSphericalVideos": "360⁰ वीडियो",
+ "@drawerCollectionSphericalVideos": {},
+ "drawerPlacePage": "स्थान",
+ "@drawerPlacePage": {},
+ "drawerTagPage": "टैग्स",
+ "@drawerTagPage": {}
}
diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb
index ce3230d0f..546ee4d6d 100644
--- a/lib/l10n/app_ru.arb
+++ b/lib/l10n/app_ru.arb
@@ -1390,5 +1390,7 @@
"mapStyleOsmLiberty": "OSM Liberty",
"@mapStyleOsmLiberty": {},
"mapAttributionOsmLiberty": "Tiles by [OpenMapTiles](https://www.openmaptiles.org/), [CC BY](http://creativecommons.org/licenses/by/4.0) • Hosted by [OSM Americana](https://tile.ourmap.us)",
- "@mapAttributionOsmLiberty": {}
+ "@mapAttributionOsmLiberty": {},
+ "newAlbumDialogAlbumAlreadyExistsHelper": "Альбом уже существует",
+ "@newAlbumDialogAlbumAlreadyExistsHelper": {}
}
diff --git a/lib/model/entry/extensions/metadata_edition.dart b/lib/model/entry/extensions/metadata_edition.dart
index 6ad3b2dce..5e4228279 100644
--- a/lib/model/entry/extensions/metadata_edition.dart
+++ b/lib/model/entry/extensions/metadata_edition.dart
@@ -32,7 +32,7 @@ extension ExtraAvesEntryMetadataEdition on AvesEntry {
final appliedModifier = await _applyDateModifierToEntry(userModifier);
if (appliedModifier == null) {
if (isValid && userModifier.action != DateEditAction.copyField) {
- await reportService.recordError('failed to get date for modifier=$userModifier, entry=$this', null);
+ await reportService.recordError('failed to get date for modifier=$userModifier, entry=$this');
}
return {};
}
@@ -65,7 +65,7 @@ extension ExtraAvesEntryMetadataEdition on AvesEntry {
final shiftedDate = date.add(Duration(seconds: appliedModifier.shiftSeconds!));
editCreateDateXmp(descriptions, shiftedDate);
} else {
- reportService.recordError('failed to parse XMP date=$xmpDate', null);
+ reportService.recordError('failed to parse XMP date=$xmpDate');
}
}
case DateEditAction.remove:
diff --git a/lib/model/media/video/metadata.dart b/lib/model/media/video/metadata.dart
index 3349e202f..972f227ba 100644
--- a/lib/model/media/video/metadata.dart
+++ b/lib/model/media/video/metadata.dart
@@ -1,12 +1,12 @@
import 'dart:async';
import 'package:aves/model/entry/entry.dart';
-import 'package:aves/model/metadata/catalog.dart';
import 'package:aves/model/media/video/channel_layouts.dart';
import 'package:aves/model/media/video/codecs.dart';
import 'package:aves/model/media/video/profiles/aac.dart';
import 'package:aves/model/media/video/profiles/h264.dart';
import 'package:aves/model/media/video/profiles/hevc.dart';
+import 'package:aves/model/metadata/catalog.dart';
import 'package:aves/ref/languages.dart';
import 'package:aves/ref/locales.dart';
import 'package:aves/ref/mime_types.dart';
@@ -99,7 +99,7 @@ class VideoMetadataFormatter {
if (isDefined(dateString)) {
dateMillis = parseVideoDate(dateString);
if (dateMillis == null && !isAmbiguousDate(dateString)) {
- await reportService.recordError('getCatalogMetadata failed to parse date=$dateString for mimeType=${entry.mimeType} entry=$entry', null);
+ await reportService.recordError('getCatalogMetadata failed to parse date=$dateString for mimeType=${entry.mimeType} entry=$entry');
}
}
diff --git a/lib/model/settings/modules/app.dart b/lib/model/settings/modules/app.dart
index 2b9caa141..4c3538be5 100644
--- a/lib/model/settings/modules/app.dart
+++ b/lib/model/settings/modules/app.dart
@@ -87,9 +87,9 @@ mixin AppSettings on SettingsAccess {
set forceWesternArabicNumerals(bool newValue) => set(SettingKeys.forceWesternArabicNumeralsKey, newValue);
- int get catalogTimeZoneRawOffsetMillis => getInt(SettingKeys.catalogTimeZoneRawOffsetMillisKey) ?? 0;
+ int get catalogTimeZoneOffsetMillis => getInt(SettingKeys.catalogTimeZoneOffsetMillisKey) ?? 0;
- set catalogTimeZoneRawOffsetMillis(int newValue) => set(SettingKeys.catalogTimeZoneRawOffsetMillisKey, newValue);
+ set catalogTimeZoneOffsetMillis(int newValue) => set(SettingKeys.catalogTimeZoneOffsetMillisKey, newValue);
double getTileExtent(String routeName) => getDouble(SettingKeys.tileExtentPrefixKey + routeName) ?? 0;
diff --git a/lib/model/settings/modules/filter_grids.dart b/lib/model/settings/modules/filter_grids.dart
index d2a7064f7..fc5a52275 100644
--- a/lib/model/settings/modules/filter_grids.dart
+++ b/lib/model/settings/modules/filter_grids.dart
@@ -51,7 +51,7 @@ mixin FilterGridsSettings on SettingsAccess {
set pinnedFilters(Set newValue) => set(SettingKeys.pinnedFiltersKey, newValue.map((filter) => filter.toJson()).toList());
- bool get showAlbumPickQuery => getBool(SettingKeys.showAlbumPickQueryKey) ?? false;
+ bool getShowTitleQuery(String routeName) => getBool(SettingKeys.showTitleQueryPrefixKey + routeName) ?? false;
- set showAlbumPickQuery(bool newValue) => set(SettingKeys.showAlbumPickQueryKey, newValue);
+ void setShowTitleQuery(String routeName, bool newValue) => set(SettingKeys.showTitleQueryPrefixKey + routeName, newValue);
}
diff --git a/lib/model/settings/settings.dart b/lib/model/settings/settings.dart
index 40804ec4f..e1a52c276 100644
--- a/lib/model/settings/settings.dart
+++ b/lib/model/settings/settings.dart
@@ -360,6 +360,12 @@ class Settings with ChangeNotifier, SettingsAccess, AppSettings, DisplaySettings
} else {
debugPrint('failed to import key=$key, value=$newValue is not a string');
}
+ } else if (key.startsWith(SettingKeys.showTitleQueryPrefixKey)) {
+ if (newValue is bool) {
+ store.setBool(key, newValue);
+ } else {
+ debugPrint('failed to import key=$key, value=$newValue is not a bool');
+ }
} else {
switch (key) {
case SettingKeys.subtitleTextColorKey:
@@ -404,7 +410,6 @@ class Settings with ChangeNotifier, SettingsAccess, AppSettings, DisplaySettings
case SettingKeys.stateSortReverseKey:
case SettingKeys.placeSortReverseKey:
case SettingKeys.tagSortReverseKey:
- case SettingKeys.showAlbumPickQueryKey:
case SettingKeys.showOverlayOnOpeningKey:
case SettingKeys.showOverlayMinimapKey:
case SettingKeys.showOverlayInfoKey:
diff --git a/lib/model/source/media_store_source.dart b/lib/model/source/media_store_source.dart
index c2a85e28f..9f01ef478 100644
--- a/lib/model/source/media_store_source.dart
+++ b/lib/model/source/media_store_source.dart
@@ -59,15 +59,13 @@ class MediaStoreSource extends CollectionSource {
await vaults.init();
await favourites.init();
await covers.init();
- final currentTimeZoneOffset = await deviceService.getDefaultTimeZoneRawOffsetMillis();
- if (currentTimeZoneOffset != null) {
- final catalogTimeZoneOffset = settings.catalogTimeZoneRawOffsetMillis;
- if (currentTimeZoneOffset != catalogTimeZoneOffset) {
- unawaited(reportService.recordError('Time zone offset change: $currentTimeZoneOffset -> $catalogTimeZoneOffset. Clear catalog metadata to get correct date/times.', null));
- await localMediaDb.clearDates();
- await localMediaDb.clearCatalogMetadata();
- settings.catalogTimeZoneRawOffsetMillis = currentTimeZoneOffset;
- }
+ final currentTimeZoneOffset = DateTime.now().timeZoneOffset.inMilliseconds;
+ final catalogTimeZoneOffset = settings.catalogTimeZoneOffsetMillis;
+ if (currentTimeZoneOffset != catalogTimeZoneOffset) {
+ unawaited(reportService.recordError('Time zone offset change: $currentTimeZoneOffset -> $catalogTimeZoneOffset. Clear catalog metadata to get correct date/times.'));
+ await localMediaDb.clearDates();
+ await localMediaDb.clearCatalogMetadata();
+ settings.catalogTimeZoneOffsetMillis = currentTimeZoneOffset;
}
await loadDates();
debugPrint('$runtimeType load essentials complete in ${stopwatch.elapsed.inMilliseconds}ms');
@@ -214,7 +212,7 @@ class MediaStoreSource extends CollectionSource {
// TODO TLAD find duplication cause
final duplicates = await localMediaDb.searchLiveDuplicates(EntryOrigins.mediaStoreContent, newEntries);
if (duplicates.isNotEmpty) {
- unawaited(reportService.recordError(Exception('Loading entries yielded duplicates=${duplicates.join(', ')}'), StackTrace.current));
+ unawaited(reportService.recordError(Exception('Loading entries yielded duplicates=${duplicates.join(', ')}')));
// post-error cleanup
await localMediaDb.removeIds(duplicates.map((v) => v.id).toSet());
for (final duplicate in duplicates) {
@@ -327,7 +325,7 @@ class MediaStoreSource extends CollectionSource {
// TODO TLAD find duplication cause
final duplicates = await localMediaDb.searchLiveDuplicates(EntryOrigins.mediaStoreContent, newEntries);
if (duplicates.isNotEmpty) {
- unawaited(reportService.recordError(Exception('Refreshing entries yielded duplicates=${duplicates.join(', ')}'), StackTrace.current));
+ unawaited(reportService.recordError(Exception('Refreshing entries yielded duplicates=${duplicates.join(', ')}')));
// post-error cleanup
await localMediaDb.removeIds(duplicates.map((v) => v.id).toSet());
for (final duplicate in duplicates) {
diff --git a/lib/model/source/trash.dart b/lib/model/source/trash.dart
index f3107cbf5..6afbce6be 100644
--- a/lib/model/source/trash.dart
+++ b/lib/model/source/trash.dart
@@ -76,7 +76,7 @@ mixin TrashMixin on SourceBase {
sourceEntry.trashDetails = _buildTrashDetails(id);
newEntries.add(sourceEntry);
} else {
- await reportService.recordError('Failed to recover untracked bin item at uri=$uri', null);
+ await reportService.recordError('Failed to recover untracked bin item at uri=$uri');
}
}
});
diff --git a/lib/model/vaults/vaults.dart b/lib/model/vaults/vaults.dart
index a621c2952..7f80c563a 100644
--- a/lib/model/vaults/vaults.dart
+++ b/lib/model/vaults/vaults.dart
@@ -175,7 +175,7 @@ class Vaults extends ChangeNotifier {
sourceEntry.origin = EntryOrigins.vault;
newEntries.add(sourceEntry);
} else {
- await reportService.recordError('Failed to recover untracked vault item at uri=$uri', null);
+ await reportService.recordError('Failed to recover untracked vault item at uri=$uri');
}
});
}
diff --git a/lib/services/device_service.dart b/lib/services/device_service.dart
index 0eac24328..eeceda1fc 100644
--- a/lib/services/device_service.dart
+++ b/lib/services/device_service.dart
@@ -8,10 +8,10 @@ abstract class DeviceService {
Future