Compare commits

..

115 commits

Author SHA1 Message Date
9037f8e610 Aggiorna README.md
Some checks failed
Quality check / Flutter analysis (push) Has been cancelled
Quality check / CodeQL analysis (java-kotlin) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
2025-08-14 17:41:59 +08:00
05bb77a793 Aggiorna README.md
Some checks are pending
Quality check / Flutter analysis (push) Waiting to run
Quality check / CodeQL analysis (java-kotlin) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-08-14 16:51:39 +08:00
2f0f3da2fa Aggiorna README.md
Some checks are pending
Quality check / Flutter analysis (push) Waiting to run
Quality check / CodeQL analysis (java-kotlin) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-08-14 16:44:51 +08:00
31f85c3e01 Aggiorna README.md
Some checks are pending
Quality check / Flutter analysis (push) Waiting to run
Quality check / CodeQL analysis (java-kotlin) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-08-14 16:41:04 +08:00
84a822022a Aggiorna README.md
Some checks are pending
Quality check / Flutter analysis (push) Waiting to run
Quality check / CodeQL analysis (java-kotlin) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-08-14 16:07:15 +08:00
94c83914a4 Aggiorna README.md
Some checks failed
Quality check / Flutter analysis (push) Has been cancelled
Quality check / CodeQL analysis (java-kotlin) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
2025-06-11 16:40:56 +08:00
a461e2c55f Aggiorna README.md
Some checks are pending
Quality check / Flutter analysis (push) Waiting to run
Quality check / CodeQL analysis (java-kotlin) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-06-11 16:40:17 +08:00
99c9f85eaf Aggiorna README.md
Some checks are pending
Quality check / Flutter analysis (push) Waiting to run
Quality check / CodeQL analysis (java-kotlin) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-06-11 16:39:24 +08:00
848ad5220e Aggiorna README.md
Some checks are pending
Quality check / Flutter analysis (push) Waiting to run
Quality check / CodeQL analysis (java-kotlin) (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
2025-06-11 16:38:06 +08:00
Thibault Deckers
7577466978 rescale large thumbnails decoded as is;
check thumbnail bitmap size before getting raw bytes
2025-06-10 20:45:59 +02:00
Thibault Deckers
dfcaf4d35a upgrades 2025-06-09 18:47:11 +02:00
Thibault Deckers
171394056f #1608 query bar unfocus when navigating away 2025-06-07 20:12:54 +02:00
dependabot[bot]
60211545e1
Bump github/codeql-action from 3.28.18 to 3.28.19 (#1604)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.18 to 3.28.19.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](ff0a06e83c...fca7ace96b)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-08 01:03:54 +09:00
Thibault Deckers
edbf9744f5 #1612 info: show matching dynamic albums 2025-06-07 18:03:32 +02:00
Thibault Deckers
d272c82454 version bump 2025-06-02 23:52:21 +02:00
Thibault Deckers
20b4f10b62 l10n 2025-06-02 23:48:57 +02:00
Weblate (bot)
3db0478be2
l10n by weblate (#1587)
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/my/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ne/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/or/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ur/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ar/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/az/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/bg/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/da/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/de/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/es/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/et/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hu/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/id/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/it/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ko/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/my/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/nl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pt/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ru/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sv/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/tr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/uk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/de/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/da/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/sat/
Translation: Aves/App - Android
Translation: Aves/App - Main
Translation: Aves/Store - Full description
Translation: Aves/Store - Short description

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 5FeetUnder <15950507+5FeetUnder@users.noreply.github.com>
Co-authored-by: AJ07 <AJ07@users.noreply.hosted.weblate.org>
Co-authored-by: Alireza Rashidi <alirezarashidigoorabi@gmail.com>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Bruno Fragoso <darth_signa@hotmail.com>
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Feliks-WR <aq.1428@tuta.io>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Jamil Farajov <jamilfarajov@gmail.com>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Miquel Martí <miquelmarti111@gmail.com>
Co-authored-by: Mohamed Zeroug <mzeroug19@gmail.com>
Co-authored-by: Murcielago <weblate.j9bmx@slmail.me>
Co-authored-by: Over Barrow <rawixo6748@insfou.com>
Co-authored-by: Petrov <i_v_c@mail.ru>
Co-authored-by: Prasannakumar T Bhat <pbhat99@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: Saúl Palacios <palacios22c@gmail.com>
Co-authored-by: Shift18 <bribable.lawyer@posteo.net>
Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Thibault Deckers <thibault.deckers@gmail.com>
Co-authored-by: Thit Lwin <thitlwincoder@gmail.com>
Co-authored-by: VertekPlus <vertekplus@users.noreply.hosted.weblate.org>
Co-authored-by: WMatheist <wmatheist@protonmail.com>
Co-authored-by: Whoever4976 <wolffjonas47@gmail.com>
Co-authored-by: Yurt Page <yurtpage@gmail.com>
Co-authored-by: bovirus <roberto.boriotti@canon.it>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: elid <shopisrael12@gmail.com>
Co-authored-by: hanyang cheng <cinxiafortis@tutanota.de>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: marciozomb13 <marciozomb13@outlook.com>
Co-authored-by: pitroig <ona@riseup.net>
Co-authored-by: rcasl <rcasl@outlook.com>
Co-authored-by: rehork <cooky@e.email>
Co-authored-by: slabs37 <p84haghi@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: syu_pf_ssy <syu.pf.ssy@outlook.com>
Co-authored-by: vesp <vesp@post.cz>
Co-authored-by: vm <varga.m007@gmail.com>
Co-authored-by: yangyangdaji <1504305527@qq.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic4@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2025-06-03 06:44:03 +09:00
Thibault Deckers
c9fd71056f removed obsolete plugin 2025-06-02 22:38:14 +02:00
Thibault Deckers
ca2d2c2026 format 2025-06-02 22:25:42 +02:00
Thibault Deckers
2e775b3906 prevent crash from security exception in media content listening 2025-06-02 22:19:51 +02:00
Thibault Deckers
ea3cb3c063 fixed crash when parsing some large media with trailing thumbnail 2025-06-02 19:45:11 +02:00
dependabot[bot]
340ed6a6d9
Bump ossf/scorecard-action from 2.4.1 to 2.4.2 (#1597)
Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.4.1 to 2.4.2.
- [Release notes](https://github.com/ossf/scorecard-action/releases)
- [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md)
- [Commits](f49aabe0b5...05b42c6244)

---
updated-dependencies:
- dependency-name: ossf/scorecard-action
  dependency-version: 2.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-03 02:26:28 +09:00
Thibault Deckers
5e0f0b59d8 prevent display orientation flip when device rotation is locked 2025-06-02 19:26:13 +02:00
Thibault Deckers
a0163001bd CI: ensure l10n files are generated 2025-06-02 00:03:47 +02:00
Thibault Deckers
1222a711e0 downgraded Flutter to stable v3.27.4 2025-06-01 20:57:46 +02:00
Thibault Deckers
8c3d0f1b83 fixed file extension loss on move via tree doc 2025-05-31 20:20:07 +02:00
Thibault Deckers
43cb2cd101 android: dependency upgrades 2025-05-31 18:28:50 +02:00
Thibault Deckers
81a2b84c9f app bar layout padding review 2025-05-30 18:03:29 +02:00
Thibault Deckers
bae6d2b7c4 #268 fixed loading group custom covers 2025-05-27 22:00:02 +02:00
Thibault Deckers
9a377ed7bc #268 albums: fixed hiding groups/dynamics when they are explicitly hidden 2025-05-27 19:50:28 +02:00
Thibault Deckers
1119fa1407 #268 groups: listening to source/dynamics to remove groups with obsolete content 2025-05-27 00:28:41 +02:00
Thibault Deckers
7b0f72d6ee chip cover detail layout fixes 2025-05-26 23:40:37 +02:00
Thibault Deckers
6f9a581d99 minor 2025-05-26 23:39:43 +02:00
Thibault Deckers
b6faf36671 l10n 2025-05-26 19:20:32 +02:00
dependabot[bot]
17f3ec437c
Bump github/codeql-action from 3.28.17 to 3.28.18 (#1561)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.17 to 3.28.18.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](60168efe1c...ff0a06e83c)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.18
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-27 02:18:56 +09:00
Weblate (bot)
3ec5b96bc9
l10n by weblate (#1559)
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/my/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ne/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/or/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ur/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ar/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/bg/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/da/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/de/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/es/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/et/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hu/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/id/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/it/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ko/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/my/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/nl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pt/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ru/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sv/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/tr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/uk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/de/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/da/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/sat/
Translation: Aves/App - Android
Translation: Aves/App - Main
Translation: Aves/Store - Full description
Translation: Aves/Store - Short description

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 5FeetUnder <15950507+5FeetUnder@users.noreply.github.com>
Co-authored-by: AJ07 <AJ07@users.noreply.hosted.weblate.org>
Co-authored-by: Alireza Rashidi <alirezarashidigoorabi@gmail.com>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Bruno Fragoso <darth_signa@hotmail.com>
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Feliks-WR <aq.1428@tuta.io>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Miquel Martí <miquelmarti111@gmail.com>
Co-authored-by: Mohamed Zeroug <mzeroug19@gmail.com>
Co-authored-by: Murcielago <weblate.j9bmx@slmail.me>
Co-authored-by: Over Barrow <rawixo6748@insfou.com>
Co-authored-by: Petrov <i_v_c@mail.ru>
Co-authored-by: Prasannakumar T Bhat <pbhat99@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: Saúl Palacios <palacios22c@gmail.com>
Co-authored-by: Shift18 <bribable.lawyer@posteo.net>
Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Thibault Deckers <thibault.deckers@gmail.com>
Co-authored-by: Thit Lwin <thitlwincoder@gmail.com>
Co-authored-by: VertekPlus <vertekplus@users.noreply.hosted.weblate.org>
Co-authored-by: WMatheist <wmatheist@protonmail.com>
Co-authored-by: Whoever4976 <wolffjonas47@gmail.com>
Co-authored-by: Yurt Page <yurtpage@gmail.com>
Co-authored-by: bovirus <roberto.boriotti@canon.it>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: elid <shopisrael12@gmail.com>
Co-authored-by: hanyang cheng <cinxiafortis@tutanota.de>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: marciozomb13 <marciozomb13@outlook.com>
Co-authored-by: pitroig <ona@riseup.net>
Co-authored-by: rcasl <rcasl@outlook.com>
Co-authored-by: rehork <cooky@e.email>
Co-authored-by: slabs37 <p84haghi@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: syu_pf_ssy <syu.pf.ssy@outlook.com>
Co-authored-by: vesp <vesp@post.cz>
Co-authored-by: vm <varga.m007@gmail.com>
Co-authored-by: yangyangdaji <1504305527@qq.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic4@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2025-05-27 02:18:12 +09:00
Thibault Deckers
540fbbc2b4 #268 clearer action name 2025-05-26 18:40:24 +02:00
Thibault Deckers
f355efefc1 fixed dependency 2025-05-23 19:40:34 +02:00
Thibault Deckers
3bcaab9a4b minor 2025-05-23 18:59:49 +02:00
Thibault Deckers
ef091b9932 #1576 fixed title sort wording 2025-05-20 18:54:26 +02:00
Thibault Deckers
33667e7e6e #1575 fixed home page when launching app as media picker 2025-05-19 22:53:22 +02:00
Thibault Deckers
2a3cce422b replaced flutter_markdown by flutter_markdown_plus 2025-05-14 23:01:11 +02:00
Thibault Deckers
e0af21f098 version bump 2025-05-14 22:18:09 +02:00
Weblate (bot)
8636e4b73e
l10n by weblate (#1556)
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ne/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/or/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ur/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ar/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/bg/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/da/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/de/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/es/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/et/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hu/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/id/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/it/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ko/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/nl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pt/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ru/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sv/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/tr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/uk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/de/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/da/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/sat/
Translation: Aves/App - Android
Translation: Aves/App - Main
Translation: Aves/Store - Full description
Translation: Aves/Store - Short description

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 5FeetUnder <15950507+5FeetUnder@users.noreply.github.com>
Co-authored-by: AJ07 <AJ07@users.noreply.hosted.weblate.org>
Co-authored-by: Alireza Rashidi <alirezarashidigoorabi@gmail.com>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Bruno Fragoso <darth_signa@hotmail.com>
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Feliks-WR <aq.1428@tuta.io>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Miquel Martí <miquelmarti111@gmail.com>
Co-authored-by: Mohamed Zeroug <mzeroug19@gmail.com>
Co-authored-by: Murcielago <weblate.j9bmx@slmail.me>
Co-authored-by: Over Barrow <rawixo6748@insfou.com>
Co-authored-by: Petrov <i_v_c@mail.ru>
Co-authored-by: Prasannakumar T Bhat <pbhat99@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: Saúl Palacios <palacios22c@gmail.com>
Co-authored-by: Shift18 <bribable.lawyer@posteo.net>
Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Thibault Deckers <thibault.deckers@gmail.com>
Co-authored-by: VertekPlus <vertekplus@users.noreply.hosted.weblate.org>
Co-authored-by: Whoever4976 <wolffjonas47@gmail.com>
Co-authored-by: Yurt Page <yurtpage@gmail.com>
Co-authored-by: bovirus <roberto.boriotti@canon.it>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: elid <shopisrael12@gmail.com>
Co-authored-by: hanyang cheng <cinxiafortis@tutanota.de>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: marciozomb13 <marciozomb13@outlook.com>
Co-authored-by: pitroig <ona@riseup.net>
Co-authored-by: rcasl <rcasl@outlook.com>
Co-authored-by: rehork <cooky@e.email>
Co-authored-by: slabs37 <p84haghi@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: syu_pf_ssy <syu.pf.ssy@outlook.com>
Co-authored-by: vesp <vesp@post.cz>
Co-authored-by: yangyangdaji <1504305527@qq.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic4@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2025-05-15 05:12:01 +09:00
Thibault Deckers
0ad4b2f16f albums: fixed positioning on group change 2025-05-14 22:10:51 +02:00
Thibault Deckers
df63f06897 albums: hide grouped albums containing hidden items only 2025-05-14 22:01:45 +02:00
Thibault Deckers
09df269ee0 albums: show groups to move/copy/export items 2025-05-14 21:52:21 +02:00
dependabot[bot]
39d7587ac9
Bump actions/dependency-review-action from 4.7.0 to 4.7.1 (#1557)
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.7.0 to 4.7.1.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](38ecb5b593...da24556b54)

---
updated-dependencies:
- dependency-name: actions/dependency-review-action
  dependency-version: 4.7.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-15 04:38:18 +09:00
Thibault Deckers
0f6a8230d8 version bump 2025-05-12 23:09:29 +02:00
Thibault Deckers
a6c1fd52a6 #1554 Collection: sort by storage path 2025-05-12 23:04:14 +02:00
Weblate (bot)
eaa4fe3317
l10n by weblate (#1555)
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ne/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/or/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ur/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ar/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/bg/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/da/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/de/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/es/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/et/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hu/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/id/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/it/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ko/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/nl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pt/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ru/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sv/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/tr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/uk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/de/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/da/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/sat/
Translation: Aves/App - Android
Translation: Aves/App - Main
Translation: Aves/Store - Full description
Translation: Aves/Store - Short description

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 5FeetUnder <15950507+5FeetUnder@users.noreply.github.com>
Co-authored-by: AJ07 <AJ07@users.noreply.hosted.weblate.org>
Co-authored-by: Alireza Rashidi <alirezarashidigoorabi@gmail.com>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Bruno Fragoso <darth_signa@hotmail.com>
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Feliks-WR <aq.1428@tuta.io>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Miquel Martí <miquelmarti111@gmail.com>
Co-authored-by: Mohamed Zeroug <mzeroug19@gmail.com>
Co-authored-by: Murcielago <weblate.j9bmx@slmail.me>
Co-authored-by: Over Barrow <rawixo6748@insfou.com>
Co-authored-by: Petrov <i_v_c@mail.ru>
Co-authored-by: Prasannakumar T Bhat <pbhat99@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: Saúl Palacios <palacios22c@gmail.com>
Co-authored-by: Shift18 <bribable.lawyer@posteo.net>
Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Thibault Deckers <thibault.deckers@gmail.com>
Co-authored-by: VertekPlus <vertekplus@users.noreply.hosted.weblate.org>
Co-authored-by: Whoever4976 <wolffjonas47@gmail.com>
Co-authored-by: Yurt Page <yurtpage@gmail.com>
Co-authored-by: bovirus <roberto.boriotti@canon.it>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: elid <shopisrael12@gmail.com>
Co-authored-by: hanyang cheng <cinxiafortis@tutanota.de>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: marciozomb13 <marciozomb13@outlook.com>
Co-authored-by: pitroig <ona@riseup.net>
Co-authored-by: rcasl <rcasl@outlook.com>
Co-authored-by: rehork <cooky@e.email>
Co-authored-by: slabs37 <p84haghi@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: syu_pf_ssy <syu.pf.ssy@outlook.com>
Co-authored-by: vesp <vesp@post.cz>
Co-authored-by: yangyangdaji <1504305527@qq.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic4@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2025-05-13 05:43:39 +09:00
Thibault Deckers
5358a38bd8 groups: scroll to top on group change 2025-05-12 21:22:29 +02:00
Thibault Deckers
244c1a293d groups: fixed default view selection when in group 2025-05-12 20:12:20 +02:00
Thibault Deckers
2ef03f1592 search: fixed query suggestions 2025-05-12 19:39:30 +02:00
Thibault Deckers
f2ef5c6f32 minor 2025-05-11 23:47:10 +02:00
Weblate (bot)
b582dbb3b2
l10n by weblate (#1551)
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ne/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/or/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ur/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ar/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/bg/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/da/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/de/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/es/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/et/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hu/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/id/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/it/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ko/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/nl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pt/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ru/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sv/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/tr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/uk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/de/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/da/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/sat/
Translation: Aves/App - Android
Translation: Aves/App - Main
Translation: Aves/Store - Full description
Translation: Aves/Store - Short description

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 5FeetUnder <15950507+5FeetUnder@users.noreply.github.com>
Co-authored-by: AJ07 <AJ07@users.noreply.hosted.weblate.org>
Co-authored-by: Alireza Rashidi <alirezarashidigoorabi@gmail.com>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Bruno Fragoso <darth_signa@hotmail.com>
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Feliks-WR <aq.1428@tuta.io>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Miquel Martí <miquelmarti111@gmail.com>
Co-authored-by: Mohamed Zeroug <mzeroug19@gmail.com>
Co-authored-by: Murcielago <weblate.j9bmx@slmail.me>
Co-authored-by: Over Barrow <rawixo6748@insfou.com>
Co-authored-by: Petrov <i_v_c@mail.ru>
Co-authored-by: Prasannakumar T Bhat <pbhat99@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: Saúl Palacios <palacios22c@gmail.com>
Co-authored-by: Shift18 <bribable.lawyer@posteo.net>
Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Thibault Deckers <thibault.deckers@gmail.com>
Co-authored-by: VertekPlus <vertekplus@users.noreply.hosted.weblate.org>
Co-authored-by: Whoever4976 <wolffjonas47@gmail.com>
Co-authored-by: Yurt Page <yurtpage@gmail.com>
Co-authored-by: bovirus <roberto.boriotti@canon.it>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: elid <shopisrael12@gmail.com>
Co-authored-by: hanyang cheng <cinxiafortis@tutanota.de>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: marciozomb13 <marciozomb13@outlook.com>
Co-authored-by: pitroig <ona@riseup.net>
Co-authored-by: rcasl <rcasl@outlook.com>
Co-authored-by: rehork <cooky@e.email>
Co-authored-by: slabs37 <p84haghi@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: syu_pf_ssy <syu.pf.ssy@outlook.com>
Co-authored-by: vesp <vesp@post.cz>
Co-authored-by: yangyangdaji <1504305527@qq.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2025-05-12 06:45:40 +09:00
dependabot[bot]
b864a4dae3
Bump actions/dependency-review-action from 4.6.0 to 4.7.0 (#1553)
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.6.0 to 4.7.0.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](ce3cf9537a...38ecb5b593)

---
updated-dependencies:
- dependency-name: actions/dependency-review-action
  dependency-version: 4.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-12 06:18:47 +09:00
Thibault Deckers
2b01fb41e2 #268 groups: import 2025-05-11 23:17:34 +02:00
Thibault Deckers
244217417b #268 groups: serialization 2025-05-11 23:10:31 +02:00
Thibault Deckers
651b5926dc #268 cover/pins/bookmarks sub to dynamics/groups; dynamics sub to groups;
container filter mixin;
debug: cover/dynamics dump;
2025-05-11 21:57:38 +02:00
Thibault Deckers
27879a900d group fab; prevent empty filter grid scroll 2025-05-06 22:45:03 +02:00
Thibault Deckers
4b87717cd2 #1549 week day filters 2025-05-05 23:12:23 +02:00
Thibault Deckers
91cfe01af3 l10n 2025-05-05 22:33:54 +02:00
Weblate (bot)
cb6ccab6ca
l10n by weblate (#1550)
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ne/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/or/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ur/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ar/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/bg/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/da/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/de/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/es/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/et/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hu/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/id/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/it/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ko/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/nl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pt/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ru/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sv/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/tr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/uk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/de/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/da/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/sat/
Translation: Aves/App - Android
Translation: Aves/App - Main
Translation: Aves/Store - Full description
Translation: Aves/Store - Short description

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 5FeetUnder <15950507+5FeetUnder@users.noreply.github.com>
Co-authored-by: AJ07 <AJ07@users.noreply.hosted.weblate.org>
Co-authored-by: Alireza Rashidi <alirezarashidigoorabi@gmail.com>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Bruno Fragoso <darth_signa@hotmail.com>
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Feliks-WR <aq.1428@tuta.io>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Miquel Martí <miquelmarti111@gmail.com>
Co-authored-by: Mohamed Zeroug <mzeroug19@gmail.com>
Co-authored-by: Over Barrow <rawixo6748@insfou.com>
Co-authored-by: Petrov <i_v_c@mail.ru>
Co-authored-by: Prasannakumar T Bhat <pbhat99@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: Saúl Palacios <palacios22c@gmail.com>
Co-authored-by: Shift18 <bribable.lawyer@posteo.net>
Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Thibault Deckers <thibault.deckers@gmail.com>
Co-authored-by: VertekPlus <vertekplus@users.noreply.hosted.weblate.org>
Co-authored-by: Whoever4976 <wolffjonas47@gmail.com>
Co-authored-by: Yurt Page <yurtpage@gmail.com>
Co-authored-by: bovirus <roberto.boriotti@canon.it>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: elid <shopisrael12@gmail.com>
Co-authored-by: hanyang cheng <cinxiafortis@tutanota.de>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: marciozomb13 <marciozomb13@outlook.com>
Co-authored-by: pitroig <ona@riseup.net>
Co-authored-by: rcasl <rcasl@outlook.com>
Co-authored-by: rehork <cooky@e.email>
Co-authored-by: slabs37 <p84haghi@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: syu_pf_ssy <syu.pf.ssy@outlook.com>
Co-authored-by: vesp <vesp@post.cz>
Co-authored-by: yangyangdaji <1504305527@qq.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2025-05-06 05:32:11 +09:00
Thibault Deckers
f04c55e901 ignore l10n gen files 2025-05-05 21:35:45 +02:00
Thibault Deckers
8e0c69cd66 removed l10n gen files from git 2025-05-05 21:28:20 +02:00
Thibault Deckers
c31b64535d #268 album grouping (WIP) 2025-05-05 19:14:40 +02:00
Thibault Deckers
89dee8d508 l10n 2025-05-05 19:10:20 +02:00
Weblate (bot)
93c2c7d34d
l10n by weblate (#1542)
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ne/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/or/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ur/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ar/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/bg/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/da/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/de/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/es/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/et/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hu/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/id/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/it/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ko/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/nl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pt/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ru/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sv/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/tr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/uk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/de/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/da/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/sat/
Translation: Aves/App - Android
Translation: Aves/App - Main
Translation: Aves/Store - Full description
Translation: Aves/Store - Short description

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 5FeetUnder <15950507+5FeetUnder@users.noreply.github.com>
Co-authored-by: AJ07 <AJ07@users.noreply.hosted.weblate.org>
Co-authored-by: Alireza Rashidi <alirezarashidigoorabi@gmail.com>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Bruno Fragoso <darth_signa@hotmail.com>
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Feliks-WR <aq.1428@tuta.io>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Miquel Martí <miquelmarti111@gmail.com>
Co-authored-by: Mohamed Zeroug <mzeroug19@gmail.com>
Co-authored-by: Over Barrow <rawixo6748@insfou.com>
Co-authored-by: Petrov <i_v_c@mail.ru>
Co-authored-by: Prasannakumar T Bhat <pbhat99@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: Saúl Palacios <palacios22c@gmail.com>
Co-authored-by: Shift18 <bribable.lawyer@posteo.net>
Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Thibault Deckers <thibault.deckers@gmail.com>
Co-authored-by: VertekPlus <vertekplus@users.noreply.hosted.weblate.org>
Co-authored-by: Whoever4976 <wolffjonas47@gmail.com>
Co-authored-by: bovirus <roberto.boriotti@canon.it>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: elid <shopisrael12@gmail.com>
Co-authored-by: hanyang cheng <cinxiafortis@tutanota.de>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: marciozomb13 <marciozomb13@outlook.com>
Co-authored-by: pitroig <ona@riseup.net>
Co-authored-by: rcasl <rcasl@outlook.com>
Co-authored-by: rehork <cooky@e.email>
Co-authored-by: slabs37 <p84haghi@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: syu_pf_ssy <syu.pf.ssy@outlook.com>
Co-authored-by: vesp <vesp@post.cz>
Co-authored-by: yangyangdaji <1504305527@qq.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2025-05-06 02:07:30 +09:00
dependabot[bot]
573b7c4593
Bump github/codeql-action from 3.28.16 to 3.28.17 (#1547)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.16 to 3.28.17.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](28deaeda66...60168efe1c)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 01:54:06 +09:00
Thibault Deckers
f9f21fbe76 l10n 2025-04-28 19:38:56 +02:00
dependabot[bot]
9cfb4436fa
Bump actions/attest-build-provenance from 2.2.3 to 2.3.0 (#1541)
Bumps [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance) from 2.2.3 to 2.3.0.
- [Release notes](https://github.com/actions/attest-build-provenance/releases)
- [Changelog](https://github.com/actions/attest-build-provenance/blob/main/RELEASE.md)
- [Commits](c074443f1a...db473fddc0)

---
updated-dependencies:
- dependency-name: actions/attest-build-provenance
  dependency-version: 2.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-29 02:32:26 +09:00
Weblate (bot)
925998b709
l10n by weblate (#1529)
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ne/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/or/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ur/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ar/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/bg/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/da/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/de/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/el/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/es/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/et/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fa/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hu/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/id/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/it/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ko/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/nl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pt/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ru/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sv/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/tr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/uk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/de/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/da/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/sat/
Translation: Aves/App - Android
Translation: Aves/App - Main
Translation: Aves/Store - Full description
Translation: Aves/Store - Short description

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 5FeetUnder <15950507+5FeetUnder@users.noreply.github.com>
Co-authored-by: AJ07 <AJ07@users.noreply.hosted.weblate.org>
Co-authored-by: Alireza Rashidi <alirezarashidigoorabi@gmail.com>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Bruno Fragoso <darth_signa@hotmail.com>
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Feliks-WR <aq.1428@tuta.io>
Co-authored-by: GiannosOB <giannos2105@gmail.com>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Mohamed Zeroug <mzeroug19@gmail.com>
Co-authored-by: Over Barrow <rawixo6748@insfou.com>
Co-authored-by: Petrov <i_v_c@mail.ru>
Co-authored-by: Prasannakumar T Bhat <pbhat99@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: Saúl Palacios <palacios22c@gmail.com>
Co-authored-by: Shift18 <bribable.lawyer@posteo.net>
Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Thibault Deckers <thibault.deckers@gmail.com>
Co-authored-by: VertekPlus <vertekplus@users.noreply.hosted.weblate.org>
Co-authored-by: Whoever4976 <wolffjonas47@gmail.com>
Co-authored-by: bovirus <roberto.boriotti@canon.it>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: elid <shopisrael12@gmail.com>
Co-authored-by: hanyang cheng <cinxiafortis@tutanota.de>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: marciozomb13 <marciozomb13@outlook.com>
Co-authored-by: pitroig <ona@riseup.net>
Co-authored-by: rcasl <rcasl@outlook.com>
Co-authored-by: rehork <cooky@e.email>
Co-authored-by: slabs37 <p84haghi@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: syu_pf_ssy <syu.pf.ssy@outlook.com>
Co-authored-by: vesp <vesp@post.cz>
Co-authored-by: yangyangdaji <1504305527@qq.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2025-04-29 02:27:28 +09:00
Thibault Deckers
a8bb2eb69f #1539 locked: review, prevent rename / metadata export 2025-04-27 23:42:40 +02:00
Thibault Deckers
bb6c2c341b revert to Skia rendering engine 2025-04-24 21:41:19 +02:00
dependabot[bot]
cbaaf2fd87
Bump actions/download-artifact from 4.2.1 to 4.3.0 (#1537)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.2.1 to 4.3.0.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](95815c38cf...d3f86a106a)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 4.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-25 02:29:44 +09:00
dependabot[bot]
e1fad28411
Bump github/codeql-action from 3.28.15 to 3.28.16 (#1536)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.15 to 3.28.16.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](45775bd823...28deaeda66)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.16
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-25 02:29:34 +09:00
dependabot[bot]
bb26b18017
Bump step-security/harden-runner from 2.11.1 to 2.12.0 (#1534)
Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.11.1 to 2.12.0.
- [Release notes](https://github.com/step-security/harden-runner/releases)
- [Commits](c6295a65d1...0634a2670c)

---
updated-dependencies:
- dependency-name: step-security/harden-runner
  dependency-version: 2.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-25 02:29:23 +09:00
Thibault Deckers
3a6ad33ea1 minor 2025-04-20 19:24:34 +02:00
Thibault Deckers
75421faf46 minor fix 2025-04-20 19:19:04 +02:00
Thibault Deckers
4df4738dd3 #1507 mime type normalization 2025-04-20 18:33:28 +02:00
Thibault Deckers
e8eae7e9db version bump 2025-04-16 23:37:06 +02:00
Thibault Deckers
f47cd57692 l10n 2025-04-16 23:34:30 +02:00
Weblate (bot)
bb332d5adf
l10n by weblate (#1523)
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ne/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/or/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ar/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/bg/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/da/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/de/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/es/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/et/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hu/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/id/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/it/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ko/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/nl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pt/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ru/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sv/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/tr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/uk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/de/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/da/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/sat/
Translation: Aves/App - Android
Translation: Aves/App - Main
Translation: Aves/Store - Full description
Translation: Aves/Store - Short description

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 5FeetUnder <15950507+5FeetUnder@users.noreply.github.com>
Co-authored-by: AJ07 <AJ07@users.noreply.hosted.weblate.org>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Bruno Fragoso <darth_signa@hotmail.com>
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Mohamed Zeroug <mzeroug19@gmail.com>
Co-authored-by: Over Barrow <rawixo6748@insfou.com>
Co-authored-by: Petrov <i_v_c@mail.ru>
Co-authored-by: Prasannakumar T Bhat <pbhat99@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: Saúl Palacios <palacios22c@gmail.com>
Co-authored-by: Shift18 <bribable.lawyer@posteo.net>
Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Thibault Deckers <thibault.deckers@gmail.com>
Co-authored-by: VertekPlus <vertekplus@users.noreply.hosted.weblate.org>
Co-authored-by: Whoever4976 <wolffjonas47@gmail.com>
Co-authored-by: bovirus <roberto.boriotti@canon.it>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: elid <shopisrael12@gmail.com>
Co-authored-by: hanyang cheng <cinxiafortis@tutanota.de>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: marciozomb13 <marciozomb13@outlook.com>
Co-authored-by: pitroig <ona@riseup.net>
Co-authored-by: rcasl <rcasl@outlook.com>
Co-authored-by: rehork <cooky@e.email>
Co-authored-by: syu_pf_ssy <syu.pf.ssy@outlook.com>
Co-authored-by: vesp <vesp@post.cz>
Co-authored-by: yangyangdaji <1504305527@qq.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2025-04-17 06:30:17 +09:00
Thibault Deckers
7f54befb72 #1527 fixed concurrent region decoder pool access 2025-04-16 21:08:09 +02:00
Thibault Deckers
af4ca96da8 #1513 albums: sort by path 2025-04-15 21:55:55 +02:00
Thibault Deckers
90d0256bf7 upgraded Flutter to stable v3.29.3 2025-04-14 20:29:56 +02:00
Thibault Deckers
353cde0ee8 #1493 analysis service: ensure init sequence, safer notification update 2025-04-13 22:14:05 +02:00
Thibault Deckers
63130de577 #1507 search: add mime type filters 2025-04-13 19:31:16 +02:00
Thibault Deckers
ad5a9c848d #1507 syntax for extension filtering in title filter 2025-04-13 19:02:29 +02:00
Thibault Deckers
be75d5a284 static analysis fixes 2025-04-13 19:01:31 +02:00
Thibault Deckers
0142ed7f4f l10n 2025-04-13 18:50:34 +02:00
Weblate (bot)
6c2db18af2
l10n by weblate (#1517)
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ne/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/or/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ar/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/bg/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/da/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/de/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/es/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/et/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/he/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hu/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/id/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/it/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ko/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/nl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pt/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ru/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sv/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/uk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/de/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/da/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/he/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/sat/
Translation: Aves/App - Android
Translation: Aves/App - Main
Translation: Aves/Store - Full description
Translation: Aves/Store - Short description

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 5FeetUnder <15950507+5FeetUnder@users.noreply.github.com>
Co-authored-by: AJ07 <AJ07@users.noreply.hosted.weblate.org>
Co-authored-by: Bruno Fragoso <darth_signa@hotmail.com>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Mohamed Zeroug <mzeroug19@gmail.com>
Co-authored-by: Over Barrow <rawixo6748@insfou.com>
Co-authored-by: Petrov <i_v_c@mail.ru>
Co-authored-by: Prasannakumar T Bhat <pbhat99@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: Saúl Palacios <palacios22c@gmail.com>
Co-authored-by: Shift18 <bribable.lawyer@posteo.net>
Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Thibault Deckers <thibault.deckers@gmail.com>
Co-authored-by: Whoever4976 <wolffjonas47@gmail.com>
Co-authored-by: bovirus <roberto.boriotti@canon.it>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: elid <shopisrael12@gmail.com>
Co-authored-by: hanyang cheng <cinxiafortis@tutanota.de>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: marciozomb13 <marciozomb13@outlook.com>
Co-authored-by: pitroig <ona@riseup.net>
Co-authored-by: rcasl <rcasl@outlook.com>
Co-authored-by: rehork <cooky@e.email>
Co-authored-by: syu_pf_ssy <syu.pf.ssy@outlook.com>
Co-authored-by: vesp <vesp@post.cz>
Co-authored-by: yangyangdaji <1504305527@qq.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2025-04-14 01:45:56 +09:00
dependabot[bot]
93e2b1d310
Bump github/codeql-action from 3.28.13 to 3.28.15 (#1519)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.13 to 3.28.15.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](1b549b9259...45775bd823)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.15
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 01:43:05 +09:00
dependabot[bot]
9baa4a0441
Bump actions/setup-java from 4.7.0 to 4.7.1 (#1520)
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.7.0 to 4.7.1.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](3a4f6e1af5...c5195efecf)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-version: 4.7.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 01:42:47 +09:00
Thibault Deckers
f123faeee8 use material symbols over material icons 2025-04-13 18:42:17 +02:00
Thibault Deckers
e3ece7425f version bump 2025-04-06 23:13:12 +02:00
Thibault Deckers
ff4c49718e removed DB upgrade temporary code for v1.12.4 users 2025-04-06 23:10:16 +02:00
Thibault Deckers
5598b0a69d l10n: kn 2025-04-06 23:02:40 +02:00
Thibault Deckers
dac91a2d1d l10n: kn 2025-04-06 21:44:41 +02:00
Weblate (bot)
759f666085
l10n by weblate (#1488)
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/or/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-android/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ar/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/bg/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/cs/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/da/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/de/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/es/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/et/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/fr/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/gl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/hu/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/id/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/is/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/it/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ja/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ko/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/nl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pl/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/pt/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ro/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ru/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/sv/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/uk/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/aves/app-main/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/de/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/fi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/hi/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-full-description/ta/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/ca/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/da/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/kn/
Translate-URL: https://hosted.weblate.org/projects/aves/store-short-description/sat/
Translation: Aves/App - Android
Translation: Aves/App - Main
Translation: Aves/Store - Full description
Translation: Aves/Store - Short description

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 5FeetUnder <15950507+5FeetUnder@users.noreply.github.com>
Co-authored-by: AJ07 <AJ07@users.noreply.hosted.weblate.org>
Co-authored-by: Bruno Fragoso <darth_signa@hotmail.com>
Co-authored-by: Igor Sorocean <sorocean.igor@gmail.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Josep M. Ferrer <txemaq@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Milan Šalka <salka.milan@googlemail.com>
Co-authored-by: Mohamed Zeroug <mzeroug19@gmail.com>
Co-authored-by: Petrov <i_v_c@mail.ru>
Co-authored-by: Prasannakumar T Bhat <pbhat99@gmail.com>
Co-authored-by: Priit Jõerüüt <hwlate@joeruut.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Ricky Tigg <ricky.tigg@gmail.com>
Co-authored-by: Saúl Palacios <palacios22c@gmail.com>
Co-authored-by: Shift18 <bribable.lawyer@posteo.net>
Co-authored-by: Stephan Paternotte <stephan@paternottes.net>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Thibault Deckers <thibault.deckers@gmail.com>
Co-authored-by: Whoever4976 <wolffjonas47@gmail.com>
Co-authored-by: bovirus <roberto.boriotti@canon.it>
Co-authored-by: cat <catsnote@proton.me>
Co-authored-by: hanyang cheng <cinxiafortis@tutanota.de>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: marciozomb13 <marciozomb13@outlook.com>
Co-authored-by: pitroig <ona@riseup.net>
Co-authored-by: rcasl <rcasl@outlook.com>
Co-authored-by: rehork <cooky@e.email>
Co-authored-by: syu_pf_ssy <syu.pf.ssy@outlook.com>
Co-authored-by: vesp <vesp@post.cz>
Co-authored-by: yangyangdaji <1504305527@qq.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Максим Горпиніч <maksimgorpinic2005a@gmail.com>
Co-authored-by: தமிழ்நேரம் <anishprabu.t@gmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2025-04-07 02:17:09 +09:00
Thibault Deckers
c89441bb78 enable Impeller rendering engine 2025-04-06 17:56:52 +02:00
Thibault Deckers
969187444b viewer: improved video controller disposing 2025-04-03 22:59:48 +02:00
Thibault Deckers
1fd3d77bf9 fetch encoded bytes for video cover 2025-04-03 22:58:23 +02:00
Thibault Deckers
32202cc603 viewer: reduced tile area overflow 2025-04-02 23:31:16 +02:00
Thibault Deckers
bce7009ab0 upgrades 2025-04-02 23:28:51 +02:00
dependabot[bot]
b00b17a473
Bump step-security/harden-runner from 2.11.0 to 2.11.1 (#1508)
Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.11.0 to 2.11.1.
- [Release notes](https://github.com/step-security/harden-runner/releases)
- [Commits](4d991eb9b9...c6295a65d1)

---
updated-dependencies:
- dependency-name: step-security/harden-runner
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-03 06:14:53 +09:00
dependabot[bot]
8be5b8d9c5
Bump actions/dependency-review-action from 4.5.0 to 4.6.0 (#1506)
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.5.0 to 4.6.0.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](3b139cfc5f...ce3cf9537a)

---
updated-dependencies:
- dependency-name: actions/dependency-review-action
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-03 06:14:38 +09:00
Thibault Deckers
503757da0e svg decoder pool 2025-04-02 23:14:09 +02:00
Thibault Deckers
85a1b33e83 debug: glide sizing, memory cache clear 2025-04-02 22:30:40 +02:00
Thibault Deckers
022ad0334e debug: custom flutter image cache size 2025-04-01 23:39:11 +02:00
Thibault Deckers
e09b3e4440 region decoder pool 2025-04-01 23:38:41 +02:00
Thibault Deckers
409d80df4e terms txt version for play store 2025-03-27 23:18:00 +01:00
Thibault Deckers
a6ae2fd4cb terms html version for play store 2025-03-27 23:10:02 +01:00
Thibault Deckers
59aa75e46c upgrades 2025-03-26 18:17:49 +01:00
395 changed files with 7134 additions and 129404 deletions

@ -1 +1 @@
Subproject commit c23637390482d4cf9598c3ce3f2be31aa7332daf
Subproject commit d8a9f9a52e5af486f80d932e838ee93861ffd863

View file

@ -17,11 +17,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0
with:
egress-policy: audit
- name: 'Checkout Repository'
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: 'Dependency Review'
uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0
uses: actions/dependency-review-action@da24556b548a50705dd671f47852072ea4c105d9 # v4.7.1

View file

@ -18,7 +18,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0
with:
egress-policy: audit
@ -28,6 +28,9 @@ jobs:
- name: Get Flutter packages
run: ./flutterw pub get
- name: Generate app localizations
run: ./flutterw gen-l10n
- name: Static analysis.
run: ./flutterw analyze
@ -52,14 +55,14 @@ jobs:
build-mode: manual
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0
with:
egress-policy: audit
# Building relies on the Android Gradle plugin,
# which requires a modern Java version (not the default one).
- name: Set up JDK for Android Gradle plugin
uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
distribution: 'temurin'
java-version: '21'
@ -69,7 +72,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3.28.13
uses: github/codeql-action/init@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
@ -83,6 +86,6 @@ jobs:
./flutterw build apk --profile -t lib/main_play.dart --flavor play
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3.28.13
uses: github/codeql-action/analyze@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19
with:
category: "/language:${{matrix.language}}"

View file

@ -18,14 +18,14 @@ jobs:
id-token: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0
with:
egress-policy: audit
# Building relies on the Android Gradle plugin,
# which requires a modern Java version (not the default one).
- name: Set up JDK for Android Gradle plugin
uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
distribution: 'temurin'
java-version: '21'
@ -36,6 +36,9 @@ jobs:
- name: Get Flutter packages
run: ./flutterw pub get
- name: Generate app localizations
run: ./flutterw gen-l10n
- name: Update Flutter version file
run: scripts/update_flutter_version.sh
@ -75,7 +78,7 @@ jobs:
AVES_GOOGLE_API_KEY: ${{ secrets.AVES_GOOGLE_API_KEY }}
- name: Generate artifact attestation
uses: actions/attest-build-provenance@c074443f1aee8d4aeeae555aebba3282517141b2 # v2.2.3
uses: actions/attest-build-provenance@db473fddc028af60658334401dc6fa3ffd8669fd # v2.3.0
with:
subject-path: 'outputs/*'
@ -98,7 +101,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0
with:
egress-policy: audit
@ -106,7 +109,7 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Get appbundle from artifacts
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: appbundle

View file

@ -31,7 +31,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0
with:
egress-policy: audit
@ -41,7 +41,7 @@ jobs:
persist-credentials: false
- name: "Run analysis"
uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1
uses: ossf/scorecard-action@05b42c624433fc40578a4040d5cf5e36ddca8cde # v2.4.2
with:
results_file: results.sarif
results_format: sarif
@ -71,6 +71,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3.28.13
uses: github/codeql-action/upload-sarif@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19
with:
sarif_file: results.sarif

3
.gitignore vendored
View file

@ -47,3 +47,6 @@ app.*.map.json
# screenshot generation
/test_driver/assets/screenshots/
/screenshots/
# generated files
/lib/l10ngen/app_localizations*

View file

@ -4,6 +4,77 @@ All notable changes to this project will be documented in this file.
## <a id="unreleased"></a>[Unreleased]
### Added
- Info: show matching dynamic albums
### Fixed
- crash when decoding some large thumbnails
## <a id="v1.13.2"></a>[v1.13.2] - 2025-06-02
### Changed
- downgraded Flutter to stable v3.27.4
- prevent display orientation flip when device rotation is locked
### Fixed
- moved file losing its extension and no longer being detected as media in some cases
- opening home when launching app as media picker
- removing groups with obsolete albums
- loading group custom covers
- crash when parsing some large media with trailing thumbnail
## <a id="v1.13.1"></a>[v1.13.1] - 2025-05-14
### Fixed
- albums: show groups to move/copy/export items
- albums: hide grouped albums containing hidden items only
## <a id="v1.13.0"></a>[v1.13.0] - 2025-05-12
### Added
- Albums: groups
- Collection: sort by storage path
- Search: week day filters
### Changed
- revert to Skia rendering engine
## <a id="v1.12.10"></a>[v1.12.10] - 2025-04-16
### Added
- Search: format filters
- Albums: sort by path
### Changed
- upgraded Flutter to stable v3.29.3
### Fixed
- region decoding failing to access decoder pool
## <a id="v1.12.9"></a>[v1.12.9] - 2025-04-06
### Added
- Kannada translation (thanks Chethan, Prasannakumar T Bhat)
### Changed
- enable Impeller rendering engine
### Fixed
- memory pressure during browsing
## <a id="v1.12.8"></a>[v1.12.8] - 2025-03-25
### Fixed

View file

@ -111,17 +111,96 @@ Some users have expressed the wish to financially support the project. Thanks!
## Project Setup
### Install dependencies
Before running or building the app, update the dependencies for the desired flavor:
```
# scripts/apply_flavor_play.sh
scripts/apply_flavor_play.sh
```
To build the project, create a file named `<app dir>/android/key.properties`. It should contain a reference to a keystore for app signing, and other necessary credentials. See [key_template.properties](https://github.com/deckerst/aves/blob/develop/android/key_template.properties) for the expected keys.
To run the app:
### To run the app:
```
# ./flutterw run -t lib/main_play.dart --flavor play
./flutterw run -t lib/main_play.dart --flavor play
```
### To build the app:
creare file con le tue credenziali file.keystore
dove YOUR_ALIAS_NAME è il tuo unico alias name
e YOUR_ALIAS_PWD è la password del tuo alias
```sh
keytool -genkey -v -keystore file.keystore -alias YOUR_ALIAS_NAME -storepass YOUR_ALIAS_PWD -keypass YOUR_ALIAS_PWD -keyalg RSA -validity 36500
```
in questo caso ho inserito
```sh
cd android
keytool -genkey -v -keystore file.keystore -alias FabioMich66 -storepass Master66 -keypass Master66 -keyalg RSA -validity 36500
```
se non puoi eseguire keytool perchè non è nel path di sistema cercalo usando
```sh
cd /
sudo find -name keytool
```
compilare il file `<app dir>/android/key.properties`
```
nano android/key.properties
```
questi i miei dati utilizzando il format key_template.properties
```
storeFile=/Users/fabio/flutter_apps/aves/android/file.keystore
storePassword=Master66
keyAlias=FabioMich66
keyPassword=Master66
googleApiKey=<GOOGLE_API_KEY>
```
infine compilare l'apk
```
./flutterw build apk -t lib/main_play.dart --flavor play
```
[Version badge]: https://img.shields.io/github/v/release/deckerst/aves?include_prereleases&sort=semver
[Build badge]: https://img.shields.io/github/actions/workflow/status/deckerst/aves/quality-check.yml?branch=develop
## Android studio
caricare il file da github selezionando le mnù a tendina File-New-project from Version Control
selezionare version control tipo: git
inserire URL di aves
https://github.com/deckerst/aves
flaggare shallow clone with history troncated 1 commits
aprire la console sulla dir aves appena creata e caricare le dipendenze
```
scripts/apply_flavor_izzy.sh
```
in settings - Languages and Framework - Dart inserire il path
```
/home/fabio/flutter/bin/cache/
```
e spuntare project aves
Edit configurations e aggiungere shell script con un nome x es izzi
poi flaggare script text e inserire
./flutterw run -t lib/main_izzy.dart --flavor izzy
la working directory sarà una cosa così
/home/fabio/StudioProjects/aves

View file

@ -9,6 +9,11 @@ analyzer:
# implicit-casts: false
# implicit-dynamic: false
# cf https://github.com/dart-lang/dart_style/wiki/Configuration
formatter:
page_width: 240
trailing_commas: preserve
linter:
rules:
# from 'flutter_lints', excluded

1
android/.gitignore vendored
View file

@ -7,6 +7,7 @@ gradle-wrapper.jar
GeneratedPluginRegistrant.java
.cxx/
.kotlin/
/build/
# Remember to never publicly share your keystore.
# See https://flutter.dev/to/reference-keystore

View file

@ -33,13 +33,13 @@ kotlin {
}
android {
namespace 'deckers.thibault.aves'
compileSdk 35
namespace = 'deckers.thibault.aves'
compileSdk = 36
defaultConfig {
applicationId packageName
minSdk flutter.minSdkVersion
targetSdk 35
targetSdk 36
versionCode flutter.versionCode
versionName flutter.versionName
manifestPlaceholders = [googleApiKey: keystoreProperties["googleApiKey"] ?: "<NONE>"]
@ -134,14 +134,14 @@ flutter {
repositories {
maven {
url 'https://jitpack.io'
url = 'https://jitpack.io'
content {
includeGroup "com.github.deckerst"
includeGroup "com.github.deckerst.mp4parser"
}
}
maven {
url 'https://s3.amazonaws.com/repo.commonsware.com'
url = 'https://s3.amazonaws.com/repo.commonsware.com'
content {
excludeGroupByRegex "com\\.github\\.deckerst.*"
}
@ -149,36 +149,36 @@ repositories {
}
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2'
implementation "androidx.appcompat:appcompat:1.7.0"
implementation 'androidx.core:core-ktx:1.15.0'
implementation 'androidx.lifecycle:lifecycle-process:2.8.7'
implementation "androidx.appcompat:appcompat:1.7.1"
implementation 'androidx.core:core-ktx:1.16.0'
implementation 'androidx.lifecycle:lifecycle-process:2.9.1'
implementation 'androidx.media:media:1.7.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.security:security-crypto:1.1.0-alpha06'
implementation 'androidx.work:work-runtime-ktx:2.10.0'
implementation 'androidx.security:security-crypto:1.1.0-beta01'
implementation 'androidx.work:work-runtime-ktx:2.10.1'
implementation 'com.commonsware.cwac:document:0.5.0'
implementation 'com.drewnoakes:metadata-extractor:2.19.0'
implementation "com.github.bumptech.glide:glide:$glide_version"
implementation 'com.google.android.material:material:1.12.0'
// SLF4J implementation for `mp4parser`
implementation 'org.slf4j:slf4j-simple:2.0.16'
implementation 'org.slf4j:slf4j-simple:2.0.17'
// forked, built by JitPack:
// - https://jitpack.io/p/deckerst/Android-TiffBitmapFactory
// - https://jitpack.io/p/deckerst/androidsvg
// - https://jitpack.io/p/deckerst/mp4parser
// - https://jitpack.io/p/deckerst/pixymeta-android
implementation 'com.github.deckerst:Android-TiffBitmapFactory:3ed067f021'
implementation 'com.github.deckerst:androidsvg:cc9d59a88f'
implementation 'com.github.deckerst.mp4parser:isoparser:d5caf7a3dd'
implementation 'com.github.deckerst.mp4parser:muxer:d5caf7a3dd'
implementation 'com.github.deckerst:pixymeta-android:71eee77dc4'
implementation 'com.github.deckerst:Android-TiffBitmapFactory:d6b2b0aa4f'
implementation 'com.github.deckerst:androidsvg:67db933051'
implementation 'com.github.deckerst.mp4parser:isoparser:c2898f1832'
implementation 'com.github.deckerst.mp4parser:muxer:c2898f1832'
implementation 'com.github.deckerst:pixymeta-android:cb1cdc932e'
implementation project(':exifinterface')
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.11.4'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.13.1'
kapt 'androidx.annotation:annotation:1.9.1'
ksp "com.github.bumptech.glide:ksp:$glide_version"

View file

@ -329,10 +329,6 @@
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<!--
Screenshot driver scenario is not supported by Impeller: "Compressed screenshots not supported for Impeller".
As of Flutter v3.29.2, switching pages with alpha transition yields artifacts when Impeller is enabled.
-->
<meta-data
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="false" />

View file

@ -14,6 +14,7 @@ import androidx.work.ForegroundInfo
import androidx.work.WorkManager
import androidx.work.WorkerParameters
import app.loup.streams_channel.StreamsChannel
import deckers.thibault.aves.channel.calls.Coresult.Companion.safeSuspend
import deckers.thibault.aves.channel.calls.DeviceHandler
import deckers.thibault.aves.channel.calls.GeocodingHandler
import deckers.thibault.aves.channel.calls.MediaFetchObjectHandler
@ -44,11 +45,12 @@ class AnalysisWorker(context: Context, parameters: WorkerParameters) : Coroutine
private var backgroundChannel: MethodChannel? = null
override suspend fun doWork(): Result {
Log.i(LOG_TAG, "Start analysis worker $id")
defaultScope.launch {
// prevent ANR triggered by slow operations in main thread
createNotificationChannel()
setForeground(createForegroundInfo())
}
}.join()
suspendCoroutine { cont ->
workCont = cont
onStart()
@ -68,7 +70,6 @@ class AnalysisWorker(context: Context, parameters: WorkerParameters) : Coroutine
}
private fun onStart() {
Log.i(LOG_TAG, "Start analysis worker $id")
runBlocking {
FlutterUtils.initFlutterEngine(applicationContext, SHARED_PREFERENCES_KEY, PREF_CALLBACK_HANDLE_KEY) {
flutterEngine = it
@ -132,12 +133,7 @@ class AnalysisWorker(context: Context, parameters: WorkerParameters) : Coroutine
result.success(null)
}
"updateNotification" -> {
val title = call.argument<String>("title")
val message = call.argument<String>("message")
setForegroundAsync(createForegroundInfo(title, message))
result.success(null)
}
"updateNotification" -> defaultScope.launch { safeSuspend(call, result, ::updateNotification) }
"stop" -> {
workCont?.resume(null)
@ -180,17 +176,22 @@ class AnalysisWorker(context: Context, parameters: WorkerParameters) : Coroutine
.setContentIntent(openAppIntent)
.addAction(stopAction)
.build()
return if (Build.VERSION.SDK_INT == 34) {
// from Android 14 (API 34), foreground service type is mandatory for long-running workers:
// https://developer.android.com/guide/background/persistent/how-to/long-running
ForegroundInfo(NOTIFICATION_ID, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC)
} else if (Build.VERSION.SDK_INT >= 35) {
ForegroundInfo(NOTIFICATION_ID, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING)
} else {
ForegroundInfo(NOTIFICATION_ID, notification)
// from Android 14 (API 34), foreground service type is mandatory for long-running workers:
// https://developer.android.com/guide/background/persistent/how-to/long-running
return when {
Build.VERSION.SDK_INT >= 35 -> ForegroundInfo(NOTIFICATION_ID, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING)
Build.VERSION.SDK_INT == 34 -> ForegroundInfo(NOTIFICATION_ID, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC)
else -> ForegroundInfo(NOTIFICATION_ID, notification)
}
}
private suspend fun updateNotification(call: MethodCall, result: MethodChannel.Result) {
val title = call.argument<String>("title")
val message = call.argument<String>("message")
setForeground(createForegroundInfo(title, message))
result.success(null)
}
companion object {
private val LOG_TAG = LogUtils.createTag<AnalysisWorker>()
private const val BACKGROUND_CHANNEL = "deckers.thibault/aves/analysis_service_background"

View file

@ -2,6 +2,7 @@ package deckers.thibault.aves.channel.calls
import android.app.ActivityManager
import android.content.Context
import androidx.core.content.edit
import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkInfo
@ -18,7 +19,6 @@ import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
class AnalysisHandler(private val activity: FlutterFragmentActivity, private val onAnalysisCompleted: () -> Unit) : MethodChannel.MethodCallHandler {
private val ioScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
@ -38,9 +38,8 @@ class AnalysisHandler(private val activity: FlutterFragmentActivity, private val
}
val preferences = activity.getSharedPreferences(AnalysisWorker.SHARED_PREFERENCES_KEY, Context.MODE_PRIVATE)
with(preferences.edit()) {
preferences.edit {
putLong(AnalysisWorker.PREF_CALLBACK_HANDLE_KEY, callbackHandle)
apply()
}
result.success(true)
}
@ -69,9 +68,8 @@ class AnalysisHandler(private val activity: FlutterFragmentActivity, private val
// work `Data` cannot occupy more than 10240 bytes when serialized
// so we save the possibly long list of entry IDs to shared preferences
val preferences = activity.getSharedPreferences(AnalysisWorker.SHARED_PREFERENCES_KEY, Context.MODE_PRIVATE)
with(preferences.edit()) {
preferences.edit {
putStringSet(AnalysisWorker.PREF_ENTRY_IDS_KEY, allEntryIds?.map { it.toString() }?.toSet())
apply()
}
val workData = workDataOf(

View file

@ -1,5 +1,6 @@
package deckers.thibault.aves.channel.calls
import android.annotation.SuppressLint
import android.app.LocaleConfig
import android.app.LocaleManager
import android.content.Context
@ -102,6 +103,7 @@ class DeviceHandler(private val context: Context) : MethodCallHandler {
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
@SuppressLint("WrongConstant")
val lm = context.getSystemService(Context.LOCALE_SERVICE) as? LocaleManager
lm?.overrideLocaleConfig = LocaleConfig(LocaleList.forLanguageTags(locales.joinToString(",")))
}

View file

@ -311,7 +311,7 @@ class EmbeddedDataHandler(private val context: Context) : MethodCallHandler {
embeddedByteStream: InputStream,
embeddedByteLength: Long,
) {
val extension = extensionFor(mimeType)
val extension = extensionFor(mimeType, defaultExtension = null)
val targetFile = StorageUtils.createTempFile(context, extension).apply {
transferFrom(embeddedByteStream, embeddedByteLength)
}
@ -319,7 +319,7 @@ class EmbeddedDataHandler(private val context: Context) : MethodCallHandler {
val authority = "${context.applicationContext.packageName}.file_provider"
val uri = if (displayName != null) {
// add extension to ease type identification when sharing this content
val displayNameWithExtension = if (extension == null || displayName.endsWith(extension, ignoreCase = true)) {
val displayNameWithExtension = if (displayName.endsWith(extension, ignoreCase = true)) {
displayName
} else {
"$displayName$extension"

View file

@ -31,7 +31,7 @@ class GeocodingHandler(private val context: Context) : MethodCallHandler {
private fun getAddress(call: MethodCall, result: MethodChannel.Result) {
val latitude = call.argument<Number>("latitude")?.toDouble()
val longitude = call.argument<Number>("longitude")?.toDouble()
val localeString = call.argument<String>("locale")
val localeLanguageTag = call.argument<String>("localeLanguageTag")
val maxResults = call.argument<Int>("maxResults") ?: 1
if (latitude == null || longitude == null) {
result.error("getAddress-args", "missing arguments", null)
@ -43,11 +43,8 @@ class GeocodingHandler(private val context: Context) : MethodCallHandler {
return
}
geocoder = geocoder ?: if (localeString != null) {
val split = localeString.split("_")
val language = split[0]
val country = if (split.size > 1) split[1] else ""
Geocoder(context, Locale(language, country))
geocoder = geocoder ?: if (localeLanguageTag != null) {
Geocoder(context, Locale.forLanguageTag(localeLanguageTag))
} else {
Geocoder(context)
}

View file

@ -1,6 +1,7 @@
package deckers.thibault.aves.channel.calls
import android.content.Context
import androidx.core.content.edit
import deckers.thibault.aves.SearchSuggestionsProvider
import deckers.thibault.aves.channel.calls.Coresult.Companion.safe
import io.flutter.plugin.common.MethodCall
@ -29,9 +30,8 @@ class GlobalSearchHandler(private val context: Context) : MethodCallHandler {
}
val preferences = context.getSharedPreferences(SearchSuggestionsProvider.SHARED_PREFERENCES_KEY, Context.MODE_PRIVATE)
with(preferences.edit()) {
preferences.edit {
putLong(SearchSuggestionsProvider.CALLBACK_HANDLE_KEY, callbackHandle)
apply()
}
result.success(true)
}

View file

@ -1,6 +1,8 @@
package deckers.thibault.aves.channel.calls
import android.content.Context
import android.os.Handler
import android.os.Looper
import androidx.core.net.toUri
import com.bumptech.glide.Glide
import deckers.thibault.aves.channel.calls.Coresult.Companion.safe
@ -21,7 +23,8 @@ class MediaFetchObjectHandler(private val context: Context) : MethodCallHandler
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
when (call.method) {
"getEntry" -> ioScope.launch { safe(call, result, ::getEntry) }
"clearSizedThumbnailDiskCache" -> ioScope.launch { safe(call, result, ::clearSizedThumbnailDiskCache) }
"clearImageDiskCache" -> ioScope.launch { safe(call, result, ::clearImageDiskCache) }
"clearImageMemoryCache" -> ioScope.launch { safe(call, result, ::clearImageMemoryCache) }
else -> result.notImplemented()
}
}
@ -47,11 +50,18 @@ class MediaFetchObjectHandler(private val context: Context) : MethodCallHandler
})
}
private fun clearSizedThumbnailDiskCache(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
private fun clearImageDiskCache(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
Glide.get(context).clearDiskCache()
result.success(null)
}
private fun clearImageMemoryCache(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
Handler(Looper.getMainLooper()).post {
Glide.get(context).clearMemory()
}
result.success(null)
}
companion object {
const val CHANNEL = "deckers.thibault/aves/media_fetch_object"
}

View file

@ -1007,7 +1007,7 @@ class MetadataFetchHandler(private val context: Context) : MethodCallHandler {
result.success(metadataMap)
}
// return description from these fields (by precedence):
// returns description from these fields (by precedence):
// - XMP / dc:description
// - IPTC / caption-abstract
// - Exif / UserComment
@ -1192,8 +1192,8 @@ class MetadataFetchHandler(private val context: Context) : MethodCallHandler {
result.success(null)
}
// return XMP components
// return an empty list if there is no XMP
// returns XMP components
// returns an empty list if there is no XMP
private fun getXmp(call: MethodCall, result: MethodChannel.Result) {
val mimeType = call.argument<String>("mimeType")
val uri = call.argument<String>("uri")?.toUri()

View file

@ -2,6 +2,7 @@ package deckers.thibault.aves.channel.calls
import android.content.Context
import android.content.SharedPreferences
import androidx.core.content.edit
import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKey
import deckers.thibault.aves.channel.calls.Coresult.Companion.safe
@ -45,7 +46,7 @@ class SecurityHandler(private val context: Context) : MethodCallHandler {
}
val preferences = getStore()
with(preferences.edit()) {
preferences.edit {
when (value) {
is Boolean -> putBoolean(key, value)
is Float -> putFloat(key, value)
@ -58,7 +59,6 @@ class SecurityHandler(private val context: Context) : MethodCallHandler {
return
}
}
apply()
}
result.success(true)
}

View file

@ -20,6 +20,8 @@ import deckers.thibault.aves.utils.MemoryUtils
import deckers.thibault.aves.utils.MimeTypes
import deckers.thibault.aves.utils.StorageUtils
import io.flutter.plugin.common.MethodChannel
import java.util.concurrent.locks.ReentrantLock
import kotlin.concurrent.withLock
import kotlin.math.max
import kotlin.math.roundToInt
@ -29,11 +31,7 @@ import kotlin.math.roundToInt
class RegionFetcher internal constructor(
private val context: Context,
) {
private var lastDecoderRef: LastDecoderRef? = null
private val exportUris = HashMap<Pair<Uri, Int?>, Uri>()
// return decoded bytes in ARGB_8888, with trailer bytes:
// returns decoded bytes in ARGB_8888, with trailer bytes:
// - width (int32)
// - height (int32)
fun fetch(
@ -63,24 +61,12 @@ class RegionFetcher internal constructor(
return
}
var currentDecoderRef = lastDecoderRef
if (currentDecoderRef != null && currentDecoderRef.requestKey != requestKey) {
currentDecoderRef = null
}
try {
if (currentDecoderRef == null) {
val newDecoder = StorageUtils.openInputStream(context, uri)?.use { input ->
BitmapRegionDecoderCompat.newInstance(input)
}
if (newDecoder == null) {
result.error("fetch-read-null", "failed to open file for mimeType=$mimeType uri=$uri regionRect=$regionRect", null)
return
}
currentDecoderRef = LastDecoderRef(requestKey, newDecoder)
val decoder = getOrCreateDecoder(context, uri, requestKey)
if (decoder == null) {
result.error("fetch-read-null", "failed to open file for mimeType=$mimeType uri=$uri regionRect=$regionRect", null)
return
}
val decoder = currentDecoderRef.decoder
lastDecoderRef = currentDecoderRef
// with raw images, the known image size may not match the decoded image size
// so we scale the requested region accordingly
@ -180,7 +166,7 @@ class RegionFetcher internal constructor(
}
}
private data class LastDecoderRef(
private data class DecoderRef(
val requestKey: Pair<Uri, Int?>,
val decoder: BitmapRegionDecoder,
)
@ -188,5 +174,32 @@ class RegionFetcher internal constructor(
companion object {
private val LOG_TAG = LogUtils.createTag<RegionFetcher>()
private val PREFERRED_CONFIG = Bitmap.Config.ARGB_8888
private const val DECODER_POOL_SIZE = 3
private val decoderPool = ArrayList<DecoderRef>()
private val exportUris = HashMap<Pair<Uri, Int?>, Uri>()
private val poolLock = ReentrantLock()
private fun getOrCreateDecoder(context: Context, uri: Uri, requestKey: Pair<Uri, Int?>): BitmapRegionDecoder? {
poolLock.withLock {
var decoderRef = decoderPool.firstOrNull { it.requestKey == requestKey }
if (decoderRef == null) {
val newDecoder = StorageUtils.openInputStream(context, uri)?.use { input ->
BitmapRegionDecoderCompat.newInstance(input)
}
if (newDecoder == null) {
return null
}
decoderRef = DecoderRef(requestKey, newDecoder)
} else {
decoderPool.remove(decoderRef)
}
decoderPool.add(0, decoderRef)
while (decoderPool.size > DECODER_POOL_SIZE) {
decoderPool.removeAt(decoderPool.size - 1)
}
return decoderRef.decoder
}
}
}
}

View file

@ -17,13 +17,13 @@ import deckers.thibault.aves.utils.BitmapUtils
import deckers.thibault.aves.utils.MemoryUtils
import deckers.thibault.aves.utils.StorageUtils
import io.flutter.plugin.common.MethodChannel
import java.util.concurrent.locks.ReentrantLock
import kotlin.concurrent.withLock
import kotlin.math.ceil
class SvgRegionFetcher internal constructor(
private val context: Context,
) {
private var lastSvgRef: LastSvgRef? = null
fun fetch(
uri: Uri,
sizeBytes: Long?,
@ -39,32 +39,12 @@ class SvgRegionFetcher internal constructor(
return
}
var currentSvgRef = lastSvgRef
if (currentSvgRef != null && currentSvgRef.uri != uri) {
currentSvgRef = null
}
try {
if (currentSvgRef == null) {
val newSvg = StorageUtils.openInputStream(context, uri)?.use { input ->
try {
SVG.getFromInputStream(SVGParserBufferedInputStream(input))
} catch (ex: SVGParseException) {
result.error("fetch-parse", "failed to parse SVG for uri=$uri regionRect=$regionRect", null)
return
}
}
if (newSvg == null) {
result.error("fetch-read-null", "failed to open file for uri=$uri regionRect=$regionRect", null)
return
}
newSvg.normalizeSize()
currentSvgRef = LastSvgRef(uri, newSvg)
val svg = getOrCreateDecoder(context, uri)
if (svg == null) {
result.error("fetch-read-null", "failed to open file for uri=$uri regionRect=$regionRect", null)
return
}
val svg = currentSvgRef.svg
lastSvgRef = currentSvgRef
// we scale the requested region accordingly to the viewbox size
val viewBox = svg.documentViewBox
@ -110,17 +90,46 @@ class SvgRegionFetcher internal constructor(
bitmap = Bitmap.createBitmap(bitmap, bleedX, bleedY, targetBitmapWidth, targetBitmapHeight)
val bytes = BitmapUtils.getRawBytes(bitmap, recycle = true)
result.success(bytes)
} catch (e: SVGParseException) {
result.error("fetch-parse", "failed to parse SVG for uri=$uri regionRect=$regionRect", null)
} catch (e: Exception) {
result.error("fetch-read-exception", "failed to initialize region decoder for uri=$uri regionRect=$regionRect", e.message)
}
}
private data class LastSvgRef(
private data class DecoderRef(
val uri: Uri,
val svg: SVG,
val decoder: SVG,
)
companion object {
private val PREFERRED_CONFIG = Bitmap.Config.ARGB_8888
private const val DECODER_POOL_SIZE = 3
private val decoderPool = ArrayList<DecoderRef>()
private val poolLock = ReentrantLock()
private fun getOrCreateDecoder(context: Context, uri: Uri): SVG? {
poolLock.withLock {
var decoderRef = decoderPool.firstOrNull { it.uri == uri }
if (decoderRef == null) {
val newDecoder = StorageUtils.openInputStream(context, uri)?.use { input ->
SVG.getFromInputStream(SVGParserBufferedInputStream(input))
}
if (newDecoder == null) {
return null
}
newDecoder.normalizeSize()
decoderRef = DecoderRef(uri, newDecoder)
} else {
decoderPool.remove(decoderRef)
}
decoderPool.add(0, decoderRef)
while (decoderPool.size > DECODER_POOL_SIZE) {
decoderPool.removeAt(decoderPool.size - 1)
}
return decoderRef.decoder
}
}
}
}

View file

@ -5,8 +5,10 @@ import android.graphics.Bitmap
import android.net.Uri
import android.os.Build
import android.provider.MediaStore
import android.util.Log
import android.util.Size
import androidx.annotation.RequiresApi
import androidx.core.graphics.scale
import androidx.core.net.toUri
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DecodeFormat
@ -17,6 +19,7 @@ import deckers.thibault.aves.decoder.AvesAppGlideModule
import deckers.thibault.aves.decoder.MultiPageImage
import deckers.thibault.aves.utils.BitmapUtils
import deckers.thibault.aves.utils.BitmapUtils.applyExifOrientation
import deckers.thibault.aves.utils.LogUtils
import deckers.thibault.aves.utils.MimeTypes
import deckers.thibault.aves.utils.MimeTypes.SVG
import deckers.thibault.aves.utils.MimeTypes.isVideo
@ -25,6 +28,8 @@ import deckers.thibault.aves.utils.MimeTypes.needRotationAfterGlide
import deckers.thibault.aves.utils.StorageUtils
import deckers.thibault.aves.utils.UriUtils.tryParseId
import io.flutter.plugin.common.MethodChannel
import kotlin.math.min
import kotlin.math.roundToInt
class ThumbnailFetcher internal constructor(
private val context: Context,
@ -77,6 +82,29 @@ class ThumbnailFetcher internal constructor(
}
}
if (bitmap != null) {
if (bitmap.width > width && bitmap.height > height) {
val scalingFactor: Double = min(bitmap.width.toDouble() / width, bitmap.height.toDouble() / height)
val dstWidth = (bitmap.width / scalingFactor).roundToInt()
val dstHeight = (bitmap.height / scalingFactor).roundToInt()
Log.d(
LOG_TAG, "rescale thumbnail for mimeType=$mimeType uri=$uri width=$width height=$height" +
", with bitmap byteCount=${bitmap.byteCount} size=${bitmap.width}x${bitmap.height}" +
", to target=${dstWidth}x${dstHeight}"
)
bitmap = bitmap.scale(dstWidth, dstHeight)
}
if (bitmap.byteCount > BITMAP_SIZE_DANGER_THRESHOLD) {
result.error(
"getThumbnail-large", "thumbnail bitmap dangerously large" +
" for mimeType=$mimeType uri=$uri pageId=$pageId width=$width height=$height" +
", with bitmap byteCount=${bitmap.byteCount} size=${bitmap.width}x${bitmap.height} config=${bitmap.config?.name}", null
)
return
}
}
// do not recycle bitmaps fetched from `ContentResolver` or Glide as their lifecycle is unknown
val recycle = false
val bytes = BitmapUtils.getRawBytes(bitmap, recycle = recycle)
@ -144,4 +172,9 @@ class ThumbnailFetcher internal constructor(
Glide.with(context).clear(target)
}
}
companion object {
private val LOG_TAG = LogUtils.createTag<ThumbnailFetcher>()
private const val BITMAP_SIZE_DANGER_THRESHOLD = 20 * (1 shl 20) // MB
}
}

View file

@ -31,9 +31,15 @@ class MediaStoreChangeStreamHandler(private val context: Context) : EventChannel
init {
Log.i(LOG_TAG, "start listening to Media Store")
context.contentResolver.apply {
registerContentObserver(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, contentObserver)
registerContentObserver(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, true, contentObserver)
try {
context.contentResolver.apply {
registerContentObserver(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, contentObserver)
registerContentObserver(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, true, contentObserver)
}
} catch (e: SecurityException) {
// Trying to register an observer may yield a security exception with this message:
// "Failed to find provider media for user 0; expected to find a valid ContentProvider for this authority"
Log.w(LOG_TAG, "failed to register content observer", e)
}
}

View file

@ -2,6 +2,7 @@ package deckers.thibault.aves.decoder
import android.content.Context
import android.net.Uri
import android.text.format.Formatter
import android.util.Log
import com.bumptech.glide.Glide
import com.bumptech.glide.GlideBuilder
@ -10,9 +11,17 @@ import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.load.DecodeFormat
import com.bumptech.glide.load.ImageHeaderParser
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPoolAdapter
import com.bumptech.glide.load.engine.bitmap_recycle.LruArrayPool
import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool
import com.bumptech.glide.load.engine.cache.DiskCache
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory
import com.bumptech.glide.load.engine.cache.LruResourceCache
import com.bumptech.glide.load.engine.cache.MemorySizeCalculator
import com.bumptech.glide.load.resource.bitmap.ExifInterfaceImageHeaderParser
import com.bumptech.glide.module.AppGlideModule
import com.bumptech.glide.request.RequestOptions
import deckers.thibault.aves.utils.LogUtils
import deckers.thibault.aves.utils.MimeTypes
import deckers.thibault.aves.utils.MimeTypes.isVideo
import deckers.thibault.aves.utils.StorageUtils
@ -23,6 +32,30 @@ class AvesAppGlideModule : AppGlideModule() {
override fun applyOptions(context: Context, builder: GlideBuilder) {
// hide noisy warning (e.g. for images that can't be decoded)
builder.setLogLevel(Log.ERROR)
// sizing
val memorySizeCalculator = MemorySizeCalculator.Builder(context).build()
builder.setMemorySizeCalculator(memorySizeCalculator)
val size: Int = memorySizeCalculator.bitmapPoolSize
if (size > 0) {
builder.setBitmapPool(LruBitmapPool(size.toLong()))
} else {
builder.setBitmapPool(BitmapPoolAdapter())
}
builder.setArrayPool(LruArrayPool(memorySizeCalculator.arrayPoolSizeInBytes))
builder.setMemoryCache(LruResourceCache(memorySizeCalculator.memoryCacheSize.toLong()))
val diskCacheSize = DiskCache.Factory.DEFAULT_DISK_CACHE_SIZE
val internalCacheDiskCacheFactory = InternalCacheDiskCacheFactory(context, DiskCache.Factory.DEFAULT_DISK_CACHE_DIR, diskCacheSize.toLong())
builder.setDiskCache(internalCacheDiskCacheFactory)
fun toMb(bytes: Int) = Formatter.formatFileSize(context, bytes.toLong())
Log.d(
LOG_TAG, "Glide disk cache size=${toMb(diskCacheSize)}" +
", memory cache size=${toMb(memorySizeCalculator.memoryCacheSize)}" +
", bitmap pool size=${toMb(memorySizeCalculator.bitmapPoolSize)}" +
", array pool size=${toMb(memorySizeCalculator.arrayPoolSizeInBytes)}"
)
}
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
@ -34,6 +67,8 @@ class AvesAppGlideModule : AppGlideModule() {
override fun isManifestParsingEnabled(): Boolean = false
companion object {
private val LOG_TAG = LogUtils.createTag<AvesAppGlideModule>()
// request a fresh image with the highest quality format
val uncachedFullImageOptions = RequestOptions()
.format(DecodeFormat.PREFER_ARGB_8888)

View file

@ -81,12 +81,12 @@ object PixyMetaHelper {
output: OutputStream,
iptcDataList: List<FieldMap>?,
) {
val iptc = iptcDataList?.flatMap {
val iptc: List<IPTCDataSet> = iptcDataList?.flatMap {
val record = it["record"] as Int
val tag = it["tag"] as Int
val values = it["values"] as List<*>
values.map { data -> IPTCDataSet(IPTCRecord.fromRecordNumber(record), tag, data as ByteArray) }
} ?: ArrayList<IPTCDataSet>()
} ?: ArrayList()
Metadata.insertIPTC(input, output, iptc)
}

View file

@ -142,16 +142,18 @@ abstract class ImageProvider {
val oldFile = File(sourcePath)
if (oldFile.nameWithoutExtension != desiredNameWithoutExtension) {
val defaultExtension = oldFile.extension
oldFile.parent?.let { dir ->
val resolution = resolveTargetFileNameWithoutExtension(
contextWrapper = activity,
dir = dir,
desiredNameWithoutExtension = desiredNameWithoutExtension,
mimeType = mimeType,
defaultExtension = defaultExtension,
conflictStrategy = NameConflictStrategy.RENAME,
)
resolution.nameWithoutExtension?.let { targetNameWithoutExtension ->
val targetFileName = "$targetNameWithoutExtension${extensionFor(mimeType)}"
val targetFileName = "$targetNameWithoutExtension${extensionFor(mimeType, defaultExtension)}"
val newFile = File(dir, targetFileName)
if (oldFile != newFile) {
newFields = renameSingle(
@ -277,11 +279,17 @@ abstract class ImageProvider {
val page = if (sourceMimeType == MimeTypes.TIFF) pageId + 1 else pageId
desiredNameWithoutExtension += "_${page.toString().padStart(3, '0')}"
}
// there is no benefit providing input extension
// for known output MIME type
val defaultExtension = null
val resolution = resolveTargetFileNameWithoutExtension(
contextWrapper = activity,
dir = targetDir,
desiredNameWithoutExtension = desiredNameWithoutExtension,
mimeType = exportMimeType,
defaultExtension = defaultExtension,
conflictStrategy = nameConflictStrategy,
)
val targetNameWithoutExtension = resolution.nameWithoutExtension ?: return skippedFieldMap
@ -358,6 +366,7 @@ abstract class ImageProvider {
targetDir = targetDir,
targetDirDocFile = targetDirDocFile,
targetNameWithoutExtension = targetNameWithoutExtension,
defaultExtension = defaultExtension,
write = write,
)
@ -465,6 +474,7 @@ abstract class ImageProvider {
dir = targetDir,
desiredNameWithoutExtension = desiredNameWithoutExtension,
mimeType = captureMimeType,
defaultExtension = null,
conflictStrategy = nameConflictStrategy,
)
} catch (e: Exception) {
@ -571,13 +581,14 @@ abstract class ImageProvider {
dir: String,
desiredNameWithoutExtension: String,
mimeType: String,
defaultExtension: String?,
conflictStrategy: NameConflictStrategy,
): NameConflictResolution {
val sanitizedNameWithoutExtension = sanitizeDesiredFileName(desiredNameWithoutExtension)
var resolvedName: String? = sanitizedNameWithoutExtension
var replacementFile: File? = null
val extension = extensionFor(mimeType)
val extension = extensionFor(mimeType, defaultExtension)
val targetFile = File(dir, "$sanitizedNameWithoutExtension$extension")
when (conflictStrategy) {
NameConflictStrategy.RENAME -> {

View file

@ -557,6 +557,7 @@ class MediaStoreImageProvider : ImageProvider() {
toBin: Boolean,
): FieldMap {
val sourcePath = sourceFile?.path
val sourceExtension = sourceFile?.extension
val sourceDir = sourceFile?.parent?.let { ensureTrailingSeparator(it) }
if (sourceDir == targetDir && !(copy && nameConflictStrategy == NameConflictStrategy.RENAME)) {
// nothing to do unless it's a renamed copy
@ -569,6 +570,7 @@ class MediaStoreImageProvider : ImageProvider() {
dir = targetDir,
desiredNameWithoutExtension = desiredNameWithoutExtension,
mimeType = mimeType,
defaultExtension = sourceExtension,
conflictStrategy = nameConflictStrategy,
)
val targetNameWithoutExtension = resolution.nameWithoutExtension ?: return skippedFieldMap
@ -580,6 +582,7 @@ class MediaStoreImageProvider : ImageProvider() {
targetDir = targetDir,
targetDirDocFile = targetDirDocFile,
targetNameWithoutExtension = targetNameWithoutExtension,
defaultExtension = sourceExtension,
) { output: OutputStream ->
try {
sourceDocFile.copyTo(output)
@ -615,12 +618,13 @@ class MediaStoreImageProvider : ImageProvider() {
targetDir: String,
targetDirDocFile: DocumentFileCompat?,
targetNameWithoutExtension: String,
defaultExtension: String?,
write: (OutputStream) -> Unit,
): String {
if (StorageUtils.isInVault(activity, targetDir)) {
return insertByFile(
targetDir = targetDir,
targetFileName = "$targetNameWithoutExtension${extensionFor(mimeType)}",
targetFileName = "$targetNameWithoutExtension${extensionFor(mimeType, defaultExtension)}",
write = write,
)
}
@ -630,7 +634,7 @@ class MediaStoreImageProvider : ImageProvider() {
return insertByMediaStore(
activity = activity,
targetDir = targetDir,
targetFileName = "$targetNameWithoutExtension${extensionFor(mimeType)}",
targetFileName = "$targetNameWithoutExtension${extensionFor(mimeType, defaultExtension)}",
write = write,
)
}
@ -642,6 +646,7 @@ class MediaStoreImageProvider : ImageProvider() {
targetDir = targetDir,
targetDirDocFile = targetDirDocFile,
targetNameWithoutExtension = targetNameWithoutExtension,
defaultExtension = defaultExtension,
write = write,
)
}
@ -700,6 +705,7 @@ class MediaStoreImageProvider : ImageProvider() {
targetDir: String,
targetDirDocFile: DocumentFileCompat?,
targetNameWithoutExtension: String,
defaultExtension: String?,
write: (OutputStream) -> Unit,
): String {
targetDirDocFile ?: throw Exception("failed to get tree doc for directory at path=$targetDir")
@ -708,8 +714,22 @@ class MediaStoreImageProvider : ImageProvider() {
// but in order to open an output stream to it, we need to use a `SingleDocumentFile`
// through a document URI, not a tree URI
// note that `DocumentFile.getParentFile()` returns null if we did not pick a tree first
val targetTreeFile = targetDirDocFile.createFile(mimeType, targetNameWithoutExtension)
val targetDocFile = DocumentFileCompat.fromSingleUri(activity, targetTreeFile.uri)
var targetTreeFile = targetDirDocFile.createFile(mimeType, targetNameWithoutExtension)
var targetDocFile = DocumentFileCompat.fromSingleUri(activity, targetTreeFile.uri)
// providing a display name and a MIME type does not guarantee
// that the created document will be backed by a file with a valid media extension,
// but having an extension is essential for media detection by Android,
// so we retry with a display name that includes the extension
if ((targetDocFile.extension == null || targetDocFile.extension.isEmpty() || targetDocFile.extension == "bin") && defaultExtension != null) {
if (targetDocFile.exists()) {
targetDocFile.delete()
}
val extension = if (defaultExtension.startsWith(".")) defaultExtension else ".$defaultExtension"
targetTreeFile = targetDirDocFile.createFile(mimeType, "$targetNameWithoutExtension$extension")
targetDocFile = DocumentFileCompat.fromSingleUri(activity, targetTreeFile.uri)
}
try {
targetDocFile.openOutputStream().use(write)

View file

@ -5,5 +5,5 @@ import kotlin.math.pow
object MathUtils {
fun highestPowerOf2(x: Int): Int = highestPowerOf2(x.toDouble())
private fun highestPowerOf2(x: Double): Int = if (x < 1) 0 else 2.toDouble().pow(log2(x).toInt()).toInt()
fun highestPowerOf2(x: Double): Int = if (x < 1) 0 else 2.toDouble().pow(log2(x).toInt()).toInt()
}

View file

@ -163,12 +163,24 @@ object MimeTypes {
// among other refs:
// - https://android.googlesource.com/platform/external/mime-support/+/refs/heads/master/mime.types
fun extensionFor(mimeType: String): String? = when (mimeType) {
fun extensionFor(mimeType: String, defaultExtension: String?): String = when (mimeType) {
AVI, AVI_VND -> ".avi"
DNG, DNG_ADOBE -> ".dng"
HEIC, HEIF -> ".heif"
MP2T, MP2TS -> ".m2ts"
PSD_VND, PSD_X -> ".psd"
else -> MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType)?.let { ".$it" }
else -> {
val ext = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType) ?: defaultExtension
if (ext != null) {
// fallback to provided extension when available,
// typically the original file extension when moving/renaming
if (ext.startsWith(".")) ext else ".$ext"
} else {
// fallback to generic extensions,
// as incorrect file extensions are better than none for media detection
if (isVideo(mimeType)) ".mp4" else ".jpg"
}
}
}
val TIFF_EXTENSION_PATTERN = Regex(".*\\.tiff?", RegexOption.IGNORE_CASE)

View file

@ -8,4 +8,5 @@
<string name="analysis_channel_name">Σάρωση πολυμέσων</string>
<string name="analysis_notification_default_title">Σάρωση στοιχείων</string>
<string name="analysis_notification_action_stop">Διακοπή</string>
</resources>
<string name="map_shortcut_short_label">Χάρτης</string>
</resources>

View file

@ -8,4 +8,5 @@
<string name="analysis_notification_action_stop">توقف کردن</string>
<string name="app_widget_label">قاب عکس</string>
<string name="app_name">Aves</string>
</resources>
<string name="map_shortcut_short_label">نقشه</string>
</resources>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">אייבז</string>
<string name="app_name">Aves</string>
<string name="app_widget_label">מסגרת תמונה</string>
<string name="wallpaper">טפט</string>
<string name="search_shortcut_short_label">חיפוש</string>
@ -9,4 +9,4 @@
<string name="analysis_notification_default_title">סורק מדיה</string>
<string name="analysis_notification_action_stop">הפסק</string>
<string name="map_shortcut_short_label">מפה</string>
</resources>
</resources>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Aves</string>
<string name="app_name">ಎವೀಸ್</string>
<string name="app_widget_label">ಫೋಟೋ ಫ್ರೇಮ್</string>
<string name="wallpaper">ವಾಲ್ಪೇಪರ್</string>
<string name="videos_shortcut_short_label">ವೀಡಿಯೊಗಳು</string>
@ -8,4 +8,5 @@
<string name="analysis_notification_default_title">ಮೀಡಿಯಾ ಸ್ಕ್ಯಾನ್ ಮಾಡಲಾಗುತ್ತಿದೆ</string>
<string name="analysis_notification_action_stop">ನಿಲ್ಲಿಸಿ</string>
<string name="search_shortcut_short_label">ಹುಡುಕಿ</string>
</resources>
<string name="map_shortcut_short_label">ನಕ್ಷೆ</string>
</resources>

View file

@ -8,4 +8,5 @@
<string name="videos_shortcut_short_label">ဗီဒီယိုများ</string>
<string name="analysis_notification_default_title">မီဒီယာ ကိုစကင်ဖတ်နေသည်</string>
<string name="analysis_notification_action_stop">ရပ်ရန်</string>
</resources>
<string name="map_shortcut_short_label">မြေပုံ</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">एभस</string>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="search_shortcut_short_label">ସନ୍ଧାନ</string>
</resources>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Aves</string>
</resources>

View file

@ -22,7 +22,6 @@ import static androidx.exifinterface.media.ExifInterfaceUtilsFork.convertToLongA
import static androidx.exifinterface.media.ExifInterfaceUtilsFork.copy;
import static androidx.exifinterface.media.ExifInterfaceUtilsFork.parseSubSeconds;
import static androidx.exifinterface.media.ExifInterfaceUtilsFork.startsWith;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.nio.ByteOrder.BIG_ENDIAN;
import static java.nio.ByteOrder.LITTLE_ENDIAN;
@ -91,7 +90,7 @@ import java.util.regex.Pattern;
import java.util.zip.CRC32;
/*
* Forked from 'androidx.exifinterface:exifinterface:1.4.0'
* Forked from 'androidx.exifinterface:exifinterface:1.4.1'
* Named differently to let ExifInterface be loaded as subdependency.
* cf https://maven.google.com/web/index.html?q=exifinterface#androidx.exifinterface:exifinterface
* cf https://github.com/androidx/androidx/tree/androidx-main/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media
@ -139,6 +138,12 @@ public class ExifInterfaceFork {
// TLAD threshold for safer Exif attribute parsing
private static final int ATTRIBUTE_SIZE_DANGER_THRESHOLD = 3 * (1 << 20); // MB
// TLAD available heap size, to check allocations
private long getAvailableHeapSize() {
final Runtime runtime = Runtime.getRuntime();
return runtime.maxMemory() - (runtime.totalMemory() - runtime.freeMemory());
}
private static final String TAG = "ExifInterface";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@ -4553,7 +4558,7 @@ public class ExifInterfaceFork {
&& (mXmpFromSeparateMarker != null || !containsTiff700Xmp))
|| (xmpHandling == XMP_HANDLING_PREFER_TIFF_700_IF_PRESENT
&& !containsTiff700Xmp)) {
mXmpFromSeparateMarker = ExifAttribute.createByte(value);
mXmpFromSeparateMarker = value != null ? ExifAttribute.createByte(value) : null;
return;
}
}
@ -6558,8 +6563,9 @@ public class ExifInterfaceFork {
// Exif data in WebP images (e.g.
// https://github.com/ImageMagick/ImageMagick/issues/3140)
if (startsWith(payload, IDENTIFIER_EXIF_APP1)) {
payload = Arrays.copyOfRange(payload, IDENTIFIER_EXIF_APP1.length,
payload.length);
payload =
Arrays.copyOfRange(
payload, IDENTIFIER_EXIF_APP1.length, payload.length);
}
// Save offset to EXIF data for handling thumbnail and attribute offsets.
@ -6722,8 +6728,11 @@ public class ExifInterfaceFork {
copy(dataInputStream, dataOutputStream, PNG_SIGNATURE.length);
boolean needToWriteExif = true;
boolean needToWriteXmp = mXmpFromSeparateMarker != null;
while (needToWriteExif || needToWriteXmp) {
// Either there's some XMP data to write, or it has been cleared locally but was present in
// the file when it was read (and so needs to be removed).
boolean needToHandleXmpChunk =
mXmpFromSeparateMarker != null || mFileOnDiskContainsSeparateXmpMarker;
while (needToWriteExif || needToHandleXmpChunk) {
int chunkLength = dataInputStream.readInt();
int chunkType = dataInputStream.readInt();
if (chunkType == PNG_CHUNK_TYPE_IHDR) {
@ -6738,7 +6747,7 @@ public class ExifInterfaceFork {
}
if (mXmpFromSeparateMarker != null && !mFileOnDiskContainsSeparateXmpMarker) {
writePngXmpItxtChunk(dataOutputStream);
needToWriteXmp = false;
needToHandleXmpChunk = false;
}
continue;
} else if (chunkType == PNG_CHUNK_TYPE_EXIF && needToWriteExif) {
@ -6746,10 +6755,25 @@ public class ExifInterfaceFork {
dataInputStream.skipFully(chunkLength + PNG_CHUNK_CRC_BYTE_LENGTH);
needToWriteExif = false;
continue;
} else if (chunkType == PNG_CHUNK_TYPE_ITXT && needToWriteXmp) {
writePngXmpItxtChunk(dataOutputStream);
dataInputStream.skipFully(chunkLength + PNG_CHUNK_CRC_BYTE_LENGTH);
needToWriteXmp = false;
} else if (chunkType == PNG_CHUNK_TYPE_ITXT
&& chunkLength >= PNG_ITXT_XMP_KEYWORD.length) {
// Read the 17 byte keyword and 5 expected null bytes.
byte[] keyword = new byte[PNG_ITXT_XMP_KEYWORD.length];
dataInputStream.readFully(keyword);
int remainingChunkBytes = chunkLength - keyword.length + PNG_CHUNK_CRC_BYTE_LENGTH;
if (Arrays.equals(keyword, PNG_ITXT_XMP_KEYWORD)) {
if (mXmpFromSeparateMarker != null) {
writePngXmpItxtChunk(dataOutputStream);
}
dataInputStream.skipFully(remainingChunkBytes);
needToHandleXmpChunk = false;
} else {
// This is a non-XMP iTXt chunk, so just copy it to the output and continue.
dataOutputStream.writeInt(chunkLength);
dataOutputStream.writeInt(chunkType);
dataOutputStream.write(keyword);
copy(dataInputStream, dataOutputStream, remainingChunkBytes);
}
continue;
}
dataOutputStream.writeInt(chunkLength);
@ -7536,6 +7560,13 @@ public class ExifInterfaceFork {
Log.d(TAG, "Invalid strip offset value");
return;
}
// TLAD start
if (bytesToSkip > getAvailableHeapSize()) {
throw new IOException("cannot allocate " + bytesToSkip + " bytes to skip to retrieve thumbnail");
}
// TLAD end
try {
in.skipFully(bytesToSkip);
} catch (EOFException e) {

View file

@ -31,7 +31,7 @@ import java.io.InputStream;
import java.io.OutputStream;
/*
* Forked from 'androidx.exifinterface:exifinterface:1.4.0-alpha01' on 2024/11/17
* Forked from 'androidx.exifinterface:exifinterface:1.4.1'
* Named differently to let ExifInterface be loaded as subdependency.
* cf https://github.com/androidx/androidx/tree/androidx-main/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media
*/

View file

@ -18,10 +18,10 @@ pluginManagement {
plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.8.1" apply false
id("org.jetbrains.kotlin.android") version "2.1.10" apply false
id("com.google.devtools.ksp") version "2.1.10-1.0.29" apply false
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
id("com.android.application") version "8.10.1" apply false
id("org.jetbrains.kotlin.android") version "2.1.21" apply false
id("com.google.devtools.ksp") version "2.1.21-2.0.1" apply false
id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
}
include(":app")

35
assets/terms.txt Normal file
View file

@ -0,0 +1,35 @@
Terms of Service
================
“Aves Gallery” is an open-source gallery and metadata explorer app allowing you to access and manage your local photos and videos.
The app is designed for legal, authorized and acceptable purposes.
Disclaimer
==========
The app is released “as-is”, without any warranty, responsibility or liability. Use of the app is at your own risk.
Privacy Policy
==============
The app does not collect any personal data. We never have access to your photos and videos. This also means that we cannot get them back for you if you delete them without backing them up.
Optionally, with your consent, the app accesses the inventory of installed apps to improve album display.
Optionally, with your consent, the app collects anonymous error and diagnostic data to improve the app quality. We use Firebase Crashlytics, and the anonymous data are stored on their servers. Please note that those are anonymous data, there is absolutely nothing personal about those data.
Contact
=======
Developer: Thibault Deckers
Email: gallery.aves@gmail.com
Website: https://github.com/deckerst/aves

View file

@ -2,4 +2,4 @@
<b>Navigation und Suche</b> ist ein wichtiger Bestandteil von <i>Aves</i>. Das Ziel besteht darin, dass Benutzer problemlos von Alben zu Fotos zu Tags zu Karten usw. wechseln können.
<i>Aves</i> lässt sich mit Android mit Funktionen wie <b>App-Verknüpfungen</b> und <b>globaler Suche</b> integrieren. Es funktioniert auch als <b>Medienbetrachter und -auswahl</b>.
<i>Aves</i> integriert sich in Android (einschließlich Android TV) mit Funktionen wie <b>Widgets</b>, <b>App-Shortcuts</b>, <b>Bildschirmschoner</b> und der <b>globalen Suche</b> integrieren. Sie funktioniert auch als <b>Medienbetrachter und -Picker</b>.

View file

@ -1,4 +0,0 @@
In v1.12.0:
- save your filtered collection as dynamic albums
- enjoy the app in Tamil, Bulgarian and Estonian
Full changelog available on GitHub

View file

@ -1,4 +0,0 @@
In v1.12.0:
- save your filtered collection as dynamic albums
- enjoy the app in Tamil, Bulgarian and Estonian
Full changelog available on GitHub

View file

@ -1,3 +0,0 @@
In v1.12.1:
- enjoy the app in Danish
Full changelog available on GitHub

View file

@ -1,3 +0,0 @@
In v1.12.1:
- enjoy the app in Danish
Full changelog available on GitHub

View file

@ -1,3 +0,0 @@
In v1.12.2:
- enjoy the app in Danish
Full changelog available on GitHub

View file

@ -1,3 +0,0 @@
In v1.12.2:
- enjoy the app in Danish
Full changelog available on GitHub

View file

@ -1,3 +0,0 @@
In v1.12.3:
- edit locations via GPX tracks
Full changelog available on GitHub

View file

@ -1,3 +0,0 @@
In v1.12.3:
- edit locations via GPX tracks
Full changelog available on GitHub

View file

@ -1,4 +1,4 @@
In v1.12.4:
In v1.12.9:
- play more kinds of motion photos
- enjoy the app in Galician
- enjoy the app in Galician and Kannada
Full changelog available on GitHub

View file

@ -1,4 +1,4 @@
In v1.12.4:
In v1.12.9:
- play more kinds of motion photos
- enjoy the app in Galician
- enjoy the app in Galician and Kannada
Full changelog available on GitHub

View file

@ -1,4 +1,4 @@
In v1.12.5:
In v1.12.10:
- play more kinds of motion photos
- enjoy the app in Galician
- enjoy the app in Galician and Kannada
Full changelog available on GitHub

View file

@ -1,4 +1,4 @@
In v1.12.5:
In v1.12.10:
- play more kinds of motion photos
- enjoy the app in Galician
- enjoy the app in Galician and Kannada
Full changelog available on GitHub

View file

@ -0,0 +1,4 @@
In v1.13.0:
- group albums
- filter by day of the week
Full changelog available on GitHub

View file

@ -0,0 +1,4 @@
In v1.13.0:
- group albums
- filter by day of the week
Full changelog available on GitHub

View file

@ -0,0 +1,4 @@
In v1.13.1:
- group albums
- filter by day of the week
Full changelog available on GitHub

View file

@ -0,0 +1,4 @@
In v1.13.1:
- group albums
- filter by day of the week
Full changelog available on GitHub

View file

@ -0,0 +1,4 @@
In v1.13.2:
- group albums
- filter by day of the week
Full changelog available on GitHub

View file

@ -0,0 +1,4 @@
In v1.13.2:
- group albums
- filter by day of the week
Full changelog available on GitHub

View file

@ -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> יכול להתמודד עם כל מיני תמונות וסרטונים, כולל קובצי JPEG ו-MP4 הטיפוסיים שלך, אבל גם דברים אקזוטיים יותר כמו <b>TIFF מרובי עמודים, SVGs, AVI ישנים ועוד</b>! הוא סורק את אוסף המדיה שלך כדי לזהות <b>תמונות תנועה</b>, <b>פנורמות</b> (הידוע גם בתמונות פנורמיות), <b>סרטוני 360°</b>, וכן קבצי <b>GeoTIFF</b>.
<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>ניווט וחיפוש</b> הם חלק חשוב ב-<i>Aves</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>Aves</i> משתלב עם Android (כולל Android TV) עם תכונות כגון <b>ווידג'טים</b>, <b>קיצורי אפליקציות</b>, <b>שומר מסך</b> וטיפול ב<b>חיפוש גלובלי</b>. הוא פועל גם כ<b>מציג ובוחר מדיה</b>.

View file

@ -1 +1 @@
Gallery and metadata explorer
סייר גלריה ומטא נתונים

View file

@ -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>ಏವೀಸ್</i> ನಿಮ್ಮ JPEG ಗಳು ಮತ್ತು MP4 ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ಎಲ್ಲಾ ರೀತಿಯ ಚಿತ್ರಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ನಿಭಾಯಿಸಬಲ್ಲದು, ಅಲ್ಲದೆ ವಿಶಿಷ್ಟವಾದ <b>ಬಹು-ಪುಟ TIFFಗಳು, SVGಗಳು, ಹಳೆಯ AVIಗಳು ಮತ್ತು ಹಲವು ಪ್ರಕಾರಗಳನ್ನು ಕೂಡ ಬೆಂಬಲಿಸುತ್ತದೆ</b> ಇದು <b>ಚಲನೆಯ ಫೋಟೋಗಳು</b>, <b>ಪನೋರಮಾಗಳು</b> (ಫೋಟೋ ಗೋಳಗಳು) <b>360° ವೀಡಿಯೊಗಳು</b>, ಹಾಗೆಯೇ <b>GeoTIFF</b> ಕಡತಗಳನ್ನು ಗುರುತಿಸಲು ನಿಮ್ಮ ಮಾಧ್ಯಮ ಸಂಗ್ರಹವನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡುತ್ತದೆ.
<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>ನ್ಯಾವಿಗೇಷನ್ ಮತ್ತು ಹುಡುಕಾಟ</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> ಆಗಿಯೂ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 KiB

View file

@ -1 +1 @@
Gallery and metadata explorer
ಗ್ಯಾಲರಿ ಮತ್ತು ಮೆಟಾಡೇಟಾ ಎಕ್ಸ್‌ಪ್ಲೋರರ್

View file

@ -0,0 +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.
<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.
<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>.

View file

@ -0,0 +1 @@
Gallery and metadata explorer

View file

@ -0,0 +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.
<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.
<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>.

View file

@ -0,0 +1 @@
Gallery and metadata explorer

View file

@ -10,7 +10,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
@immutable
class UriImage extends ImageProvider<UriImage> with EquatableMixin {
class FullImage extends ImageProvider<FullImage> with EquatableMixin {
final String uri, mimeType;
final int? pageId, rotationDegrees, sizeBytes;
final bool isFlipped, isAnimated;
@ -19,7 +19,7 @@ class UriImage extends ImageProvider<UriImage> with EquatableMixin {
@override
List<Object?> get props => [uri, pageId, rotationDegrees, isFlipped, isAnimated, scale];
const UriImage({
const FullImage({
required this.uri,
required this.mimeType,
required this.pageId,
@ -31,12 +31,12 @@ class UriImage extends ImageProvider<UriImage> with EquatableMixin {
});
@override
Future<UriImage> obtainKey(ImageConfiguration configuration) {
return SynchronousFuture<UriImage>(this);
Future<FullImage> obtainKey(ImageConfiguration configuration) {
return SynchronousFuture<FullImage>(this);
}
@override
ImageStreamCompleter loadImage(UriImage key, ImageDecoderCallback decode) {
ImageStreamCompleter loadImage(FullImage key, ImageDecoderCallback decode) {
final chunkEvents = StreamController<ImageChunkEvent>();
return MultiFrameImageStreamCompleter(
@ -59,11 +59,11 @@ class UriImage extends ImageProvider<UriImage> with EquatableMixin {
case MimeTypes.svg:
return false;
default:
return !isAnimated;
return !isAnimated && !MimeTypes.isVideo(mimeType);
}
}
Future<ui.Codec> _loadAsync(UriImage key, ImageDecoderCallback decode, StreamController<ImageChunkEvent> chunkEvents) async {
Future<ui.Codec> _loadAsync(FullImage key, ImageDecoderCallback decode, StreamController<ImageChunkEvent> chunkEvents) async {
assert(key == this);
final request = ImageRequest(

View file

@ -1,6 +1,4 @@
{
"filePickerDoNotShowHiddenFiles": "عدم إظهار الملفات المخفية",
"@filePickerDoNotShowHiddenFiles": {},
"tagPlaceholderPlace": "المكان",
"@tagPlaceholderPlace": {},
"tagPlaceholderCountry": "البلد",
@ -9,12 +7,6 @@
"@sourceViewerPageTitle": {},
"panoramaDisableSensorControl": "تعطيل التحكم في المستشعر",
"@panoramaDisableSensorControl": {},
"filePickerNoItems": "لا توجد عناصر",
"@filePickerNoItems": {},
"filePickerOpenFrom": "فتح من",
"@filePickerOpenFrom": {},
"filePickerShowHiddenFiles": "إظهار الملفات المخفية",
"@filePickerShowHiddenFiles": {},
"panoramaEnableSensorControl": "تمكين التحكم في المستشعر",
"@panoramaEnableSensorControl": {},
"saveTooltip": "حفظ",
@ -63,8 +55,6 @@
"@tagEditorSectionRecent": {},
"tagEditorSectionPlaceholders": "العناصر النائبة",
"@tagEditorSectionPlaceholders": {},
"filePickerUseThisFolder": "إستخدام هذا المجلد",
"@filePickerUseThisFolder": {},
"hideTooltip": "إخفاء",
"@hideTooltip": {},
"tagEditorPageAddTagTooltip": "إضافة علامة",
@ -503,8 +493,6 @@
"@viewerSetWallpaperButtonLabel": {},
"settingsVideoResumptionModeTile": "استئناف التشغيل",
"@settingsVideoResumptionModeTile": {},
"collectionGroupNone": "لا تجمع",
"@collectionGroupNone": {},
"searchRatingSectionTitle": "التقييمات",
"@searchRatingSectionTitle": {},
"vaultBinUsageDialogMessage": "تستخدم بعض الخزائن سلة المحذوفات.",
@ -611,7 +599,7 @@
"@settingsLanguagePageTitle": {},
"rootDirectoryDescription": "دليل الجذر",
"@rootDirectoryDescription": {},
"viewDialogGroupSectionTitle": "مجموعة",
"viewDialogGroupSectionTitle": "الأقسام",
"@viewDialogGroupSectionTitle": {},
"maxBrightnessAlways": "دائماً",
"@maxBrightnessAlways": {},
@ -1031,8 +1019,6 @@
"@entryActionSetAs": {},
"sortOrderLowestFirst": "الأدنى أولاً",
"@sortOrderLowestFirst": {},
"albumGroupNone": "لا تجمع",
"@albumGroupNone": {},
"statsTopStatesSectionTitle": "أهم الولايات",
"@statsTopStatesSectionTitle": {},
"settingsViewerQuickActionEditorDisplayedButtonsSectionTitle": "الأزرار المعروضة",
@ -1463,7 +1449,7 @@
"@binPageTitle": {},
"tagPlaceholderState": "الولاية",
"@tagPlaceholderState": {},
"sortByAlbumFileName": "حسب الألبوم واسم الملف",
"sortByAlbumFileName": "حسب عنوان الألبوم والعنصر",
"@sortByAlbumFileName": {},
"deleteMultiAlbumConfirmationDialogMessage": "{count, plural, =1{هل تريد حذف هذه الألبومات والعنصر الموجود فيها؟} other{احذف هذه الألبومات و {count} العناصر فيها؟}}",
"@deleteMultiAlbumConfirmationDialogMessage": {
@ -1608,5 +1594,33 @@
"editEntryLocationDialogTimeShift": "التحول الزمني",
"@editEntryLocationDialogTimeShift": {},
"removeEntryMetadataDialogAll": "الكل",
"@removeEntryMetadataDialogAll": {}
"@removeEntryMetadataDialogAll": {},
"sortByPath": "حسب المسار",
"@sortByPath": {},
"searchFormatSectionTitle": "التنسيقات",
"@searchFormatSectionTitle": {},
"chipActionGroup": "تغيير التجميع",
"@chipActionGroup": {},
"createButtonLabel": "خلق",
"@createButtonLabel": {},
"sectionNone": "لا يوجد أقسام",
"@sectionNone": {},
"chipActionCreateGroup": "إنشاء مجموعة",
"@chipActionCreateGroup": {},
"albumTierGroups": "المجموعات",
"@albumTierGroups": {},
"newGroupDialogTitle": "مجموعة جديدة",
"@newGroupDialogTitle": {},
"newGroupDialogNameLabel": "اسم المجموعة",
"@newGroupDialogNameLabel": {},
"groupAlreadyExists": "المجموعة موجودة بالفعل",
"@groupAlreadyExists": {},
"groupEmpty": "لا توجد مجموعات",
"@groupEmpty": {},
"ungrouped": "غير مجمعة",
"@ungrouped": {},
"groupPickerTitle": "اختر المجموعة",
"@groupPickerTitle": {},
"groupPickerUseThisGroupButton": "استخدم هذه المجموعة",
"@groupPickerUseThisGroupButton": {}
}

View file

@ -142,5 +142,15 @@
"chipActionUnpin": "Sabitləməyin",
"@chipActionUnpin": {},
"chipActionRename": "Bir də adlandır",
"@chipActionRename": {}
"@chipActionRename": {},
"chipActionDecompose": "Böl",
"@chipActionDecompose": {},
"chipActionCreateAlbum": "Albom yarat",
"@chipActionCreateAlbum": {},
"createButtonLabel": "YARAT",
"@createButtonLabel": {},
"chipActionGroup": "Qruplandırmanı dəyişdir",
"@chipActionGroup": {},
"chipActionCreateGroup": "Qrup yarat",
"@chipActionCreateGroup": {}
}

View file

@ -561,14 +561,6 @@
"@viewerInfoPageTitle": {},
"viewerErrorDoesNotExist": "Файл больш не існуе.",
"@viewerErrorDoesNotExist": {},
"filePickerUseThisFolder": "Выкарыстоўваць гэтую тэчку",
"@filePickerUseThisFolder": {},
"filePickerNoItems": "Няма элементаў",
"@filePickerNoItems": {},
"filePickerOpenFrom": "Адкрыць з",
"@filePickerOpenFrom": {},
"filePickerShowHiddenFiles": "Паказаць схаваныя файлы",
"@filePickerShowHiddenFiles": {},
"sourceViewerPageTitle": "Крыніца",
"@sourceViewerPageTitle": {},
"panoramaDisableSensorControl": "Адключыць сэнсарнае кіраванне",
@ -631,8 +623,6 @@
"@tagEditorDiscardDialogMessage": {},
"tagPlaceholderCountry": "Краіна",
"@tagPlaceholderCountry": {},
"filePickerDoNotShowHiddenFiles": "Не паказваць схаваныя файлы",
"@filePickerDoNotShowHiddenFiles": {},
"viewerInfoOpenEmbeddedFailureFeedback": "Не ўдалося атрымаць убудаваныя даныя",
"@viewerInfoOpenEmbeddedFailureFeedback": {},
"mapAttributionOsmHot": "Пліткі ад [HOT](https://www.hotosm.org/) • Арганізаваны [OSM France](https://openstreetmap.fr/)",
@ -927,8 +917,6 @@
"@settingsActionImport": {},
"locationPickerUseThisLocationButton": "Выкарыстоўваць гэтае месцазнаходжанне",
"@locationPickerUseThisLocationButton": {},
"collectionGroupNone": "Не групаваць",
"@collectionGroupNone": {},
"searchRatingSectionTitle": "Рэйтынгі",
"@searchRatingSectionTitle": {},
"settingsDisabled": "Адкл.",
@ -1043,8 +1031,6 @@
"@aboutLinkPolicy": {},
"sortOrderLowestFirst": "Спачатку з нізкім",
"@sortOrderLowestFirst": {},
"albumGroupNone": "Не групаваць",
"@albumGroupNone": {},
"countryPageTitle": "Краіны",
"@countryPageTitle": {},
"albumGroupType": "Па тыпу",

View file

@ -266,7 +266,7 @@
"@welcomeMessage": {},
"welcomeOptional": "Опционално",
"@welcomeOptional": {},
"itemCount": "{count, plural, =1{{count} обект} few{{count} обекта} other{{count} обекта}}",
"itemCount": "{count, plural, =1{{count} елемент} few{{count} елемента} other{{count} елемента}}",
"@itemCount": {
"placeholders": {
"count": {
@ -663,7 +663,7 @@
"@videoStartOverButtonLabel": {},
"videoResumeButtonLabel": "ПРОДЪЛЖИ",
"@videoResumeButtonLabel": {},
"setCoverDialogLatest": "Последен обект",
"setCoverDialogLatest": "Последен елемент",
"@setCoverDialogLatest": {},
"setCoverDialogCustom": "Персонален",
"@setCoverDialogCustom": {},
@ -725,7 +725,7 @@
"@exportEntryDialogWriteMetadata": {},
"renameEntryDialogLabel": "Ново име",
"@renameEntryDialogLabel": {},
"editEntryDialogCopyFromItem": "Копиране от друг обект",
"editEntryDialogCopyFromItem": "Копиране от друг елемент",
"@editEntryDialogCopyFromItem": {},
"editEntryDialogTargetFieldsHeader": "Полета за промяна",
"@editEntryDialogTargetFieldsHeader": {},
@ -873,8 +873,6 @@
"@collectionGroupMonth": {},
"collectionGroupDay": "По дни",
"@collectionGroupDay": {},
"collectionGroupNone": "Не групирай",
"@collectionGroupNone": {},
"sectionUnknown": "Неизвестно",
"@sectionUnknown": {},
"dateToday": "Днес",
@ -978,8 +976,6 @@
"@albumGroupType": {},
"albumGroupVolume": "По обем на съхранение",
"@albumGroupVolume": {},
"albumGroupNone": "Без групиране",
"@albumGroupNone": {},
"albumMimeTypeMixed": "Разни",
"@albumMimeTypeMixed": {},
"albumPickPageTitleCopy": "Копирай в албум",
@ -1322,7 +1318,7 @@
"@settingsStorageAccessTile": {},
"settingsAccessibilityShowPinchGestureAlternatives": "Показване на алтернативи за жестове с мултитъч",
"@settingsAccessibilityShowPinchGestureAlternatives": {},
"settingsDisplaySectionTitle": "Изобразяване",
"settingsDisplaySectionTitle": "Изглед",
"@settingsDisplaySectionTitle": {},
"settingsThemeBrightnessTile": "Тема",
"@settingsThemeBrightnessTile": {},
@ -1384,8 +1380,6 @@
"@tagPlaceholderState": {},
"tagPlaceholderPlace": "Локация",
"@tagPlaceholderPlace": {},
"filePickerShowHiddenFiles": "Показване на скритите файлове",
"@filePickerShowHiddenFiles": {},
"chipActionRemove": "Премахване",
"@chipActionRemove": {},
"albumTierDynamic": "Динамични",
@ -1454,7 +1448,7 @@
"@settingsAllowErrorReporting": {},
"settingsEnableBin": "Използвайте кошчето",
"@settingsEnableBin": {},
"settingsEnableBinSubtitle": "Съхранявайте изтритите обекти за 30 дни",
"settingsEnableBinSubtitle": "Съхранявайте изтритите елементи за 30 дни",
"@settingsEnableBinSubtitle": {},
"settingsAllowMediaManagement": "Разрешаване на управление на медиите",
"@settingsAllowMediaManagement": {},
@ -1571,10 +1565,6 @@
"@tagEditorSectionPlaceholders": {},
"tagPlaceholderCountry": "Държава",
"@tagPlaceholderCountry": {},
"filePickerDoNotShowHiddenFiles": "Не показвай скритите файлове",
"@filePickerDoNotShowHiddenFiles": {},
"filePickerOpenFrom": "Отворете от",
"@filePickerOpenFrom": {},
"settingsVideoGestureSideDoubleTapSeek": "Докоснете два пъти краищата на екрана, за превъртане назад/напред",
"@settingsVideoGestureSideDoubleTapSeek": {},
"settingsSaveSearchHistory": "Запазване на историята на търсенето",
@ -1617,14 +1607,10 @@
"@viewerErrorDoesNotExist": {},
"mapAttributionOsmData": "Данни карта © [OpenStreetMap](https://www.openstreetmap.org/copyright) участници",
"@mapAttributionOsmData": {},
"filePickerNoItems": "Не откривам нищо",
"@filePickerNoItems": {},
"newDynamicAlbumDialogTitle": "Нов динамичен албум",
"@newDynamicAlbumDialogTitle": {},
"tagEditorDiscardDialogMessage": "Искате ли да отхвърлите промените?",
"@tagEditorDiscardDialogMessage": {},
"filePickerUseThisFolder": "Използвай тази папка",
"@filePickerUseThisFolder": {},
"chipActionDecompose": "Раздели",
"@chipActionDecompose": {},
"coordinateFormatDdm": "Градуси, десетични минути",
@ -1634,5 +1620,23 @@
"editEntryLocationDialogTimeShift": "Изместване на времето",
"@editEntryLocationDialogTimeShift": {},
"removeEntryMetadataDialogAll": "Всички",
"@removeEntryMetadataDialogAll": {}
"@removeEntryMetadataDialogAll": {},
"sortByPath": "Според пътя",
"@sortByPath": {},
"searchFormatSectionTitle": "Формати",
"@searchFormatSectionTitle": {},
"chipActionCreateGroup": "Създайте група",
"@chipActionCreateGroup": {},
"chipActionGroup": "Групиране",
"@chipActionGroup": {},
"newGroupDialogTitle": "Нова Група",
"@newGroupDialogTitle": {},
"groupAlreadyExists": "Групата вече съществува",
"@groupAlreadyExists": {},
"albumTierGroups": "Групи",
"@albumTierGroups": {},
"groupPickerUseThisGroupButton": "Използвайте тази група",
"@groupPickerUseThisGroupButton": {},
"newGroupDialogNameLabel": "Име на групата",
"@newGroupDialogNameLabel": {}
}

View file

@ -839,8 +839,6 @@
"@collectionGroupAlbum": {},
"collectionGroupMonth": "Per mes",
"@collectionGroupMonth": {},
"collectionGroupNone": "No per grup",
"@collectionGroupNone": {},
"collectionGroupDay": "Per dia",
"@collectionGroupDay": {},
"dateToday": "Avui",
@ -949,8 +947,6 @@
"@albumGroupType": {},
"albumGroupVolume": "Per volum demmagatzematge",
"@albumGroupVolume": {},
"albumGroupNone": "No agrupar",
"@albumGroupNone": {},
"albumMimeTypeMixed": "Barrejat",
"@albumMimeTypeMixed": {},
"albumPickPageTitleCopy": "Copiar a Àlbum",
@ -1345,16 +1341,6 @@
"@panoramaDisableSensorControl": {},
"sourceViewerPageTitle": "Font",
"@sourceViewerPageTitle": {},
"filePickerShowHiddenFiles": "Mostra arxius amagats",
"@filePickerShowHiddenFiles": {},
"filePickerDoNotShowHiddenFiles": "No mostris arxius amagats",
"@filePickerDoNotShowHiddenFiles": {},
"filePickerOpenFrom": "Obrir des de",
"@filePickerOpenFrom": {},
"filePickerNoItems": "Sense element",
"@filePickerNoItems": {},
"filePickerUseThisFolder": "Utilitza aquesta carpeta",
"@filePickerUseThisFolder": {},
"settingsVideoControlsPageTitle": "Controls",
"@settingsVideoControlsPageTitle": {},
"settingsSubtitleThemeTextAlignmentDialogTitle": "Ajustament de Text",
@ -1608,5 +1594,9 @@
"dynamicAlbumAlreadyExists": "Làlbum dinàmic ja existeix",
"@dynamicAlbumAlreadyExists": {},
"sortOrderShortestFirst": "El més curt primer",
"@sortOrderShortestFirst": {}
"@sortOrderShortestFirst": {},
"sortByPath": "Per ruta",
"@sortByPath": {},
"searchFormatSectionTitle": "Formats",
"@searchFormatSectionTitle": {}
}

View file

@ -923,16 +923,6 @@
"@panoramaEnableSensorControl": {},
"sourceViewerPageTitle": "Zdroj",
"@sourceViewerPageTitle": {},
"filePickerShowHiddenFiles": "Zobrazit skryté soubory",
"@filePickerShowHiddenFiles": {},
"filePickerDoNotShowHiddenFiles": "Nezobrazovat skryté soubory",
"@filePickerDoNotShowHiddenFiles": {},
"filePickerOpenFrom": "Otevřít z",
"@filePickerOpenFrom": {},
"filePickerNoItems": "Žádné položky",
"@filePickerNoItems": {},
"filePickerUseThisFolder": "Použít tuto složku",
"@filePickerUseThisFolder": {},
"pickTooltip": "Vybrat",
"@pickTooltip": {},
"doubleBackExitMessage": "Pro ukončení klepněte znovu na „zpět“.",
@ -1041,8 +1031,6 @@
"@drawerCollectionSphericalVideos": {},
"aboutLicensesBanner": "Tato aplikace využívá tyto open-source baličky a knihovny.",
"@aboutLicensesBanner": {},
"collectionGroupNone": "Neseskupovat",
"@collectionGroupNone": {},
"aboutLicensesSectionTitle": "Licence open-source",
"@aboutLicensesSectionTitle": {},
"collectionActionHideTitleSearch": "Skrýt filtr dle názvu",
@ -1219,8 +1207,6 @@
"@sortOrderLargestFirst": {},
"sortOrderSmallestFirst": "Od nejužšího",
"@sortOrderSmallestFirst": {},
"albumGroupNone": "Neseskupovat",
"@albumGroupNone": {},
"albumVideoCaptures": "Snímky videa",
"@albumVideoCaptures": {},
"countryPageTitle": "Země",

View file

@ -555,12 +555,6 @@
"@tagEditorDiscardDialogMessage": {},
"panoramaEnableSensorControl": "Aktivér sensorstyring",
"@panoramaEnableSensorControl": {},
"filePickerOpenFrom": "Åbn fra",
"@filePickerOpenFrom": {},
"filePickerNoItems": "Ingen elementer",
"@filePickerNoItems": {},
"filePickerUseThisFolder": "Brug denne mappe",
"@filePickerUseThisFolder": {},
"authenticateToUnlockVault": "Godkend for at oplåse boks",
"@authenticateToUnlockVault": {},
"exportEntryDialogFormat": "Format:",
@ -841,8 +835,6 @@
"@collectionGroupMonth": {},
"collectionGroupDay": "Efter dag",
"@collectionGroupDay": {},
"collectionGroupNone": "Gruppér ikke",
"@collectionGroupNone": {},
"collectionDeleteFailureFeedback": "{count, plural, =1{Kunne ikke slette 1 element} other{Kunne ikke slette {count} elementer}}",
"@collectionDeleteFailureFeedback": {
"placeholders": {
@ -858,7 +850,7 @@
"@drawerCollectionRaws": {},
"sortByRating": "Efter bedømmelse",
"@sortByRating": {},
"sortByAlbumFileName": "Efter album og filnavn",
"sortByAlbumFileName": "Efter album og elementtitel",
"@sortByAlbumFileName": {},
"albumGroupVolume": "Efter lagervolume",
"@albumGroupVolume": {},
@ -1288,7 +1280,7 @@
"@tileLayoutGrid": {},
"removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "XMP er påkrævet for at afspille videoen i et bevægelsesfoto.\n\nEr du sikker på, at du vil fjerne den?",
"@removeEntryMetadataMotionPhotoXmpWarningDialogMessage": {},
"viewDialogGroupSectionTitle": "Gruppér",
"viewDialogGroupSectionTitle": "Sektioner",
"@viewDialogGroupSectionTitle": {},
"hideFilterConfirmationDialogMessage": "Matchende fotos og videoer skjules fra din samling. Du kan vise dem igen i indstillingerne “Privatliv”.\n\nEr du sikker på, at du vil skjule dem?",
"@hideFilterConfirmationDialogMessage": {},
@ -1423,20 +1415,14 @@
"@mapAttributionOsmData": {},
"viewerInfoSearchSuggestionRights": "Rettigheder",
"@viewerInfoSearchSuggestionRights": {},
"filePickerShowHiddenFiles": "Vis skjulte filer",
"@filePickerShowHiddenFiles": {},
"viewerInfoOpenEmbeddedFailureFeedback": "Kunne ikke udtrække indlejrede data",
"@viewerInfoOpenEmbeddedFailureFeedback": {},
"tagPlaceholderPlace": "Sted",
"@tagPlaceholderPlace": {},
"filePickerDoNotShowHiddenFiles": "Vis ikke skjulte filer",
"@filePickerDoNotShowHiddenFiles": {},
"exportEntryDialogWriteMetadata": "Skriv metadata",
"@exportEntryDialogWriteMetadata": {},
"editEntryDateDialogCopyField": "Kopiér fra en anden dato",
"@editEntryDateDialogCopyField": {},
"albumGroupNone": "Gruppér ikke",
"@albumGroupNone": {},
"albumEmpty": "Ingen album",
"@albumEmpty": {},
"albumPageTitle": "Album",
@ -1552,5 +1538,115 @@
"settingsViewerQuickActionEmpty": "Ingen knapper",
"@settingsViewerQuickActionEmpty": {},
"chipActionFilterOut": "Filtrer ud",
"@chipActionFilterOut": {}
"@chipActionFilterOut": {},
"mapStyleOsmHot": "Humanitært OSM",
"@mapStyleOsmHot": {},
"collectionDeselectSectionTooltip": "Fravælg sektion",
"@collectionDeselectSectionTooltip": {},
"editEntryLocationDialogImportGpx": "Importér GPX",
"@editEntryLocationDialogImportGpx": {},
"editEntryLocationDialogTimeShift": "Tidsskift",
"@editEntryLocationDialogTimeShift": {},
"videoStreamSelectionDialogTrack": "Spor",
"@videoStreamSelectionDialogTrack": {},
"albumGroupTier": "Efter kategori",
"@albumGroupTier": {},
"settingsVideoEnableHardwareAcceleration": "Hardwareacceleration",
"@settingsVideoEnableHardwareAcceleration": {},
"settingsViewerSectionTitle": "Fremviser",
"@settingsViewerSectionTitle": {},
"openMapPageTooltip": "Se på kortside",
"@openMapPageTooltip": {},
"settingsCollectionBurstPatternsTile": "Filnavnmønstre",
"@settingsCollectionBurstPatternsTile": {},
"wallpaperUseScrollEffect": "Brug rulleeffekt på startside",
"@wallpaperUseScrollEffect": {},
"editEntryDateDialogSourceFileModifiedDate": "Filens ændringsdato",
"@editEntryDateDialogSourceFileModifiedDate": {},
"editEntryDateDialogShift": "Skift",
"@editEntryDateDialogShift": {},
"chipActionDecompose": "Split",
"@chipActionDecompose": {},
"coordinateFormatDdm": "DDM",
"@coordinateFormatDdm": {},
"videoActionShowNextFrame": "Vis næste frame",
"@videoActionShowNextFrame": {},
"mapStyleStamenWatercolor": "Stamen Watercolor",
"@mapStyleStamenWatercolor": {},
"drawerCollectionAll": "Alle samlinger",
"@drawerCollectionAll": {},
"settingsThumbnailShowVideoDuration": "Vis videovarighed",
"@settingsThumbnailShowVideoDuration": {},
"settingsThemeColorHighlights": "Farvemarkeringer",
"@settingsThemeColorHighlights": {},
"viewerInfoSearchEmpty": "Ingen matchende nøgler",
"@viewerInfoSearchEmpty": {},
"removeEntryMetadataDialogAll": "Alle",
"@removeEntryMetadataDialogAll": {},
"aboutCreditsSectionTitle": "Kreditering",
"@aboutCreditsSectionTitle": {},
"settingsCollectionQuickActionTabSelecting": "Valg",
"@settingsCollectionQuickActionTabSelecting": {},
"settingsCollectionQuickActionTabBrowsing": "Browsing",
"@settingsCollectionQuickActionTabBrowsing": {},
"settingsViewerQuickActionEditorBanner": "Tryk og hold for at flytte knapper og vælge, hvilke handlinger der vises i fremviseren.",
"@settingsViewerQuickActionEditorBanner": {},
"settingsAllowInstalledAppAccess": "Tillad adgang til app-lager",
"@settingsAllowInstalledAppAccess": {},
"viewerInfoBackToViewerTooltip": "Tilbage til fremviser",
"@viewerInfoBackToViewerTooltip": {},
"videoActionShowPreviousFrame": "Vis forrige frame",
"@videoActionShowPreviousFrame": {},
"collectionSelectSectionTooltip": "Vælg sektion",
"@collectionSelectSectionTooltip": {},
"videoStreamSelectionDialogNoSelection": "Der er ingen andre spor.",
"@videoStreamSelectionDialogNoSelection": {},
"addShortcutDialogLabel": "Genvejsetiket",
"@addShortcutDialogLabel": {},
"moveUndatedConfirmationDialogMessage": "Gem elementdatoer, før du fortsætter?",
"@moveUndatedConfirmationDialogMessage": {},
"albumMimeTypeMixed": "Blandet",
"@albumMimeTypeMixed": {},
"videoActionCaptureFrame": "Tag billede af frame",
"@videoActionCaptureFrame": {},
"videoActionSelectStreams": "Vælg spor",
"@videoActionSelectStreams": {},
"videoActionABRepeat": "A-B gentagelse",
"@videoActionABRepeat": {},
"viewerActionLock": "Lås fremviser",
"@viewerActionLock": {},
"viewerActionUnlock": "Oplås fremviser",
"@viewerActionUnlock": {},
"keepScreenOnViewerOnly": "Kun fremvisningsside",
"@keepScreenOnViewerOnly": {},
"widgetOpenPageViewer": "Åbn fremviser",
"@widgetOpenPageViewer": {},
"sortByPath": "Efter sti",
"@sortByPath": {},
"searchFormatSectionTitle": "Formater",
"@searchFormatSectionTitle": {},
"createButtonLabel": "OPRET",
"@createButtonLabel": {},
"chipActionGroup": "Ændr gruppering",
"@chipActionGroup": {},
"chipActionCreateGroup": "Opret gruppe",
"@chipActionCreateGroup": {},
"albumTierGroups": "Grupper",
"@albumTierGroups": {},
"newGroupDialogTitle": "Ny gruppe",
"@newGroupDialogTitle": {},
"newGroupDialogNameLabel": "Gruppenavn",
"@newGroupDialogNameLabel": {},
"groupAlreadyExists": "Gruppen findes allerede",
"@groupAlreadyExists": {},
"groupEmpty": "Ingen grupper",
"@groupEmpty": {},
"groupPickerTitle": "Vælg gruppe",
"@groupPickerTitle": {},
"groupPickerUseThisGroupButton": "Brug denne gruppe",
"@groupPickerUseThisGroupButton": {},
"ungrouped": "Gruppe opløst",
"@ungrouped": {},
"sectionNone": "Ingen sektioner",
"@sectionNone": {}
}

View file

@ -463,7 +463,7 @@
"@menuActionStats": {},
"viewDialogSortSectionTitle": "Sortieren",
"@viewDialogSortSectionTitle": {},
"viewDialogGroupSectionTitle": "Gruppe",
"viewDialogGroupSectionTitle": "Abschnitte",
"@viewDialogGroupSectionTitle": {},
"viewDialogLayoutSectionTitle": "Layout",
"@viewDialogLayoutSectionTitle": {},
@ -557,8 +557,6 @@
"@collectionGroupMonth": {},
"collectionGroupDay": "Nach Tag",
"@collectionGroupDay": {},
"collectionGroupNone": "Nicht gruppieren",
"@collectionGroupNone": {},
"sectionUnknown": "Unbekannt",
"@sectionUnknown": {},
"dateToday": "Heute",
@ -661,8 +659,6 @@
"@albumGroupType": {},
"albumGroupVolume": "Nach Speichervolumen",
"@albumGroupVolume": {},
"albumGroupNone": "Nicht gruppieren",
"@albumGroupNone": {},
"albumMimeTypeMixed": "Gemischt",
"@albumMimeTypeMixed": {},
"albumPickPageTitleCopy": "In Album kopieren",
@ -1111,16 +1107,6 @@
"@panoramaDisableSensorControl": {},
"sourceViewerPageTitle": "Quelle",
"@sourceViewerPageTitle": {},
"filePickerShowHiddenFiles": "Versteckte Dateien anzeigen",
"@filePickerShowHiddenFiles": {},
"filePickerDoNotShowHiddenFiles": "Versteckte Dateien nicht anzeigen",
"@filePickerDoNotShowHiddenFiles": {},
"filePickerOpenFrom": "Öffnen von",
"@filePickerOpenFrom": {},
"filePickerNoItems": "Keine Elemente",
"@filePickerNoItems": {},
"filePickerUseThisFolder": "Diesen Ordner verwenden",
"@filePickerUseThisFolder": {},
"widgetOpenPageCollection": "Sammlung öffnen",
"@widgetOpenPageCollection": {},
"durationDialogSeconds": "Sekunden",
@ -1410,5 +1396,39 @@
"chipActionDecompose": "Aufschlüsseln",
"@chipActionDecompose": {},
"editEntryLocationDialogImportGpx": "GPX importieren",
"@editEntryLocationDialogImportGpx": {}
"@editEntryLocationDialogImportGpx": {},
"editEntryLocationDialogTimeShift": "Zeitverschiebung",
"@editEntryLocationDialogTimeShift": {},
"removeEntryMetadataDialogAll": "Alle",
"@removeEntryMetadataDialogAll": {},
"searchFormatSectionTitle": "Formate",
"@searchFormatSectionTitle": {},
"sortByPath": "Nach Pfad",
"@sortByPath": {},
"groupEmpty": "Keine Gruppen",
"@groupEmpty": {},
"newGroupDialogTitle": "Neue Gruppe",
"@newGroupDialogTitle": {},
"coordinateFormatDdm": "DDM",
"@coordinateFormatDdm": {},
"createButtonLabel": "ERSTELLEN",
"@createButtonLabel": {},
"chipActionGroup": "Gruppe",
"@chipActionGroup": {},
"chipActionCreateGroup": "Gruppe erstellen",
"@chipActionCreateGroup": {},
"albumTierGroups": "Gruppen",
"@albumTierGroups": {},
"sectionNone": "Keine Abschnitte",
"@sectionNone": {},
"newGroupDialogNameLabel": "Gruppenname",
"@newGroupDialogNameLabel": {},
"groupAlreadyExists": "Gruppe existiert bereits",
"@groupAlreadyExists": {},
"ungrouped": "Nicht gruppiert",
"@ungrouped": {},
"groupPickerTitle": "Gruppe auswählen",
"@groupPickerTitle": {},
"groupPickerUseThisGroupButton": "Diese Gruppe verwenden",
"@groupPickerUseThisGroupButton": {}
}

View file

@ -377,9 +377,9 @@
"@renameProcessorCounter": {},
"renameProcessorName": "Όνομα",
"@renameProcessorName": {},
"deleteSingleAlbumConfirmationDialogMessage": "{count, plural, =1{Διαγραφή αυτού του άλμπουμ και του περιεχομένου του;} other{Διαγράψτε αυτό το άλμπουμ και όλα τα {count} στοιχεία του;}}",
"deleteSingleAlbumConfirmationDialogMessage": "{count, plural, =1{Διαγράψτε αυτό το άλμπουμ και το αντικείμενο σε αυτό;} other{Διαγράψτε αυτό το άλμπουμ και τα {count} αντικείμενα σε αυτό;}}",
"@deleteSingleAlbumConfirmationDialogMessage": {},
"deleteMultiAlbumConfirmationDialogMessage": "{count, plural, =1{Διαγράψτε αυτά τα άλμπουμ και το περιεχόμενό τους;} other{Διαγράψτε αυτά τα άλμπουμ και όλα τα {count} στοιχεία τους;}}",
"deleteMultiAlbumConfirmationDialogMessage": "{count, plural, =1{Διαγράψτε αυτά τα άλμπουμ και τα αντικείμενα σε αυτά;} other{Διαγράψτε αυτά τα άλμπουμ και τα {count} αντικείμενα σε αυτά;}}",
"@deleteMultiAlbumConfirmationDialogMessage": {},
"exportEntryDialogFormat": "Μορφή:",
"@exportEntryDialogFormat": {},
@ -463,7 +463,7 @@
"@menuActionStats": {},
"viewDialogSortSectionTitle": "Ταξινομηση",
"@viewDialogSortSectionTitle": {},
"viewDialogGroupSectionTitle": "Ομαδοποιηση",
"viewDialogGroupSectionTitle": "Τμήματα",
"@viewDialogGroupSectionTitle": {},
"viewDialogLayoutSectionTitle": "Διαταξη",
"@viewDialogLayoutSectionTitle": {},
@ -557,8 +557,6 @@
"@collectionGroupMonth": {},
"collectionGroupDay": "Ανά ημέρα",
"@collectionGroupDay": {},
"collectionGroupNone": "Να μην γίνει ομαδοποίηση",
"@collectionGroupNone": {},
"sectionUnknown": "Χωρίς λεπτομέρειες",
"@sectionUnknown": {},
"dateToday": "Σήμερα",
@ -661,8 +659,6 @@
"@albumGroupType": {},
"albumGroupVolume": "Ανά αποθηκευτική μονάδα",
"@albumGroupVolume": {},
"albumGroupNone": "Να μην γίνει ομαδοποίηση",
"@albumGroupNone": {},
"albumMimeTypeMixed": "Μικτα",
"@albumMimeTypeMixed": {},
"albumPickPageTitleCopy": "Αντιγραφή στο άλμπουμ",
@ -873,7 +869,7 @@
"@settingsSlideshowAnimatedZoomEffect": {},
"settingsSlideshowTransitionTile": "Μετάβαση",
"@settingsSlideshowTransitionTile": {},
"settingsSlideshowIntervalTile": "Διάρκεια",
"settingsSlideshowIntervalTile": "Διάστημα",
"@settingsSlideshowIntervalTile": {},
"settingsSlideshowVideoPlaybackTile": "Αναπαραγωγή βίντεο",
"@settingsSlideshowVideoPlaybackTile": {},
@ -1107,16 +1103,6 @@
"@panoramaDisableSensorControl": {},
"sourceViewerPageTitle": "Πηγη",
"@sourceViewerPageTitle": {},
"filePickerShowHiddenFiles": "Εμφάνιση κρυφών αρχείων",
"@filePickerShowHiddenFiles": {},
"filePickerDoNotShowHiddenFiles": "Να μην εμφανίζονται τα κρυφά αρχεία",
"@filePickerDoNotShowHiddenFiles": {},
"filePickerOpenFrom": "Άνοιγμα από",
"@filePickerOpenFrom": {},
"filePickerNoItems": "Κανένα στοιχείο",
"@filePickerNoItems": {},
"filePickerUseThisFolder": "Χρησιμοποιήστε αυτόν τον φάκελο",
"@filePickerUseThisFolder": {},
"widgetOpenPageCollection": "Ανοιχτή συλλογή",
"@widgetOpenPageCollection": {},
"durationDialogSeconds": "Δευτερόλεπτα",
@ -1320,5 +1306,129 @@
"overlayHistogramLuminance": "Φωτεινότητα",
"@overlayHistogramLuminance": {},
"chipActionShowCollection": "Εμφάνιση στη Συλλογή",
"@chipActionShowCollection": {}
"@chipActionShowCollection": {},
"mapAttributionOsmHot": "Πλακάκια από [HOT](https://www.hotosm.org/) • Φιλοξενείται από [OSM France](https://openstreetmap.fr/)",
"@mapAttributionOsmHot": {},
"mapAttributionStamen": "Πλακάκια από [Stamen Design](https://stamen.com), [CC BY 3.0](https://creativecommons.org/licenses/by/3.0)",
"@mapAttributionStamen": {},
"editEntryLocationDialogImportGpx": "Εισαγωγή GPX",
"@editEntryLocationDialogImportGpx": {},
"editEntryLocationDialogTimeShift": "Χρονική μετατόπιση",
"@editEntryLocationDialogTimeShift": {},
"aboutDataUsageData": "Δεδομένα",
"@aboutDataUsageData": {},
"collectionActionAddDynamicAlbum": "Προσθήκη δυναμικού άλμπουμ",
"@collectionActionAddDynamicAlbum": {},
"collectionActionSetHome": "Ορίστε ως σπίτι",
"@collectionActionSetHome": {},
"sortByPath": "Από τη διαδρομή",
"@sortByPath": {},
"explorerPageTitle": "Εξερεύνηση",
"@explorerPageTitle": {},
"searchFormatSectionTitle": "Μορφές",
"@searchFormatSectionTitle": {},
"settingsViewerShowHistogram": "Εμφάνιση ιστογράμματος",
"@settingsViewerShowHistogram": {},
"settingsForceWesternArabicNumeralsTile": "Δύναμη αραβικών αριθμών",
"@settingsForceWesternArabicNumeralsTile": {},
"mapAttributionOsmData": "Δεδομένα χάρτη © [OpenStreetMap](https://www.openstreetmap.org/copyright) συνεισφέροντες",
"@mapAttributionOsmData": {},
"mapAttributionOsmLiberty": "Πλακάκια από [OpenMapTiles](https://www.openmaptiles.org/), [CC BY](http://creativecommons.org/licenses/by/4.0) • Φιλοξενείται από [OSM Americana](https://tile.ourmap.us)",
"@mapAttributionOsmLiberty": {},
"aboutDataUsageMisc": "Διάφορα στοιχεία",
"@aboutDataUsageMisc": {},
"selectStorageVolumeDialogTitle": "Επιλέξτε Αποθήκευση",
"@selectStorageVolumeDialogTitle": {},
"renameProcessorHash": "Κατακερματισμός",
"@renameProcessorHash": {},
"aboutDataUsageSectionTitle": "Χρήση δεδομένων",
"@aboutDataUsageSectionTitle": {},
"chipActionDecompose": "Διάσπαση",
"@chipActionDecompose": {},
"entryActionCast": "Εκτέλεση",
"@entryActionCast": {},
"videoActionShowPreviousFrame": "Εμφάνιση προηγούμενου καρέ",
"@videoActionShowPreviousFrame": {},
"videoActionABRepeat": "Επανάληψη A-B",
"@videoActionABRepeat": {},
"videoRepeatActionSetStart": "Ορισμός έναρξης",
"@videoRepeatActionSetStart": {},
"videoRepeatActionSetEnd": "Ορισμός τέλους",
"@videoRepeatActionSetEnd": {},
"albumTierDynamic": "Δυναμικό",
"@albumTierDynamic": {},
"newDynamicAlbumDialogTitle": "Νέο δυναμικό άλμπουμ",
"@newDynamicAlbumDialogTitle": {},
"dynamicAlbumAlreadyExists": "Το δυναμικό άλμπουμ υπάρχει ήδη",
"@dynamicAlbumAlreadyExists": {},
"setHomeCustom": "Προσαρμοσμένο",
"@setHomeCustom": {},
"settingsThumbnailShowHdrIcon": "Εμφάνιση εικονιδίου HDR",
"@settingsThumbnailShowHdrIcon": {},
"coordinateFormatDdm": "DDM",
"@coordinateFormatDdm": {},
"chipActionRemove": "Αφαίρεση",
"@chipActionRemove": {},
"newAlbumDialogAlbumAlreadyExistsHelper": "Το άλμπουμ υπάρχει ήδη",
"@newAlbumDialogAlbumAlreadyExistsHelper": {},
"explorerActionSelectStorageVolume": "Επιλέξτε αποθηκευτικό χώρο",
"@explorerActionSelectStorageVolume": {},
"removeEntryMetadataDialogAll": "Όλα",
"@removeEntryMetadataDialogAll": {},
"aboutDataUsageCache": "Κρυφή μνήμη",
"@aboutDataUsageCache": {},
"castDialogTitle": "Συσκευές Απεικόνισης",
"@castDialogTitle": {},
"aboutDataUsageDatabase": "Βάση δεδομένων",
"@aboutDataUsageDatabase": {},
"sortByDuration": "Με διάρκεια",
"@sortByDuration": {},
"appExportDynamicAlbums": "Δυναμικά άλμπουμ",
"@appExportDynamicAlbums": {},
"mapStyleOsmLiberty": "OSM Ελευθερία",
"@mapStyleOsmLiberty": {},
"mapStyleOpenTopoMap": "OpenTopoMap",
"@mapStyleOpenTopoMap": {},
"aboutDataUsageInternal": "Εσωτερικά",
"@aboutDataUsageInternal": {},
"aboutDataUsageExternal": "Εξωτερικά",
"@aboutDataUsageExternal": {},
"aboutDataUsageClearCache": "Εκκαθάριση μνήμης",
"@aboutDataUsageClearCache": {},
"videoActionShowNextFrame": "Εμφάνιση επόμενου καρέ",
"@videoActionShowNextFrame": {},
"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": {},
"sortOrderShortestFirst": "Ο συντομότερος πρώτος",
"@sortOrderShortestFirst": {},
"sortOrderLongestFirst": "Μακρύτερο πρώτο",
"@sortOrderLongestFirst": {},
"stopTooltip": "Σταμάτησε",
"@stopTooltip": {},
"chipActionGoToExplorerPage": "Εμφάνιση στην Εξερεύνηση",
"@chipActionGoToExplorerPage": {},
"chipActionCreateGroup": "Δημιουργία ομάδας",
"@chipActionCreateGroup": {},
"newGroupDialogNameLabel": "Όνομα ομάδας",
"@newGroupDialogNameLabel": {},
"groupPickerUseThisGroupButton": "Χρησιμοποιήστε αυτή την ομάδα",
"@groupPickerUseThisGroupButton": {},
"sectionNone": "Όχι τμήματα",
"@sectionNone": {},
"createButtonLabel": "ΔΗΜΙΟΥΡΓΙΑ",
"@createButtonLabel": {},
"chipActionGroup": "Ομάδα",
"@chipActionGroup": {},
"albumTierGroups": "Ομάδες",
"@albumTierGroups": {},
"newGroupDialogTitle": "Νέα Ομάδα",
"@newGroupDialogTitle": {},
"groupAlreadyExists": "Η ομάδα υπάρχει ήδη",
"@groupAlreadyExists": {},
"groupEmpty": "Όχι ομάδες",
"@groupEmpty": {},
"ungrouped": "Μη ομαδοποιημένο",
"@ungrouped": {},
"groupPickerTitle": "Επιλογή ομάδας",
"@groupPickerTitle": {}
}

View file

@ -60,6 +60,7 @@
},
"applyButtonLabel": "APPLY",
"createButtonLabel": "CREATE",
"deleteButtonLabel": "DELETE",
"nextButtonLabel": "NEXT",
"showButtonLabel": "SHOW",
@ -104,9 +105,11 @@
"chipActionLock": "Lock",
"chipActionPin": "Pin to top",
"chipActionUnpin": "Unpin from top",
"chipActionGroup": "Change grouping",
"chipActionRename": "Rename",
"chipActionSetCover": "Set cover",
"chipActionShowCountryStates": "Show states",
"chipActionCreateGroup": "Create group",
"chipActionCreateAlbum": "Create album",
"chipActionCreateVault": "Create vault",
"chipActionConfigureVault": "Configure vault",
@ -208,6 +211,7 @@
"albumTierNew": "New",
"albumTierPinned": "Pinned",
"albumTierGroups": "Groups",
"albumTierSpecial": "Common",
"albumTierApps": "Apps",
"albumTierVaults": "Vaults",
@ -443,6 +447,14 @@
"newDynamicAlbumDialogTitle": "New Dynamic Album",
"dynamicAlbumAlreadyExists": "Dynamic album already exists",
"newGroupDialogTitle": "New Group",
"newGroupDialogNameLabel": "Group name",
"groupAlreadyExists": "Group already exists",
"groupEmpty": "No groups",
"ungrouped": "Ungrouped",
"groupPickerTitle": "Pick Group",
"groupPickerUseThisGroupButton": "Use this group",
"newVaultWarningDialogMessage": "Items in vaults are only available to this app and no others.\n\nIf you uninstall this app, or clear this app data, you will lose all these items.",
"newVaultDialogTitle": "New Vault",
"configureVaultDialogTitle": "Configure Vault",
@ -558,7 +570,7 @@
"menuActionStats": "Stats",
"viewDialogSortSectionTitle": "Sort",
"viewDialogGroupSectionTitle": "Group",
"viewDialogGroupSectionTitle": "Sections",
"viewDialogLayoutSectionTitle": "Layout",
"viewDialogReverseSortOrder": "Reverse sort order",
@ -630,8 +642,8 @@
"collectionGroupAlbum": "By album",
"collectionGroupMonth": "By month",
"collectionGroupDay": "By day",
"collectionGroupNone": "Do not group",
"sectionNone": "No sections",
"sectionUnknown": "Unknown",
"dateToday": "Today",
"dateYesterday": "Yesterday",
@ -755,9 +767,10 @@
"sortByName": "By name",
"sortByItemCount": "By item count",
"sortBySize": "By size",
"sortByAlbumFileName": "By album & file name",
"sortByAlbumFileName": "By album & item title",
"sortByRating": "By rating",
"sortByDuration": "By duration",
"sortByPath": "By path",
"sortOrderNewestFirst": "Newest first",
"sortOrderOldestFirst": "Oldest first",
@ -773,7 +786,6 @@
"albumGroupTier": "By tier",
"albumGroupType": "By type",
"albumGroupVolume": "By storage volume",
"albumGroupNone": "Do not group",
"albumMimeTypeMixed": "Mixed",
@ -815,6 +827,7 @@
"searchCollectionFieldHint": "Search collection",
"searchRecentSectionTitle": "Recent",
"searchDateSectionTitle": "Date",
"searchFormatSectionTitle": "Formats",
"searchAlbumsSectionTitle": "Albums",
"searchCountriesSectionTitle": "Countries",
"searchStatesSectionTitle": "States",
@ -1099,11 +1112,5 @@
"panoramaEnableSensorControl": "Enable sensor control",
"panoramaDisableSensorControl": "Disable sensor control",
"sourceViewerPageTitle": "Source",
"filePickerShowHiddenFiles": "Show hidden files",
"filePickerDoNotShowHiddenFiles": "Dont show hidden files",
"filePickerOpenFrom": "Open from",
"filePickerNoItems": "No items",
"filePickerUseThisFolder": "Use this folder"
"sourceViewerPageTitle": "Source"
}

View file

@ -921,8 +921,6 @@
"@collectionGroupMonth": {},
"collectionGroupDay": "𐑚𐑲 𐑛𐑱",
"@collectionGroupDay": {},
"collectionGroupNone": "𐑛𐑵 𐑯𐑪𐑑 𐑜𐑮𐑵𐑐",
"@collectionGroupNone": {},
"sectionUnknown": "𐑳𐑯𐑯𐑴𐑯",
"@sectionUnknown": {},
"dateToday": "𐑑𐑫𐑛𐑱",
@ -1085,8 +1083,6 @@
"@albumGroupType": {},
"albumGroupVolume": "𐑚𐑲 𐑕𐑑𐑹𐑦𐑡 𐑝𐑪𐑤𐑿𐑥",
"@albumGroupVolume": {},
"albumGroupNone": "𐑛𐑵 𐑯𐑪𐑑 𐑜𐑮𐑵𐑐",
"@albumGroupNone": {},
"albumMimeTypeMixed": "𐑥𐑦𐑒𐑕𐑑",
"@albumMimeTypeMixed": {},
"albumPickPageTitleCopy": "𐑒𐑪𐑐𐑦 𐑑 𐑨𐑤𐑚𐑩𐑥",
@ -1279,8 +1275,6 @@
"@settingsViewerShowMinimap": {},
"settingsViewerShowInformation": "𐑖𐑴 𐑦𐑯𐑓𐑼𐑥𐑱𐑖𐑩𐑯",
"@settingsViewerShowInformation": {},
"filePickerUseThisFolder": "𐑿𐑟 𐑞𐑦𐑕 𐑓𐑴𐑤𐑛𐑼",
"@filePickerUseThisFolder": {},
"settingsViewerShowInformationSubtitle": "𐑖𐑴 𐑑𐑲𐑑𐑩𐑤, 𐑛𐑱𐑑, 𐑤𐑴𐑒𐑱𐑖𐑩𐑯, 𐑯𐑯𐑯",
"@settingsViewerShowInformationSubtitle": {},
"settingsViewerShowOverlayThumbnails": "𐑖𐑴 𐑔𐑳𐑥𐑯𐑱𐑤𐑟",
@ -1600,14 +1594,6 @@
"@panoramaDisableSensorControl": {},
"sourceViewerPageTitle": "𐑕𐑹𐑕",
"@sourceViewerPageTitle": {},
"filePickerShowHiddenFiles": "𐑖𐑴 𐑣𐑦𐑛𐑩𐑯 𐑓𐑲𐑤𐑟",
"@filePickerShowHiddenFiles": {},
"filePickerDoNotShowHiddenFiles": "𐑛𐑴𐑯'𐑑 𐑖𐑴 𐑣𐑦𐑛𐑩𐑯 𐑓𐑲𐑤𐑟",
"@filePickerDoNotShowHiddenFiles": {},
"filePickerOpenFrom": "𐑴𐑐𐑩𐑯 𐑓𐑮𐑪𐑥",
"@filePickerOpenFrom": {},
"filePickerNoItems": "𐑯𐑴 𐑲𐑑𐑩𐑥𐑟",
"@filePickerNoItems": {},
"videoActionShowPreviousFrame": "𐑖𐑴 𐑐𐑮𐑰𐑝𐑾𐑕 𐑓𐑮𐑱𐑥",
"@videoActionShowPreviousFrame": {},
"videoActionShowNextFrame": "𐑖𐑴 𐑯𐑧𐑒𐑕𐑑 𐑓𐑮𐑱𐑥",

View file

@ -445,7 +445,7 @@
"@menuActionStats": {},
"viewDialogSortSectionTitle": "Ordenar",
"@viewDialogSortSectionTitle": {},
"viewDialogGroupSectionTitle": "Grupo",
"viewDialogGroupSectionTitle": "Secciones",
"@viewDialogGroupSectionTitle": {},
"viewDialogLayoutSectionTitle": "Disposición",
"@viewDialogLayoutSectionTitle": {},
@ -535,8 +535,6 @@
"@collectionGroupMonth": {},
"collectionGroupDay": "Por día",
"@collectionGroupDay": {},
"collectionGroupNone": "No agrupar",
"@collectionGroupNone": {},
"sectionUnknown": "Desconocido",
"@sectionUnknown": {},
"dateToday": "Hoy",
@ -621,8 +619,6 @@
"@albumGroupTier": {},
"albumGroupVolume": "Por volumen de almacenamiento",
"@albumGroupVolume": {},
"albumGroupNone": "No agrupar",
"@albumGroupNone": {},
"albumPickPageTitleCopy": "Copiar a álbum",
"@albumPickPageTitleCopy": {},
"albumPickPageTitleExport": "Exportar a álbum",
@ -1053,16 +1049,6 @@
"@panoramaDisableSensorControl": {},
"sourceViewerPageTitle": "Fuente",
"@sourceViewerPageTitle": {},
"filePickerShowHiddenFiles": "Mostrar archivos ocultos",
"@filePickerShowHiddenFiles": {},
"filePickerDoNotShowHiddenFiles": "No mostrar archivos ocultos",
"@filePickerDoNotShowHiddenFiles": {},
"filePickerOpenFrom": "Abrir desde",
"@filePickerOpenFrom": {},
"filePickerNoItems": "Sin elementos",
"@filePickerNoItems": {},
"filePickerUseThisFolder": "Usar esta carpeta",
"@filePickerUseThisFolder": {},
"chipActionFilterOut": "Filtrar",
"@chipActionFilterOut": {},
"chipActionFilterIn": "Filtrar en",
@ -1416,5 +1402,33 @@
"editEntryLocationDialogTimeShift": "Desplazamiento de tiempo",
"@editEntryLocationDialogTimeShift": {},
"coordinateFormatDdm": "DDM",
"@coordinateFormatDdm": {}
"@coordinateFormatDdm": {},
"sortByPath": "Por ruta",
"@sortByPath": {},
"searchFormatSectionTitle": "Formatos",
"@searchFormatSectionTitle": {},
"newGroupDialogTitle": "Nuevo grupo",
"@newGroupDialogTitle": {},
"ungrouped": "No agrupado",
"@ungrouped": {},
"albumTierGroups": "Grupos",
"@albumTierGroups": {},
"groupEmpty": "Sin grupos",
"@groupEmpty": {},
"newGroupDialogNameLabel": "Nombre del grupo",
"@newGroupDialogNameLabel": {},
"createButtonLabel": "CREAR",
"@createButtonLabel": {},
"chipActionGroup": "Agrupar",
"@chipActionGroup": {},
"chipActionCreateGroup": "Crear grupo",
"@chipActionCreateGroup": {},
"groupAlreadyExists": "Ya existe el grupo",
"@groupAlreadyExists": {},
"groupPickerTitle": "Seleccionar grupo",
"@groupPickerTitle": {},
"groupPickerUseThisGroupButton": "Usar este grupo",
"@groupPickerUseThisGroupButton": {},
"sectionNone": "Sin secciones",
"@sectionNone": {}
}

View file

@ -748,7 +748,7 @@
"@videoStreamSelectionDialogNoSelection": {},
"viewDialogSortSectionTitle": "Järjesta",
"@viewDialogSortSectionTitle": {},
"viewDialogGroupSectionTitle": "Rühmita",
"viewDialogGroupSectionTitle": "Rubriigid",
"@viewDialogGroupSectionTitle": {},
"viewDialogLayoutSectionTitle": "Paiguta",
"@viewDialogLayoutSectionTitle": {},
@ -790,7 +790,7 @@
"@aboutLicensesDartPackagesSectionTitle": {},
"aboutLicensesShowAllButtonLabel": "Näita kõiki litsentse",
"@aboutLicensesShowAllButtonLabel": {},
"policyPageTitle": "Privaatsuspoliitika",
"policyPageTitle": "Andmekaitsepõhimõtted",
"@policyPageTitle": {},
"collectionPageTitle": "Meediakogu",
"@collectionPageTitle": {},
@ -866,8 +866,6 @@
"@collectionGroupMonth": {},
"collectionGroupDay": "Päevade kaupa",
"@collectionGroupDay": {},
"collectionGroupNone": "Ära rühmita",
"@collectionGroupNone": {},
"sectionUnknown": "Teadmata",
"@sectionUnknown": {},
"dateToday": "Täna",
@ -1038,7 +1036,7 @@
"@sortBySize": {},
"sortByName": "Nime alusel",
"@sortByName": {},
"sortByAlbumFileName": "Albumi ja failinime alusel",
"sortByAlbumFileName": "Albumi ja objekti nime alusel",
"@sortByAlbumFileName": {},
"sortByRating": "Hinnangu alusel",
"@sortByRating": {},
@ -1056,8 +1054,6 @@
"@albumGroupType": {},
"albumGroupVolume": "Andmemahu alusel",
"@albumGroupVolume": {},
"albumGroupNone": "Ära rühmita",
"@albumGroupNone": {},
"albumMimeTypeMixed": "Erinev sisu",
"@albumMimeTypeMixed": {},
"albumPickPageTitleCopy": "Kopeeri albumisse",
@ -1565,14 +1561,6 @@
"@panoramaEnableSensorControl": {},
"sourceViewerPageTitle": "Allikas",
"@sourceViewerPageTitle": {},
"filePickerDoNotShowHiddenFiles": "Ära näita peidetud faile",
"@filePickerDoNotShowHiddenFiles": {},
"filePickerOpenFrom": "Ava asukohast",
"@filePickerOpenFrom": {},
"filePickerNoItems": "Meediafaile pole",
"@filePickerNoItems": {},
"filePickerUseThisFolder": "Kasuta seda kausta",
"@filePickerUseThisFolder": {},
"settingsSlideshowRepeat": "Korda",
"@settingsSlideshowRepeat": {},
"settingsVideoAutoPlay": "Automaatne taasesitus",
@ -1609,8 +1597,6 @@
"@viewerInfoLabelTitle": {},
"mapAttributionOsmData": "Kaardiandmed © [OpenStreetMap](https://www.openstreetmap.org/copyright) kaasautorid",
"@mapAttributionOsmData": {},
"filePickerShowHiddenFiles": "Näita peidetud faile",
"@filePickerShowHiddenFiles": {},
"settingsViewerQuickActionEditorBanner": "Nuppude/ikoonide valimiseks ja kahe vaate vahel teisaldamiseks puuduta ja all hoides lohista uude kohta.",
"@settingsViewerQuickActionEditorBanner": {},
"settingsViewerOverlayPageTitle": "Ülekate",
@ -1634,5 +1620,33 @@
"editEntryLocationDialogImportGpx": "Impordi GPX-fail",
"@editEntryLocationDialogImportGpx": {},
"removeEntryMetadataDialogAll": "Kõik",
"@removeEntryMetadataDialogAll": {}
"@removeEntryMetadataDialogAll": {},
"sortByPath": "Asukoha alusel",
"@sortByPath": {},
"searchFormatSectionTitle": "Vormingud",
"@searchFormatSectionTitle": {},
"chipActionCreateGroup": "Loo grupp",
"@chipActionCreateGroup": {},
"albumTierGroups": "Grupid",
"@albumTierGroups": {},
"newGroupDialogTitle": "Uus grupp",
"@newGroupDialogTitle": {},
"newGroupDialogNameLabel": "Grupi nimi",
"@newGroupDialogNameLabel": {},
"groupAlreadyExists": "Selline grupp on juba olemas",
"@groupAlreadyExists": {},
"groupEmpty": "Gruppe pole",
"@groupEmpty": {},
"ungrouped": "Grupeerimata",
"@ungrouped": {},
"groupPickerTitle": "Vali grupp",
"@groupPickerTitle": {},
"groupPickerUseThisGroupButton": "Kasuta seda gruppi",
"@groupPickerUseThisGroupButton": {},
"createButtonLabel": "LOO",
"@createButtonLabel": {},
"chipActionGroup": "Muuda grupeerimist",
"@chipActionGroup": {},
"sectionNone": "Rubriike pole",
"@sectionNone": {}
}

View file

@ -709,8 +709,6 @@
"@collectionSearchTitlesHintText": {},
"collectionGroupMonth": "Hilabetearen arabera",
"@collectionGroupMonth": {},
"collectionGroupNone": "Ez taldekatu",
"@collectionGroupNone": {},
"sectionUnknown": "Ezezaguna",
"@sectionUnknown": {},
"dateThisMonth": "Hilabete honetan",
@ -879,8 +877,6 @@
"@albumGroupTier": {},
"albumGroupType": "Motaren arabera",
"@albumGroupType": {},
"albumGroupNone": "Ez taldekatu",
"@albumGroupNone": {},
"albumPickPageTitleCopy": "Kopiatu albumera",
"@albumPickPageTitleCopy": {},
"albumPickPageTitleExport": "Albumera esportatu",
@ -1305,10 +1301,6 @@
"@panoramaDisableSensorControl": {},
"sourceViewerPageTitle": "Iturria",
"@sourceViewerPageTitle": {},
"filePickerShowHiddenFiles": "Erakutsi ezkutuko fitxategiak",
"@filePickerShowHiddenFiles": {},
"filePickerDoNotShowHiddenFiles": "Ez erakutsi ezkutuko fitxategiak",
"@filePickerDoNotShowHiddenFiles": {},
"settingsThemeBrightnessTile": "Gaia",
"@settingsThemeBrightnessTile": {},
"settingsDisplayUseTvInterface": "Android TV interfazea",
@ -1351,8 +1343,6 @@
"@settingsWidgetDisplayedItem": {},
"tagEditorPageNewTagFieldLabel": "Etiketa berria",
"@tagEditorPageNewTagFieldLabel": {},
"filePickerNoItems": "Elementurik ez",
"@filePickerNoItems": {},
"viewerInfoSearchFieldLabel": "Bilatu metadatuak",
"@viewerInfoSearchFieldLabel": {},
"viewerInfoViewXmlLinkText": "Ikusi XML",
@ -1363,10 +1353,6 @@
"@tagEditorPageAddTagTooltip": {},
"tagEditorSectionRecent": "Berrienak",
"@tagEditorSectionRecent": {},
"filePickerOpenFrom": "Ireki hemendik",
"@filePickerOpenFrom": {},
"filePickerUseThisFolder": "Erabili karpeta hau",
"@filePickerUseThisFolder": {},
"settingsWidgetOpenPage": "Widgetan sakatzean",
"@settingsWidgetOpenPage": {},
"exportEntryDialogWriteMetadata": "Idatzi metadatuak",

View file

@ -29,7 +29,7 @@
"@nextButtonLabel": {},
"pickTooltip": "انتخاب",
"@pickTooltip": {},
"actionRemove": "پاک‌کردن",
"actionRemove": "برداشتن",
"@actionRemove": {},
"chipActionGoToTagPage": "نمایش در برچسب‌ها",
"@chipActionGoToTagPage": {},
@ -63,7 +63,7 @@
"@hideButtonLabel": {},
"hideTooltip": "پنهان",
"@hideTooltip": {},
"chipActionCreateAlbum": "ایجاد البوم",
"chipActionCreateAlbum": "ساخت البوم",
"@chipActionCreateAlbum": {},
"filterNoRatingLabel": "بدون امتیاز",
"@filterNoRatingLabel": {},
@ -205,7 +205,7 @@
"@videoLoopModeAlways": {},
"menuActionSlideshow": "نمایش اسلایدی",
"@menuActionSlideshow": {},
"entryActionRemoveFavourite": "پاک‌کردن از مورد علاقه ها",
"entryActionRemoveFavourite": "پاک‌کردن از برگزیده‌ها",
"@entryActionRemoveFavourite": {},
"videoLoopModeNever": "هیچ وقت",
"@videoLoopModeNever": {},
@ -242,9 +242,9 @@
"@videoLoopModeShortOnly": {},
"entryActionEdit": "ویرایش",
"@entryActionEdit": {},
"entryActionAddFavourite": "اضافه کردن به مورد علاقه ها",
"entryActionAddFavourite": "افزودن به برگزیده‌ها",
"@entryActionAddFavourite": {},
"filterFavouriteLabel": "مورد علاقه",
"filterFavouriteLabel": "برگزیده",
"@filterFavouriteLabel": {},
"mapZoomOutTooltip": "کوچک نمایی",
"@mapZoomOutTooltip": {},
@ -260,7 +260,7 @@
"@chipActionFilterOut": {},
"entryActionRotateScreen": "چرخش صفحه",
"@entryActionRotateScreen": {},
"drawerCollectionFavourites": "مورد علاقه ها",
"drawerCollectionFavourites": "برگزیده‌ها",
"@drawerCollectionFavourites": {},
"filterMimeImageLabel": "عکس",
"@filterMimeImageLabel": {},
@ -272,11 +272,11 @@
"@entryInfoActionExportMetadata": {},
"exportEntryDialogFormat": "فرمت:",
"@exportEntryDialogFormat": {},
"collectionEmptyFavourites": "هیچ مورد علاقه ای وجود ندارد",
"collectionEmptyFavourites": "هیچ برگزیده‌ای نیست",
"@collectionEmptyFavourites": {},
"appExportSettings": "تنظیمات",
"@appExportSettings": {},
"appExportFavourites": "مورد علاقه ها",
"appExportFavourites": "برگزیده‌ها",
"@appExportFavourites": {},
"exportEntryDialogHeight": "طول",
"@exportEntryDialogHeight": {},
@ -397,7 +397,7 @@
"@widgetOpenPageHome": {},
"keepScreenOnAlways": "همیشه",
"@keepScreenOnAlways": {},
"albumTierRegular": "سایر",
"albumTierRegular": "دیگری‌ها",
"@albumTierRegular": {},
"accessibilityAnimationsKeep": "نمایش از جلوه‌های نمایشگر",
"@accessibilityAnimationsKeep": {},
@ -439,7 +439,7 @@
"@entryActionCast": {},
"viewerActionUnlock": "باز کردن قفل پخش‌کننده",
"@viewerActionUnlock": {},
"videoActionPause": "مکث",
"videoActionPause": "ایست",
"@videoActionPause": {},
"widgetOpenPageCollection": "باز کردن مجموعه",
"@widgetOpenPageCollection": {},
@ -471,7 +471,7 @@
},
"albumTierPinned": "سنجاق شده",
"@albumTierPinned": {},
"chipActionCreateVault": "ایجاد گاوصندوق",
"chipActionCreateVault": "ساخت گاوصندوق",
"@chipActionCreateVault": {},
"chipActionGoToPlacePage": "نمایش در مکان‌ها",
"@chipActionGoToPlacePage": {},
@ -517,7 +517,7 @@
"@keepScreenOnViewerOnly": {},
"wallpaperTargetHome": "صفحهٔ خانه",
"@wallpaperTargetHome": {},
"videoActionSelectStreams": "انتخاب قطعه‌ٔ صوتی",
"videoActionSelectStreams": "انتخاب صوت‌ها",
"@videoActionSelectStreams": {},
"widgetDisplayedItemRandom": "تصادفی",
"@widgetDisplayedItemRandom": {},
@ -678,10 +678,6 @@
"@mapStyleTooltip": {},
"viewerInfoSearchFieldLabel": "جستجو فراداده",
"@viewerInfoSearchFieldLabel": {},
"filePickerDoNotShowHiddenFiles": "پرونده‌های پنهان را نمایش نده",
"@filePickerDoNotShowHiddenFiles": {},
"filePickerUseThisFolder": "استفاده از این پوشه",
"@filePickerUseThisFolder": {},
"tagEmpty": "بدون برچسب ها",
"@tagEmpty": {},
"binPageTitle": "سطل زباله",
@ -702,8 +698,6 @@
"@sourceViewerPageTitle": {},
"panoramaDisableSensorControl": "خاموش کردن هدایت حسگر",
"@panoramaDisableSensorControl": {},
"filePickerShowHiddenFiles": "نمایش پرونده‌های پنهان",
"@filePickerShowHiddenFiles": {},
"setCoverDialogLatest": "آخرین مورد",
"@setCoverDialogLatest": {},
"configureVaultDialogTitle": "پیکربندی گاوصندوق",
@ -714,8 +708,6 @@
"@sortOrderSmallestFirst": {},
"albumMimeTypeMixed": "ترکیبی",
"@albumMimeTypeMixed": {},
"albumGroupNone": "گروه نکن",
"@albumGroupNone": {},
"newFilterBanner": "جدید",
"@newFilterBanner": {},
"albumScreenshots": "تصاویر از صفحه",
@ -879,8 +871,6 @@
"@renameEntryDialogLabel": {},
"settingsStorageAccessTile": "دسترسی حافظه",
"@settingsStorageAccessTile": {},
"filePickerNoItems": "چیزی نیست",
"@filePickerNoItems": {},
"settingsHomeDialogTitle": "خانه",
"@settingsHomeDialogTitle": {},
"settingsThumbnailShowRating": "نمایش امتیازبندی",
@ -1023,7 +1013,7 @@
"@aboutDataUsageCache": {},
"aboutDataUsageInternal": "داخلی",
"@aboutDataUsageInternal": {},
"aboutCreditsSectionTitle": "اعتبار",
"aboutCreditsSectionTitle": "سپاس‌نامه",
"@aboutCreditsSectionTitle": {},
"aboutDataUsageExternal": "خارجی",
"@aboutDataUsageExternal": {},
@ -1033,7 +1023,7 @@
"@aboutDataUsageClearCache": {},
"aboutCreditsWorldAtlas2": "زیر مجوز ISC.",
"@aboutCreditsWorldAtlas2": {},
"aboutLicensesBanner": "این برنامه از بسته‌ها و کتابخانه‌های منبع باز زیر استفاده می کند.",
"aboutLicensesBanner": "این برنامه بسته‌ها و کتابخانه‌های آزاد زیر به‌کار می‌برد.",
"@aboutLicensesBanner": {},
"collectionSelectPageTitle": "انتخاب موارد",
"@collectionSelectPageTitle": {},
@ -1053,8 +1043,6 @@
"@collectionGroupMonth": {},
"dateThisMonth": "این ماه",
"@dateThisMonth": {},
"collectionGroupNone": "گروه نکن",
"@collectionGroupNone": {},
"collectionEmptyVideos": "بدون ویدیو",
"@collectionEmptyVideos": {},
"drawerCollectionImages": "تصاویر",
@ -1117,13 +1105,13 @@
"@settingsNavigationDrawerEditorPageTitle": {},
"settingsConfirmationBeforeMoveUndatedItems": "پیش از جابجایی موارد بدون تاریخ بپرسید",
"@settingsConfirmationBeforeMoveUndatedItems": {},
"settingsNavigationDrawerBanner": "برای جابجایی و مرتب کردن مجدد موارد، لمس کنید و نگه دارید.",
"settingsNavigationDrawerBanner": "برای جابجایی و مرتب کردن دوباره موارد، لمس کنید و نگه دارید.",
"@settingsNavigationDrawerBanner": {},
"settingsConfirmationVaultDataLoss": "نمایش هشدار از دست دادن داده‌های گاوصندوق",
"@settingsConfirmationVaultDataLoss": {},
"settingsNavigationDrawerTabAlbums": "آلبوم ها",
"@settingsNavigationDrawerTabAlbums": {},
"settingsThumbnailShowFavouriteIcon": "نمایش نماد علاقه‌مندی",
"settingsThumbnailShowFavouriteIcon": "نمایش نماد برگزیدن",
"@settingsThumbnailShowFavouriteIcon": {},
"settingsThumbnailShowLocationIcon": "نمایش نماد مکان",
"@settingsThumbnailShowLocationIcon": {},
@ -1349,8 +1337,6 @@
"@tagEditorPageAddTagTooltip": {},
"tagEditorPageNewTagFieldLabel": "برسب جدید",
"@tagEditorPageNewTagFieldLabel": {},
"filePickerOpenFrom": "بازکردن از",
"@filePickerOpenFrom": {},
"searchRatingSectionTitle": "امتیازات",
"@searchRatingSectionTitle": {},
"searchMetadataSectionTitle": "فراداده",
@ -1399,7 +1385,7 @@
"@tooManyItemsErrorDialogMessage": {},
"viewDialogLayoutSectionTitle": "چیدمان",
"@viewDialogLayoutSectionTitle": {},
"viewDialogReverseSortOrder": "ترتیب مرتب سازی معکوس",
"viewDialogReverseSortOrder": "ترتیب مرتبسازی معکوس",
"@viewDialogReverseSortOrder": {},
"aboutBugCopyInfoInstruction": "رونوشت اطلاعات سامانه",
"@aboutBugCopyInfoInstruction": {},
@ -1556,5 +1542,61 @@
"chipActionShowCollection": "نمایش در مجموعه",
"@chipActionShowCollection": {},
"mapAttributionOsmData": "داده‌های نقشه © [OpenStreetMap](https:www.openstreetmap.org/copyright) مشارکت‌کنندگان",
"@mapAttributionOsmData": {}
"@mapAttributionOsmData": {},
"chipActionRemove": "برداشتن",
"@chipActionRemove": {},
"mapStyleOpenTopoMap": "اوپن‌توپومپ",
"@mapStyleOpenTopoMap": {},
"editEntryLocationDialogImportGpx": "وارد کردن GPX",
"@editEntryLocationDialogImportGpx": {},
"sortByPath": "بر پایه مسیر",
"@sortByPath": {},
"setHomeCustom": "سفارشی",
"@setHomeCustom": {},
"videoActionShowPreviousFrame": "نمایش قاب پیشین",
"@videoActionShowPreviousFrame": {},
"videoActionShowNextFrame": "نمایش قاب بعدی",
"@videoActionShowNextFrame": {},
"sortOrderShortestFirst": "اول کوتاه‌ترین",
"@sortOrderShortestFirst": {},
"sortOrderLongestFirst": "اول بلندترین",
"@sortOrderLongestFirst": {},
"editEntryLocationDialogTimeShift": "تغییر زمان",
"@editEntryLocationDialogTimeShift": {},
"searchFormatSectionTitle": "قالب‌ها",
"@searchFormatSectionTitle": {},
"appExportDynamicAlbums": "آلبوم‌های پویا",
"@appExportDynamicAlbums": {},
"mapAttributionOsmLiberty": "کاشی‌ها به‌دست [OpenMapTiles](https://www.openmaptiles.org/)، [CC BY](http://creativecommons.org/licenses/by/4.0) • میزبانی‌شده به‌دست [OSM Americana](https://tile.ourmap.us)",
"@mapAttributionOsmLiberty": {},
"chipActionDecompose": "جداکردن",
"@chipActionDecompose": {},
"albumTierDynamic": "پویا",
"@albumTierDynamic": {},
"newDynamicAlbumDialogTitle": "آلبوم پویای جدید",
"@newDynamicAlbumDialogTitle": {},
"dynamicAlbumAlreadyExists": "آلبوم پویا از پیش موجود است",
"@dynamicAlbumAlreadyExists": {},
"sortByDuration": "بر پایه مدت",
"@sortByDuration": {},
"coordinateFormatDdm": "DDM",
"@coordinateFormatDdm": {},
"newAlbumDialogAlbumAlreadyExistsHelper": "آلبوم از پیش موجود است",
"@newAlbumDialogAlbumAlreadyExistsHelper": {},
"collectionActionAddDynamicAlbum": "افزودن آلبوم پویا",
"@collectionActionAddDynamicAlbum": {},
"selectStorageVolumeDialogTitle": "گزینش حافظه",
"@selectStorageVolumeDialogTitle": {},
"removeEntryMetadataDialogAll": "همه",
"@removeEntryMetadataDialogAll": {},
"explorerPageTitle": "کاوشگر",
"@explorerPageTitle": {},
"explorerActionSelectStorageVolume": "گزینش حافظه",
"@explorerActionSelectStorageVolume": {},
"mapStyleOsmLiberty": "اواس‌ام لیبریتی",
"@mapStyleOsmLiberty": {},
"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": {},
"chipActionGoToExplorerPage": "نمایش در کاوشگر",
"@chipActionGoToExplorerPage": {}
}

View file

@ -467,7 +467,7 @@
"@menuActionStats": {},
"viewDialogSortSectionTitle": "Tri",
"@viewDialogSortSectionTitle": {},
"viewDialogGroupSectionTitle": "Groupes",
"viewDialogGroupSectionTitle": "Sections",
"@viewDialogGroupSectionTitle": {},
"viewDialogLayoutSectionTitle": "Vue",
"@viewDialogLayoutSectionTitle": {},
@ -561,8 +561,6 @@
"@collectionGroupMonth": {},
"collectionGroupDay": "par jour",
"@collectionGroupDay": {},
"collectionGroupNone": "ne pas grouper",
"@collectionGroupNone": {},
"sectionUnknown": "Inconnu",
"@sectionUnknown": {},
"dateToday": "Aujourdhui",
@ -639,7 +637,7 @@
"@sortByItemCount": {},
"sortBySize": "par taille",
"@sortBySize": {},
"sortByAlbumFileName": "alphabétique",
"sortByAlbumFileName": "par titre dalbum et élément",
"@sortByAlbumFileName": {},
"sortByRating": "par notation",
"@sortByRating": {},
@ -665,8 +663,6 @@
"@albumGroupType": {},
"albumGroupVolume": "par volume de stockage",
"@albumGroupVolume": {},
"albumGroupNone": "ne pas grouper",
"@albumGroupNone": {},
"albumMimeTypeMixed": "Mixte",
"@albumMimeTypeMixed": {},
"albumPickPageTitleCopy": "Copie",
@ -1115,16 +1111,6 @@
"@panoramaDisableSensorControl": {},
"sourceViewerPageTitle": "Code source",
"@sourceViewerPageTitle": {},
"filePickerShowHiddenFiles": "Afficher les fichiers masqués",
"@filePickerShowHiddenFiles": {},
"filePickerDoNotShowHiddenFiles": "Ne pas afficher les fichiers masqués",
"@filePickerDoNotShowHiddenFiles": {},
"filePickerOpenFrom": "Ouvrir à partir de",
"@filePickerOpenFrom": {},
"filePickerNoItems": "Aucun élément",
"@filePickerNoItems": {},
"filePickerUseThisFolder": "Utiliser ce dossier",
"@filePickerUseThisFolder": {},
"editEntryLocationDialogSetCustom": "Définir un lieu personnalisé",
"@editEntryLocationDialogSetCustom": {},
"tagEditorSectionPlaceholders": "Étiquettes de substitution",
@ -1416,5 +1402,33 @@
"editEntryLocationDialogImportGpx": "Importer un fichier GPX",
"@editEntryLocationDialogImportGpx": {},
"removeEntryMetadataDialogAll": "Tout",
"@removeEntryMetadataDialogAll": {}
"@removeEntryMetadataDialogAll": {},
"sortByPath": "par chemin",
"@sortByPath": {},
"searchFormatSectionTitle": "Formats",
"@searchFormatSectionTitle": {},
"chipActionGroup": "Modifier groupement",
"@chipActionGroup": {},
"createButtonLabel": "CRÉER",
"@createButtonLabel": {},
"chipActionCreateGroup": "Créer un groupe",
"@chipActionCreateGroup": {},
"newGroupDialogTitle": "Nouveau groupe",
"@newGroupDialogTitle": {},
"groupAlreadyExists": "Le groupe existe déjà",
"@groupAlreadyExists": {},
"groupEmpty": "Aucun groupe",
"@groupEmpty": {},
"groupPickerUseThisGroupButton": "Utiliser ce groupe",
"@groupPickerUseThisGroupButton": {},
"groupPickerTitle": "Sélection",
"@groupPickerTitle": {},
"ungrouped": "Non groupé",
"@ungrouped": {},
"sectionNone": "Aucune section",
"@sectionNone": {},
"newGroupDialogNameLabel": "Nom du groupe",
"@newGroupDialogNameLabel": {},
"albumTierGroups": "Groupes",
"@albumTierGroups": {}
}

View file

@ -819,13 +819,11 @@
"@searchCountriesSectionTitle": {},
"collectionActionEmptyBin": "Baleirar lixo",
"@collectionActionEmptyBin": {},
"albumGroupNone": "Non agrupar",
"@albumGroupNone": {},
"menuActionSlideshow": "Presentación",
"@menuActionSlideshow": {},
"menuActionStats": "Estatísticas",
"@menuActionStats": {},
"viewDialogGroupSectionTitle": "Agrupar",
"viewDialogGroupSectionTitle": "Seccións",
"@viewDialogGroupSectionTitle": {},
"castDialogTitle": "Dispositivos de emisión",
"@castDialogTitle": {},
@ -977,8 +975,6 @@
"@collectionGroupMonth": {},
"collectionGroupDay": "Por día",
"@collectionGroupDay": {},
"collectionGroupNone": "Non agrupar",
"@collectionGroupNone": {},
"drawerSettingsButton": "Axustes",
"@drawerSettingsButton": {},
"sortOrderNewestFirst": "Novos primeiro",
@ -1262,8 +1258,6 @@
"@mapPointNorthUpTooltip": {},
"viewerInfoSearchSuggestionDate": "Data e hora",
"@viewerInfoSearchSuggestionDate": {},
"filePickerOpenFrom": "Abrir dende",
"@filePickerOpenFrom": {},
"settingsImageBackground": "Fondo de imaxe",
"@settingsImageBackground": {},
"settingsViewerQuickActionEditorPageTitle": "Accións rápidas",
@ -1316,8 +1310,6 @@
"@viewerInfoLabelPath": {},
"viewerInfoSearchFieldLabel": "Procurar metadatos",
"@viewerInfoSearchFieldLabel": {},
"filePickerUseThisFolder": "Usar este cartafol",
"@filePickerUseThisFolder": {},
"settingsLanguageSectionTitle": "Idioma e formatos",
"@settingsLanguageSectionTitle": {},
"settingsDisablingBinWarningDialogMessage": "Os elementos no lixo borraranse para sempre.",
@ -1380,8 +1372,6 @@
"@tagEditorSectionRecent": {},
"tagPlaceholderPlace": "Lugar",
"@tagPlaceholderPlace": {},
"filePickerDoNotShowHiddenFiles": "Non amosar arquivos agochados",
"@filePickerDoNotShowHiddenFiles": {},
"viewerInfoLabelAddress": "Enderezo",
"@viewerInfoLabelAddress": {},
"settingsVideoPageTitle": "Axustes de vídeo",
@ -1474,10 +1464,6 @@
"@tagPlaceholderCountry": {},
"tagPlaceholderState": "Estado",
"@tagPlaceholderState": {},
"filePickerShowHiddenFiles": "Amosar arquivos agochados",
"@filePickerShowHiddenFiles": {},
"filePickerNoItems": "Sen elementos",
"@filePickerNoItems": {},
"settingsTimeToTakeActionTile": "Retardo para executar unha acción",
"@settingsTimeToTakeActionTile": {},
"settingsSubtitleThemeBackgroundColor": "Cor de fondo",
@ -1624,5 +1610,33 @@
"panoramaDisableSensorControl": "Desactivar control do sensor",
"@panoramaDisableSensorControl": {},
"settingsHiddenFiltersBanner": "As fotos e vídeos que cadren cos filtros ocultos non se amosarán na súa colección.",
"@settingsHiddenFiltersBanner": {}
"@settingsHiddenFiltersBanner": {},
"createButtonLabel": "CREAR",
"@createButtonLabel": {},
"chipActionGroup": "Agrupar",
"@chipActionGroup": {},
"chipActionCreateGroup": "Crear grupo",
"@chipActionCreateGroup": {},
"albumTierGroups": "Grupos",
"@albumTierGroups": {},
"newGroupDialogTitle": "Novo grupo",
"@newGroupDialogTitle": {},
"newGroupDialogNameLabel": "Nome do grupo",
"@newGroupDialogNameLabel": {},
"groupAlreadyExists": "Xa existe o grupo",
"@groupAlreadyExists": {},
"groupEmpty": "Sen grupos",
"@groupEmpty": {},
"ungrouped": "Non agrupado",
"@ungrouped": {},
"groupPickerTitle": "Escolmar grupo",
"@groupPickerTitle": {},
"groupPickerUseThisGroupButton": "Usar este grupo",
"@groupPickerUseThisGroupButton": {},
"sectionNone": "Sen seccións",
"@sectionNone": {},
"sortByPath": "Por ruta",
"@sortByPath": {},
"searchFormatSectionTitle": "Formatos",
"@searchFormatSectionTitle": {}
}

View file

@ -6,5 +6,201 @@
"welcomeOptional": "אופציונלי",
"@welcomeOptional": {},
"welcomeTermsToggle": "אני מסכימ/ה לתנאים",
"@welcomeTermsToggle": {}
"@welcomeTermsToggle": {},
"chipActionShowCollection": "הצג באוסף",
"@chipActionShowCollection": {},
"chipActionGoToAlbumPage": "הצג באלבום",
"@chipActionGoToAlbumPage": {},
"chipActionFilterIn": "סנן לבתוך",
"@chipActionFilterIn": {},
"chipActionFilterOut": "סנן החוצה",
"@chipActionFilterOut": {},
"chipActionPin": "הצמד למעלה",
"@chipActionPin": {},
"chipActionUnpin": "בטל הצמד למעלה",
"@chipActionUnpin": {},
"chipActionRename": "שנה שם",
"@chipActionRename": {},
"applyTooltip": "החל",
"@applyTooltip": {},
"changeTooltip": "שינוי",
"@changeTooltip": {},
"clearTooltip": "ניקוי",
"@clearTooltip": {},
"previousTooltip": "הקודם",
"@previousTooltip": {},
"nextTooltip": "הבא",
"@nextTooltip": {},
"resetTooltip": "אפס",
"@resetTooltip": {},
"saveTooltip": "שמור",
"@saveTooltip": {},
"pickTooltip": "בחר",
"@pickTooltip": {},
"chipActionGoToPlacePage": "הצג במקומות",
"@chipActionGoToPlacePage": {},
"chipActionGoToTagPage": "הצג בתגיות",
"@chipActionGoToTagPage": {},
"chipActionDecompose": "פיצול",
"@chipActionDecompose": {},
"chipActionHide": "הסתר",
"@chipActionHide": {},
"chipActionLock": "נעל",
"@chipActionLock": {},
"applyButtonLabel": "החל",
"@applyButtonLabel": {},
"nextButtonLabel": "הבא",
"@nextButtonLabel": {},
"showButtonLabel": "הצג",
"@showButtonLabel": {},
"hideButtonLabel": "הסתר",
"@hideButtonLabel": {},
"continueButtonLabel": "המשך",
"@continueButtonLabel": {},
"cancelTooltip": "ביטול",
"@cancelTooltip": {},
"columnCount": "{count, plural, =1{{count} עמודה} other{{count} עמודות}}",
"@columnCount": {
"placeholders": {
"count": {
"type": "int",
"format": "decimalPattern"
}
}
},
"itemCount": "{count, plural, =1{{count} פריט} other{{count} פריטים}}",
"@itemCount": {
"placeholders": {
"count": {
"type": "int",
"format": "decimalPattern"
}
}
},
"focalLength": "{length} mm",
"@focalLength": {
"placeholders": {
"length": {
"type": "String",
"example": "5.4"
}
}
},
"deleteButtonLabel": "מחק",
"@deleteButtonLabel": {},
"doubleBackExitMessage": "כדי לצאת הקש שוב על \"חזרה\".",
"@doubleBackExitMessage": {},
"doNotAskAgain": "אל תשאל שוב",
"@doNotAskAgain": {},
"sourceStateLocatingPlaces": "טוען מקומות",
"@sourceStateLocatingPlaces": {},
"chipActionRemove": "הסר",
"@chipActionRemove": {},
"timeSeconds": "{count, plural, =1{{count} שניה} other{{count} שניות}}",
"@timeSeconds": {
"placeholders": {
"count": {
"type": "int",
"format": "decimalPattern"
}
}
},
"timeMinutes": "{count, plural, =1{{count} דקה} other{{count} דקות}}",
"@timeMinutes": {
"placeholders": {
"count": {
"type": "int",
"format": "decimalPattern"
}
}
},
"timeDays": "{count, plural, =1{{count} יום} other{{count} ימים}}",
"@timeDays": {
"placeholders": {
"count": {
"type": "int",
"format": "decimalPattern"
}
}
},
"saveCopyButtonLabel": "שמור עותק",
"@saveCopyButtonLabel": {},
"chipActionGoToCountryPage": "הצג במדינות",
"@chipActionGoToCountryPage": {},
"chipActionDelete": "מחק",
"@chipActionDelete": {},
"hideTooltip": "הסתר",
"@hideTooltip": {},
"showTooltip": "הצג",
"@showTooltip": {},
"sourceStateLoading": "טוען",
"@sourceStateLoading": {},
"sourceStateCataloguing": "מקטלג",
"@sourceStateCataloguing": {},
"actionRemove": "הסרה",
"@actionRemove": {},
"sourceStateLocatingCountries": "טוען מדינות",
"@sourceStateLocatingCountries": {},
"stopTooltip": "עצור",
"@stopTooltip": {},
"chipActionGoToExplorerPage": "הצג בסייר",
"@chipActionGoToExplorerPage": {},
"chipActionSetCover": "הגדר עטיפה",
"@chipActionSetCover": {},
"chipActionCreateAlbum": "צור אלבום",
"@chipActionCreateAlbum": {},
"chipActionShowCountryStates": "הצג סטטיסטיקות",
"@chipActionShowCountryStates": {},
"createButtonLabel": "צור",
"@createButtonLabel": {},
"chipActionGroup": "קבוצה",
"@chipActionGroup": {},
"chipActionCreateGroup": "צור קבוצה",
"@chipActionCreateGroup": {},
"chipActionCreateVault": "צור כספת",
"@chipActionCreateVault": {},
"newGroupDialogTitle": "קבוצה חדשה",
"@newGroupDialogTitle": {},
"groupAlreadyExists": "הקבוצה כבר קיימת",
"@groupAlreadyExists": {},
"entryActionDelete": "מחיקה",
"@entryActionDelete": {},
"entryActionConvert": "המרה",
"@entryActionConvert": {},
"entryActionRotateCCW": "סובב נגד כיוון השעון",
"@entryActionRotateCCW": {},
"entryActionShare": "שיתוף",
"@entryActionShare": {},
"entryActionShareVideoOnly": "שיתוף וידיאו בלבד‍",
"@entryActionShareVideoOnly": {},
"videoActionSelectStreams": "בחר מסלולים",
"@videoActionSelectStreams": {},
"videoActionShowPreviousFrame": "הצג פריים קודם",
"@videoActionShowPreviousFrame": {},
"videoActionShowNextFrame": "הצג פריים הבא",
"@videoActionShowNextFrame": {},
"chipActionConfigureVault": "הגדרת כספת",
"@chipActionConfigureVault": {},
"entryActionCopyToClipboard": "הועתק ללוח",
"@entryActionCopyToClipboard": {},
"entryActionShareImageOnly": "שיתוף תמונה בלבד",
"@entryActionShareImageOnly": {},
"entryActionRotateCW": "סובב עם כיוון השעון",
"@entryActionRotateCW": {},
"entryActionFlip": "הפוך אופקית",
"@entryActionFlip": {},
"entryActionPrint": "הדפסה",
"@entryActionPrint": {},
"entryActionViewSource": "מקור וידאו",
"@entryActionViewSource": {},
"entryActionShowGeoTiffOnMap": "הצג כשכבת מפה",
"@entryActionShowGeoTiffOnMap": {},
"entryActionInfo": "מידע",
"@entryActionInfo": {},
"entryActionExport": "ייצוא",
"@entryActionExport": {},
"entryActionRename": "שינוי שם",
"@entryActionRename": {},
"entryActionRestore": "שחזור",
"@entryActionRestore": {}
}

View file

@ -864,8 +864,6 @@
"@collectionPageTitle": {},
"collectionGroupMonth": "महीने के अनुसार",
"@collectionGroupMonth": {},
"collectionGroupNone": "समूह न बनाएं",
"@collectionGroupNone": {},
"sectionUnknown": "अज्ञात",
"@sectionUnknown": {},
"dateYesterday": "कल",
@ -1089,8 +1087,6 @@
"@sortByRating": {},
"sortByDuration": "समय के अनुसार",
"@sortByDuration": {},
"albumGroupNone": "ग्रुप न बनाए",
"@albumGroupNone": {},
"albumPickPageTitleCopy": "एल्बम में कॉपी करे",
"@albumPickPageTitleCopy": {},
"albumPickPageTitleExport": "एल्बम में एक्सपोर्ट करे",

View file

@ -291,7 +291,7 @@
"@tileLayoutMosaic": {},
"tileLayoutGrid": "Rács",
"@tileLayoutGrid": {},
"viewDialogGroupSectionTitle": "Csoport",
"viewDialogGroupSectionTitle": "Szekciók",
"@viewDialogGroupSectionTitle": {},
"menuActionStats": "Statisztikák",
"@menuActionStats": {},
@ -433,8 +433,6 @@
"@viewerInfoLabelDate": {},
"viewerInfoUnknown": "ismeretlen",
"@viewerInfoUnknown": {},
"filePickerShowHiddenFiles": "Rejtett fájlok mutatása",
"@filePickerShowHiddenFiles": {},
"sourceViewerPageTitle": "Forrás",
"@sourceViewerPageTitle": {},
"tagPlaceholderPlace": "Hely",
@ -445,8 +443,6 @@
"@tagEditorSectionRecent": {},
"viewerInfoSearchSuggestionResolution": "Felbontás",
"@viewerInfoSearchSuggestionResolution": {},
"filePickerUseThisFolder": "Mappa használata",
"@filePickerUseThisFolder": {},
"tagPlaceholderState": "Megye",
"@tagPlaceholderState": {},
"tagEditorPageAddTagTooltip": "Címke hozzáadása",
@ -455,12 +451,8 @@
"@tagEditorPageNewTagFieldLabel": {},
"tagEditorPageTitle": "Címkék szerkesztése",
"@tagEditorPageTitle": {},
"filePickerNoItems": "Nincsenek elemek",
"@filePickerNoItems": {},
"settingsThumbnailSectionTitle": "Miniatűrök",
"@settingsThumbnailSectionTitle": {},
"filePickerDoNotShowHiddenFiles": "Ne mutassa a rejtett fájlokat",
"@filePickerDoNotShowHiddenFiles": {},
"settingsVideoControlsPageTitle": "Vezérlők",
"@settingsVideoControlsPageTitle": {},
"settingsVideoControlsTile": "Vezérlők",
@ -1062,8 +1054,6 @@
"@collectionGroupMonth": {},
"collectionGroupDay": "Napok szerint",
"@collectionGroupDay": {},
"collectionGroupNone": "Nincs csoportositás",
"@collectionGroupNone": {},
"collectionDeleteFailureFeedback": "{count, plural, =1{Elem törlése sikertelen} other{{count} elem törlése sikertelen}}",
"@collectionDeleteFailureFeedback": {
"placeholders": {
@ -1140,8 +1130,6 @@
"@sortOrderHighestFirst": {},
"sortOrderLowestFirst": "Legalacsonyabb legelöl",
"@sortOrderLowestFirst": {},
"albumGroupNone": "Nincs csoportositás",
"@albumGroupNone": {},
"albumPickPageTitlePick": "Album választása",
"@albumPickPageTitlePick": {},
"searchCollectionFieldHint": "Gyűjtemény keresése",
@ -1342,8 +1330,6 @@
"@mapPointNorthUpTooltip": {},
"viewerInfoSearchSuggestionDimensions": "Méretek",
"@viewerInfoSearchSuggestionDimensions": {},
"filePickerOpenFrom": "Megnyitás innen",
"@filePickerOpenFrom": {},
"panoramaDisableSensorControl": "Szenzoros vezérlés letiltása",
"@panoramaDisableSensorControl": {},
"panoramaEnableSensorControl": "Szenzoros vezérlés engedélyezése",
@ -1608,5 +1594,33 @@
"editEntryLocationDialogTimeShift": "Időeltolódás",
"@editEntryLocationDialogTimeShift": {},
"removeEntryMetadataDialogAll": "Összes",
"@removeEntryMetadataDialogAll": {}
"@removeEntryMetadataDialogAll": {},
"sortByPath": "Útvonal szerint",
"@sortByPath": {},
"chipActionCreateGroup": "Csoport létrehozása",
"@chipActionCreateGroup": {},
"albumTierGroups": "Csoportok",
"@albumTierGroups": {},
"chipActionGroup": "Csoportosítás",
"@chipActionGroup": {},
"createButtonLabel": "LÉTREHOZÁS",
"@createButtonLabel": {},
"newGroupDialogTitle": "Új csoport",
"@newGroupDialogTitle": {},
"newGroupDialogNameLabel": "Csoport neve",
"@newGroupDialogNameLabel": {},
"groupAlreadyExists": "Csoport már létezik",
"@groupAlreadyExists": {},
"groupEmpty": "Nincsenek csoportok",
"@groupEmpty": {},
"ungrouped": "Csoportosítatlan",
"@ungrouped": {},
"groupPickerTitle": "Válassza ki a csoportot",
"@groupPickerTitle": {},
"groupPickerUseThisGroupButton": "Használja ezt a csoportot",
"@groupPickerUseThisGroupButton": {},
"searchFormatSectionTitle": "Formátumok",
"@searchFormatSectionTitle": {},
"sectionNone": "Semmi szerint",
"@sectionNone": {}
}

View file

@ -453,7 +453,7 @@
"@menuActionStats": {},
"viewDialogSortSectionTitle": "Sortir",
"@viewDialogSortSectionTitle": {},
"viewDialogGroupSectionTitle": "Grup",
"viewDialogGroupSectionTitle": "Bagian",
"@viewDialogGroupSectionTitle": {},
"viewDialogLayoutSectionTitle": "Tata letak",
"@viewDialogLayoutSectionTitle": {},
@ -545,8 +545,6 @@
"@collectionGroupMonth": {},
"collectionGroupDay": "Lewat hari",
"@collectionGroupDay": {},
"collectionGroupNone": "Jangan kelompokkan",
"@collectionGroupNone": {},
"sectionUnknown": "Tidak dikenal",
"@sectionUnknown": {},
"dateToday": "Hari ini",
@ -647,8 +645,6 @@
"@albumGroupTier": {},
"albumGroupVolume": "Lewat volume penyimpanan",
"@albumGroupVolume": {},
"albumGroupNone": "Jangan kelompokkan",
"@albumGroupNone": {},
"albumPickPageTitleCopy": "Salin ke Album",
"@albumPickPageTitleCopy": {},
"albumPickPageTitleExport": "Ekspor ke Album",
@ -1085,16 +1081,6 @@
"@panoramaDisableSensorControl": {},
"sourceViewerPageTitle": "Sumber",
"@sourceViewerPageTitle": {},
"filePickerShowHiddenFiles": "Tampilkan file tersembunyi",
"@filePickerShowHiddenFiles": {},
"filePickerDoNotShowHiddenFiles": "Jangan tampilkan file tersembunyi",
"@filePickerDoNotShowHiddenFiles": {},
"filePickerOpenFrom": "Buka dari",
"@filePickerOpenFrom": {},
"filePickerNoItems": "Tidak ada benda",
"@filePickerNoItems": {},
"filePickerUseThisFolder": "Gunakan folder ini",
"@filePickerUseThisFolder": {},
"viewerTransitionNone": "Tidak ada",
"@viewerTransitionNone": {},
"widgetOpenPageHome": "Buka beranda",
@ -1416,5 +1402,33 @@
"editEntryLocationDialogTimeShift": "Pergeseran waktu",
"@editEntryLocationDialogTimeShift": {},
"removeEntryMetadataDialogAll": "Semua",
"@removeEntryMetadataDialogAll": {}
"@removeEntryMetadataDialogAll": {},
"sortByPath": "Melalui lokasi",
"@sortByPath": {},
"searchFormatSectionTitle": "Format",
"@searchFormatSectionTitle": {},
"sectionNone": "Tidak ada bagian",
"@sectionNone": {},
"albumTierGroups": "Kelompok",
"@albumTierGroups": {},
"createButtonLabel": "BUAT",
"@createButtonLabel": {},
"chipActionGroup": "Kelompok",
"@chipActionGroup": {},
"chipActionCreateGroup": "Buat kelompok",
"@chipActionCreateGroup": {},
"ungrouped": "Tidak dikelompokkan",
"@ungrouped": {},
"newGroupDialogTitle": "Kelompok Baru",
"@newGroupDialogTitle": {},
"newGroupDialogNameLabel": "Nama kelompok",
"@newGroupDialogNameLabel": {},
"groupAlreadyExists": "Kelompok sudah ada",
"@groupAlreadyExists": {},
"groupEmpty": "Tidak ada kelompok",
"@groupEmpty": {},
"groupPickerTitle": "Pilih Kelompok",
"@groupPickerTitle": {},
"groupPickerUseThisGroupButton": "Gunakan kelompok ini",
"@groupPickerUseThisGroupButton": {}
}

Some files were not shown because too many files have changed in this diff Show more