Merge branch 'develop'
4
.github/workflows/quality-check.yml
vendored
|
@ -69,7 +69,7 @@ jobs:
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
|
uses: github/codeql-action/init@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
build-mode: ${{ matrix.build-mode }}
|
build-mode: ${{ matrix.build-mode }}
|
||||||
|
@ -83,6 +83,6 @@ jobs:
|
||||||
./flutterw build apk --profile -t lib/main_play.dart --flavor play
|
./flutterw build apk --profile -t lib/main_play.dart --flavor play
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
|
uses: github/codeql-action/analyze@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0
|
||||||
with:
|
with:
|
||||||
category: "/language:${{matrix.language}}"
|
category: "/language:${{matrix.language}}"
|
||||||
|
|
2
.github/workflows/scorecards.yml
vendored
|
@ -71,6 +71,6 @@ jobs:
|
||||||
|
|
||||||
# Upload the results to GitHub's code scanning dashboard.
|
# Upload the results to GitHub's code scanning dashboard.
|
||||||
- name: "Upload to code-scanning"
|
- name: "Upload to code-scanning"
|
||||||
uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
|
uses: github/codeql-action/upload-sarif@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
|
13
CHANGELOG.md
|
@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
## <a id="unreleased"></a>[Unreleased]
|
## <a id="unreleased"></a>[Unreleased]
|
||||||
|
|
||||||
|
## <a id="v1.12.1"></a>[v1.12.1] - 2025-01-05
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- dynamic album decompose action
|
||||||
|
- Danish translation (thanks Grooty12, Victor M, cat)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- analysis service not triggering because of uninitialized app lifecycle
|
||||||
|
- Viewer: displaying neighbour items when the initial item of a view intent is a new one
|
||||||
|
- Search: dynamic album name filtering
|
||||||
|
|
||||||
## <a id="v1.12.0"></a>[v1.12.0] - 2024-12-19
|
## <a id="v1.12.0"></a>[v1.12.0] - 2024-12-19
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -3,9 +3,10 @@
|
||||||
<string name="app_widget_label">Fotoramme</string>
|
<string name="app_widget_label">Fotoramme</string>
|
||||||
<string name="wallpaper">Baggrund</string>
|
<string name="wallpaper">Baggrund</string>
|
||||||
<string name="videos_shortcut_short_label">Videoer</string>
|
<string name="videos_shortcut_short_label">Videoer</string>
|
||||||
<string name="analysis_channel_name">Mediascanning</string>
|
<string name="analysis_channel_name">Mediescanning</string>
|
||||||
<string name="analysis_notification_default_title">Scanner medier</string>
|
<string name="analysis_notification_default_title">Scanner medier</string>
|
||||||
<string name="analysis_notification_action_stop">Stop</string>
|
<string name="analysis_notification_action_stop">Stop</string>
|
||||||
<string name="app_name">Aves</string>
|
<string name="app_name">Aves</string>
|
||||||
<string name="search_shortcut_short_label">Søg</string>
|
<string name="search_shortcut_short_label">Søg</string>
|
||||||
|
<string name="map_shortcut_short_label">Kort</string>
|
||||||
</resources>
|
</resources>
|
|
@ -6,7 +6,7 @@
|
||||||
<string name="videos_shortcut_short_label">Videók</string>
|
<string name="videos_shortcut_short_label">Videók</string>
|
||||||
<string name="analysis_notification_action_stop">Állj</string>
|
<string name="analysis_notification_action_stop">Állj</string>
|
||||||
<string name="app_widget_label">Fotó keret</string>
|
<string name="app_widget_label">Fotó keret</string>
|
||||||
<string name="analysis_channel_name">Tartalom keresése</string>
|
<string name="analysis_channel_name">Médiafájlok keresése</string>
|
||||||
<string name="analysis_notification_default_title">Média beolvasása</string>
|
<string name="analysis_notification_default_title">Média beolvasása</string>
|
||||||
<string name="map_shortcut_short_label">Térkép</string>
|
<string name="map_shortcut_short_label">Térkép</string>
|
||||||
</resources>
|
</resources>
|
|
@ -1,5 +1,5 @@
|
||||||
<i>Aves</i> can handle all sorts of images and videos, including your typical JPEGs and MP4s, but also more exotic things like <b>multi-page TIFFs, SVGs, old AVIs and more</b>! It scans your media collection to identify <b>motion photos</b>, <b>panoramas</b> (aka photo spheres), <b>360° videos</b>, as well as <b>GeoTIFF</b> files.
|
<i>Aves</i> kan håndtere alle slags billeder og videoer, inklusive de typiske JPEG'er og MP4'er, men også mere usædvanlige ting som <b>flersidede TIFF'er, SVG'er, gamle AVI'er og mere</b>! Den scanner din mediesamling for at identificere <b>bevægelsesfotos</b>, <b>panoramaer</b> (også kaldet fotosfærer), <b>360° videoer</b> samt <b>GeoTIFF</b>-filer.
|
||||||
|
|
||||||
<b>Navigation and search</b> is an important part of <i>Aves</i>. The goal is for users to easily flow from albums to photos to tags to maps, etc.
|
<b>Navigation og søgning</b> er en vigtig del af <i>Aves</i>. Målet er, at brugerne nemt kan gå fra album til fotos til tags til kort osv.
|
||||||
|
|
||||||
<i>Aves</i> integrates with Android (including Android TV) with features such as <b>widgets</b>, <b>app shortcuts</b>, <b>screen saver</b> and <b>global search</b> handling. It also works as a <b>media viewer and picker</b>.
|
<i>Aves</i> integreres med Android (inklusive Android TV) med funktioner som <b>widgets</b>, <b>app-genveje</b>, <b>pauseskærm</b> og håndtering af <b>global søgning</b>. Den fungerer også som <b>medieviser og -vælger</b>.
|
||||||
|
|
BIN
fastlane/metadata/android/da/images/featureGraphic.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
fastlane/metadata/android/da/images/phoneScreenshots/1.png
Normal file
After Width: | Height: | Size: 281 KiB |
BIN
fastlane/metadata/android/da/images/phoneScreenshots/2.png
Normal file
After Width: | Height: | Size: 496 KiB |
BIN
fastlane/metadata/android/da/images/phoneScreenshots/3.png
Normal file
After Width: | Height: | Size: 135 KiB |
BIN
fastlane/metadata/android/da/images/phoneScreenshots/4.png
Normal file
After Width: | Height: | Size: 93 KiB |
BIN
fastlane/metadata/android/da/images/phoneScreenshots/5.png
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
fastlane/metadata/android/da/images/phoneScreenshots/6.png
Normal file
After Width: | Height: | Size: 325 KiB |
BIN
fastlane/metadata/android/da/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 336 KiB |
|
@ -1 +1 @@
|
||||||
Gallery and metadata explorer
|
Galleri og metadataudforsker
|
3
fastlane/metadata/android/en-US/changelogs/141.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
In v1.12.1:
|
||||||
|
- enjoy the app in Danish
|
||||||
|
Full changelog available on GitHub
|
3
fastlane/metadata/android/en-US/changelogs/14101.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
In v1.12.1:
|
||||||
|
- enjoy the app in Danish
|
||||||
|
Full changelog available on GitHub
|
|
@ -1,5 +1,5 @@
|
||||||
<i>ஏவ்ச்</i> உங்கள் வழக்கமான JPEG கள் மற்றும் MP4 கள் உட்பட அனைத்து வகையான படங்கள் மற்றும் வீடியோக்களைக் கையாள முடியும், ஆனால் <b> பல பக்க டிஐஎஃப்பிஎச், எச்விசிகள், பழைய அவிச் மற்றும் மேலும் </b> போன்ற கவர்ச்சியான விசயங்களையும் கையாள முடியும்! <b> மோசன் புகைப்படங்கள் </b>, <b> பனோரமாச் </b> (புகைப்படக் கோளங்கள்), <b> 360 ° வீடியோக்கள் </b>, அத்துடன் <b> சியோடிஃப் < /b> கோப்புகள்.
|
<i>ஏவ்ச்</i> உங்கள் வழக்கமான செபிஇசிகள் மற்றும் எம்பி4கள் உட்பட அனைத்து வகையான படங்கள் மற்றும் காணொளிகளைக் கையாள முடியும், ஆனால் <b> பல பக்க டிஐஎப்எப்கள், எச்விசிகள், பழைய அவிச் மற்றும் மேலும் </b> போன்ற கவர்ச்சியான உருப்படிகளையும் கையாள முடியும்! <b> இயக்கபுகைப்படங்கள் </b>, <b> பனோரமாகள் </b> (புகைப்படக் கோளங்கள்), <b> 360 ° காணொளிகள் </b>, அத்துடன் <b> சியோடிஐஎப்எப்கள்</b> கோப்புகள்.
|
||||||
|
|
||||||
<b> வழிசெலுத்தல் மற்றும் தேடல் </b> <i> ஏவ்ச் </i> இன் ஒரு முக்கிய பகுதியாகும். பயனர்கள் ஆல்பங்களிலிருந்து புகைப்படங்கள் வரை குறிச்சொற்களுக்கு வரைபடங்கள் போன்றவற்றுக்கு எளிதாக பாய வேண்டும்.
|
<b> வழிசெலுத்தல் மற்றும் தேடல் </b> <i> ஏவ்ச் </i> இன் ஒரு முக்கிய பகுதியாகும். பயனர்கள் ஆல்பங்களிலிருந்து புகைப்படங்கள்வரை குறிச்சொற்களுக்கு வரைபடங்கள் போன்றவற்றுக்கு எளிதாகப் பாய வேண்டும்.
|
||||||
|
|
||||||
<i>Aves</i> integrates with Android (including Android TV) with features such as <b>widgets</b>, <b>app shortcuts</b>, <b>screen saver</b> and <b>global search</b> handling. It also works as a <b>media viewer and picker</b>.
|
<i>ஏவ்ச்</i> ஆனது ஆண்ட்ராய்டு உடன் (ஆண்ட்ராய்டு தொலைக்காட்சி உட்பட) ஒருங்கிணைக்கிறது, இதில் <b>நிரல்பலகைகள்</b>, <b>பயன்பாட்டு குறுக்குவழிகள்</b>, <b>திரை காப்பான்</b> மற்றும் <b>உலகளாவிய தேடல்</b> கையாளுதல் போன்ற நற்பண்புகள் உள்ளன. இது ஒரு <b>ஊடக காட்டி மற்றும் தேர்வியாகவும்</b> செயல்படுகிறது.
|
||||||
|
|
|
@ -1562,5 +1562,7 @@
|
||||||
"appExportDynamicAlbums": "الألبومات الديناميكية",
|
"appExportDynamicAlbums": "الألبومات الديناميكية",
|
||||||
"@appExportDynamicAlbums": {},
|
"@appExportDynamicAlbums": {},
|
||||||
"newDynamicAlbumDialogTitle": "ألبوم ديناميكي جديد",
|
"newDynamicAlbumDialogTitle": "ألبوم ديناميكي جديد",
|
||||||
"@newDynamicAlbumDialogTitle": {}
|
"@newDynamicAlbumDialogTitle": {},
|
||||||
|
"chipActionDecompose": "فصل",
|
||||||
|
"@chipActionDecompose": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -202,7 +202,7 @@
|
||||||
"@sortOrderShortestFirst": {},
|
"@sortOrderShortestFirst": {},
|
||||||
"albumGroupTier": "По нива",
|
"albumGroupTier": "По нива",
|
||||||
"@albumGroupTier": {},
|
"@albumGroupTier": {},
|
||||||
"explorerPageTitle": "Explorer",
|
"explorerPageTitle": "Файлов мениджър",
|
||||||
"@explorerPageTitle": {},
|
"@explorerPageTitle": {},
|
||||||
"explorerActionSelectStorageVolume": "Избери място за съхранение",
|
"explorerActionSelectStorageVolume": "Избери място за съхранение",
|
||||||
"@explorerActionSelectStorageVolume": {},
|
"@explorerActionSelectStorageVolume": {},
|
||||||
|
@ -427,11 +427,11 @@
|
||||||
"@filterNoTagLabel": {},
|
"@filterNoTagLabel": {},
|
||||||
"filterOnThisDayLabel": "Днес",
|
"filterOnThisDayLabel": "Днес",
|
||||||
"@filterOnThisDayLabel": {},
|
"@filterOnThisDayLabel": {},
|
||||||
"filterRecentlyAddedLabel": "Наскоро добавен",
|
"filterRecentlyAddedLabel": "Наскоро добавени",
|
||||||
"@filterRecentlyAddedLabel": {},
|
"@filterRecentlyAddedLabel": {},
|
||||||
"filterRatingRejectedLabel": "Отхвърлени",
|
"filterRatingRejectedLabel": "Отхвърлени",
|
||||||
"@filterRatingRejectedLabel": {},
|
"@filterRatingRejectedLabel": {},
|
||||||
"filterTypeAnimatedLabel": "Анимиран",
|
"filterTypeAnimatedLabel": "Анимирани",
|
||||||
"@filterTypeAnimatedLabel": {},
|
"@filterTypeAnimatedLabel": {},
|
||||||
"filterTypeMotionPhotoLabel": "Снимка с движение",
|
"filterTypeMotionPhotoLabel": "Снимка с движение",
|
||||||
"@filterTypeMotionPhotoLabel": {},
|
"@filterTypeMotionPhotoLabel": {},
|
||||||
|
@ -975,7 +975,7 @@
|
||||||
"@albumPickPageTitlePick": {},
|
"@albumPickPageTitlePick": {},
|
||||||
"albumCamera": "Камера",
|
"albumCamera": "Камера",
|
||||||
"@albumCamera": {},
|
"@albumCamera": {},
|
||||||
"albumDownload": "Изтегляне",
|
"albumDownload": "Изтеглени",
|
||||||
"@albumDownload": {},
|
"@albumDownload": {},
|
||||||
"albumScreenshots": "Екранни снимки",
|
"albumScreenshots": "Екранни снимки",
|
||||||
"@albumScreenshots": {},
|
"@albumScreenshots": {},
|
||||||
|
@ -1201,7 +1201,7 @@
|
||||||
"@settingsCollectionQuickActionTabBrowsing": {},
|
"@settingsCollectionQuickActionTabBrowsing": {},
|
||||||
"settingsCollectionQuickActionTabSelecting": "Избиране",
|
"settingsCollectionQuickActionTabSelecting": "Избиране",
|
||||||
"@settingsCollectionQuickActionTabSelecting": {},
|
"@settingsCollectionQuickActionTabSelecting": {},
|
||||||
"settingsCollectionBurstPatternsTile": "Burst patterns",
|
"settingsCollectionBurstPatternsTile": "Шаблон серийни снимки",
|
||||||
"@settingsCollectionBurstPatternsTile": {},
|
"@settingsCollectionBurstPatternsTile": {},
|
||||||
"settingsCollectionBurstPatternsNone": "Няма",
|
"settingsCollectionBurstPatternsNone": "Няма",
|
||||||
"@settingsCollectionBurstPatternsNone": {},
|
"@settingsCollectionBurstPatternsNone": {},
|
||||||
|
@ -1337,7 +1337,7 @@
|
||||||
"@viewerInfoLabelTitle": {},
|
"@viewerInfoLabelTitle": {},
|
||||||
"viewerInfoLabelOwner": "Собственик",
|
"viewerInfoLabelOwner": "Собственик",
|
||||||
"@viewerInfoLabelOwner": {},
|
"@viewerInfoLabelOwner": {},
|
||||||
"mapAttributionOpenTopoMap": "[SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | Tiles by [OpenTopoMap](https://opentopomap.org/), [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/)",
|
"mapAttributionOpenTopoMap": "[SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | Плочки от [OpenTopoMap](https://opentopomap.org/), [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/)",
|
||||||
"@mapAttributionOpenTopoMap": {},
|
"@mapAttributionOpenTopoMap": {},
|
||||||
"mapEmptyRegion": "Няма изображения в този регион",
|
"mapEmptyRegion": "Няма изображения в този регион",
|
||||||
"@mapEmptyRegion": {},
|
"@mapEmptyRegion": {},
|
||||||
|
@ -1367,7 +1367,7 @@
|
||||||
"@filePickerShowHiddenFiles": {},
|
"@filePickerShowHiddenFiles": {},
|
||||||
"chipActionRemove": "Премахване",
|
"chipActionRemove": "Премахване",
|
||||||
"@chipActionRemove": {},
|
"@chipActionRemove": {},
|
||||||
"albumTierDynamic": "Dynamic",
|
"albumTierDynamic": "Динамични",
|
||||||
"@albumTierDynamic": {},
|
"@albumTierDynamic": {},
|
||||||
"collectionActionAddDynamicAlbum": "Добави динамичен албум",
|
"collectionActionAddDynamicAlbum": "Добави динамичен албум",
|
||||||
"@collectionActionAddDynamicAlbum": {},
|
"@collectionActionAddDynamicAlbum": {},
|
||||||
|
@ -1521,9 +1521,9 @@
|
||||||
"@mapZoomOutTooltip": {},
|
"@mapZoomOutTooltip": {},
|
||||||
"mapPointNorthUpTooltip": "Север нагоре",
|
"mapPointNorthUpTooltip": "Север нагоре",
|
||||||
"@mapPointNorthUpTooltip": {},
|
"@mapPointNorthUpTooltip": {},
|
||||||
"mapAttributionOsmHot": "Tiles by [HOT](https://www.hotosm.org/) • Hosted by [OSM France](https://openstreetmap.fr/)",
|
"mapAttributionOsmHot": "Плочки от[HOT](https://www.hotosm.org/) • Хоствано от [OSM France](https://openstreetmap.fr/)",
|
||||||
"@mapAttributionOsmHot": {},
|
"@mapAttributionOsmHot": {},
|
||||||
"mapAttributionStamen": "Tiles by [Stamen Design](https://stamen.com), [CC BY 3.0](https://creativecommons.org/licenses/by/3.0)",
|
"mapAttributionStamen": "Плочки от [Stamen Design](https://stamen.com), [CC BY 3.0](https://creativecommons.org/licenses/by/3.0)",
|
||||||
"@mapAttributionStamen": {},
|
"@mapAttributionStamen": {},
|
||||||
"openMapPageTooltip": "Преглед на страницата с карта",
|
"openMapPageTooltip": "Преглед на страницата с карта",
|
||||||
"@openMapPageTooltip": {},
|
"@openMapPageTooltip": {},
|
||||||
|
@ -1569,7 +1569,7 @@
|
||||||
"@appExportDynamicAlbums": {},
|
"@appExportDynamicAlbums": {},
|
||||||
"settingsViewerShowOverlayThumbnails": "Показване на миниатюри",
|
"settingsViewerShowOverlayThumbnails": "Показване на миниатюри",
|
||||||
"@settingsViewerShowOverlayThumbnails": {},
|
"@settingsViewerShowOverlayThumbnails": {},
|
||||||
"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": "Предварително генерирани плочки от [OpenMapTiles](https://www.openmaptiles.org/), [CC BY](http://creativecommons.org/licenses/by/4.0) • • Хоствано от [OSM Americana](https://tile.ourmap.us)",
|
||||||
"@mapAttributionOsmLiberty": {},
|
"@mapAttributionOsmLiberty": {},
|
||||||
"settingsDisablingBinWarningDialogMessage": "Елементите в кошчето ще бъдат изтрити завинаги.",
|
"settingsDisablingBinWarningDialogMessage": "Елементите в кошчето ще бъдат изтрити завинаги.",
|
||||||
"@settingsDisablingBinWarningDialogMessage": {},
|
"@settingsDisablingBinWarningDialogMessage": {},
|
||||||
|
@ -1593,7 +1593,7 @@
|
||||||
"@settingsLanguageTile": {},
|
"@settingsLanguageTile": {},
|
||||||
"viewerErrorDoesNotExist": "Файлът не съществува.",
|
"viewerErrorDoesNotExist": "Файлът не съществува.",
|
||||||
"@viewerErrorDoesNotExist": {},
|
"@viewerErrorDoesNotExist": {},
|
||||||
"mapAttributionOsmData": "Map data © [OpenStreetMap](https://www.openstreetmap.org/copyright) contributors",
|
"mapAttributionOsmData": "Данни карта © [OpenStreetMap](https://www.openstreetmap.org/copyright) участници",
|
||||||
"@mapAttributionOsmData": {},
|
"@mapAttributionOsmData": {},
|
||||||
"filePickerNoItems": "Не откривам нищо",
|
"filePickerNoItems": "Не откривам нищо",
|
||||||
"@filePickerNoItems": {},
|
"@filePickerNoItems": {},
|
||||||
|
|
1439
lib/l10n/app_da.arb
|
@ -1392,5 +1392,19 @@
|
||||||
"mapAttributionOpenTopoMap": "[SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | Kacheln von [OpenTopoMap](https://opentopomap.org/), [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/)",
|
"mapAttributionOpenTopoMap": "[SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | Kacheln von [OpenTopoMap](https://opentopomap.org/), [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/)",
|
||||||
"@mapAttributionOpenTopoMap": {},
|
"@mapAttributionOpenTopoMap": {},
|
||||||
"newAlbumDialogAlbumAlreadyExistsHelper": "Album existiert bereits",
|
"newAlbumDialogAlbumAlreadyExistsHelper": "Album existiert bereits",
|
||||||
"@newAlbumDialogAlbumAlreadyExistsHelper": {}
|
"@newAlbumDialogAlbumAlreadyExistsHelper": {},
|
||||||
|
"appExportDynamicAlbums": "Dynamische Alben",
|
||||||
|
"@appExportDynamicAlbums": {},
|
||||||
|
"dynamicAlbumAlreadyExists": "Dynamisches Album existiert bereits",
|
||||||
|
"@dynamicAlbumAlreadyExists": {},
|
||||||
|
"chipActionRemove": "Entfernen",
|
||||||
|
"@chipActionRemove": {},
|
||||||
|
"newDynamicAlbumDialogTitle": "Neues Dynamisches Album",
|
||||||
|
"@newDynamicAlbumDialogTitle": {},
|
||||||
|
"collectionActionAddDynamicAlbum": "Dynamisches Album hinzufügen",
|
||||||
|
"@collectionActionAddDynamicAlbum": {},
|
||||||
|
"albumTierDynamic": "Dynamisch",
|
||||||
|
"@albumTierDynamic": {},
|
||||||
|
"chipActionDecompose": "Aufschlüsseln",
|
||||||
|
"@chipActionDecompose": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,6 +92,7 @@
|
||||||
"chipActionGoToPlacePage": "Show in Places",
|
"chipActionGoToPlacePage": "Show in Places",
|
||||||
"chipActionGoToTagPage": "Show in Tags",
|
"chipActionGoToTagPage": "Show in Tags",
|
||||||
"chipActionGoToExplorerPage": "Show in Explorer",
|
"chipActionGoToExplorerPage": "Show in Explorer",
|
||||||
|
"chipActionDecompose": "Split",
|
||||||
"chipActionFilterOut": "Filter out",
|
"chipActionFilterOut": "Filter out",
|
||||||
"chipActionFilterIn": "Filter in",
|
"chipActionFilterIn": "Filter in",
|
||||||
"chipActionHide": "Hide",
|
"chipActionHide": "Hide",
|
||||||
|
|
|
@ -1404,5 +1404,7 @@
|
||||||
"albumTierDynamic": "Dinámico",
|
"albumTierDynamic": "Dinámico",
|
||||||
"@albumTierDynamic": {},
|
"@albumTierDynamic": {},
|
||||||
"newDynamicAlbumDialogTitle": "Nuevo álbum dinámico",
|
"newDynamicAlbumDialogTitle": "Nuevo álbum dinámico",
|
||||||
"@newDynamicAlbumDialogTitle": {}
|
"@newDynamicAlbumDialogTitle": {},
|
||||||
|
"chipActionDecompose": "Separar",
|
||||||
|
"@chipActionDecompose": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1602,5 +1602,7 @@
|
||||||
"settingsLanguagePageTitle": "Keel",
|
"settingsLanguagePageTitle": "Keel",
|
||||||
"@settingsLanguagePageTitle": {},
|
"@settingsLanguagePageTitle": {},
|
||||||
"viewerInfoViewXmlLinkText": "Vaata XMLi",
|
"viewerInfoViewXmlLinkText": "Vaata XMLi",
|
||||||
"@viewerInfoViewXmlLinkText": {}
|
"@viewerInfoViewXmlLinkText": {},
|
||||||
|
"chipActionDecompose": "Poolita",
|
||||||
|
"@chipActionDecompose": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1404,5 +1404,7 @@
|
||||||
"appExportDynamicAlbums": "Albums dynamiques",
|
"appExportDynamicAlbums": "Albums dynamiques",
|
||||||
"@appExportDynamicAlbums": {},
|
"@appExportDynamicAlbums": {},
|
||||||
"collectionActionAddDynamicAlbum": "Ajouter un album dynamique",
|
"collectionActionAddDynamicAlbum": "Ajouter un album dynamique",
|
||||||
"@collectionActionAddDynamicAlbum": {}
|
"@collectionActionAddDynamicAlbum": {},
|
||||||
|
"chipActionDecompose": "Scinder",
|
||||||
|
"@chipActionDecompose": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1544,5 +1544,23 @@
|
||||||
"settingsForceWesternArabicNumeralsTile": "Arab számok használata",
|
"settingsForceWesternArabicNumeralsTile": "Arab számok használata",
|
||||||
"@settingsForceWesternArabicNumeralsTile": {},
|
"@settingsForceWesternArabicNumeralsTile": {},
|
||||||
"chipActionGoToExplorerPage": "Mutatás a böngészőben",
|
"chipActionGoToExplorerPage": "Mutatás a böngészőben",
|
||||||
"@chipActionGoToExplorerPage": {}
|
"@chipActionGoToExplorerPage": {},
|
||||||
|
"videoActionShowNextFrame": "Következő képkocka mutatása",
|
||||||
|
"@videoActionShowNextFrame": {},
|
||||||
|
"videoActionShowPreviousFrame": "Előző képkocka mutatása",
|
||||||
|
"@videoActionShowPreviousFrame": {},
|
||||||
|
"dynamicAlbumAlreadyExists": "A dinamikus album már létezik",
|
||||||
|
"@dynamicAlbumAlreadyExists": {},
|
||||||
|
"collectionActionAddDynamicAlbum": "Dinamikus album hozzáadása",
|
||||||
|
"@collectionActionAddDynamicAlbum": {},
|
||||||
|
"newAlbumDialogAlbumAlreadyExistsHelper": "Az album már létezik",
|
||||||
|
"@newAlbumDialogAlbumAlreadyExistsHelper": {},
|
||||||
|
"chipActionRemove": "Eltávolítás",
|
||||||
|
"@chipActionRemove": {},
|
||||||
|
"albumTierDynamic": "Dinamikus",
|
||||||
|
"@albumTierDynamic": {},
|
||||||
|
"newDynamicAlbumDialogTitle": "Új Dinamikus Album",
|
||||||
|
"@newDynamicAlbumDialogTitle": {},
|
||||||
|
"appExportDynamicAlbums": "Dinamikus albumok",
|
||||||
|
"@appExportDynamicAlbums": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1404,5 +1404,7 @@
|
||||||
"dynamicAlbumAlreadyExists": "Album dinamis sudah ada",
|
"dynamicAlbumAlreadyExists": "Album dinamis sudah ada",
|
||||||
"@dynamicAlbumAlreadyExists": {},
|
"@dynamicAlbumAlreadyExists": {},
|
||||||
"newDynamicAlbumDialogTitle": "Album Dinamis Baru",
|
"newDynamicAlbumDialogTitle": "Album Dinamis Baru",
|
||||||
"@newDynamicAlbumDialogTitle": {}
|
"@newDynamicAlbumDialogTitle": {},
|
||||||
|
"chipActionDecompose": "Pisah",
|
||||||
|
"@chipActionDecompose": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1341,7 +1341,7 @@
|
||||||
"@entryActionCast": {},
|
"@entryActionCast": {},
|
||||||
"aboutDataUsageClearCache": "Svuota cache",
|
"aboutDataUsageClearCache": "Svuota cache",
|
||||||
"@aboutDataUsageClearCache": {},
|
"@aboutDataUsageClearCache": {},
|
||||||
"castDialogTitle": "Dispositivi cast",
|
"castDialogTitle": "Dispositivi Cast",
|
||||||
"@castDialogTitle": {},
|
"@castDialogTitle": {},
|
||||||
"stopTooltip": "Ferma",
|
"stopTooltip": "Ferma",
|
||||||
"@stopTooltip": {},
|
"@stopTooltip": {},
|
||||||
|
|
|
@ -1404,5 +1404,7 @@
|
||||||
"collectionActionAddDynamicAlbum": "동적 앨범 추가",
|
"collectionActionAddDynamicAlbum": "동적 앨범 추가",
|
||||||
"@collectionActionAddDynamicAlbum": {},
|
"@collectionActionAddDynamicAlbum": {},
|
||||||
"appExportDynamicAlbums": "동적 앨범",
|
"appExportDynamicAlbums": "동적 앨범",
|
||||||
"@appExportDynamicAlbums": {}
|
"@appExportDynamicAlbums": {},
|
||||||
|
"chipActionDecompose": "나누기",
|
||||||
|
"@chipActionDecompose": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1406,5 +1406,7 @@
|
||||||
"appExportDynamicAlbums": "Dynamische albums",
|
"appExportDynamicAlbums": "Dynamische albums",
|
||||||
"@appExportDynamicAlbums": {},
|
"@appExportDynamicAlbums": {},
|
||||||
"chipActionRemove": "Verwijderen",
|
"chipActionRemove": "Verwijderen",
|
||||||
"@chipActionRemove": {}
|
"@chipActionRemove": {},
|
||||||
|
"chipActionDecompose": "Splitsen",
|
||||||
|
"@chipActionDecompose": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1562,5 +1562,7 @@
|
||||||
"collectionActionAddDynamicAlbum": "Dodaj dynamiczny album",
|
"collectionActionAddDynamicAlbum": "Dodaj dynamiczny album",
|
||||||
"@collectionActionAddDynamicAlbum": {},
|
"@collectionActionAddDynamicAlbum": {},
|
||||||
"appExportDynamicAlbums": "Dynamiczne albumy",
|
"appExportDynamicAlbums": "Dynamiczne albumy",
|
||||||
"@appExportDynamicAlbums": {}
|
"@appExportDynamicAlbums": {},
|
||||||
|
"chipActionDecompose": "Podziel",
|
||||||
|
"@chipActionDecompose": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1404,5 +1404,7 @@
|
||||||
"collectionActionAddDynamicAlbum": "Adicionar álbum dinâmico",
|
"collectionActionAddDynamicAlbum": "Adicionar álbum dinâmico",
|
||||||
"@collectionActionAddDynamicAlbum": {},
|
"@collectionActionAddDynamicAlbum": {},
|
||||||
"appExportDynamicAlbums": "Álbuns dinâmicos",
|
"appExportDynamicAlbums": "Álbuns dinâmicos",
|
||||||
"@appExportDynamicAlbums": {}
|
"@appExportDynamicAlbums": {},
|
||||||
|
"chipActionDecompose": "Separar",
|
||||||
|
"@chipActionDecompose": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1389,8 +1389,22 @@
|
||||||
"@videoActionShowNextFrame": {},
|
"@videoActionShowNextFrame": {},
|
||||||
"mapStyleOsmLiberty": "OSM Liberty",
|
"mapStyleOsmLiberty": "OSM Liberty",
|
||||||
"@mapStyleOsmLiberty": {},
|
"@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": "Плитки от [OpenMapTiles](https://www.openmaptiles.org/), [CC BY](http://creativecommons.org/licenses/by/4.0) • Размещено на [OSM Americana](https://tile.ourmap.us)",
|
||||||
"@mapAttributionOsmLiberty": {},
|
"@mapAttributionOsmLiberty": {},
|
||||||
"newAlbumDialogAlbumAlreadyExistsHelper": "Альбом уже существует",
|
"newAlbumDialogAlbumAlreadyExistsHelper": "Альбом уже существует",
|
||||||
"@newAlbumDialogAlbumAlreadyExistsHelper": {}
|
"@newAlbumDialogAlbumAlreadyExistsHelper": {},
|
||||||
|
"chipActionDecompose": "Раздел",
|
||||||
|
"@chipActionDecompose": {},
|
||||||
|
"chipActionRemove": "Удалить",
|
||||||
|
"@chipActionRemove": {},
|
||||||
|
"albumTierDynamic": "Динамический",
|
||||||
|
"@albumTierDynamic": {},
|
||||||
|
"newDynamicAlbumDialogTitle": "Новый динамический альбом",
|
||||||
|
"@newDynamicAlbumDialogTitle": {},
|
||||||
|
"dynamicAlbumAlreadyExists": "Динамический альбом уже существует",
|
||||||
|
"@dynamicAlbumAlreadyExists": {},
|
||||||
|
"collectionActionAddDynamicAlbum": "Добавить динамический альбом",
|
||||||
|
"@collectionActionAddDynamicAlbum": {},
|
||||||
|
"appExportDynamicAlbums": "Динамические альбомы",
|
||||||
|
"@appExportDynamicAlbums": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -475,21 +475,21 @@
|
||||||
"@settingsThumbnailOverlayTile": {},
|
"@settingsThumbnailOverlayTile": {},
|
||||||
"settingsThumbnailOverlayPageTitle": "மேலடுக்கு",
|
"settingsThumbnailOverlayPageTitle": "மேலடுக்கு",
|
||||||
"@settingsThumbnailOverlayPageTitle": {},
|
"@settingsThumbnailOverlayPageTitle": {},
|
||||||
"settingsThumbnailShowHdrIcon": "எச்டிஆர் ஐகானைக் காட்டு",
|
"settingsThumbnailShowHdrIcon": "எச்டிஆர் படவுருவைக் காட்டு",
|
||||||
"@settingsThumbnailShowHdrIcon": {},
|
"@settingsThumbnailShowHdrIcon": {},
|
||||||
"settingsThumbnailShowFavouriteIcon": "பிடித்த ஐகானைக் காட்டு",
|
"settingsThumbnailShowFavouriteIcon": "பிடித்த படவுருவைக் காட்டு",
|
||||||
"@settingsThumbnailShowFavouriteIcon": {},
|
"@settingsThumbnailShowFavouriteIcon": {},
|
||||||
"settingsThumbnailShowTagIcon": "டேக் ஐகானைக் காட்டு",
|
"settingsThumbnailShowTagIcon": "குறிச்சொல் படவுருவைக் காட்டு",
|
||||||
"@settingsThumbnailShowTagIcon": {},
|
"@settingsThumbnailShowTagIcon": {},
|
||||||
"settingsThumbnailShowLocationIcon": "இருப்பிட ஐகானைக் காட்டு",
|
"settingsThumbnailShowLocationIcon": "இருப்பிட படவுருவைக் காட்டு",
|
||||||
"@settingsThumbnailShowLocationIcon": {},
|
"@settingsThumbnailShowLocationIcon": {},
|
||||||
"settingsThumbnailShowMotionPhotoIcon": "மோசன் ஃபோட்டோ ஐகானைக் காட்டு",
|
"settingsThumbnailShowMotionPhotoIcon": "இயக்கப் படப் படவுருவைக் காட்டு",
|
||||||
"@settingsThumbnailShowMotionPhotoIcon": {},
|
"@settingsThumbnailShowMotionPhotoIcon": {},
|
||||||
"settingsThumbnailShowRating": "மதிப்பீட்டைக் காட்டு",
|
"settingsThumbnailShowRating": "மதிப்பீட்டைக் காட்டு",
|
||||||
"@settingsThumbnailShowRating": {},
|
"@settingsThumbnailShowRating": {},
|
||||||
"settingsThumbnailShowRawIcon": "மூல ஐகானைக் காட்டு",
|
"settingsThumbnailShowRawIcon": "மூல படவுருவைக் காட்டு",
|
||||||
"@settingsThumbnailShowRawIcon": {},
|
"@settingsThumbnailShowRawIcon": {},
|
||||||
"settingsThumbnailShowVideoDuration": "காட்டு ஒளிதோற்றம் duration",
|
"settingsThumbnailShowVideoDuration": "காணொளி காலம் காட்டு",
|
||||||
"@settingsThumbnailShowVideoDuration": {},
|
"@settingsThumbnailShowVideoDuration": {},
|
||||||
"settingsCollectionQuickActionsTile": "விரைவான செயல்கள்",
|
"settingsCollectionQuickActionsTile": "விரைவான செயல்கள்",
|
||||||
"@settingsCollectionQuickActionsTile": {},
|
"@settingsCollectionQuickActionsTile": {},
|
||||||
|
@ -499,21 +499,21 @@
|
||||||
"@settingsCollectionQuickActionTabBrowsing": {},
|
"@settingsCollectionQuickActionTabBrowsing": {},
|
||||||
"settingsCollectionQuickActionTabSelecting": "தேர்ந்தெடுப்பது",
|
"settingsCollectionQuickActionTabSelecting": "தேர்ந்தெடுப்பது",
|
||||||
"@settingsCollectionQuickActionTabSelecting": {},
|
"@settingsCollectionQuickActionTabSelecting": {},
|
||||||
"settingsCollectionBrowsingQuickActionEditorBanner": "பொத்தான்களை நகர்த்தவும், உருப்படிகளை உலாவும்போது எந்த நடவடிக்கைகள் காண்பிக்கப்படுகின்றன என்பதைத் தேர்ந்தெடுக்கவும்.",
|
"settingsCollectionBrowsingQuickActionEditorBanner": "பொத்தான்களை நகர்த்தவும், உருப்படிகளை உலாவும்போது எந்த நடவடிக்கைகள் காண்பிக்கப்படுகின்றன என்பதைத் தேர்ந்தெடு.",
|
||||||
"@settingsCollectionBrowsingQuickActionEditorBanner": {},
|
"@settingsCollectionBrowsingQuickActionEditorBanner": {},
|
||||||
"settingsCollectionBurstPatternsNone": "எதுவுமில்லை",
|
"settingsCollectionBurstPatternsNone": "எதுவுமில்லை",
|
||||||
"@settingsCollectionBurstPatternsNone": {},
|
"@settingsCollectionBurstPatternsNone": {},
|
||||||
"settingsViewerSectionTitle": "பார்வையாளர்",
|
"settingsViewerSectionTitle": "பார்வையாளர்",
|
||||||
"@settingsViewerSectionTitle": {},
|
"@settingsViewerSectionTitle": {},
|
||||||
"settingsCollectionSelectionQuickActionEditorBanner": "பொத்தான்களை நகர்த்தவும், உருப்படிகளைத் தேர்ந்தெடுக்கும்போது எந்த நடவடிக்கைகள் காண்பிக்கப்படுகின்றன என்பதைத் தேர்ந்தெடுக்கவும்.",
|
"settingsCollectionSelectionQuickActionEditorBanner": "பொத்தான்களை நகர்த்தவும், உருப்படிகளைத் தேர்ந்தெடுக்கும்போது எந்த நடவடிக்கைகள் காண்பிக்கப்படுகின்றன என்பதைத் தேர்ந்தெடு.",
|
||||||
"@settingsCollectionSelectionQuickActionEditorBanner": {},
|
"@settingsCollectionSelectionQuickActionEditorBanner": {},
|
||||||
"settingsViewerGestureSideTapNext": "முந்தைய/அடுத்த உருப்படியைக் காட்ட திரை விளிம்புகளில் தட்டு",
|
"settingsViewerGestureSideTapNext": "முந்தைய/அடுத்த உருப்படியைக் காட்ட திரை விளிம்புகளில் தட்டு",
|
||||||
"@settingsViewerGestureSideTapNext": {},
|
"@settingsViewerGestureSideTapNext": {},
|
||||||
"settingsViewerUseCutout": "கட்அவுட் பகுதியைப் பயன்படுத்தவும்",
|
"settingsViewerUseCutout": "வெட்டு வெளியைப் பயன்படுத்து",
|
||||||
"@settingsViewerUseCutout": {},
|
"@settingsViewerUseCutout": {},
|
||||||
"settingsViewerMaximumBrightness": "அதிகபட்ச ஒளி",
|
"settingsViewerMaximumBrightness": "அதிகபட்ச ஒளி",
|
||||||
"@settingsViewerMaximumBrightness": {},
|
"@settingsViewerMaximumBrightness": {},
|
||||||
"settingsMotionPhotoAutoPlay": "ஆட்டோ பிளே மோசன் புகைப்படங்கள்",
|
"settingsMotionPhotoAutoPlay": "தானியங்கு இயக்கப் புகைப்படங்கள்",
|
||||||
"@settingsMotionPhotoAutoPlay": {},
|
"@settingsMotionPhotoAutoPlay": {},
|
||||||
"settingsImageBackground": "படப் பின்னணி",
|
"settingsImageBackground": "படப் பின்னணி",
|
||||||
"@settingsImageBackground": {},
|
"@settingsImageBackground": {},
|
||||||
|
@ -523,7 +523,7 @@
|
||||||
"@settingsViewerQuickActionEditorDisplayedButtonsSectionTitle": {},
|
"@settingsViewerQuickActionEditorDisplayedButtonsSectionTitle": {},
|
||||||
"settingsViewerQuickActionEditorPageTitle": "விரைவான செயல்கள்",
|
"settingsViewerQuickActionEditorPageTitle": "விரைவான செயல்கள்",
|
||||||
"@settingsViewerQuickActionEditorPageTitle": {},
|
"@settingsViewerQuickActionEditorPageTitle": {},
|
||||||
"settingsViewerQuickActionEditorBanner": "பொத்தான்களை நகர்த்தவும், பார்வையாளரில் எந்த நடவடிக்கைகள் காண்பிக்கப்படுகின்றன என்பதைத் தேர்ந்தெடுக்கவும்.",
|
"settingsViewerQuickActionEditorBanner": "பொத்தான்களை நகர்த்தவும், பார்வையாளரில் எந்த நடவடிக்கைகள் காண்பிக்கப்படுகின்றன என்பதைத் தேர்ந்தெடு.",
|
||||||
"@settingsViewerQuickActionEditorBanner": {},
|
"@settingsViewerQuickActionEditorBanner": {},
|
||||||
"settingsViewerQuickActionEditorAvailableButtonsSectionTitle": "கிடைக்கும் பொத்தான்கள்",
|
"settingsViewerQuickActionEditorAvailableButtonsSectionTitle": "கிடைக்கும் பொத்தான்கள்",
|
||||||
"@settingsViewerQuickActionEditorAvailableButtonsSectionTitle": {},
|
"@settingsViewerQuickActionEditorAvailableButtonsSectionTitle": {},
|
||||||
|
@ -555,15 +555,15 @@
|
||||||
"@settingsSlideshowShuffle": {},
|
"@settingsSlideshowShuffle": {},
|
||||||
"settingsSlideshowFillScreen": "திரை நிரப்பு",
|
"settingsSlideshowFillScreen": "திரை நிரப்பு",
|
||||||
"@settingsSlideshowFillScreen": {},
|
"@settingsSlideshowFillScreen": {},
|
||||||
"settingsSlideshowAnimatedZoomEffect": "அசைவூட்டம் சூம் விளைவு",
|
"settingsSlideshowAnimatedZoomEffect": "அசைவூட்டம் மலர்ச்சி விளைவு",
|
||||||
"@settingsSlideshowAnimatedZoomEffect": {},
|
"@settingsSlideshowAnimatedZoomEffect": {},
|
||||||
"settingsSlideshowTransitionTile": "மாற்றம்",
|
"settingsSlideshowTransitionTile": "மாற்றம்",
|
||||||
"@settingsSlideshowTransitionTile": {},
|
"@settingsSlideshowTransitionTile": {},
|
||||||
"settingsSlideshowIntervalTile": "இடைவேளை",
|
"settingsSlideshowIntervalTile": "இடைவேளை",
|
||||||
"@settingsSlideshowIntervalTile": {},
|
"@settingsSlideshowIntervalTile": {},
|
||||||
"settingsSlideshowVideoPlaybackTile": "காணொளி பிளேபேக்",
|
"settingsSlideshowVideoPlaybackTile": "காணொளி மீட்பொலி",
|
||||||
"@settingsSlideshowVideoPlaybackTile": {},
|
"@settingsSlideshowVideoPlaybackTile": {},
|
||||||
"settingsSlideshowVideoPlaybackDialogTitle": "காணொளி பிளேபேக்",
|
"settingsSlideshowVideoPlaybackDialogTitle": "காணொளி மீட்பொலி",
|
||||||
"@settingsSlideshowVideoPlaybackDialogTitle": {},
|
"@settingsSlideshowVideoPlaybackDialogTitle": {},
|
||||||
"settingsVideoPageTitle": "காணொளி அமைப்புகள்",
|
"settingsVideoPageTitle": "காணொளி அமைப்புகள்",
|
||||||
"@settingsVideoPageTitle": {},
|
"@settingsVideoPageTitle": {},
|
||||||
|
@ -571,7 +571,7 @@
|
||||||
"@settingsVideoSectionTitle": {},
|
"@settingsVideoSectionTitle": {},
|
||||||
"settingsVideoShowVideos": "காணொளிகளைக் காட்டு",
|
"settingsVideoShowVideos": "காணொளிகளைக் காட்டு",
|
||||||
"@settingsVideoShowVideos": {},
|
"@settingsVideoShowVideos": {},
|
||||||
"settingsVideoPlaybackTile": "பின்னணி",
|
"settingsVideoPlaybackTile": "மீட்பொலி",
|
||||||
"@settingsVideoPlaybackTile": {},
|
"@settingsVideoPlaybackTile": {},
|
||||||
"focalLength": "{length} மிமீ",
|
"focalLength": "{length} மிமீ",
|
||||||
"@focalLength": {
|
"@focalLength": {
|
||||||
|
@ -712,9 +712,9 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"statsTopAlbumsSectionTitle": "சிறந்த ஆல்பங்கள்",
|
"statsTopAlbumsSectionTitle": "மேல் தொகுப்புகள்",
|
||||||
"@statsTopAlbumsSectionTitle": {},
|
"@statsTopAlbumsSectionTitle": {},
|
||||||
"viewerOpenPanoramaButtonLabel": "திறந்த பனோரமா",
|
"viewerOpenPanoramaButtonLabel": "பனோரமா திற",
|
||||||
"@viewerOpenPanoramaButtonLabel": {},
|
"@viewerOpenPanoramaButtonLabel": {},
|
||||||
"viewerErrorUnknown": "அச்சச்சோ!",
|
"viewerErrorUnknown": "அச்சச்சோ!",
|
||||||
"@viewerErrorUnknown": {},
|
"@viewerErrorUnknown": {},
|
||||||
|
@ -1345,19 +1345,19 @@
|
||||||
"@editEntryDateDialogExtractFromTitle": {},
|
"@editEntryDateDialogExtractFromTitle": {},
|
||||||
"editEntryDateDialogShift": "பெயர்வு",
|
"editEntryDateDialogShift": "பெயர்வு",
|
||||||
"@editEntryDateDialogShift": {},
|
"@editEntryDateDialogShift": {},
|
||||||
"settingsVideoAutoPlay": "ஆட்டோ நாடகம்",
|
"settingsVideoAutoPlay": "தானியங்கு",
|
||||||
"@settingsVideoAutoPlay": {},
|
"@settingsVideoAutoPlay": {},
|
||||||
"settingsVideoLoopModeTile": "சுழல் பயன்முறை",
|
"settingsVideoLoopModeTile": "சுழல் பயன்முறை",
|
||||||
"@settingsVideoLoopModeTile": {},
|
"@settingsVideoLoopModeTile": {},
|
||||||
"settingsVideoPlaybackPageTitle": "பின்னணி",
|
"settingsVideoPlaybackPageTitle": "மீட்பொலி",
|
||||||
"@settingsVideoPlaybackPageTitle": {},
|
"@settingsVideoPlaybackPageTitle": {},
|
||||||
"settingsVideoEnableHardwareAcceleration": "வன்பொருள் முடுக்கம்",
|
"settingsVideoEnableHardwareAcceleration": "வன்பொருள் முடுக்கம்",
|
||||||
"@settingsVideoEnableHardwareAcceleration": {},
|
"@settingsVideoEnableHardwareAcceleration": {},
|
||||||
"settingsVideoLoopModeDialogTitle": "சுழல் பயன்முறை",
|
"settingsVideoLoopModeDialogTitle": "சுழல் பயன்முறை",
|
||||||
"@settingsVideoLoopModeDialogTitle": {},
|
"@settingsVideoLoopModeDialogTitle": {},
|
||||||
"settingsVideoResumptionModeTile": "பிளேபேக்கை மீண்டும் தொடங்குங்கள்",
|
"settingsVideoResumptionModeTile": "காணொளி மீட்பொலி",
|
||||||
"@settingsVideoResumptionModeTile": {},
|
"@settingsVideoResumptionModeTile": {},
|
||||||
"settingsVideoResumptionModeDialogTitle": "பிளேபேக்கை மீண்டும் தொடங்குங்கள்",
|
"settingsVideoResumptionModeDialogTitle": "மீட்பொலியை மீண்டும் தொடங்கு",
|
||||||
"@settingsVideoResumptionModeDialogTitle": {},
|
"@settingsVideoResumptionModeDialogTitle": {},
|
||||||
"settingsVideoBackgroundMode": "பின்னணி முறை",
|
"settingsVideoBackgroundMode": "பின்னணி முறை",
|
||||||
"@settingsVideoBackgroundMode": {},
|
"@settingsVideoBackgroundMode": {},
|
||||||
|
@ -1373,7 +1373,7 @@
|
||||||
"@settingsVideoGestureDoubleTapTogglePlay": {},
|
"@settingsVideoGestureDoubleTapTogglePlay": {},
|
||||||
"settingsVideoGestureSideDoubleTapSeek": "பின்தங்கிய/முன்னோக்கி தேட திரை விளிம்புகளில் இரட்டை தட்டவும்",
|
"settingsVideoGestureSideDoubleTapSeek": "பின்தங்கிய/முன்னோக்கி தேட திரை விளிம்புகளில் இரட்டை தட்டவும்",
|
||||||
"@settingsVideoGestureSideDoubleTapSeek": {},
|
"@settingsVideoGestureSideDoubleTapSeek": {},
|
||||||
"settingsVideoGestureVerticalDragBrightnessVolume": "பிரகாசம்/அளவை சரிசெய்ய மேலே அல்லது கீழே ச்வைப் செய்யவும்",
|
"settingsVideoGestureVerticalDragBrightnessVolume": "பொலிவு/அளவை சரிசெய்ய மேலே அல்லது கீழே தேய்",
|
||||||
"@settingsVideoGestureVerticalDragBrightnessVolume": {},
|
"@settingsVideoGestureVerticalDragBrightnessVolume": {},
|
||||||
"settingsSubtitleThemePageTitle": "வசன வரிகள்",
|
"settingsSubtitleThemePageTitle": "வசன வரிகள்",
|
||||||
"@settingsSubtitleThemePageTitle": {},
|
"@settingsSubtitleThemePageTitle": {},
|
||||||
|
@ -1389,7 +1389,7 @@
|
||||||
"@settingsSubtitleThemeTextPositionDialogTitle": {},
|
"@settingsSubtitleThemeTextPositionDialogTitle": {},
|
||||||
"settingsSubtitleThemeTextSize": "உரை அளவு",
|
"settingsSubtitleThemeTextSize": "உரை அளவு",
|
||||||
"@settingsSubtitleThemeTextSize": {},
|
"@settingsSubtitleThemeTextSize": {},
|
||||||
"settingsSubtitleThemeShowOutline": "அவுட்லைன் மற்றும் நிழலைக் காட்டுங்கள்",
|
"settingsSubtitleThemeShowOutline": "சுருக்கம் மற்றும் நிழலைக் காட்டுங்கள்",
|
||||||
"@settingsSubtitleThemeShowOutline": {},
|
"@settingsSubtitleThemeShowOutline": {},
|
||||||
"settingsSubtitleThemeTextColor": "உரை நிறம்",
|
"settingsSubtitleThemeTextColor": "உரை நிறம்",
|
||||||
"@settingsSubtitleThemeTextColor": {},
|
"@settingsSubtitleThemeTextColor": {},
|
||||||
|
@ -1411,7 +1411,7 @@
|
||||||
"@settingsAllowInstalledAppAccess": {},
|
"@settingsAllowInstalledAppAccess": {},
|
||||||
"settingsAllowInstalledAppAccessSubtitle": "தொகுப்புக் காட்சியை மேம்படுத்தப் பயன்படுகிறது",
|
"settingsAllowInstalledAppAccessSubtitle": "தொகுப்புக் காட்சியை மேம்படுத்தப் பயன்படுகிறது",
|
||||||
"@settingsAllowInstalledAppAccessSubtitle": {},
|
"@settingsAllowInstalledAppAccessSubtitle": {},
|
||||||
"settingsAllowErrorReporting": "அநாமதேய பிழை அறிக்கையை அனுமதி",
|
"settingsAllowErrorReporting": "பெயரிலி பிழை அறிக்கையை அனுமதி",
|
||||||
"@settingsAllowErrorReporting": {},
|
"@settingsAllowErrorReporting": {},
|
||||||
"settingsSaveSearchHistory": "தேடல் வரலாற்றைச் சேமி",
|
"settingsSaveSearchHistory": "தேடல் வரலாற்றைச் சேமி",
|
||||||
"@settingsSaveSearchHistory": {},
|
"@settingsSaveSearchHistory": {},
|
||||||
|
@ -1439,7 +1439,7 @@
|
||||||
"@settingsStorageAccessBanner": {},
|
"@settingsStorageAccessBanner": {},
|
||||||
"settingsStorageAccessEmpty": "அணுகல் மானியங்கள் இல்லை",
|
"settingsStorageAccessEmpty": "அணுகல் மானியங்கள் இல்லை",
|
||||||
"@settingsStorageAccessEmpty": {},
|
"@settingsStorageAccessEmpty": {},
|
||||||
"settingsStorageAccessRevokeTooltip": "ரத்து செய்யுங்கள்",
|
"settingsStorageAccessRevokeTooltip": "திரும்பப்பெறு",
|
||||||
"@settingsStorageAccessRevokeTooltip": {},
|
"@settingsStorageAccessRevokeTooltip": {},
|
||||||
"settingsAccessibilitySectionTitle": "அணுகுதிறன்",
|
"settingsAccessibilitySectionTitle": "அணுகுதிறன்",
|
||||||
"@settingsAccessibilitySectionTitle": {},
|
"@settingsAccessibilitySectionTitle": {},
|
||||||
|
@ -1465,43 +1465,43 @@
|
||||||
"@settingsDisplayRefreshRateModeTile": {},
|
"@settingsDisplayRefreshRateModeTile": {},
|
||||||
"settingsDisplayRefreshRateModeDialogTitle": "புதுப்பிப்பு வீதம்",
|
"settingsDisplayRefreshRateModeDialogTitle": "புதுப்பிப்பு வீதம்",
|
||||||
"@settingsDisplayRefreshRateModeDialogTitle": {},
|
"@settingsDisplayRefreshRateModeDialogTitle": {},
|
||||||
"settingsDisplayUseTvInterface": "ஆண்ட்ராய்டு டிவி இடைமுகம்",
|
"settingsDisplayUseTvInterface": "ஆண்ட்ராய்டு தொலைகாட்சி இடைமுகம்",
|
||||||
"@settingsDisplayUseTvInterface": {},
|
"@settingsDisplayUseTvInterface": {},
|
||||||
"settingsLanguageSectionTitle": "மொழி & வடிவங்கள்",
|
"settingsLanguageSectionTitle": "மொழி & வடிவங்கள்",
|
||||||
"@settingsLanguageSectionTitle": {},
|
"@settingsLanguageSectionTitle": {},
|
||||||
"settingsLanguagePageTitle": "மொழி",
|
"settingsLanguagePageTitle": "மொழி",
|
||||||
"@settingsLanguagePageTitle": {},
|
"@settingsLanguagePageTitle": {},
|
||||||
"settingsCoordinateFormatTile": "ஒருங்கிணைப்பு வடிவம்",
|
"settingsCoordinateFormatTile": "ஆய வடிவம்",
|
||||||
"@settingsCoordinateFormatTile": {},
|
"@settingsCoordinateFormatTile": {},
|
||||||
"settingsCoordinateFormatDialogTitle": "ஒருங்கிணைப்பு வடிவம்",
|
"settingsCoordinateFormatDialogTitle": "ஆய வடிவம்",
|
||||||
"@settingsCoordinateFormatDialogTitle": {},
|
"@settingsCoordinateFormatDialogTitle": {},
|
||||||
"settingsUnitSystemTile": "அலகுகள்",
|
"settingsUnitSystemTile": "அலகுகள்",
|
||||||
"@settingsUnitSystemTile": {},
|
"@settingsUnitSystemTile": {},
|
||||||
"settingsUnitSystemDialogTitle": "அலகுகள்",
|
"settingsUnitSystemDialogTitle": "அலகுகள்",
|
||||||
"@settingsUnitSystemDialogTitle": {},
|
"@settingsUnitSystemDialogTitle": {},
|
||||||
"settingsForceWesternArabicNumeralsTile": "அரபு எண்களை கட்டாயப்படுத்துங்கள்",
|
"settingsForceWesternArabicNumeralsTile": "அரபு எண்களைக் கட்டாயப்படுத்துங்கள்",
|
||||||
"@settingsForceWesternArabicNumeralsTile": {},
|
"@settingsForceWesternArabicNumeralsTile": {},
|
||||||
"settingsScreenSaverPageTitle": "திரை சேவர்",
|
"settingsScreenSaverPageTitle": "திரை சேமிப்பான்",
|
||||||
"@settingsScreenSaverPageTitle": {},
|
"@settingsScreenSaverPageTitle": {},
|
||||||
"settingsWidgetPageTitle": "புகைப்பட சட்டகம்",
|
"settingsWidgetPageTitle": "புகைப்பட சட்டகம்",
|
||||||
"@settingsWidgetPageTitle": {},
|
"@settingsWidgetPageTitle": {},
|
||||||
"settingsWidgetShowOutline": "அவுட்லைன்",
|
"settingsWidgetShowOutline": "சுருக்கம்",
|
||||||
"@settingsWidgetShowOutline": {},
|
"@settingsWidgetShowOutline": {},
|
||||||
"settingsWidgetOpenPage": "விட்செட்டில் தட்டும்போது",
|
"settingsWidgetOpenPage": "நிரல் பலகையில் தட்டும்போது",
|
||||||
"@settingsWidgetOpenPage": {},
|
"@settingsWidgetOpenPage": {},
|
||||||
"settingsWidgetDisplayedItem": "காட்டப்பட்ட உருப்படி",
|
"settingsWidgetDisplayedItem": "காட்டப்பட்ட உருப்படி",
|
||||||
"@settingsWidgetDisplayedItem": {},
|
"@settingsWidgetDisplayedItem": {},
|
||||||
"settingsCollectionTile": "சேகரிப்பு",
|
"settingsCollectionTile": "சேகரிப்பு",
|
||||||
"@settingsCollectionTile": {},
|
"@settingsCollectionTile": {},
|
||||||
"statsTopPlacesSectionTitle": "சிறந்த இடங்கள்",
|
"statsTopPlacesSectionTitle": "மேல் இடங்கள்",
|
||||||
"@statsTopPlacesSectionTitle": {},
|
"@statsTopPlacesSectionTitle": {},
|
||||||
"statsTopCountriesSectionTitle": "சிறந்த நாடுகள்",
|
"statsTopCountriesSectionTitle": "மேல் நாடுகள்",
|
||||||
"@statsTopCountriesSectionTitle": {},
|
"@statsTopCountriesSectionTitle": {},
|
||||||
"statsTopStatesSectionTitle": "சிறந்த மாநிலங்கள்",
|
"statsTopStatesSectionTitle": "மேல் மாநிலங்கள்",
|
||||||
"@statsTopStatesSectionTitle": {},
|
"@statsTopStatesSectionTitle": {},
|
||||||
"statsTopTagsSectionTitle": "சிறந்த குறிச்சொற்கள்",
|
"statsTopTagsSectionTitle": "மேல் குறிச்சொற்கள்",
|
||||||
"@statsTopTagsSectionTitle": {},
|
"@statsTopTagsSectionTitle": {},
|
||||||
"viewerSetWallpaperButtonLabel": "வால்பேப்பரை அமைக்கவும்",
|
"viewerSetWallpaperButtonLabel": "சுவர்த்தாளை அமை",
|
||||||
"@viewerSetWallpaperButtonLabel": {},
|
"@viewerSetWallpaperButtonLabel": {},
|
||||||
"viewerErrorDoesNotExist": "கோப்பு இனி இல்லை.",
|
"viewerErrorDoesNotExist": "கோப்பு இனி இல்லை.",
|
||||||
"@viewerErrorDoesNotExist": {},
|
"@viewerErrorDoesNotExist": {},
|
||||||
|
@ -1519,9 +1519,9 @@
|
||||||
"@viewerInfoPageTitle": {},
|
"@viewerInfoPageTitle": {},
|
||||||
"viewerInfoBackToViewerTooltip": "பார்வையாளருக்குத் திரும்பு",
|
"viewerInfoBackToViewerTooltip": "பார்வையாளருக்குத் திரும்பு",
|
||||||
"@viewerInfoBackToViewerTooltip": {},
|
"@viewerInfoBackToViewerTooltip": {},
|
||||||
"viewerInfoUnknown": "தெரியவில்லை",
|
"viewerInfoUnknown": "தெரியாத",
|
||||||
"@viewerInfoUnknown": {},
|
"@viewerInfoUnknown": {},
|
||||||
"viewerInfoLabelUri": "யூரி",
|
"viewerInfoLabelUri": "இணையமுகவரி",
|
||||||
"@viewerInfoLabelUri": {},
|
"@viewerInfoLabelUri": {},
|
||||||
"viewerInfoLabelPath": "பாதை",
|
"viewerInfoLabelPath": "பாதை",
|
||||||
"@viewerInfoLabelPath": {},
|
"@viewerInfoLabelPath": {},
|
||||||
|
@ -1529,17 +1529,17 @@
|
||||||
"@viewerInfoLabelDuration": {},
|
"@viewerInfoLabelDuration": {},
|
||||||
"viewerInfoLabelOwner": "உரிமையாளர்",
|
"viewerInfoLabelOwner": "உரிமையாளர்",
|
||||||
"@viewerInfoLabelOwner": {},
|
"@viewerInfoLabelOwner": {},
|
||||||
"viewerInfoLabelCoordinates": "ஒருங்கிணைப்புகள்",
|
"viewerInfoLabelCoordinates": "அச்சுத்தூரங்கள்",
|
||||||
"@viewerInfoLabelCoordinates": {},
|
"@viewerInfoLabelCoordinates": {},
|
||||||
"viewerInfoLabelAddress": "முகவரி",
|
"viewerInfoLabelAddress": "முகவரி",
|
||||||
"@viewerInfoLabelAddress": {},
|
"@viewerInfoLabelAddress": {},
|
||||||
"mapStyleDialogTitle": "வரைபட நடை",
|
"mapStyleDialogTitle": "வரைபட நடை",
|
||||||
"@mapStyleDialogTitle": {},
|
"@mapStyleDialogTitle": {},
|
||||||
"mapStyleTooltip": "வரைபட பாணியைத் தேர்ந்தெடுக்கவும்",
|
"mapStyleTooltip": "வரைபட பாணியைத் தேர்ந்தெடு",
|
||||||
"@mapStyleTooltip": {},
|
"@mapStyleTooltip": {},
|
||||||
"mapZoomOutTooltip": "சிறிதாக்கு",
|
"mapZoomOutTooltip": "சிறிதாக்கு",
|
||||||
"@mapZoomOutTooltip": {},
|
"@mapZoomOutTooltip": {},
|
||||||
"mapPointNorthUpTooltip": "வடக்கே சுட்டிக்காட்டவும்",
|
"mapPointNorthUpTooltip": "வடக்கு மேலே காட்டு",
|
||||||
"@mapPointNorthUpTooltip": {},
|
"@mapPointNorthUpTooltip": {},
|
||||||
"mapAttributionOsmData": "வரைபட தரவு © [OpenStreetMap](https://www.openstreetmap.org/copyright) பங்களிப்பாளர்கள்",
|
"mapAttributionOsmData": "வரைபட தரவு © [OpenStreetMap](https://www.openstreetmap.org/copyright) பங்களிப்பாளர்கள்",
|
||||||
"@mapAttributionOsmData": {},
|
"@mapAttributionOsmData": {},
|
||||||
|
@ -1551,29 +1551,29 @@
|
||||||
"@mapAttributionOsmHot": {},
|
"@mapAttributionOsmHot": {},
|
||||||
"mapAttributionStamen": "[Stamen Design](https://stamen.com) மூலம் ஓடுகள், [CC BY 3.0](https://creativecommons.org/licenses/by/3.0)",
|
"mapAttributionStamen": "[Stamen Design](https://stamen.com) மூலம் ஓடுகள், [CC BY 3.0](https://creativecommons.org/licenses/by/3.0)",
|
||||||
"@mapAttributionStamen": {},
|
"@mapAttributionStamen": {},
|
||||||
"mapEmptyRegion": "இந்த பிராந்தியத்தில் படங்கள் இல்லை",
|
"mapEmptyRegion": "இந்தப் வட்டாரத்தில் படங்கள் இல்லை",
|
||||||
"@mapEmptyRegion": {},
|
"@mapEmptyRegion": {},
|
||||||
"viewerInfoOpenEmbeddedFailureFeedback": "உட்பொதிக்கப்பட்ட தரவைப் பிரித்தெடுப்பதில் தோல்வி",
|
"viewerInfoOpenEmbeddedFailureFeedback": "உட்பொதிக்கப்பட்ட தரவைப் பிரித்தெடுப்பதில் தோல்வி",
|
||||||
"@viewerInfoOpenEmbeddedFailureFeedback": {},
|
"@viewerInfoOpenEmbeddedFailureFeedback": {},
|
||||||
"viewerInfoOpenLinkText": "திற",
|
"viewerInfoOpenLinkText": "திற",
|
||||||
"@viewerInfoOpenLinkText": {},
|
"@viewerInfoOpenLinkText": {},
|
||||||
"viewerInfoViewXmlLinkText": "எக்ச்எம்எல் காண்க",
|
"viewerInfoViewXmlLinkText": "நீகுமொ காண்க",
|
||||||
"@viewerInfoViewXmlLinkText": {},
|
"@viewerInfoViewXmlLinkText": {},
|
||||||
"viewerInfoSearchFieldLabel": "மெட்டாடேட்டாவைத் தேடுங்கள்",
|
"viewerInfoSearchFieldLabel": "மேனிலை தரவைத் தேடு",
|
||||||
"@viewerInfoSearchFieldLabel": {},
|
"@viewerInfoSearchFieldLabel": {},
|
||||||
"viewerInfoSearchEmpty": "பொருந்தக்கூடிய விசைகள் இல்லை",
|
"viewerInfoSearchEmpty": "பொருந்தக்கூடிய திறவுகோல்கள் இல்லை",
|
||||||
"@viewerInfoSearchEmpty": {},
|
"@viewerInfoSearchEmpty": {},
|
||||||
"viewerInfoSearchSuggestionResolution": "பகுத்தல்",
|
"viewerInfoSearchSuggestionResolution": "பகுத்தல்",
|
||||||
"@viewerInfoSearchSuggestionResolution": {},
|
"@viewerInfoSearchSuggestionResolution": {},
|
||||||
"viewerInfoSearchSuggestionRights": "உரிமைகள்",
|
"viewerInfoSearchSuggestionRights": "உரிமைகள்",
|
||||||
"@viewerInfoSearchSuggestionRights": {},
|
"@viewerInfoSearchSuggestionRights": {},
|
||||||
"wallpaperUseScrollEffect": "முகப்புத் திரையில் உருள் விளைவைப் பயன்படுத்தவும்",
|
"wallpaperUseScrollEffect": "முகப்புத் திரையில் உருள் விளைவைப் பயன்படுத்து",
|
||||||
"@wallpaperUseScrollEffect": {},
|
"@wallpaperUseScrollEffect": {},
|
||||||
"tagEditorPageTitle": "குறிச்சொற்களைத் திருத்து",
|
"tagEditorPageTitle": "குறிச்சொற்களைத் திருத்து",
|
||||||
"@tagEditorPageTitle": {},
|
"@tagEditorPageTitle": {},
|
||||||
"tagEditorPageNewTagFieldLabel": "புதிய குறிச்சொல்",
|
"tagEditorPageNewTagFieldLabel": "புதிய குறிச்சொல்",
|
||||||
"@tagEditorPageNewTagFieldLabel": {},
|
"@tagEditorPageNewTagFieldLabel": {},
|
||||||
"tagEditorPageAddTagTooltip": "குறிச்சொல்லைச் சேர்க்கவும்",
|
"tagEditorPageAddTagTooltip": "குறிச்சொல்லைச் சேர்",
|
||||||
"@tagEditorPageAddTagTooltip": {},
|
"@tagEditorPageAddTagTooltip": {},
|
||||||
"tagEditorSectionRecent": "அண்மைக் கால",
|
"tagEditorSectionRecent": "அண்மைக் கால",
|
||||||
"@tagEditorSectionRecent": {},
|
"@tagEditorSectionRecent": {},
|
||||||
|
@ -1587,9 +1587,9 @@
|
||||||
"@tagPlaceholderState": {},
|
"@tagPlaceholderState": {},
|
||||||
"tagPlaceholderPlace": "இடம்",
|
"tagPlaceholderPlace": "இடம்",
|
||||||
"@tagPlaceholderPlace": {},
|
"@tagPlaceholderPlace": {},
|
||||||
"panoramaEnableSensorControl": "சென்சார் கட்டுப்பாட்டை இயக்கவும்",
|
"panoramaEnableSensorControl": "உணரி கட்டுப்பாட்டை இயக்கு",
|
||||||
"@panoramaEnableSensorControl": {},
|
"@panoramaEnableSensorControl": {},
|
||||||
"panoramaDisableSensorControl": "சென்சார் கட்டுப்பாட்டை முடக்கு",
|
"panoramaDisableSensorControl": "உணரி கட்டுப்பாட்டை முடக்கு",
|
||||||
"@panoramaDisableSensorControl": {},
|
"@panoramaDisableSensorControl": {},
|
||||||
"sourceViewerPageTitle": "மூலம்",
|
"sourceViewerPageTitle": "மூலம்",
|
||||||
"@sourceViewerPageTitle": {},
|
"@sourceViewerPageTitle": {},
|
||||||
|
@ -1601,6 +1601,6 @@
|
||||||
"@filePickerOpenFrom": {},
|
"@filePickerOpenFrom": {},
|
||||||
"filePickerNoItems": "உருப்படிகள் இல்லை",
|
"filePickerNoItems": "உருப்படிகள் இல்லை",
|
||||||
"@filePickerNoItems": {},
|
"@filePickerNoItems": {},
|
||||||
"filePickerUseThisFolder": "இந்த கோப்புறையைப் பயன்படுத்தவும்",
|
"filePickerUseThisFolder": "இந்தக் கோப்புறையைப் பயன்படுத்து",
|
||||||
"@filePickerUseThisFolder": {}
|
"@filePickerUseThisFolder": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1562,5 +1562,7 @@
|
||||||
"collectionActionAddDynamicAlbum": "Додати динамічний альбом",
|
"collectionActionAddDynamicAlbum": "Додати динамічний альбом",
|
||||||
"@collectionActionAddDynamicAlbum": {},
|
"@collectionActionAddDynamicAlbum": {},
|
||||||
"appExportDynamicAlbums": "Динамічні альбоми",
|
"appExportDynamicAlbums": "Динамічні альбоми",
|
||||||
"@appExportDynamicAlbums": {}
|
"@appExportDynamicAlbums": {},
|
||||||
|
"chipActionDecompose": "Спліт",
|
||||||
|
"@chipActionDecompose": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1544,5 +1544,23 @@
|
||||||
"sortOrderLongestFirst": "Dài nhất trước",
|
"sortOrderLongestFirst": "Dài nhất trước",
|
||||||
"@sortOrderLongestFirst": {},
|
"@sortOrderLongestFirst": {},
|
||||||
"mapAttributionOsmLiberty": "Cung cấp bởi [OpenMapTiles](https://www.openmaptiles.org/), [CC BY](http://creativecommons.org/licenses/by/4.0) • Được lưu trữ bởi [OSM Americana](https://tile.ourmap.us)",
|
"mapAttributionOsmLiberty": "Cung cấp bởi [OpenMapTiles](https://www.openmaptiles.org/), [CC BY](http://creativecommons.org/licenses/by/4.0) • Được lưu trữ bởi [OSM Americana](https://tile.ourmap.us)",
|
||||||
"@mapAttributionOsmLiberty": {}
|
"@mapAttributionOsmLiberty": {},
|
||||||
|
"videoActionShowPreviousFrame": "Hiển thị khung hình trước đó",
|
||||||
|
"@videoActionShowPreviousFrame": {},
|
||||||
|
"chipActionRemove": "Loại bỏ",
|
||||||
|
"@chipActionRemove": {},
|
||||||
|
"albumTierDynamic": "Động",
|
||||||
|
"@albumTierDynamic": {},
|
||||||
|
"newAlbumDialogAlbumAlreadyExistsHelper": "Album đã tồn tại",
|
||||||
|
"@newAlbumDialogAlbumAlreadyExistsHelper": {},
|
||||||
|
"dynamicAlbumAlreadyExists": "Album động đã tồn tại",
|
||||||
|
"@dynamicAlbumAlreadyExists": {},
|
||||||
|
"collectionActionAddDynamicAlbum": "Thêm album động",
|
||||||
|
"@collectionActionAddDynamicAlbum": {},
|
||||||
|
"appExportDynamicAlbums": "Album động",
|
||||||
|
"@appExportDynamicAlbums": {},
|
||||||
|
"videoActionShowNextFrame": "Hiển thị khung hình tiếp theo",
|
||||||
|
"@videoActionShowNextFrame": {},
|
||||||
|
"newDynamicAlbumDialogTitle": "Album động mới",
|
||||||
|
"@newDynamicAlbumDialogTitle": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ class Contributors {
|
||||||
Contributor('Oğuz Ersen', 'oguz@ersen.moe'),
|
Contributor('Oğuz Ersen', 'oguz@ersen.moe'),
|
||||||
Contributor('Allan Nordhøy', 'epost@anotheragency.no'),
|
Contributor('Allan Nordhøy', 'epost@anotheragency.no'),
|
||||||
Contributor('pemibe', 'pemibe4634@dmonies.com'),
|
Contributor('pemibe', 'pemibe4634@dmonies.com'),
|
||||||
Contributor('Linerly', 'linerly@protonmail.com'),
|
Contributor('Linerly', 'linerly@proton.me'),
|
||||||
Contributor('Skrripy', 'rozihrash.ya6w7@simplelogin.com'),
|
Contributor('Skrripy', 'rozihrash.ya6w7@simplelogin.com'),
|
||||||
Contributor('vesp', 'vesp@post.cz'),
|
Contributor('vesp', 'vesp@post.cz'),
|
||||||
Contributor('Dan', 'denqwerta@gmail.com'),
|
Contributor('Dan', 'denqwerta@gmail.com'),
|
||||||
|
@ -117,14 +117,17 @@ class Contributors {
|
||||||
Contributor('Petrov', 'i_v_c@mail.ru'),
|
Contributor('Petrov', 'i_v_c@mail.ru'),
|
||||||
Contributor('தமிழ்நேரம்', 'anishprabu.t@gmail.com'),
|
Contributor('தமிழ்நேரம்', 'anishprabu.t@gmail.com'),
|
||||||
Contributor('bovirus', 'roberto.boriotti@canon.it'),
|
Contributor('bovirus', 'roberto.boriotti@canon.it'),
|
||||||
Contributor('Максим Горпиніч', 'mgorpinic2005@gmail.com'),
|
Contributor('Максим Горпиніч', 'maksimgorpinic2005a@gmail.com'),
|
||||||
Contributor('Priit Jõerüüt', 'hwlate@joeruut.com'),
|
Contributor('Priit Jõerüüt', 'hwlate@joeruut.com'),
|
||||||
|
Contributor('Dr Hieu', 'v7pvas7m@anonaddy.com'),
|
||||||
|
Contributor('Saúl Palacios', 'palacios22c@gmail.com'),
|
||||||
|
Contributor('Grooty12', 'Rasmus@rosendahl-kaa.name'),
|
||||||
|
Contributor('Victor M', 'victormorita@tuta.io'),
|
||||||
|
Contributor('cat', 'catsnote@proton.me'),
|
||||||
// Contributor('Femini', 'nizamismidov4@gmail.com'), // Azerbaijani
|
// Contributor('Femini', 'nizamismidov4@gmail.com'), // Azerbaijani
|
||||||
// Contributor('Alvi Khan', 'aveenalvi@gmail.com'), // Bengali
|
// Contributor('Alvi Khan', 'aveenalvi@gmail.com'), // Bengali
|
||||||
// Contributor('Htet Oo Hlaing', 'htetoh2006@outlook.com'), // Burmese
|
// Contributor('Htet Oo Hlaing', 'htetoh2006@outlook.com'), // Burmese
|
||||||
// Contributor('Khant', 'khant@users.noreply.hosted.weblate.org'), // Burmese
|
// Contributor('Khant', 'khant@users.noreply.hosted.weblate.org'), // Burmese
|
||||||
// Contributor('Grooty12', 'Rasmus@rosendahl-kaa.name'), // Danish
|
|
||||||
// Contributor('Victor M', 'victormorita@tuta.io'), // Danish
|
|
||||||
// Contributor('Åzze', 'laitinen.jere222@gmail.com'), // Finnish
|
// Contributor('Åzze', 'laitinen.jere222@gmail.com'), // Finnish
|
||||||
// Contributor('Olli', 'ollinen@ollit.dev'), // Finnish
|
// Contributor('Olli', 'ollinen@ollit.dev'), // Finnish
|
||||||
// Contributor('Idj', 'joneltmp+goahn@gmail.com'), // Hebrew
|
// Contributor('Idj', 'joneltmp+goahn@gmail.com'), // Hebrew
|
||||||
|
|
|
@ -18,6 +18,8 @@ class SetAndFilter extends CollectionFilter {
|
||||||
|
|
||||||
CollectionFilter get _first => _filters.first;
|
CollectionFilter get _first => _filters.first;
|
||||||
|
|
||||||
|
Set<CollectionFilter> get innerFilters => _filters.toSet();
|
||||||
|
|
||||||
SetAndFilter(Set<CollectionFilter> filters, {super.reversed = false}) {
|
SetAndFilter(Set<CollectionFilter> filters, {super.reversed = false}) {
|
||||||
_filters = filters.toList().sorted();
|
_filters = filters.toList().sorted();
|
||||||
_test = (entry) => _filters.every((v) => v.test(entry));
|
_test = (entry) => _filters.every((v) => v.test(entry));
|
||||||
|
|
|
@ -167,10 +167,12 @@ class CollectionLens with ChangeNotifier {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void addFilter(CollectionFilter filter) {
|
void addFilters(Set<CollectionFilter> newFilters) {
|
||||||
if (filters.contains(filter)) return;
|
if (filters.containsAll(newFilters)) return;
|
||||||
filters.removeWhere((other) => !filter.isCompatible(other));
|
for (final filter in newFilters) {
|
||||||
filters.add(filter);
|
filters.removeWhere((other) => !filter.isCompatible(other));
|
||||||
|
}
|
||||||
|
filters.addAll(newFilters);
|
||||||
_onFilterChanged();
|
_onFilterChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -493,17 +493,13 @@ abstract class CollectionSource with SourceBase, AlbumMixin, CountryMixin, Place
|
||||||
// cataloguing
|
// cataloguing
|
||||||
if (!startAnalysisService) {
|
if (!startAnalysisService) {
|
||||||
final opCount = (force ? todoEntries : todoEntries.where(TagMixin.catalogEntriesTest)).length;
|
final opCount = (force ? todoEntries : todoEntries.where(TagMixin.catalogEntriesTest)).length;
|
||||||
if (opCount > TagMixin.commitCountThreshold) {
|
startAnalysisService = opCount > TagMixin.commitCountThreshold;
|
||||||
startAnalysisService = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// ignore locating countries
|
// ignore locating countries
|
||||||
// locating places
|
// locating places
|
||||||
if (!startAnalysisService && await availability.canLocatePlaces) {
|
if (!startAnalysisService && await availability.canLocatePlaces) {
|
||||||
final opCount = (force ? todoEntries.where((entry) => entry.hasGps) : todoEntries.where(LocationMixin.locatePlacesTest)).length;
|
final opCount = (force ? todoEntries.where((entry) => entry.hasGps) : todoEntries.where(LocationMixin.locatePlacesTest)).length;
|
||||||
if (opCount > LocationMixin.commitCountThreshold) {
|
startAnalysisService = opCount > LocationMixin.commitCountThreshold;
|
||||||
startAnalysisService = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ class MediaStoreSource extends CollectionSource {
|
||||||
final deviceOffset = DateTime.now().timeZoneOffset.inMilliseconds;
|
final deviceOffset = DateTime.now().timeZoneOffset.inMilliseconds;
|
||||||
final catalogOffset = settings.catalogTimeZoneOffsetMillis;
|
final catalogOffset = settings.catalogTimeZoneOffsetMillis;
|
||||||
if (deviceOffset != catalogOffset) {
|
if (deviceOffset != catalogOffset) {
|
||||||
unawaited(reportService.recordError('Time zone offset change: $catalogOffset -> $deviceOffset. Clear catalog metadata to get correct date/times.'));
|
unawaited(reportService.log('Time zone offset change: $catalogOffset -> $deviceOffset. Clear catalog metadata to get correct date/times.'));
|
||||||
await localMediaDb.clearDates();
|
await localMediaDb.clearDates();
|
||||||
await localMediaDb.clearCatalogMetadata();
|
await localMediaDb.clearCatalogMetadata();
|
||||||
settings.catalogTimeZoneOffsetMillis = deviceOffset;
|
settings.catalogTimeZoneOffsetMillis = deviceOffset;
|
||||||
|
|
|
@ -145,6 +145,7 @@ class AIcons {
|
||||||
static final showFullscreenArrows = MdiIcons.arrowExpand;
|
static final showFullscreenArrows = MdiIcons.arrowExpand;
|
||||||
static const showFullscreenCorners = Icons.fullscreen_outlined;
|
static const showFullscreenCorners = Icons.fullscreen_outlined;
|
||||||
static const slideshow = Icons.slideshow_outlined;
|
static const slideshow = Icons.slideshow_outlined;
|
||||||
|
static const split = Icons.call_split_outlined;
|
||||||
static const stats = Icons.donut_small_outlined;
|
static const stats = Icons.donut_small_outlined;
|
||||||
static const vaultLock = Icons.lock_outlined;
|
static const vaultLock = Icons.lock_outlined;
|
||||||
static const vaultAdd = Icons.enhanced_encryption_outlined;
|
static const vaultAdd = Icons.enhanced_encryption_outlined;
|
||||||
|
|
|
@ -16,6 +16,7 @@ extension ExtraChipActionView on ChipAction {
|
||||||
ChipAction.ratingOrLower =>
|
ChipAction.ratingOrLower =>
|
||||||
// different data depending on state
|
// different data depending on state
|
||||||
toString(),
|
toString(),
|
||||||
|
ChipAction.decompose => l10n.chipActionDecompose,
|
||||||
ChipAction.reverse =>
|
ChipAction.reverse =>
|
||||||
// different data depending on state
|
// different data depending on state
|
||||||
l10n.chipActionFilterOut,
|
l10n.chipActionFilterOut,
|
||||||
|
@ -33,6 +34,7 @@ extension ExtraChipActionView on ChipAction {
|
||||||
ChipAction.goToTagPage => AIcons.tag,
|
ChipAction.goToTagPage => AIcons.tag,
|
||||||
ChipAction.goToExplorerPage => AIcons.explorer,
|
ChipAction.goToExplorerPage => AIcons.explorer,
|
||||||
ChipAction.ratingOrGreater || ChipAction.ratingOrLower => AIcons.rating,
|
ChipAction.ratingOrGreater || ChipAction.ratingOrLower => AIcons.rating,
|
||||||
|
ChipAction.decompose => AIcons.split,
|
||||||
ChipAction.reverse => AIcons.reverse,
|
ChipAction.reverse => AIcons.reverse,
|
||||||
ChipAction.hide => AIcons.hide,
|
ChipAction.hide => AIcons.hide,
|
||||||
ChipAction.lockVault => AIcons.vaultLock,
|
ChipAction.lockVault => AIcons.vaultLock,
|
||||||
|
|
|
@ -67,7 +67,6 @@ class AvesApp extends StatefulWidget {
|
||||||
'az', // Azerbaijani
|
'az', // Azerbaijani
|
||||||
'bn', // Bengali
|
'bn', // Bengali
|
||||||
'ckb', // Kurdish (Central)
|
'ckb', // Kurdish (Central)
|
||||||
'da', // Danish
|
|
||||||
'fi', // Finnish
|
'fi', // Finnish
|
||||||
'gl', // Galician
|
'gl', // Galician
|
||||||
'he', // Hebrew
|
'he', // Hebrew
|
||||||
|
@ -203,7 +202,10 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
|
||||||
_subscriptions.add(_errorChannel.receiveBroadcastStream().listen((event) => _onError(event as String?)));
|
_subscriptions.add(_errorChannel.receiveBroadcastStream().listen((event) => _onError(event as String?)));
|
||||||
_updateCutoutInsets();
|
_updateCutoutInsets();
|
||||||
_appModeNotifier.addListener(_onAppModeChanged);
|
_appModeNotifier.addListener(_onAppModeChanged);
|
||||||
|
|
||||||
|
debugPrint('start listening to app lifecycle');
|
||||||
WidgetsBinding.instance.addObserver(this);
|
WidgetsBinding.instance.addObserver(this);
|
||||||
|
AvesApp.lifecycleStateNotifier.value = WidgetsBinding.instance.lifecycleState ?? AppLifecycleState.detached;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -211,7 +213,10 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
|
||||||
_subscriptions
|
_subscriptions
|
||||||
..forEach((sub) => sub.cancel())
|
..forEach((sub) => sub.cancel())
|
||||||
..clear();
|
..clear();
|
||||||
|
|
||||||
|
debugPrint('stop listening to app lifecycle');
|
||||||
WidgetsBinding.instance.removeObserver(this);
|
WidgetsBinding.instance.removeObserver(this);
|
||||||
|
|
||||||
_pageTransitionsBuilderNotifier.dispose();
|
_pageTransitionsBuilderNotifier.dispose();
|
||||||
_tvMediaQueryModifierNotifier.dispose();
|
_tvMediaQueryModifierNotifier.dispose();
|
||||||
_appModeNotifier.dispose();
|
_appModeNotifier.dispose();
|
||||||
|
|
|
@ -3,8 +3,10 @@ import 'dart:math';
|
||||||
|
|
||||||
import 'package:aves/app_mode.dart';
|
import 'package:aves/app_mode.dart';
|
||||||
import 'package:aves/model/entry/entry.dart';
|
import 'package:aves/model/entry/entry.dart';
|
||||||
|
import 'package:aves/model/filters/covered/dynamic_album.dart';
|
||||||
import 'package:aves/model/filters/filters.dart';
|
import 'package:aves/model/filters/filters.dart';
|
||||||
import 'package:aves/model/filters/query.dart';
|
import 'package:aves/model/filters/query.dart';
|
||||||
|
import 'package:aves/model/filters/set_and.dart';
|
||||||
import 'package:aves/model/filters/trash.dart';
|
import 'package:aves/model/filters/trash.dart';
|
||||||
import 'package:aves/model/query.dart';
|
import 'package:aves/model/query.dart';
|
||||||
import 'package:aves/model/selection.dart';
|
import 'package:aves/model/selection.dart';
|
||||||
|
@ -33,8 +35,8 @@ import 'package:aves/widgets/common/identity/buttons/captioned_button.dart';
|
||||||
import 'package:aves/widgets/common/search/route.dart';
|
import 'package:aves/widgets/common/search/route.dart';
|
||||||
import 'package:aves/widgets/common/tile_extent_controller.dart';
|
import 'package:aves/widgets/common/tile_extent_controller.dart';
|
||||||
import 'package:aves/widgets/dialogs/tile_view_dialog.dart';
|
import 'package:aves/widgets/dialogs/tile_view_dialog.dart';
|
||||||
import 'package:aves/widgets/filter_grids/common/action_delegates/chip.dart';
|
|
||||||
import 'package:aves/widgets/search/search_delegate.dart';
|
import 'package:aves/widgets/search/search_delegate.dart';
|
||||||
|
import 'package:aves/widgets/viewer/controls/notifications.dart';
|
||||||
import 'package:aves_model/aves_model.dart';
|
import 'package:aves_model/aves_model.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
|
@ -199,10 +201,22 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (showFilterBar)
|
if (showFilterBar)
|
||||||
NotificationListener<FilterNotification>(
|
NotificationListener(
|
||||||
onNotification: (notification) {
|
onNotification: (notification) {
|
||||||
collection.addFilter(notification.filter);
|
if (notification is SelectFilterNotification) {
|
||||||
return true;
|
collection.addFilters({notification.filter});
|
||||||
|
return true;
|
||||||
|
} else if (notification is DecomposeFilterNotification) {
|
||||||
|
final filter = notification.filter;
|
||||||
|
if (filter is DynamicAlbumFilter) {
|
||||||
|
final innerFilter = filter.filter;
|
||||||
|
final newFilters = innerFilter is SetAndFilter ? innerFilter.innerFilters : {innerFilter};
|
||||||
|
collection.addFilters(newFilters);
|
||||||
|
collection.removeFilter(filter);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
},
|
},
|
||||||
child: FilterBar(
|
child: FilterBar(
|
||||||
filters: visibleFilters,
|
filters: visibleFilters,
|
||||||
|
|
|
@ -3,12 +3,8 @@ import 'dart:math';
|
||||||
|
|
||||||
import 'package:aves/app_mode.dart';
|
import 'package:aves/app_mode.dart';
|
||||||
import 'package:aves/model/covers.dart';
|
import 'package:aves/model/covers.dart';
|
||||||
import 'package:aves/model/filters/covered/stored_album.dart';
|
|
||||||
import 'package:aves/model/filters/filters.dart';
|
import 'package:aves/model/filters/filters.dart';
|
||||||
import 'package:aves/model/filters/covered/location.dart';
|
|
||||||
import 'package:aves/model/filters/path.dart';
|
|
||||||
import 'package:aves/model/filters/rating.dart';
|
import 'package:aves/model/filters/rating.dart';
|
||||||
import 'package:aves/model/filters/covered/tag.dart';
|
|
||||||
import 'package:aves/model/settings/enums/accessibility_animations.dart';
|
import 'package:aves/model/settings/enums/accessibility_animations.dart';
|
||||||
import 'package:aves/model/settings/settings.dart';
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/theme/colors.dart';
|
import 'package:aves/theme/colors.dart';
|
||||||
|
@ -101,21 +97,6 @@ class AvesFilterChip extends StatefulWidget {
|
||||||
|
|
||||||
static Future<void> showDefaultLongPressMenu(BuildContext context, CollectionFilter filter, Offset tapPosition) async {
|
static Future<void> showDefaultLongPressMenu(BuildContext context, CollectionFilter filter, Offset tapPosition) async {
|
||||||
if (context.read<ValueNotifier<AppMode>>().value.canNavigate) {
|
if (context.read<ValueNotifier<AppMode>>().value.canNavigate) {
|
||||||
final actions = <ChipAction>[
|
|
||||||
if (filter is AlbumBaseFilter) ChipAction.goToAlbumPage,
|
|
||||||
if (filter is StoredAlbumFilter || filter is PathFilter) ChipAction.goToExplorerPage,
|
|
||||||
if ((filter is LocationFilter && filter.level == LocationLevel.country)) ChipAction.goToCountryPage,
|
|
||||||
if ((filter is LocationFilter && filter.level == LocationLevel.place)) ChipAction.goToPlacePage,
|
|
||||||
if (filter is TagFilter) ChipAction.goToTagPage,
|
|
||||||
if (filter is RatingFilter && 1 < filter.rating && filter.rating < 5) ...[
|
|
||||||
if (filter.op != RatingFilter.opOrGreater) ChipAction.ratingOrGreater,
|
|
||||||
if (filter.op != RatingFilter.opOrLower) ChipAction.ratingOrLower,
|
|
||||||
],
|
|
||||||
ChipAction.reverse,
|
|
||||||
ChipAction.hide,
|
|
||||||
ChipAction.lockVault,
|
|
||||||
];
|
|
||||||
|
|
||||||
// remove focus, if any, to prevent the keyboard from showing up
|
// remove focus, if any, to prevent the keyboard from showing up
|
||||||
// after the user is done with the popup menu
|
// after the user is done with the popup menu
|
||||||
FocusManager.instance.primaryFocus?.unfocus();
|
FocusManager.instance.primaryFocus?.unfocus();
|
||||||
|
@ -132,7 +113,7 @@ class AvesFilterChip extends StatefulWidget {
|
||||||
child: Text(filter.getLabel(context)),
|
child: Text(filter.getLabel(context)),
|
||||||
),
|
),
|
||||||
const PopupMenuDivider(),
|
const PopupMenuDivider(),
|
||||||
...actions.where((action) => actionDelegate.isVisible(action, filter: filter)).map((action) {
|
...ChipAction.values.where((action) => actionDelegate.isVisible(action, filter: filter)).map((action) {
|
||||||
late String text;
|
late String text;
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case ChipAction.reverse:
|
case ChipAction.reverse:
|
||||||
|
|
|
@ -92,7 +92,7 @@ class _OverlayCoordinateFilterChipState extends State<OverlayCoordinateFilterChi
|
||||||
useFilterColor: false,
|
useFilterColor: false,
|
||||||
background: Themes.overlayBackgroundColor(brightness: theme.brightness, blurred: blurred),
|
background: Themes.overlayBackgroundColor(brightness: theme.brightness, blurred: blurred),
|
||||||
maxWidth: double.infinity,
|
maxWidth: double.infinity,
|
||||||
onTap: (filter) => FilterSelectedNotification(CoordinateFilter(bounds.sw, bounds.ne)).dispatch(context),
|
onTap: (filter) => SelectFilterNotification(CoordinateFilter(bounds.sw, bounds.ne)).dispatch(context),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -97,7 +97,12 @@ class ExplorerActionDelegate with FeedbackMixin {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _hide(BuildContext context) {
|
void _hide(BuildContext context) {
|
||||||
ChipActionDelegate().onActionSelected(context, _getPathFilter(), ChipAction.hide);
|
final chipActionDelegate = ChipActionDelegate();
|
||||||
|
const action = ChipAction.hide;
|
||||||
|
final pathFilter = _getPathFilter();
|
||||||
|
if (chipActionDelegate.isVisible(action, filter: pathFilter)) {
|
||||||
|
chipActionDelegate.onActionSelected(context, pathFilter, action);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _goToStats(BuildContext context) {
|
void _goToStats(BuildContext context) {
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
|
import 'package:aves/model/filters/covered/dynamic_album.dart';
|
||||||
|
import 'package:aves/model/filters/covered/location.dart';
|
||||||
import 'package:aves/model/filters/covered/stored_album.dart';
|
import 'package:aves/model/filters/covered/stored_album.dart';
|
||||||
|
import 'package:aves/model/filters/covered/tag.dart';
|
||||||
import 'package:aves/model/filters/filters.dart';
|
import 'package:aves/model/filters/filters.dart';
|
||||||
import 'package:aves/model/filters/path.dart';
|
import 'package:aves/model/filters/path.dart';
|
||||||
import 'package:aves/model/filters/rating.dart';
|
import 'package:aves/model/filters/rating.dart';
|
||||||
|
@ -15,6 +18,7 @@ import 'package:aves/widgets/filter_grids/albums_page.dart';
|
||||||
import 'package:aves/widgets/filter_grids/countries_page.dart';
|
import 'package:aves/widgets/filter_grids/countries_page.dart';
|
||||||
import 'package:aves/widgets/filter_grids/places_page.dart';
|
import 'package:aves/widgets/filter_grids/places_page.dart';
|
||||||
import 'package:aves/widgets/filter_grids/tags_page.dart';
|
import 'package:aves/widgets/filter_grids/tags_page.dart';
|
||||||
|
import 'package:aves/widgets/viewer/controls/notifications.dart';
|
||||||
import 'package:aves_model/aves_model.dart';
|
import 'package:aves_model/aves_model.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
@ -26,12 +30,21 @@ class ChipActionDelegate with FeedbackMixin, VaultAwareMixin {
|
||||||
}) {
|
}) {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case ChipAction.goToAlbumPage:
|
case ChipAction.goToAlbumPage:
|
||||||
|
return filter is AlbumBaseFilter;
|
||||||
case ChipAction.goToCountryPage:
|
case ChipAction.goToCountryPage:
|
||||||
|
return filter is LocationFilter && filter.level == LocationLevel.country;
|
||||||
case ChipAction.goToPlacePage:
|
case ChipAction.goToPlacePage:
|
||||||
|
return filter is LocationFilter && filter.level == LocationLevel.place;
|
||||||
case ChipAction.goToTagPage:
|
case ChipAction.goToTagPage:
|
||||||
|
return filter is TagFilter;
|
||||||
case ChipAction.goToExplorerPage:
|
case ChipAction.goToExplorerPage:
|
||||||
|
return filter is StoredAlbumFilter || filter is PathFilter;
|
||||||
case ChipAction.ratingOrGreater:
|
case ChipAction.ratingOrGreater:
|
||||||
|
return filter is RatingFilter && 1 < filter.rating && filter.rating < 5 && filter.op != RatingFilter.opOrGreater;
|
||||||
case ChipAction.ratingOrLower:
|
case ChipAction.ratingOrLower:
|
||||||
|
return filter is RatingFilter && 1 < filter.rating && filter.rating < 5 && filter.op != RatingFilter.opOrLower;
|
||||||
|
case ChipAction.decompose:
|
||||||
|
return filter is DynamicAlbumFilter;
|
||||||
case ChipAction.reverse:
|
case ChipAction.reverse:
|
||||||
return true;
|
return true;
|
||||||
case ChipAction.hide:
|
case ChipAction.hide:
|
||||||
|
@ -69,11 +82,13 @@ class ChipActionDelegate with FeedbackMixin, VaultAwareMixin {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
case ChipAction.ratingOrGreater:
|
case ChipAction.ratingOrGreater:
|
||||||
FilterNotification((filter as RatingFilter).copyWith(RatingFilter.opOrGreater)).dispatch(context);
|
SelectFilterNotification((filter as RatingFilter).copyWith(RatingFilter.opOrGreater)).dispatch(context);
|
||||||
case ChipAction.ratingOrLower:
|
case ChipAction.ratingOrLower:
|
||||||
FilterNotification((filter as RatingFilter).copyWith(RatingFilter.opOrLower)).dispatch(context);
|
SelectFilterNotification((filter as RatingFilter).copyWith(RatingFilter.opOrLower)).dispatch(context);
|
||||||
|
case ChipAction.decompose:
|
||||||
|
DecomposeFilterNotification(filter).dispatch(context);
|
||||||
case ChipAction.reverse:
|
case ChipAction.reverse:
|
||||||
FilterNotification(filter.reverse()).dispatch(context);
|
SelectFilterNotification(filter.reverse()).dispatch(context);
|
||||||
case ChipAction.hide:
|
case ChipAction.hide:
|
||||||
_hide(context, filter);
|
_hide(context, filter);
|
||||||
case ChipAction.lockVault:
|
case ChipAction.lockVault:
|
||||||
|
@ -119,10 +134,3 @@ class ChipActionDelegate with FeedbackMixin, VaultAwareMixin {
|
||||||
settings.changeFilterVisibility({filter}, false);
|
settings.changeFilterVisibility({filter}, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@immutable
|
|
||||||
class FilterNotification extends Notification {
|
|
||||||
final CollectionFilter filter;
|
|
||||||
|
|
||||||
const FilterNotification(this.filter);
|
|
||||||
}
|
|
||||||
|
|
|
@ -240,7 +240,8 @@ class _HomePageState extends State<HomePage> {
|
||||||
unawaited(AnalysisService.registerCallback());
|
unawaited(AnalysisService.registerCallback());
|
||||||
await reportService.log('Initialize source to view item in directory $directory');
|
await reportService.log('Initialize source to view item in directory $directory');
|
||||||
final source = context.read<CollectionSource>();
|
final source = context.read<CollectionSource>();
|
||||||
source.canAnalyze = false;
|
// analysis is necessary to display neighbour items when the initial item is a new one
|
||||||
|
source.canAnalyze = true;
|
||||||
await source.init(scope: {StoredAlbumFilter(directory, null)});
|
await source.init(scope: {StoredAlbumFilter(directory, null)});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -4,8 +4,8 @@ import 'package:aves/app_mode.dart';
|
||||||
import 'package:aves/model/entry/entry.dart';
|
import 'package:aves/model/entry/entry.dart';
|
||||||
import 'package:aves/model/entry/extensions/location.dart';
|
import 'package:aves/model/entry/extensions/location.dart';
|
||||||
import 'package:aves/model/filters/coordinate.dart';
|
import 'package:aves/model/filters/coordinate.dart';
|
||||||
import 'package:aves/model/filters/filters.dart';
|
|
||||||
import 'package:aves/model/filters/covered/location.dart';
|
import 'package:aves/model/filters/covered/location.dart';
|
||||||
|
import 'package:aves/model/filters/filters.dart';
|
||||||
import 'package:aves/model/highlight.dart';
|
import 'package:aves/model/highlight.dart';
|
||||||
import 'package:aves/model/media/geotiff.dart';
|
import 'package:aves/model/media/geotiff.dart';
|
||||||
import 'package:aves/model/settings/enums/accessibility_animations.dart';
|
import 'package:aves/model/settings/enums/accessibility_animations.dart';
|
||||||
|
@ -31,7 +31,6 @@ import 'package:aves/widgets/common/map/map_action_delegate.dart';
|
||||||
import 'package:aves/widgets/common/providers/highlight_info_provider.dart';
|
import 'package:aves/widgets/common/providers/highlight_info_provider.dart';
|
||||||
import 'package:aves/widgets/common/providers/map_theme_provider.dart';
|
import 'package:aves/widgets/common/providers/map_theme_provider.dart';
|
||||||
import 'package:aves/widgets/dialogs/aves_dialog.dart';
|
import 'package:aves/widgets/dialogs/aves_dialog.dart';
|
||||||
import 'package:aves/widgets/filter_grids/common/action_delegates/chip.dart';
|
|
||||||
import 'package:aves/widgets/map/scroller.dart';
|
import 'package:aves/widgets/map/scroller.dart';
|
||||||
import 'package:aves/widgets/viewer/controls/notifications.dart';
|
import 'package:aves/widgets/viewer/controls/notifications.dart';
|
||||||
import 'package:aves/widgets/viewer/entry_viewer_page.dart';
|
import 'package:aves/widgets/viewer/entry_viewer_page.dart';
|
||||||
|
@ -203,9 +202,7 @@ class _ContentState extends State<_Content> with SingleTickerProviderStateMixin
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return NotificationListener(
|
return NotificationListener(
|
||||||
onNotification: (notification) {
|
onNotification: (notification) {
|
||||||
if (notification is FilterSelectedNotification) {
|
if (notification is SelectFilterNotification) {
|
||||||
_goToCollection(notification.filter);
|
|
||||||
} else if (notification is FilterNotification) {
|
|
||||||
_goToCollection(notification.filter);
|
_goToCollection(notification.filter);
|
||||||
} else if (notification is OpenMapAppNotification) {
|
} else if (notification is OpenMapAppNotification) {
|
||||||
_openMapApp();
|
_openMapApp();
|
||||||
|
|
|
@ -1,16 +1,18 @@
|
||||||
import 'package:aves/model/dynamic_albums.dart';
|
import 'package:aves/model/dynamic_albums.dart';
|
||||||
import 'package:aves/model/filters/covered/stored_album.dart';
|
|
||||||
import 'package:aves/model/filters/aspect_ratio.dart';
|
import 'package:aves/model/filters/aspect_ratio.dart';
|
||||||
|
import 'package:aves/model/filters/covered/dynamic_album.dart';
|
||||||
|
import 'package:aves/model/filters/covered/location.dart';
|
||||||
|
import 'package:aves/model/filters/covered/stored_album.dart';
|
||||||
|
import 'package:aves/model/filters/covered/tag.dart';
|
||||||
import 'package:aves/model/filters/date.dart';
|
import 'package:aves/model/filters/date.dart';
|
||||||
import 'package:aves/model/filters/favourite.dart';
|
import 'package:aves/model/filters/favourite.dart';
|
||||||
import 'package:aves/model/filters/filters.dart';
|
import 'package:aves/model/filters/filters.dart';
|
||||||
import 'package:aves/model/filters/covered/location.dart';
|
|
||||||
import 'package:aves/model/filters/mime.dart';
|
import 'package:aves/model/filters/mime.dart';
|
||||||
import 'package:aves/model/filters/missing.dart';
|
import 'package:aves/model/filters/missing.dart';
|
||||||
import 'package:aves/model/filters/query.dart';
|
import 'package:aves/model/filters/query.dart';
|
||||||
import 'package:aves/model/filters/rating.dart';
|
import 'package:aves/model/filters/rating.dart';
|
||||||
import 'package:aves/model/filters/recent.dart';
|
import 'package:aves/model/filters/recent.dart';
|
||||||
import 'package:aves/model/filters/covered/tag.dart';
|
import 'package:aves/model/filters/set_and.dart';
|
||||||
import 'package:aves/model/filters/type.dart';
|
import 'package:aves/model/filters/type.dart';
|
||||||
import 'package:aves/model/settings/settings.dart';
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/model/source/album.dart';
|
import 'package:aves/model/source/album.dart';
|
||||||
|
@ -29,7 +31,7 @@ import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||||
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
|
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
|
||||||
import 'package:aves/widgets/common/search/delegate.dart';
|
import 'package:aves/widgets/common/search/delegate.dart';
|
||||||
import 'package:aves/widgets/common/search/page.dart';
|
import 'package:aves/widgets/common/search/page.dart';
|
||||||
import 'package:aves/widgets/filter_grids/common/action_delegates/chip.dart';
|
import 'package:aves/widgets/viewer/controls/notifications.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
@ -91,10 +93,21 @@ class CollectionSearchDelegate extends AvesSearchDelegate with FeedbackMixin, Va
|
||||||
final upQuery = query.trim().toUpperCase();
|
final upQuery = query.trim().toUpperCase();
|
||||||
bool containQuery(String s) => s.toUpperCase().contains(upQuery);
|
bool containQuery(String s) => s.toUpperCase().contains(upQuery);
|
||||||
return SafeArea(
|
return SafeArea(
|
||||||
child: NotificationListener<FilterNotification>(
|
child: NotificationListener(
|
||||||
onNotification: (notification) {
|
onNotification: (notification) {
|
||||||
_select(context, notification.filter);
|
if (notification is SelectFilterNotification) {
|
||||||
return true;
|
_select(context, {notification.filter});
|
||||||
|
return true;
|
||||||
|
} else if (notification is DecomposeFilterNotification) {
|
||||||
|
final filter = notification.filter;
|
||||||
|
if (filter is DynamicAlbumFilter) {
|
||||||
|
final innerFilter = filter.filter;
|
||||||
|
final newFilters = innerFilter is SetAndFilter ? innerFilter.innerFilters : {innerFilter};
|
||||||
|
_select(context, newFilters);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
},
|
},
|
||||||
child: ValueListenableBuilder<String?>(
|
child: ValueListenableBuilder<String?>(
|
||||||
valueListenable: _expandedSectionNotifier,
|
valueListenable: _expandedSectionNotifier,
|
||||||
|
@ -159,7 +172,7 @@ class CollectionSearchDelegate extends AvesSearchDelegate with FeedbackMixin, Va
|
||||||
required List<CollectionFilter> filters,
|
required List<CollectionFilter> filters,
|
||||||
HeroType Function(CollectionFilter filter)? heroTypeBuilder,
|
HeroType Function(CollectionFilter filter)? heroTypeBuilder,
|
||||||
}) {
|
}) {
|
||||||
void onTap(filter) => _select(context, filter is QueryFilter ? QueryFilter(filter.query) : filter);
|
void onTap(filter) => _select(context, {filter is QueryFilter ? QueryFilter(filter.query) : filter});
|
||||||
const onLongPress = AvesFilterChip.showDefaultLongPressMenu;
|
const onLongPress = AvesFilterChip.showDefaultLongPressMenu;
|
||||||
return title != null
|
return title != null
|
||||||
? TitledExpandableFilterRow(
|
? TitledExpandableFilterRow(
|
||||||
|
@ -205,7 +218,7 @@ class CollectionSearchDelegate extends AvesSearchDelegate with FeedbackMixin, Va
|
||||||
source.getStoredAlbumDisplayName(context, album),
|
source.getStoredAlbumDisplayName(context, album),
|
||||||
))
|
))
|
||||||
.where((filter) => containQuery(filter.displayName ?? filter.album)),
|
.where((filter) => containQuery(filter.displayName ?? filter.album)),
|
||||||
...dynamicAlbums.all,
|
...dynamicAlbums.all.where((filter) => containQuery(filter.name)),
|
||||||
]..sort();
|
]..sort();
|
||||||
return _buildFilterRow(
|
return _buildFilterRow(
|
||||||
context: context,
|
context: context,
|
||||||
|
@ -303,7 +316,7 @@ class CollectionSearchDelegate extends AvesSearchDelegate with FeedbackMixin, Va
|
||||||
// `buildResults` is called in the build phase,
|
// `buildResults` is called in the build phase,
|
||||||
// so we post the call that will filter the collection
|
// so we post the call that will filter the collection
|
||||||
// and possibly trigger a rebuild here
|
// and possibly trigger a rebuild here
|
||||||
_select(context, _buildQueryFilter(true));
|
_select(context, {_buildQueryFilter(true)});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return const SizedBox();
|
return const SizedBox();
|
||||||
|
@ -314,29 +327,33 @@ class CollectionSearchDelegate extends AvesSearchDelegate with FeedbackMixin, Va
|
||||||
return cleanQuery.isNotEmpty ? QueryFilter(cleanQuery, colorful: colorful) : null;
|
return cleanQuery.isNotEmpty ? QueryFilter(cleanQuery, colorful: colorful) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _select(BuildContext context, CollectionFilter? filter) async {
|
Future<void> _select(BuildContext context, Set<CollectionFilter?> filters) async {
|
||||||
if (filter == null) {
|
final newFilters = filters.nonNulls.toSet();
|
||||||
|
if (newFilters.isEmpty) {
|
||||||
goBack(context);
|
goBack(context);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!await unlockFilter(context, filter)) return;
|
for (final filter in newFilters) {
|
||||||
|
if (!await unlockFilter(context, filter)) return;
|
||||||
|
|
||||||
if (settings.saveSearchHistory) {
|
if (settings.saveSearchHistory) {
|
||||||
final history = settings.searchHistory
|
final history = settings.searchHistory
|
||||||
..remove(filter)
|
..remove(filter)
|
||||||
..insert(0, filter);
|
..insert(0, filter);
|
||||||
settings.searchHistory = history.take(searchHistoryCount).toList();
|
settings.searchHistory = history.take(searchHistoryCount).toList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parentCollection != null) {
|
if (parentCollection != null) {
|
||||||
_applyToParentCollectionPage(context, filter);
|
_applyToParentCollectionPage(context, newFilters);
|
||||||
} else {
|
} else {
|
||||||
_jumpToCollectionPage(context, {filter});
|
_jumpToCollectionPage(context, newFilters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _applyToParentCollectionPage(BuildContext context, CollectionFilter filter) {
|
void _applyToParentCollectionPage(BuildContext context, Set<CollectionFilter> filters) {
|
||||||
parentCollection!.addFilter(filter);
|
parentCollection!.addFilters(filters);
|
||||||
if (Navigator.canPop(context)) {
|
if (Navigator.canPop(context)) {
|
||||||
// We delay closing the current page after applying the filter selection
|
// We delay closing the current page after applying the filter selection
|
||||||
// so that hero animation target is ready in the `FilterBar`,
|
// so that hero animation target is ready in the `FilterBar`,
|
||||||
|
|
|
@ -8,6 +8,7 @@ class SupportedLocales {
|
||||||
'bg': 'Български',
|
'bg': 'Български',
|
||||||
'ca': 'Català',
|
'ca': 'Català',
|
||||||
'cs': 'Čeština',
|
'cs': 'Čeština',
|
||||||
|
'da': 'Dansk',
|
||||||
'de': 'Deutsch',
|
'de': 'Deutsch',
|
||||||
'el': 'Ελληνικά',
|
'el': 'Ελληνικά',
|
||||||
'en': 'English',
|
'en': 'English',
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:aves/model/entry/entry.dart';
|
import 'package:aves/model/entry/entry.dart';
|
||||||
import 'package:aves/model/filters/covered/stored_album.dart';
|
|
||||||
import 'package:aves/model/filters/filters.dart';
|
|
||||||
import 'package:aves/model/filters/covered/location.dart';
|
import 'package:aves/model/filters/covered/location.dart';
|
||||||
import 'package:aves/model/filters/rating.dart';
|
import 'package:aves/model/filters/covered/stored_album.dart';
|
||||||
import 'package:aves/model/filters/covered/tag.dart';
|
import 'package:aves/model/filters/covered/tag.dart';
|
||||||
|
import 'package:aves/model/filters/filters.dart';
|
||||||
|
import 'package:aves/model/filters/rating.dart';
|
||||||
import 'package:aves/model/settings/settings.dart';
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/model/source/collection_lens.dart';
|
import 'package:aves/model/source/collection_lens.dart';
|
||||||
import 'package:aves/model/source/collection_source.dart';
|
import 'package:aves/model/source/collection_source.dart';
|
||||||
|
@ -24,11 +24,11 @@ import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||||
import 'package:aves/widgets/common/extensions/media_query.dart';
|
import 'package:aves/widgets/common/extensions/media_query.dart';
|
||||||
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
|
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
|
||||||
import 'package:aves/widgets/common/identity/empty.dart';
|
import 'package:aves/widgets/common/identity/empty.dart';
|
||||||
import 'package:aves/widgets/filter_grids/common/action_delegates/chip.dart';
|
|
||||||
import 'package:aves/widgets/stats/date/histogram.dart';
|
import 'package:aves/widgets/stats/date/histogram.dart';
|
||||||
import 'package:aves/widgets/stats/filter_table.dart';
|
import 'package:aves/widgets/stats/filter_table.dart';
|
||||||
import 'package:aves/widgets/stats/mime_donut.dart';
|
import 'package:aves/widgets/stats/mime_donut.dart';
|
||||||
import 'package:aves/widgets/stats/percent_text.dart';
|
import 'package:aves/widgets/stats/percent_text.dart';
|
||||||
|
import 'package:aves/widgets/viewer/controls/notifications.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
|
@ -172,7 +172,7 @@ class _StatsPageState extends State<StatsPage> with FeedbackMixin, VaultAwareMix
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
child = NotificationListener<FilterNotification>(
|
child = NotificationListener<SelectFilterNotification>(
|
||||||
onNotification: (notification) {
|
onNotification: (notification) {
|
||||||
_onFilterSelection(context, notification.filter);
|
_onFilterSelection(context, notification.filter);
|
||||||
return true;
|
return true;
|
||||||
|
@ -336,7 +336,7 @@ class _StatsPageState extends State<StatsPage> with FeedbackMixin, VaultAwareMix
|
||||||
}
|
}
|
||||||
|
|
||||||
void _applyToParentCollectionPage(BuildContext context, CollectionFilter filter) {
|
void _applyToParentCollectionPage(BuildContext context, CollectionFilter filter) {
|
||||||
widget.parentCollection!.addFilter(filter);
|
widget.parentCollection!.addFilters({filter});
|
||||||
// We delay closing the current page after applying the filter selection
|
// We delay closing the current page after applying the filter selection
|
||||||
// so that hero animation target is ready in the `FilterBar`,
|
// so that hero animation target is ready in the `FilterBar`,
|
||||||
// even when the target is a child of an `AnimatedList`.
|
// even when the target is a child of an `AnimatedList`.
|
||||||
|
@ -384,7 +384,7 @@ class StatsTopPage extends StatelessWidget {
|
||||||
child: SafeArea(
|
child: SafeArea(
|
||||||
bottom: false,
|
bottom: false,
|
||||||
child: Builder(builder: (context) {
|
child: Builder(builder: (context) {
|
||||||
return NotificationListener<FilterNotification>(
|
return NotificationListener<SelectFilterNotification>(
|
||||||
onNotification: (notification) {
|
onNotification: (notification) {
|
||||||
onFilterSelection(notification.filter);
|
onFilterSelection(notification.filter);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -89,13 +89,23 @@ class CastNotification extends Notification with EquatableMixin {
|
||||||
}
|
}
|
||||||
|
|
||||||
@immutable
|
@immutable
|
||||||
class FilterSelectedNotification extends Notification with EquatableMixin {
|
class SelectFilterNotification extends Notification with EquatableMixin {
|
||||||
final CollectionFilter filter;
|
final CollectionFilter filter;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [filter];
|
List<Object?> get props => [filter];
|
||||||
|
|
||||||
const FilterSelectedNotification(this.filter);
|
const SelectFilterNotification(this.filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@immutable
|
||||||
|
class DecomposeFilterNotification extends Notification with EquatableMixin {
|
||||||
|
final CollectionFilter filter;
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [filter];
|
||||||
|
|
||||||
|
const DecomposeFilterNotification(this.filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@immutable
|
@immutable
|
||||||
|
|
|
@ -564,7 +564,7 @@ class _EntryViewerStackState extends State<EntryViewerStack> with EntryViewContr
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _handleNotification(dynamic notification) {
|
bool _handleNotification(dynamic notification) {
|
||||||
if (notification is FilterSelectedNotification) {
|
if (notification is SelectFilterNotification) {
|
||||||
_goToCollection(notification.filter);
|
_goToCollection(notification.filter);
|
||||||
} else if (notification is CastNotification) {
|
} else if (notification is CastNotification) {
|
||||||
_cast(notification.enabled);
|
_cast(notification.enabled);
|
||||||
|
|
|
@ -10,7 +10,6 @@ import 'package:aves/theme/durations.dart';
|
||||||
import 'package:aves/widgets/common/basic/insets.dart';
|
import 'package:aves/widgets/common/basic/insets.dart';
|
||||||
import 'package:aves/widgets/common/basic/scaffold.dart';
|
import 'package:aves/widgets/common/basic/scaffold.dart';
|
||||||
import 'package:aves/widgets/common/basic/tv_edge_focus.dart';
|
import 'package:aves/widgets/common/basic/tv_edge_focus.dart';
|
||||||
import 'package:aves/widgets/filter_grids/common/action_delegates/chip.dart';
|
|
||||||
import 'package:aves/widgets/viewer/action/entry_info_action_delegate.dart';
|
import 'package:aves/widgets/viewer/action/entry_info_action_delegate.dart';
|
||||||
import 'package:aves/widgets/viewer/controls/notifications.dart';
|
import 'package:aves/widgets/viewer/controls/notifications.dart';
|
||||||
import 'package:aves/widgets/viewer/info/basic_section.dart';
|
import 'package:aves/widgets/viewer/info/basic_section.dart';
|
||||||
|
@ -235,7 +234,7 @@ class _InfoPageContentState extends State<_InfoPageContent> {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
return NotificationListener<FilterNotification>(
|
return NotificationListener<SelectFilterNotification>(
|
||||||
onNotification: (notification) {
|
onNotification: (notification) {
|
||||||
_onFilter(notification.filter);
|
_onFilter(notification.filter);
|
||||||
return true;
|
return true;
|
||||||
|
@ -288,6 +287,6 @@ class _InfoPageContentState extends State<_InfoPageContent> {
|
||||||
|
|
||||||
void _onFilter(CollectionFilter filter) {
|
void _onFilter(CollectionFilter filter) {
|
||||||
if (!mounted) return;
|
if (!mounted) return;
|
||||||
FilterSelectedNotification(filter).dispatch(context);
|
SelectFilterNotification(filter).dispatch(context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ enum ChipAction {
|
||||||
goToExplorerPage,
|
goToExplorerPage,
|
||||||
ratingOrGreater,
|
ratingOrGreater,
|
||||||
ratingOrLower,
|
ratingOrLower,
|
||||||
|
decompose,
|
||||||
reverse,
|
reverse,
|
||||||
hide,
|
hide,
|
||||||
lockVault,
|
lockVault,
|
||||||
|
|
64
pubspec.lock
|
@ -13,10 +13,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: _flutterfire_internals
|
name: _flutterfire_internals
|
||||||
sha256: eae3133cbb06de9205899b822e3897fc6a8bc278ad4c944b4ce612689369694b
|
sha256: daa1d780fdecf8af925680c06c86563cdd445deea995d5c9176f1302a2b10bbe
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.47"
|
version: "1.3.48"
|
||||||
_macros:
|
_macros:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: dart
|
description: dart
|
||||||
|
@ -318,26 +318,26 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_core
|
name: firebase_core
|
||||||
sha256: fef81a53ba1ca618def1f8bef4361df07968434e62cb204c1fb90bb880a03da2
|
sha256: "15d761b95dfa2906dfcc31b7fc6fe293188533d1a3ffe78389ba9e69bd7fdbde"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.8.1"
|
version: "3.9.0"
|
||||||
firebase_core_platform_interface:
|
firebase_core_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_core_platform_interface
|
name: firebase_core_platform_interface
|
||||||
sha256: b94b217e3ad745e784960603d33d99471621ecca151c99c670869b76e50ad2a6
|
sha256: d7253d255ff10f85cfd2adaba9ac17bae878fa3ba577462451163bd9f1d1f0bf
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.3.1"
|
version: "5.4.0"
|
||||||
firebase_core_web:
|
firebase_core_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_core_web
|
name: firebase_core_web
|
||||||
sha256: "9e69806bb3d905aeec3c1242e0e1475de6ea6d48f456af29d598fb229a2b4e5e"
|
sha256: fbc008cf390d909b823763064b63afefe9f02d8afdb13eb3f485b871afee956b
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.18.2"
|
version: "2.19.0"
|
||||||
firebase_crashlytics:
|
firebase_crashlytics:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -366,18 +366,18 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flex_color_picker
|
name: flex_color_picker
|
||||||
sha256: "12dc855ae8ef5491f529b1fc52c655f06dcdf4114f1f7fdecafa41eec2ec8d79"
|
sha256: c083b79f1c57eaeed9f464368be376951230b3cb1876323b784626152a86e480
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.6.0"
|
version: "3.7.0"
|
||||||
flex_seed_scheme:
|
flex_seed_scheme:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flex_seed_scheme
|
name: flex_seed_scheme
|
||||||
sha256: "7639d2c86268eff84a909026eb169f008064af0fb3696a651b24b0fa24a40334"
|
sha256: d3ba3c5c92d2d79d45e94b4c6c71d01fac3c15017da1545880c53864da5dfeb0
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.4.1"
|
version: "3.5.0"
|
||||||
floating:
|
floating:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -462,18 +462,18 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_markdown
|
name: flutter_markdown
|
||||||
sha256: "255b00afa1a7bad19727da6a7780cf3db6c3c12e68d302d85e0ff1fdf173db9e"
|
sha256: e37f4c69a07b07bb92622ef6b131a53c9aae48f64b176340af9e8e5238718487
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.4+3"
|
version: "0.7.5"
|
||||||
flutter_plugin_android_lifecycle:
|
flutter_plugin_android_lifecycle:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_plugin_android_lifecycle
|
name: flutter_plugin_android_lifecycle
|
||||||
sha256: "9b78450b89f059e96c9ebb355fa6b3df1d6b330436e0b885fb49594c41721398"
|
sha256: "615a505aef59b151b46bbeef55b36ce2b6ed299d160c51d84281946f0aa0ce0e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.23"
|
version: "2.0.24"
|
||||||
flutter_staggered_animations:
|
flutter_staggered_animations:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -629,10 +629,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: http_parser
|
name: http_parser
|
||||||
sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360"
|
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.1.1"
|
version: "4.1.2"
|
||||||
image:
|
image:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -701,10 +701,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: lints
|
name: lints
|
||||||
sha256: "4a16b3f03741e1252fda5de3ce712666d010ba2122f8e912c94f9f7b90e1a4c3"
|
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.0"
|
version: "5.1.1"
|
||||||
lists:
|
lists:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1273,10 +1273,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: shared_preferences
|
name: shared_preferences
|
||||||
sha256: "95f9997ca1fb9799d494d0cb2a780fd7be075818d59f00c43832ed112b158a82"
|
sha256: a752ce92ea7540fc35a0d19722816e04d0e72828a4200e83a98cf1a1eb524c9a
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.3"
|
version: "2.3.5"
|
||||||
shared_preferences_android:
|
shared_preferences_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1430,10 +1430,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: sqflite_darwin
|
name: sqflite_darwin
|
||||||
sha256: "96a698e2bc82bd770a4d6aab00b42396a7c63d9e33513a56945cbccb594c2474"
|
sha256: "22adfd9a2c7d634041e96d6241e6e1c8138ca6817018afc5d443fef91dcefa9c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.1"
|
version: "2.4.1+1"
|
||||||
sqflite_platform_interface:
|
sqflite_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1695,18 +1695,18 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: wakelock_plus
|
name: wakelock_plus
|
||||||
sha256: bf4ee6f17a2fa373ed3753ad0e602b7603f8c75af006d5b9bdade263928c0484
|
sha256: "36c88af0b930121941345306d259ec4cc4ecca3b151c02e3a9e71aede83c615e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.8"
|
version: "1.2.10"
|
||||||
wakelock_plus_platform_interface:
|
wakelock_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: wakelock_plus_platform_interface
|
name: wakelock_plus_platform_interface
|
||||||
sha256: "422d1cdbb448079a8a62a5a770b69baa489f8f7ca21aef47800c726d404f9d16"
|
sha256: "70e780bc99796e1db82fe764b1e7dcb89a86f1e5b3afb1db354de50f2e41eb7a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.1"
|
version: "1.2.2"
|
||||||
watcher:
|
watcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1759,10 +1759,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32
|
name: win32
|
||||||
sha256: "8b338d4486ab3fbc0ba0db9f9b4f5239b6697fcee427939a40e720cbb9ee0a69"
|
sha256: "154360849a56b7b67331c21f09a386562d88903f90a1099c5987afc1912e1f29"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.9.0"
|
version: "5.10.0"
|
||||||
win32_registry:
|
win32_registry:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1799,10 +1799,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: yaml
|
name: yaml
|
||||||
sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
|
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.1.3"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.6.0 <4.0.0"
|
dart: ">=3.6.0 <4.0.0"
|
||||||
flutter: ">=3.27.1"
|
flutter: ">=3.27.1"
|
||||||
|
|
|
@ -7,7 +7,7 @@ repository: https://github.com/deckerst/aves
|
||||||
# - play changelog: /whatsnew/whatsnew-en-US
|
# - play changelog: /whatsnew/whatsnew-en-US
|
||||||
# - izzy changelog: /fastlane/metadata/android/en-US/changelogs/XXX01.txt
|
# - izzy changelog: /fastlane/metadata/android/en-US/changelogs/XXX01.txt
|
||||||
# - libre changelog: /fastlane/metadata/android/en-US/changelogs/XXX.txt
|
# - libre changelog: /fastlane/metadata/android/en-US/changelogs/XXX.txt
|
||||||
version: 1.12.0+140
|
version: 1.12.1+141
|
||||||
publish_to: none
|
publish_to: none
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
@ -127,7 +127,7 @@ dependencies:
|
||||||
url: https://github.com/deckerst/aves_streams_channel.git
|
url: https://github.com/deckerst/aves_streams_channel.git
|
||||||
transparent_image:
|
transparent_image:
|
||||||
url_launcher:
|
url_launcher:
|
||||||
vector_map_tiles:
|
vector_map_tiles: ^8.0.0 # vector_map_tiles v9.0.0-beta.6 has a buggy cross-platform definition for `cacheFolder`
|
||||||
vector_math:
|
vector_math:
|
||||||
vector_tile_renderer:
|
vector_tile_renderer:
|
||||||
volume_controller:
|
volume_controller:
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
In v1.12.0:
|
In v1.12.1:
|
||||||
- save your filtered collection as dynamic albums
|
- enjoy the app in Danish
|
||||||
- enjoy the app in Tamil, Bulgarian and Estonian
|
|
||||||
Full changelog available on GitHub
|
Full changelog available on GitHub
|