diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 7851727a..8dead5bc 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1,2 @@ github: edde746 +liberapay: edde746 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 751497f5..8746b093 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,6 +7,7 @@ env: SENTRY_DART_DEFINE: ${{ github.repository == 'edde746/plezy' && '--dart-define=ENABLE_SENTRY=true' || '' }} GIT_COMMIT_DART_DEFINE: --dart-define=GIT_COMMIT=${{ github.sha }} SENTRY_ENV_DART_DEFINE: --dart-define=SENTRY_ENVIRONMENT=github + DONATIONS_DART_DEFINE: --dart-define=ENABLE_DONATIONS=true jobs: build-android: @@ -63,7 +64,7 @@ jobs: EOF - name: Build APKs - run: flutter build apk --release --split-per-abi --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} + run: flutter build apk --release --split-per-abi --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} ${{ env.DONATIONS_DART_DEFINE }} - name: Clean up keystore if: always() @@ -131,7 +132,7 @@ jobs: run: flutter pub get - name: Build iOS (no codesign) - run: flutter build ios --release --no-codesign --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} + run: flutter build ios --release --no-codesign --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} ${{ env.DONATIONS_DART_DEFINE }} - name: Create IPA run: | @@ -189,7 +190,7 @@ jobs: run: flutter pub get - name: Build macOS - run: flutter build macos --release --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} + run: flutter build macos --release --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} ${{ env.DONATIONS_DART_DEFINE }} - name: Import Code Signing Certificate env: @@ -340,7 +341,7 @@ jobs: run: flutter pub get - name: Build Windows x64 - run: flutter build windows --release --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} + run: flutter build windows --release --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} ${{ env.DONATIONS_DART_DEFINE }} - name: Upload x64 build uses: actions/upload-artifact@v4 @@ -377,7 +378,7 @@ jobs: run: flutter pub get - name: Build Windows arm64 - run: flutter build windows --release --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} + run: flutter build windows --release --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} ${{ env.DONATIONS_DART_DEFINE }} - name: Upload arm64 build uses: actions/upload-artifact@v4 @@ -521,7 +522,7 @@ jobs: run: flutter pub get - name: Build Linux x64 - run: flutter build linux --release --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} + run: flutter build linux --release --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} ${{ env.DONATIONS_DART_DEFINE }} env: PKG_CONFIG_PATH: ${{ github.workspace }}/libmpv-prefix/lib/pkgconfig:${{ github.workspace }}/libmpv-prefix/lib/x86_64-linux-gnu/pkgconfig @@ -629,7 +630,7 @@ jobs: run: flutter pub get - name: Build Linux arm64 - run: flutter build linux --release --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} + run: flutter build linux --release --dart-define=ENABLE_UPDATE_CHECK=true ${{ env.SENTRY_DART_DEFINE }} ${{ env.GIT_COMMIT_DART_DEFINE }} ${{ env.SENTRY_ENV_DART_DEFINE }} ${{ env.DONATIONS_DART_DEFINE }} env: PKG_CONFIG_PATH: ${{ github.workspace }}/libmpv-prefix/lib/pkgconfig:${{ github.workspace }}/libmpv-prefix/lib/aarch64-linux-gnu/pkgconfig diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json index f44a00d5..a28aab1d 100644 --- a/lib/i18n/da.i18n.json +++ b/lib/i18n/da.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Indstillinger", + "supportDeveloper": "Støt Plezy", + "supportDeveloperDescription": "Doner via Liberapay for at finansiere udviklingen", "language": "Sprog", "theme": "Tema", "appearance": "Udseende", diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index 42786b2c..00c22e2a 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Einstellungen", + "supportDeveloper": "Plezy unterstützen", + "supportDeveloperDescription": "Per Liberapay spenden, um die Entwicklung zu fördern", "language": "Sprache", "theme": "Design", "appearance": "Darstellung", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index bb15c8c5..e1dbd12a 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Settings", + "supportDeveloper": "Support Plezy", + "supportDeveloperDescription": "Donate via Liberapay to fund development", "language": "Language", "theme": "Theme", "appearance": "Appearance", diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index 80668253..9c67d188 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Configuración", + "supportDeveloper": "Apoya Plezy", + "supportDeveloperDescription": "Dona vía Liberapay para financiar el desarrollo", "language": "Idioma", "theme": "Tema", "appearance": "Apariencia", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index 975e2e60..760b7854 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Paramètres", + "supportDeveloper": "Soutenir Plezy", + "supportDeveloperDescription": "Faites un don via Liberapay pour financer le développement", "language": "Langue", "theme": "Thème", "appearance": "Apparence", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index 052095bb..560ac6f1 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Impostazioni", + "supportDeveloper": "Supporta Plezy", + "supportDeveloperDescription": "Dona tramite Liberapay per finanziare lo sviluppo", "language": "Lingua", "theme": "Tema", "appearance": "Aspetto", diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json index 8c5ea41e..6ced831a 100644 --- a/lib/i18n/ja.i18n.json +++ b/lib/i18n/ja.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "設定", + "supportDeveloper": "Plezy を支援", + "supportDeveloperDescription": "Liberapay で寄付して開発を支援", "language": "言語", "theme": "テーマ", "appearance": "外観", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index 502e42ad..85cf4e0c 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "설정", + "supportDeveloper": "Plezy 후원하기", + "supportDeveloperDescription": "Liberapay로 후원하여 개발 지원", "language": "언어", "theme": "테마", "appearance": "외관", diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json index 0ec64496..262e5e20 100644 --- a/lib/i18n/nb.i18n.json +++ b/lib/i18n/nb.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Innstillinger", + "supportDeveloper": "Støtt Plezy", + "supportDeveloperDescription": "Doner via Liberapay for å finansiere utviklingen", "language": "Språk", "theme": "Tema", "appearance": "Utseende", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index d832a384..cb964615 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Instellingen", + "supportDeveloper": "Steun Plezy", + "supportDeveloperDescription": "Doneer via Liberapay om de ontwikkeling te steunen", "language": "Taal", "theme": "Thema", "appearance": "Uiterlijk", diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json index f14c08fe..c7d8ee4f 100644 --- a/lib/i18n/pl.i18n.json +++ b/lib/i18n/pl.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Ustawienia", + "supportDeveloper": "Wesprzyj Plezy", + "supportDeveloperDescription": "Wspomóż rozwój darowizną na Liberapay", "language": "Język", "theme": "Motyw", "appearance": "Wygląd", diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json index e805dbd1..a4e2f13f 100644 --- a/lib/i18n/pt.i18n.json +++ b/lib/i18n/pt.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Configurações", + "supportDeveloper": "Apoie o Plezy", + "supportDeveloperDescription": "Doe via Liberapay para financiar o desenvolvimento", "language": "Idioma", "theme": "Tema", "appearance": "Aparência", diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json index 7045ab29..f8e872d5 100644 --- a/lib/i18n/ru.i18n.json +++ b/lib/i18n/ru.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Настройки", + "supportDeveloper": "Поддержать Plezy", + "supportDeveloperDescription": "Пожертвуйте через Liberapay на развитие", "language": "Язык", "theme": "Тема", "appearance": "Внешний вид", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 308b15c7..c0918ed0 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 15 -/// Strings: 13575 (905 per locale) +/// Strings: 13605 (907 per locale) /// -/// Built on 2026-04-19 at 09:09 UTC +/// Built on 2026-04-19 at 09:37 UTC // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart index 428aed21..247b0c69 100644 --- a/lib/i18n/strings_da.g.dart +++ b/lib/i18n/strings_da.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsDa implements TranslationsSettingsEn { // Translations @override String get title => 'Indstillinger'; + @override String get supportDeveloper => 'Støt Plezy'; + @override String get supportDeveloperDescription => 'Doner via Liberapay for at finansiere udviklingen'; @override String get language => 'Sprog'; @override String get theme => 'Tema'; @override String get appearance => 'Udseende'; @@ -1476,6 +1478,8 @@ extension on TranslationsDa { 'update.latestVersion' => 'Du har den nyeste version', 'update.checkFailed' => 'Kunne ikke søge efter opdateringer', 'settings.title' => 'Indstillinger', + 'settings.supportDeveloper' => 'Støt Plezy', + 'settings.supportDeveloperDescription' => 'Doner via Liberapay for at finansiere udviklingen', 'settings.language' => 'Sprog', 'settings.theme' => 'Tema', 'settings.appearance' => 'Udseende', @@ -1922,10 +1926,10 @@ extension on TranslationsDa { 'libraries.noFoldersFound' => 'Ingen mapper fundet', 'libraries.folders' => 'mapper', 'libraries.tabs.recommended' => 'Anbefalet', - 'libraries.tabs.browse' => 'Gennemse', - 'libraries.tabs.collections' => 'Samlinger', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Gennemse', + 'libraries.tabs.collections' => 'Samlinger', 'libraries.tabs.playlists' => 'Playlister', 'libraries.groupings.title' => 'Gruppering', 'libraries.groupings.all' => 'Alle', diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index 4e3c3993..745d36a7 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsDe implements TranslationsSettingsEn { // Translations @override String get title => 'Einstellungen'; + @override String get supportDeveloper => 'Plezy unterstützen'; + @override String get supportDeveloperDescription => 'Per Liberapay spenden, um die Entwicklung zu fördern'; @override String get language => 'Sprache'; @override String get theme => 'Design'; @override String get appearance => 'Darstellung'; @@ -1476,6 +1478,8 @@ extension on TranslationsDe { 'update.latestVersion' => 'Aktuellste Version installiert', 'update.checkFailed' => 'Fehler bei der Updateprüfung', 'settings.title' => 'Einstellungen', + 'settings.supportDeveloper' => 'Plezy unterstützen', + 'settings.supportDeveloperDescription' => 'Per Liberapay spenden, um die Entwicklung zu fördern', 'settings.language' => 'Sprache', 'settings.theme' => 'Design', 'settings.appearance' => 'Darstellung', @@ -1922,10 +1926,10 @@ extension on TranslationsDe { 'libraries.noFoldersFound' => 'Keine Ordner gefunden', 'libraries.folders' => 'Ordner', 'libraries.tabs.recommended' => 'Empfohlen', - 'libraries.tabs.browse' => 'Durchsuchen', - 'libraries.tabs.collections' => 'Sammlungen', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Durchsuchen', + 'libraries.tabs.collections' => 'Sammlungen', 'libraries.tabs.playlists' => 'Wiedergabelisten', 'libraries.groupings.title' => 'Gruppierung', 'libraries.groupings.all' => 'Alle', diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index c20a7a50..70405154 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -326,6 +326,12 @@ class TranslationsSettingsEn { /// en: 'Settings' String get title => 'Settings'; + /// en: 'Support Plezy' + String get supportDeveloper => 'Support Plezy'; + + /// en: 'Donate via Liberapay to fund development' + String get supportDeveloperDescription => 'Donate via Liberapay to fund development'; + /// en: 'Language' String get language => 'Language'; @@ -3293,6 +3299,8 @@ extension on Translations { 'update.latestVersion' => 'You are on the latest version', 'update.checkFailed' => 'Failed to check for updates', 'settings.title' => 'Settings', + 'settings.supportDeveloper' => 'Support Plezy', + 'settings.supportDeveloperDescription' => 'Donate via Liberapay to fund development', 'settings.language' => 'Language', 'settings.theme' => 'Theme', 'settings.appearance' => 'Appearance', @@ -3739,10 +3747,10 @@ extension on Translations { 'libraries.noFoldersFound' => 'No folders found', 'libraries.folders' => 'folders', 'libraries.tabs.recommended' => 'Recommended', - 'libraries.tabs.browse' => 'Browse', - 'libraries.tabs.collections' => 'Collections', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Browse', + 'libraries.tabs.collections' => 'Collections', 'libraries.tabs.playlists' => 'Playlists', 'libraries.groupings.title' => 'Grouping', 'libraries.groupings.all' => 'All', diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index 0210c28a..660fd4e8 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsEs implements TranslationsSettingsEn { // Translations @override String get title => 'Configuración'; + @override String get supportDeveloper => 'Apoya Plezy'; + @override String get supportDeveloperDescription => 'Dona vía Liberapay para financiar el desarrollo'; @override String get language => 'Idioma'; @override String get theme => 'Tema'; @override String get appearance => 'Apariencia'; @@ -1476,6 +1478,8 @@ extension on TranslationsEs { 'update.latestVersion' => 'Ya estás en la última versión', 'update.checkFailed' => 'Error al buscar actualizaciones', 'settings.title' => 'Configuración', + 'settings.supportDeveloper' => 'Apoya Plezy', + 'settings.supportDeveloperDescription' => 'Dona vía Liberapay para financiar el desarrollo', 'settings.language' => 'Idioma', 'settings.theme' => 'Tema', 'settings.appearance' => 'Apariencia', @@ -1922,10 +1926,10 @@ extension on TranslationsEs { 'libraries.noFoldersFound' => 'No se encontraron carpetas', 'libraries.folders' => 'carpetas', 'libraries.tabs.recommended' => 'Recomendado', - 'libraries.tabs.browse' => 'Explorar', - 'libraries.tabs.collections' => 'Colecciones', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Explorar', + 'libraries.tabs.collections' => 'Colecciones', 'libraries.tabs.playlists' => 'Listas', 'libraries.groupings.title' => 'Agrupación', 'libraries.groupings.all' => 'Todo', diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index 912016f4..2ccc5665 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsFr implements TranslationsSettingsEn { // Translations @override String get title => 'Paramètres'; + @override String get supportDeveloper => 'Soutenir Plezy'; + @override String get supportDeveloperDescription => 'Faites un don via Liberapay pour financer le développement'; @override String get language => 'Langue'; @override String get theme => 'Thème'; @override String get appearance => 'Apparence'; @@ -1476,6 +1478,8 @@ extension on TranslationsFr { 'update.latestVersion' => 'Vous utilisez la dernière version', 'update.checkFailed' => 'Échec de la vérification des mises à jour', 'settings.title' => 'Paramètres', + 'settings.supportDeveloper' => 'Soutenir Plezy', + 'settings.supportDeveloperDescription' => 'Faites un don via Liberapay pour financer le développement', 'settings.language' => 'Langue', 'settings.theme' => 'Thème', 'settings.appearance' => 'Apparence', @@ -1922,10 +1926,10 @@ extension on TranslationsFr { 'libraries.noFoldersFound' => 'Aucun dossier trouvé', 'libraries.folders' => 'dossiers', 'libraries.tabs.recommended' => 'Recommandé', - 'libraries.tabs.browse' => 'Parcourir', - 'libraries.tabs.collections' => 'Collections', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Parcourir', + 'libraries.tabs.collections' => 'Collections', 'libraries.tabs.playlists' => 'Playlists', 'libraries.groupings.title' => 'Regroupement', 'libraries.groupings.all' => 'Tous', diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index 8a6556c7..d8785d30 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsIt implements TranslationsSettingsEn { // Translations @override String get title => 'Impostazioni'; + @override String get supportDeveloper => 'Supporta Plezy'; + @override String get supportDeveloperDescription => 'Dona tramite Liberapay per finanziare lo sviluppo'; @override String get language => 'Lingua'; @override String get theme => 'Tema'; @override String get appearance => 'Aspetto'; @@ -1476,6 +1478,8 @@ extension on TranslationsIt { 'update.latestVersion' => 'La versione installata è l\'ultima disponibile', 'update.checkFailed' => 'Impossibile controllare gli aggiornamenti', 'settings.title' => 'Impostazioni', + 'settings.supportDeveloper' => 'Supporta Plezy', + 'settings.supportDeveloperDescription' => 'Dona tramite Liberapay per finanziare lo sviluppo', 'settings.language' => 'Lingua', 'settings.theme' => 'Tema', 'settings.appearance' => 'Aspetto', @@ -1922,10 +1926,10 @@ extension on TranslationsIt { 'libraries.noFoldersFound' => 'Nessuna cartella trovata', 'libraries.folders' => 'cartelle', 'libraries.tabs.recommended' => 'Consigliati', - 'libraries.tabs.browse' => 'Esplora', - 'libraries.tabs.collections' => 'Raccolte', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Esplora', + 'libraries.tabs.collections' => 'Raccolte', 'libraries.tabs.playlists' => 'Playlist', 'libraries.groupings.title' => 'Raggruppamento', 'libraries.groupings.all' => 'Tutti', diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart index f843e7e8..ce2c1f37 100644 --- a/lib/i18n/strings_ja.g.dart +++ b/lib/i18n/strings_ja.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsJa implements TranslationsSettingsEn { // Translations @override String get title => '設定'; + @override String get supportDeveloper => 'Plezy を支援'; + @override String get supportDeveloperDescription => 'Liberapay で寄付して開発を支援'; @override String get language => '言語'; @override String get theme => 'テーマ'; @override String get appearance => '外観'; @@ -1476,6 +1478,8 @@ extension on TranslationsJa { 'update.latestVersion' => '最新バージョンです', 'update.checkFailed' => 'アップデートの確認に失敗しました', 'settings.title' => '設定', + 'settings.supportDeveloper' => 'Plezy を支援', + 'settings.supportDeveloperDescription' => 'Liberapay で寄付して開発を支援', 'settings.language' => '言語', 'settings.theme' => 'テーマ', 'settings.appearance' => '外観', @@ -1922,10 +1926,10 @@ extension on TranslationsJa { 'libraries.noFoldersFound' => 'フォルダが見つかりません', 'libraries.folders' => 'フォルダ', 'libraries.tabs.recommended' => 'おすすめ', - 'libraries.tabs.browse' => 'ブラウズ', - 'libraries.tabs.collections' => 'コレクション', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'ブラウズ', + 'libraries.tabs.collections' => 'コレクション', 'libraries.tabs.playlists' => 'プレイリスト', 'libraries.groupings.title' => 'グループ', 'libraries.groupings.all' => 'すべて', diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index a4d3db23..e18bc1cb 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsKo implements TranslationsSettingsEn { // Translations @override String get title => '설정'; + @override String get supportDeveloper => 'Plezy 후원하기'; + @override String get supportDeveloperDescription => 'Liberapay로 후원하여 개발 지원'; @override String get language => '언어'; @override String get theme => '테마'; @override String get appearance => '외관'; @@ -1476,6 +1478,8 @@ extension on TranslationsKo { 'update.latestVersion' => '최신 버전을 사용 중입니다', 'update.checkFailed' => '업데이트 확인 실패', 'settings.title' => '설정', + 'settings.supportDeveloper' => 'Plezy 후원하기', + 'settings.supportDeveloperDescription' => 'Liberapay로 후원하여 개발 지원', 'settings.language' => '언어', 'settings.theme' => '테마', 'settings.appearance' => '외관', @@ -1922,10 +1926,10 @@ extension on TranslationsKo { 'libraries.noFoldersFound' => '폴더를 찾을 수 없습니다', 'libraries.folders' => '폴더', 'libraries.tabs.recommended' => '추천', - 'libraries.tabs.browse' => '찾아보기', - 'libraries.tabs.collections' => '컬렉션', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => '찾아보기', + 'libraries.tabs.collections' => '컬렉션', 'libraries.tabs.playlists' => '재생 목록', 'libraries.groupings.title' => '그룹', 'libraries.groupings.all' => '전체', diff --git a/lib/i18n/strings_nb.g.dart b/lib/i18n/strings_nb.g.dart index 2f2a92db..f04c69cc 100644 --- a/lib/i18n/strings_nb.g.dart +++ b/lib/i18n/strings_nb.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsNb implements TranslationsSettingsEn { // Translations @override String get title => 'Innstillinger'; + @override String get supportDeveloper => 'Støtt Plezy'; + @override String get supportDeveloperDescription => 'Doner via Liberapay for å finansiere utviklingen'; @override String get language => 'Språk'; @override String get theme => 'Tema'; @override String get appearance => 'Utseende'; @@ -1476,6 +1478,8 @@ extension on TranslationsNb { 'update.latestVersion' => 'Du har den nyeste versjonen', 'update.checkFailed' => 'Kunne ikke se etter oppdateringer', 'settings.title' => 'Innstillinger', + 'settings.supportDeveloper' => 'Støtt Plezy', + 'settings.supportDeveloperDescription' => 'Doner via Liberapay for å finansiere utviklingen', 'settings.language' => 'Språk', 'settings.theme' => 'Tema', 'settings.appearance' => 'Utseende', @@ -1922,10 +1926,10 @@ extension on TranslationsNb { 'libraries.noFoldersFound' => 'Ingen mapper funnet', 'libraries.folders' => 'mapper', 'libraries.tabs.recommended' => 'Anbefalt', - 'libraries.tabs.browse' => 'Bla gjennom', - 'libraries.tabs.collections' => 'Samlinger', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Bla gjennom', + 'libraries.tabs.collections' => 'Samlinger', 'libraries.tabs.playlists' => 'Spillelister', 'libraries.groupings.title' => 'Gruppering', 'libraries.groupings.all' => 'Alle', diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index bb563a42..c347bfec 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsNl implements TranslationsSettingsEn { // Translations @override String get title => 'Instellingen'; + @override String get supportDeveloper => 'Steun Plezy'; + @override String get supportDeveloperDescription => 'Doneer via Liberapay om de ontwikkeling te steunen'; @override String get language => 'Taal'; @override String get theme => 'Thema'; @override String get appearance => 'Uiterlijk'; @@ -1476,6 +1478,8 @@ extension on TranslationsNl { 'update.latestVersion' => 'Je hebt de nieuwste versie', 'update.checkFailed' => 'Kon niet controleren op updates', 'settings.title' => 'Instellingen', + 'settings.supportDeveloper' => 'Steun Plezy', + 'settings.supportDeveloperDescription' => 'Doneer via Liberapay om de ontwikkeling te steunen', 'settings.language' => 'Taal', 'settings.theme' => 'Thema', 'settings.appearance' => 'Uiterlijk', @@ -1922,10 +1926,10 @@ extension on TranslationsNl { 'libraries.noFoldersFound' => 'Geen mappen gevonden', 'libraries.folders' => 'mappen', 'libraries.tabs.recommended' => 'Aanbevolen', - 'libraries.tabs.browse' => 'Bladeren', - 'libraries.tabs.collections' => 'Collecties', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Bladeren', + 'libraries.tabs.collections' => 'Collecties', 'libraries.tabs.playlists' => 'Afspeellijsten', 'libraries.groupings.title' => 'Groepering', 'libraries.groupings.all' => 'Alles', diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart index 54fe2008..1d762a62 100644 --- a/lib/i18n/strings_pl.g.dart +++ b/lib/i18n/strings_pl.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsPl implements TranslationsSettingsEn { // Translations @override String get title => 'Ustawienia'; + @override String get supportDeveloper => 'Wesprzyj Plezy'; + @override String get supportDeveloperDescription => 'Wspomóż rozwój darowizną na Liberapay'; @override String get language => 'Język'; @override String get theme => 'Motyw'; @override String get appearance => 'Wygląd'; @@ -1476,6 +1478,8 @@ extension on TranslationsPl { 'update.latestVersion' => 'Masz najnowszą wersję', 'update.checkFailed' => 'Nie udało się sprawdzić aktualizacji', 'settings.title' => 'Ustawienia', + 'settings.supportDeveloper' => 'Wesprzyj Plezy', + 'settings.supportDeveloperDescription' => 'Wspomóż rozwój darowizną na Liberapay', 'settings.language' => 'Język', 'settings.theme' => 'Motyw', 'settings.appearance' => 'Wygląd', @@ -1922,10 +1926,10 @@ extension on TranslationsPl { 'libraries.noFoldersFound' => 'Nie znaleziono folderów', 'libraries.folders' => 'foldery', 'libraries.tabs.recommended' => 'Rekomendowane', - 'libraries.tabs.browse' => 'Przeglądaj', - 'libraries.tabs.collections' => 'Kolekcje', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Przeglądaj', + 'libraries.tabs.collections' => 'Kolekcje', 'libraries.tabs.playlists' => 'Playlisty', 'libraries.groupings.title' => 'Grupowanie', 'libraries.groupings.all' => 'Wszystkie', diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart index 11e30c4e..169b255d 100644 --- a/lib/i18n/strings_pt.g.dart +++ b/lib/i18n/strings_pt.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsPt implements TranslationsSettingsEn { // Translations @override String get title => 'Configurações'; + @override String get supportDeveloper => 'Apoie o Plezy'; + @override String get supportDeveloperDescription => 'Doe via Liberapay para financiar o desenvolvimento'; @override String get language => 'Idioma'; @override String get theme => 'Tema'; @override String get appearance => 'Aparência'; @@ -1476,6 +1478,8 @@ extension on TranslationsPt { 'update.latestVersion' => 'Você está na versão mais recente', 'update.checkFailed' => 'Falha ao verificar atualizações', 'settings.title' => 'Configurações', + 'settings.supportDeveloper' => 'Apoie o Plezy', + 'settings.supportDeveloperDescription' => 'Doe via Liberapay para financiar o desenvolvimento', 'settings.language' => 'Idioma', 'settings.theme' => 'Tema', 'settings.appearance' => 'Aparência', @@ -1922,10 +1926,10 @@ extension on TranslationsPt { 'libraries.noFoldersFound' => 'Nenhuma pasta encontrada', 'libraries.folders' => 'pastas', 'libraries.tabs.recommended' => 'Recomendados', - 'libraries.tabs.browse' => 'Navegar', - 'libraries.tabs.collections' => 'Coleções', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Navegar', + 'libraries.tabs.collections' => 'Coleções', 'libraries.tabs.playlists' => 'Playlists', 'libraries.groupings.title' => 'Agrupamento', 'libraries.groupings.all' => 'Todos', diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart index 402b460c..38e86700 100644 --- a/lib/i18n/strings_ru.g.dart +++ b/lib/i18n/strings_ru.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsRu implements TranslationsSettingsEn { // Translations @override String get title => 'Настройки'; + @override String get supportDeveloper => 'Поддержать Plezy'; + @override String get supportDeveloperDescription => 'Пожертвуйте через Liberapay на развитие'; @override String get language => 'Язык'; @override String get theme => 'Тема'; @override String get appearance => 'Внешний вид'; @@ -1476,6 +1478,8 @@ extension on TranslationsRu { 'update.latestVersion' => 'У вас последняя версия', 'update.checkFailed' => 'Не удалось проверить обновления', 'settings.title' => 'Настройки', + 'settings.supportDeveloper' => 'Поддержать Plezy', + 'settings.supportDeveloperDescription' => 'Пожертвуйте через Liberapay на развитие', 'settings.language' => 'Язык', 'settings.theme' => 'Тема', 'settings.appearance' => 'Внешний вид', @@ -1922,10 +1926,10 @@ extension on TranslationsRu { 'libraries.noFoldersFound' => 'Папки не найдены', 'libraries.folders' => 'папки', 'libraries.tabs.recommended' => 'Рекомендуемые', - 'libraries.tabs.browse' => 'Обзор', - 'libraries.tabs.collections' => 'Коллекции', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Обзор', + 'libraries.tabs.collections' => 'Коллекции', 'libraries.tabs.playlists' => 'Плейлисты', 'libraries.groupings.title' => 'Группировка', 'libraries.groupings.all' => 'Все', diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index 8d725777..d494fc2b 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsSv implements TranslationsSettingsEn { // Translations @override String get title => 'Inställningar'; + @override String get supportDeveloper => 'Stöd Plezy'; + @override String get supportDeveloperDescription => 'Donera via Liberapay för att finansiera utvecklingen'; @override String get language => 'Språk'; @override String get theme => 'Tema'; @override String get appearance => 'Utseende'; @@ -1476,6 +1478,8 @@ extension on TranslationsSv { 'update.latestVersion' => 'Du har den senaste versionen', 'update.checkFailed' => 'Misslyckades att kontrollera uppdateringar', 'settings.title' => 'Inställningar', + 'settings.supportDeveloper' => 'Stöd Plezy', + 'settings.supportDeveloperDescription' => 'Donera via Liberapay för att finansiera utvecklingen', 'settings.language' => 'Språk', 'settings.theme' => 'Tema', 'settings.appearance' => 'Utseende', @@ -1922,10 +1926,10 @@ extension on TranslationsSv { 'libraries.noFoldersFound' => 'Inga mappar hittades', 'libraries.folders' => 'mappar', 'libraries.tabs.recommended' => 'Rekommenderat', - 'libraries.tabs.browse' => 'Bläddra', - 'libraries.tabs.collections' => 'Samlingar', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => 'Bläddra', + 'libraries.tabs.collections' => 'Samlingar', 'libraries.tabs.playlists' => 'Spellistor', 'libraries.groupings.title' => 'Gruppering', 'libraries.groupings.all' => 'Alla', diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index d81a0789..182f44fe 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -194,6 +194,8 @@ class _TranslationsSettingsZh implements TranslationsSettingsEn { // Translations @override String get title => '设置'; + @override String get supportDeveloper => '支持 Plezy'; + @override String get supportDeveloperDescription => '通过 Liberapay 捐赠支持开发'; @override String get language => '语言'; @override String get theme => '主题'; @override String get appearance => '外观'; @@ -1476,6 +1478,8 @@ extension on TranslationsZh { 'update.latestVersion' => '已安装的版本是可用的最新版本', 'update.checkFailed' => '无法检查更新', 'settings.title' => '设置', + 'settings.supportDeveloper' => '支持 Plezy', + 'settings.supportDeveloperDescription' => '通过 Liberapay 捐赠支持开发', 'settings.language' => '语言', 'settings.theme' => '主题', 'settings.appearance' => '外观', @@ -1922,10 +1926,10 @@ extension on TranslationsZh { 'libraries.noFoldersFound' => '未找到文件夹', 'libraries.folders' => '文件夹', 'libraries.tabs.recommended' => '推荐', - 'libraries.tabs.browse' => '浏览', - 'libraries.tabs.collections' => '合集', _ => null, } ?? switch (path) { + 'libraries.tabs.browse' => '浏览', + 'libraries.tabs.collections' => '合集', 'libraries.tabs.playlists' => '播放列表', 'libraries.groupings.title' => '分组', 'libraries.groupings.all' => '全部', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index 4123247a..da305598 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "Inställningar", + "supportDeveloper": "Stöd Plezy", + "supportDeveloperDescription": "Donera via Liberapay för att finansiera utvecklingen", "language": "Språk", "theme": "Tema", "appearance": "Utseende", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index 92e05399..e39fd0fb 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -74,6 +74,8 @@ }, "settings": { "title": "设置", + "supportDeveloper": "支持 Plezy", + "supportDeveloperDescription": "通过 Liberapay 捐赠支持开发", "language": "语言", "theme": "主题", "appearance": "外观", diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index de11751d..a4f9077e 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -14,6 +14,7 @@ import '../../focus/input_mode_tracker.dart'; import '../../i18n/strings.g.dart'; import '../main_screen.dart'; import '../../mixins/refreshable.dart'; +import '../../services/donation_service.dart'; import '../../services/download_storage_service.dart'; import '../../services/file_picker_service.dart'; import '../../services/saf_storage_service.dart'; @@ -46,6 +47,7 @@ class _SettingsScreenState extends State with FocusableTab { late final FocusMemoryTracker _focusTracker; // Focus tracking keys + static const _kDonate = 'donate'; static const _kAppearance = 'appearance'; static const _kPlayback = 'playback'; static const _kTrakt = 'trakt'; @@ -100,7 +102,7 @@ class _SettingsScreenState extends State with FocusableTab { @override void focusActiveTabIfReady() { if (InputModeTracker.isKeyboardMode(context)) { - _focusTracker.restoreFocus(fallbackKey: _kAppearance); + _focusTracker.restoreFocus(fallbackKey: DonationService.isEnabled ? _kDonate : _kAppearance); } } @@ -149,6 +151,9 @@ class _SettingsScreenState extends State with FocusableTab { ExcludeFocus(child: CustomAppBar(title: Text(t.settings.title), pinned: true)), SliverList( delegate: SliverChildListDelegate([ + // --- Donate (non-store builds only) --- + if (DonationService.isEnabled) _buildDonateTile(), + // --- Appearance (navigation tile) --- _buildAppearanceTile(), @@ -190,6 +195,22 @@ class _SettingsScreenState extends State with FocusableTab { ); } + Widget _buildDonateTile() { + return ListTile( + focusNode: _focusTracker.get(_kDonate), + leading: const AppIcon(Symbols.favorite_rounded, fill: 1), + title: Text(t.settings.supportDeveloper), + subtitle: Text(t.settings.supportDeveloperDescription), + trailing: const AppIcon(Symbols.open_in_new_rounded, fill: 1), + onTap: () async { + final url = Uri.parse(DonationService.donationUrl); + if (await canLaunchUrl(url)) { + await launchUrl(url, mode: LaunchMode.externalApplication); + } + }, + ); + } + Widget _buildAppearanceTile() { return Consumer2( builder: (context, themeProvider, settingsProvider, child) { diff --git a/lib/services/donation_service.dart b/lib/services/donation_service.dart new file mode 100644 index 00000000..b1799ad0 --- /dev/null +++ b/lib/services/donation_service.dart @@ -0,0 +1,7 @@ +class DonationService { + static const String donationUrl = 'https://liberapay.com/edde746'; + + static bool get isEnabled { + return const bool.fromEnvironment('ENABLE_DONATIONS', defaultValue: false); + } +}