From 9d9d9bb311c05513b374ddae00ef9816beb9e4dd Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Fri, 10 Apr 2026 18:38:37 +0200 Subject: [PATCH] feat: add square art and logo editing to metadata editor close #837 --- lib/i18n/da.i18n.json | 4 ++ lib/i18n/de.i18n.json | 4 ++ lib/i18n/en.i18n.json | 4 ++ lib/i18n/es.i18n.json | 4 ++ lib/i18n/fr.i18n.json | 4 ++ lib/i18n/it.i18n.json | 4 ++ lib/i18n/ja.i18n.json | 4 ++ lib/i18n/ko.i18n.json | 4 ++ lib/i18n/nb.i18n.json | 4 ++ lib/i18n/nl.i18n.json | 4 ++ lib/i18n/pl.i18n.json | 4 ++ lib/i18n/pt.i18n.json | 4 ++ lib/i18n/ru.i18n.json | 4 ++ lib/i18n/strings.g.dart | 4 +- lib/i18n/strings_da.g.dart | 8 +++ lib/i18n/strings_de.g.dart | 8 +++ lib/i18n/strings_en.g.dart | 16 ++++++ lib/i18n/strings_es.g.dart | 8 +++ lib/i18n/strings_fr.g.dart | 8 +++ lib/i18n/strings_it.g.dart | 8 +++ lib/i18n/strings_ja.g.dart | 8 +++ lib/i18n/strings_ko.g.dart | 8 +++ lib/i18n/strings_nb.g.dart | 8 +++ lib/i18n/strings_nl.g.dart | 8 +++ lib/i18n/strings_pl.g.dart | 8 +++ lib/i18n/strings_pt.g.dart | 8 +++ lib/i18n/strings_ru.g.dart | 8 +++ lib/i18n/strings_sv.g.dart | 8 +++ lib/i18n/strings_zh.g.dart | 8 +++ lib/i18n/sv.i18n.json | 4 ++ lib/i18n/zh.i18n.json | 4 ++ lib/screens/metadata_edit_screen.dart | 75 +++++++++++++------------- lib/widgets/artwork_picker_dialog.dart | 21 +++++--- 33 files changed, 240 insertions(+), 48 deletions(-) diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json index ecc88e90..b1357c97 100644 --- a/lib/i18n/da.i18n.json +++ b/lib/i18n/da.i18n.json @@ -887,8 +887,12 @@ "summary": "Resumé", "poster": "Plakat", "background": "Baggrund", + "logo": "Logo", + "squareArt": "Kvadratisk billede", "selectPoster": "Vælg plakat", "selectBackground": "Vælg baggrund", + "selectLogo": "Vælg logo", + "selectSquareArt": "Vælg kvadratisk billede", "fromUrl": "Fra URL", "uploadFile": "Upload fil", "enterImageUrl": "Indtast billed-URL", diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index 083f6c83..d9e50d8d 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -887,8 +887,12 @@ "summary": "Zusammenfassung", "poster": "Poster", "background": "Hintergrund", + "logo": "Logo", + "squareArt": "Quadratisches Bild", "selectPoster": "Poster auswählen", "selectBackground": "Hintergrund auswählen", + "selectLogo": "Logo auswählen", + "selectSquareArt": "Quadratisches Bild auswählen", "fromUrl": "Von URL", "uploadFile": "Datei hochladen", "enterImageUrl": "Bild-URL eingeben", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index c6cf83cf..4d9d5129 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -887,8 +887,12 @@ "summary": "Summary", "poster": "Poster", "background": "Background", + "logo": "Logo", + "squareArt": "Square Art", "selectPoster": "Select Poster", "selectBackground": "Select Background", + "selectLogo": "Select Logo", + "selectSquareArt": "Select Square Art", "fromUrl": "From URL", "uploadFile": "Upload File", "enterImageUrl": "Enter image URL", diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index bdc5f806..0a6bccb2 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -887,8 +887,12 @@ "summary": "Resumen", "poster": "Póster", "background": "Fondo", + "logo": "Logo", + "squareArt": "Imagen cuadrada", "selectPoster": "Seleccionar póster", "selectBackground": "Seleccionar fondo", + "selectLogo": "Seleccionar logo", + "selectSquareArt": "Seleccionar imagen cuadrada", "fromUrl": "Desde URL", "uploadFile": "Subir archivo", "enterImageUrl": "Introducir URL de imagen", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index 86b633dc..17927bae 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -887,8 +887,12 @@ "summary": "Résumé", "poster": "Affiche", "background": "Arrière-plan", + "logo": "Logo", + "squareArt": "Image carrée", "selectPoster": "Sélectionner l'affiche", "selectBackground": "Sélectionner l'arrière-plan", + "selectLogo": "Sélectionner le logo", + "selectSquareArt": "Sélectionner l'image carrée", "fromUrl": "Depuis une URL", "uploadFile": "Importer un fichier", "enterImageUrl": "Entrer l'URL de l'image", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index 8bebbb2d..000acfec 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -887,8 +887,12 @@ "summary": "Trama", "poster": "Poster", "background": "Sfondo", + "logo": "Logo", + "squareArt": "Immagine quadrata", "selectPoster": "Seleziona poster", "selectBackground": "Seleziona sfondo", + "selectLogo": "Seleziona logo", + "selectSquareArt": "Seleziona immagine quadrata", "fromUrl": "Da URL", "uploadFile": "Carica file", "enterImageUrl": "Inserisci URL immagine", diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json index bd503dfb..21ad325c 100644 --- a/lib/i18n/ja.i18n.json +++ b/lib/i18n/ja.i18n.json @@ -887,8 +887,12 @@ "summary": "あらすじ", "poster": "ポスター", "background": "背景", + "logo": "ロゴ", + "squareArt": "正方形アート", "selectPoster": "ポスターを選択", "selectBackground": "背景を選択", + "selectLogo": "ロゴを選択", + "selectSquareArt": "正方形アートを選択", "fromUrl": "URLから", "uploadFile": "ファイルをアップロード", "enterImageUrl": "画像URLを入力", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index dcd7da02..17d28ccd 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -887,8 +887,12 @@ "summary": "줄거리", "poster": "포스터", "background": "배경", + "logo": "로고", + "squareArt": "정사각형 아트", "selectPoster": "포스터 선택", "selectBackground": "배경 선택", + "selectLogo": "로고 선택", + "selectSquareArt": "정사각형 아트 선택", "fromUrl": "URL에서", "uploadFile": "파일 업로드", "enterImageUrl": "이미지 URL 입력", diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json index 52f6e9c3..18b27c47 100644 --- a/lib/i18n/nb.i18n.json +++ b/lib/i18n/nb.i18n.json @@ -887,8 +887,12 @@ "summary": "Sammendrag", "poster": "Plakat", "background": "Bakgrunn", + "logo": "Logo", + "squareArt": "Kvadratisk bilde", "selectPoster": "Velg plakat", "selectBackground": "Velg bakgrunn", + "selectLogo": "Velg logo", + "selectSquareArt": "Velg kvadratisk bilde", "fromUrl": "Fra URL", "uploadFile": "Last opp fil", "enterImageUrl": "Skriv inn bilde-URL", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index 5f09bbb0..d3dfe30b 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -887,8 +887,12 @@ "summary": "Samenvatting", "poster": "Poster", "background": "Achtergrond", + "logo": "Logo", + "squareArt": "Vierkante afbeelding", "selectPoster": "Poster selecteren", "selectBackground": "Achtergrond selecteren", + "selectLogo": "Logo selecteren", + "selectSquareArt": "Vierkante afbeelding selecteren", "fromUrl": "Vanaf URL", "uploadFile": "Bestand uploaden", "enterImageUrl": "Voer afbeeldings-URL in", diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json index bdc85c34..3e33add9 100644 --- a/lib/i18n/pl.i18n.json +++ b/lib/i18n/pl.i18n.json @@ -887,8 +887,12 @@ "summary": "Opis", "poster": "Plakat", "background": "Tło", + "logo": "Logo", + "squareArt": "Kwadratowy obraz", "selectPoster": "Wybierz plakat", "selectBackground": "Wybierz tło", + "selectLogo": "Wybierz logo", + "selectSquareArt": "Wybierz kwadratowy obraz", "fromUrl": "Z URL", "uploadFile": "Prześlij plik", "enterImageUrl": "Wprowadź URL obrazu", diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json index 69d7a6f5..f3d45e49 100644 --- a/lib/i18n/pt.i18n.json +++ b/lib/i18n/pt.i18n.json @@ -887,8 +887,12 @@ "summary": "Sinopse", "poster": "Poster", "background": "Plano de Fundo", + "logo": "Logo", + "squareArt": "Imagem Quadrada", "selectPoster": "Selecionar Poster", "selectBackground": "Selecionar Plano de Fundo", + "selectLogo": "Selecionar Logo", + "selectSquareArt": "Selecionar Imagem Quadrada", "fromUrl": "Da URL", "uploadFile": "Enviar Arquivo", "enterImageUrl": "Insira a URL da imagem", diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json index 441e611c..1413afdc 100644 --- a/lib/i18n/ru.i18n.json +++ b/lib/i18n/ru.i18n.json @@ -887,8 +887,12 @@ "summary": "Описание", "poster": "Постер", "background": "Фон", + "logo": "Логотип", + "squareArt": "Квадратное изображение", "selectPoster": "Выбрать постер", "selectBackground": "Выбрать фон", + "selectLogo": "Выбрать логотип", + "selectSquareArt": "Выбрать квадратное изображение", "fromUrl": "По URL", "uploadFile": "Загрузить файл", "enterImageUrl": "Введите URL изображения", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 91f4b0fc..fbf3e640 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: 12885 (859 per locale) +/// Strings: 12945 (863 per locale) /// -/// Built on 2026-04-09 at 23:27 UTC +/// Built on 2026-04-10 at 16:32 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 c180ccc5..d83fe0b4 100644 --- a/lib/i18n/strings_da.g.dart +++ b/lib/i18n/strings_da.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditDa implements TranslationsMetadataEditEn { @override String get summary => 'Resumé'; @override String get poster => 'Plakat'; @override String get background => 'Baggrund'; + @override String get logo => 'Logo'; + @override String get squareArt => 'Kvadratisk billede'; @override String get selectPoster => 'Vælg plakat'; @override String get selectBackground => 'Vælg baggrund'; + @override String get selectLogo => 'Vælg logo'; + @override String get selectSquareArt => 'Vælg kvadratisk billede'; @override String get fromUrl => 'Fra URL'; @override String get uploadFile => 'Upload fil'; @override String get enterImageUrl => 'Indtast billed-URL'; @@ -2159,8 +2163,12 @@ extension on TranslationsDa { 'metadataEdit.summary' => 'Resumé', 'metadataEdit.poster' => 'Plakat', 'metadataEdit.background' => 'Baggrund', + 'metadataEdit.logo' => 'Logo', + 'metadataEdit.squareArt' => 'Kvadratisk billede', 'metadataEdit.selectPoster' => 'Vælg plakat', 'metadataEdit.selectBackground' => 'Vælg baggrund', + 'metadataEdit.selectLogo' => 'Vælg logo', + 'metadataEdit.selectSquareArt' => 'Vælg kvadratisk billede', 'metadataEdit.fromUrl' => 'Fra URL', 'metadataEdit.uploadFile' => 'Upload fil', 'metadataEdit.enterImageUrl' => 'Indtast billed-URL', diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index a5e3e2e3..b6e628ef 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditDe implements TranslationsMetadataEditEn { @override String get summary => 'Zusammenfassung'; @override String get poster => 'Poster'; @override String get background => 'Hintergrund'; + @override String get logo => 'Logo'; + @override String get squareArt => 'Quadratisches Bild'; @override String get selectPoster => 'Poster auswählen'; @override String get selectBackground => 'Hintergrund auswählen'; + @override String get selectLogo => 'Logo auswählen'; + @override String get selectSquareArt => 'Quadratisches Bild auswählen'; @override String get fromUrl => 'Von URL'; @override String get uploadFile => 'Datei hochladen'; @override String get enterImageUrl => 'Bild-URL eingeben'; @@ -2159,8 +2163,12 @@ extension on TranslationsDe { 'metadataEdit.summary' => 'Zusammenfassung', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Hintergrund', + 'metadataEdit.logo' => 'Logo', + 'metadataEdit.squareArt' => 'Quadratisches Bild', 'metadataEdit.selectPoster' => 'Poster auswählen', 'metadataEdit.selectBackground' => 'Hintergrund auswählen', + 'metadataEdit.selectLogo' => 'Logo auswählen', + 'metadataEdit.selectSquareArt' => 'Quadratisches Bild auswählen', 'metadataEdit.fromUrl' => 'Von URL', 'metadataEdit.uploadFile' => 'Datei hochladen', 'metadataEdit.enterImageUrl' => 'Bild-URL eingeben', diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index ad169ab5..4f9e88ac 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -2508,12 +2508,24 @@ class TranslationsMetadataEditEn { /// en: 'Background' String get background => 'Background'; + /// en: 'Logo' + String get logo => 'Logo'; + + /// en: 'Square Art' + String get squareArt => 'Square Art'; + /// en: 'Select Poster' String get selectPoster => 'Select Poster'; /// en: 'Select Background' String get selectBackground => 'Select Background'; + /// en: 'Select Logo' + String get selectLogo => 'Select Logo'; + + /// en: 'Select Square Art' + String get selectSquareArt => 'Select Square Art'; + /// en: 'From URL' String get fromUrl => 'From URL'; @@ -3884,8 +3896,12 @@ extension on Translations { 'metadataEdit.summary' => 'Summary', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Background', + 'metadataEdit.logo' => 'Logo', + 'metadataEdit.squareArt' => 'Square Art', 'metadataEdit.selectPoster' => 'Select Poster', 'metadataEdit.selectBackground' => 'Select Background', + 'metadataEdit.selectLogo' => 'Select Logo', + 'metadataEdit.selectSquareArt' => 'Select Square Art', 'metadataEdit.fromUrl' => 'From URL', 'metadataEdit.uploadFile' => 'Upload File', 'metadataEdit.enterImageUrl' => 'Enter image URL', diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index 4f1b51cc..9635a758 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditEs implements TranslationsMetadataEditEn { @override String get summary => 'Resumen'; @override String get poster => 'Póster'; @override String get background => 'Fondo'; + @override String get logo => 'Logo'; + @override String get squareArt => 'Imagen cuadrada'; @override String get selectPoster => 'Seleccionar póster'; @override String get selectBackground => 'Seleccionar fondo'; + @override String get selectLogo => 'Seleccionar logo'; + @override String get selectSquareArt => 'Seleccionar imagen cuadrada'; @override String get fromUrl => 'Desde URL'; @override String get uploadFile => 'Subir archivo'; @override String get enterImageUrl => 'Introducir URL de imagen'; @@ -2159,8 +2163,12 @@ extension on TranslationsEs { 'metadataEdit.summary' => 'Resumen', 'metadataEdit.poster' => 'Póster', 'metadataEdit.background' => 'Fondo', + 'metadataEdit.logo' => 'Logo', + 'metadataEdit.squareArt' => 'Imagen cuadrada', 'metadataEdit.selectPoster' => 'Seleccionar póster', 'metadataEdit.selectBackground' => 'Seleccionar fondo', + 'metadataEdit.selectLogo' => 'Seleccionar logo', + 'metadataEdit.selectSquareArt' => 'Seleccionar imagen cuadrada', 'metadataEdit.fromUrl' => 'Desde URL', 'metadataEdit.uploadFile' => 'Subir archivo', 'metadataEdit.enterImageUrl' => 'Introducir URL de imagen', diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index b46a2f06..856b7edc 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditFr implements TranslationsMetadataEditEn { @override String get summary => 'Résumé'; @override String get poster => 'Affiche'; @override String get background => 'Arrière-plan'; + @override String get logo => 'Logo'; + @override String get squareArt => 'Image carrée'; @override String get selectPoster => 'Sélectionner l\'affiche'; @override String get selectBackground => 'Sélectionner l\'arrière-plan'; + @override String get selectLogo => 'Sélectionner le logo'; + @override String get selectSquareArt => 'Sélectionner l\'image carrée'; @override String get fromUrl => 'Depuis une URL'; @override String get uploadFile => 'Importer un fichier'; @override String get enterImageUrl => 'Entrer l\'URL de l\'image'; @@ -2159,8 +2163,12 @@ extension on TranslationsFr { 'metadataEdit.summary' => 'Résumé', 'metadataEdit.poster' => 'Affiche', 'metadataEdit.background' => 'Arrière-plan', + 'metadataEdit.logo' => 'Logo', + 'metadataEdit.squareArt' => 'Image carrée', 'metadataEdit.selectPoster' => 'Sélectionner l\'affiche', 'metadataEdit.selectBackground' => 'Sélectionner l\'arrière-plan', + 'metadataEdit.selectLogo' => 'Sélectionner le logo', + 'metadataEdit.selectSquareArt' => 'Sélectionner l\'image carrée', 'metadataEdit.fromUrl' => 'Depuis une URL', 'metadataEdit.uploadFile' => 'Importer un fichier', 'metadataEdit.enterImageUrl' => 'Entrer l\'URL de l\'image', diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index 2362180d..78ae0df7 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditIt implements TranslationsMetadataEditEn { @override String get summary => 'Trama'; @override String get poster => 'Poster'; @override String get background => 'Sfondo'; + @override String get logo => 'Logo'; + @override String get squareArt => 'Immagine quadrata'; @override String get selectPoster => 'Seleziona poster'; @override String get selectBackground => 'Seleziona sfondo'; + @override String get selectLogo => 'Seleziona logo'; + @override String get selectSquareArt => 'Seleziona immagine quadrata'; @override String get fromUrl => 'Da URL'; @override String get uploadFile => 'Carica file'; @override String get enterImageUrl => 'Inserisci URL immagine'; @@ -2159,8 +2163,12 @@ extension on TranslationsIt { 'metadataEdit.summary' => 'Trama', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Sfondo', + 'metadataEdit.logo' => 'Logo', + 'metadataEdit.squareArt' => 'Immagine quadrata', 'metadataEdit.selectPoster' => 'Seleziona poster', 'metadataEdit.selectBackground' => 'Seleziona sfondo', + 'metadataEdit.selectLogo' => 'Seleziona logo', + 'metadataEdit.selectSquareArt' => 'Seleziona immagine quadrata', 'metadataEdit.fromUrl' => 'Da URL', 'metadataEdit.uploadFile' => 'Carica file', 'metadataEdit.enterImageUrl' => 'Inserisci URL immagine', diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart index 21521c3e..968cb577 100644 --- a/lib/i18n/strings_ja.g.dart +++ b/lib/i18n/strings_ja.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditJa implements TranslationsMetadataEditEn { @override String get summary => 'あらすじ'; @override String get poster => 'ポスター'; @override String get background => '背景'; + @override String get logo => 'ロゴ'; + @override String get squareArt => '正方形アート'; @override String get selectPoster => 'ポスターを選択'; @override String get selectBackground => '背景を選択'; + @override String get selectLogo => 'ロゴを選択'; + @override String get selectSquareArt => '正方形アートを選択'; @override String get fromUrl => 'URLから'; @override String get uploadFile => 'ファイルをアップロード'; @override String get enterImageUrl => '画像URLを入力'; @@ -2159,8 +2163,12 @@ extension on TranslationsJa { 'metadataEdit.summary' => 'あらすじ', 'metadataEdit.poster' => 'ポスター', 'metadataEdit.background' => '背景', + 'metadataEdit.logo' => 'ロゴ', + 'metadataEdit.squareArt' => '正方形アート', 'metadataEdit.selectPoster' => 'ポスターを選択', 'metadataEdit.selectBackground' => '背景を選択', + 'metadataEdit.selectLogo' => 'ロゴを選択', + 'metadataEdit.selectSquareArt' => '正方形アートを選択', 'metadataEdit.fromUrl' => 'URLから', 'metadataEdit.uploadFile' => 'ファイルをアップロード', 'metadataEdit.enterImageUrl' => '画像URLを入力', diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index 65f0be0b..9346bdb3 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditKo implements TranslationsMetadataEditEn { @override String get summary => '줄거리'; @override String get poster => '포스터'; @override String get background => '배경'; + @override String get logo => '로고'; + @override String get squareArt => '정사각형 아트'; @override String get selectPoster => '포스터 선택'; @override String get selectBackground => '배경 선택'; + @override String get selectLogo => '로고 선택'; + @override String get selectSquareArt => '정사각형 아트 선택'; @override String get fromUrl => 'URL에서'; @override String get uploadFile => '파일 업로드'; @override String get enterImageUrl => '이미지 URL 입력'; @@ -2159,8 +2163,12 @@ extension on TranslationsKo { 'metadataEdit.summary' => '줄거리', 'metadataEdit.poster' => '포스터', 'metadataEdit.background' => '배경', + 'metadataEdit.logo' => '로고', + 'metadataEdit.squareArt' => '정사각형 아트', 'metadataEdit.selectPoster' => '포스터 선택', 'metadataEdit.selectBackground' => '배경 선택', + 'metadataEdit.selectLogo' => '로고 선택', + 'metadataEdit.selectSquareArt' => '정사각형 아트 선택', 'metadataEdit.fromUrl' => 'URL에서', 'metadataEdit.uploadFile' => '파일 업로드', 'metadataEdit.enterImageUrl' => '이미지 URL 입력', diff --git a/lib/i18n/strings_nb.g.dart b/lib/i18n/strings_nb.g.dart index 7a6837e7..a62c8df7 100644 --- a/lib/i18n/strings_nb.g.dart +++ b/lib/i18n/strings_nb.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditNb implements TranslationsMetadataEditEn { @override String get summary => 'Sammendrag'; @override String get poster => 'Plakat'; @override String get background => 'Bakgrunn'; + @override String get logo => 'Logo'; + @override String get squareArt => 'Kvadratisk bilde'; @override String get selectPoster => 'Velg plakat'; @override String get selectBackground => 'Velg bakgrunn'; + @override String get selectLogo => 'Velg logo'; + @override String get selectSquareArt => 'Velg kvadratisk bilde'; @override String get fromUrl => 'Fra URL'; @override String get uploadFile => 'Last opp fil'; @override String get enterImageUrl => 'Skriv inn bilde-URL'; @@ -2159,8 +2163,12 @@ extension on TranslationsNb { 'metadataEdit.summary' => 'Sammendrag', 'metadataEdit.poster' => 'Plakat', 'metadataEdit.background' => 'Bakgrunn', + 'metadataEdit.logo' => 'Logo', + 'metadataEdit.squareArt' => 'Kvadratisk bilde', 'metadataEdit.selectPoster' => 'Velg plakat', 'metadataEdit.selectBackground' => 'Velg bakgrunn', + 'metadataEdit.selectLogo' => 'Velg logo', + 'metadataEdit.selectSquareArt' => 'Velg kvadratisk bilde', 'metadataEdit.fromUrl' => 'Fra URL', 'metadataEdit.uploadFile' => 'Last opp fil', 'metadataEdit.enterImageUrl' => 'Skriv inn bilde-URL', diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index e7f06e37..29fea521 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditNl implements TranslationsMetadataEditEn { @override String get summary => 'Samenvatting'; @override String get poster => 'Poster'; @override String get background => 'Achtergrond'; + @override String get logo => 'Logo'; + @override String get squareArt => 'Vierkante afbeelding'; @override String get selectPoster => 'Poster selecteren'; @override String get selectBackground => 'Achtergrond selecteren'; + @override String get selectLogo => 'Logo selecteren'; + @override String get selectSquareArt => 'Vierkante afbeelding selecteren'; @override String get fromUrl => 'Vanaf URL'; @override String get uploadFile => 'Bestand uploaden'; @override String get enterImageUrl => 'Voer afbeeldings-URL in'; @@ -2159,8 +2163,12 @@ extension on TranslationsNl { 'metadataEdit.summary' => 'Samenvatting', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Achtergrond', + 'metadataEdit.logo' => 'Logo', + 'metadataEdit.squareArt' => 'Vierkante afbeelding', 'metadataEdit.selectPoster' => 'Poster selecteren', 'metadataEdit.selectBackground' => 'Achtergrond selecteren', + 'metadataEdit.selectLogo' => 'Logo selecteren', + 'metadataEdit.selectSquareArt' => 'Vierkante afbeelding selecteren', 'metadataEdit.fromUrl' => 'Vanaf URL', 'metadataEdit.uploadFile' => 'Bestand uploaden', 'metadataEdit.enterImageUrl' => 'Voer afbeeldings-URL in', diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart index cb4eb223..700d85d3 100644 --- a/lib/i18n/strings_pl.g.dart +++ b/lib/i18n/strings_pl.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditPl implements TranslationsMetadataEditEn { @override String get summary => 'Opis'; @override String get poster => 'Plakat'; @override String get background => 'Tło'; + @override String get logo => 'Logo'; + @override String get squareArt => 'Kwadratowy obraz'; @override String get selectPoster => 'Wybierz plakat'; @override String get selectBackground => 'Wybierz tło'; + @override String get selectLogo => 'Wybierz logo'; + @override String get selectSquareArt => 'Wybierz kwadratowy obraz'; @override String get fromUrl => 'Z URL'; @override String get uploadFile => 'Prześlij plik'; @override String get enterImageUrl => 'Wprowadź URL obrazu'; @@ -2159,8 +2163,12 @@ extension on TranslationsPl { 'metadataEdit.summary' => 'Opis', 'metadataEdit.poster' => 'Plakat', 'metadataEdit.background' => 'Tło', + 'metadataEdit.logo' => 'Logo', + 'metadataEdit.squareArt' => 'Kwadratowy obraz', 'metadataEdit.selectPoster' => 'Wybierz plakat', 'metadataEdit.selectBackground' => 'Wybierz tło', + 'metadataEdit.selectLogo' => 'Wybierz logo', + 'metadataEdit.selectSquareArt' => 'Wybierz kwadratowy obraz', 'metadataEdit.fromUrl' => 'Z URL', 'metadataEdit.uploadFile' => 'Prześlij plik', 'metadataEdit.enterImageUrl' => 'Wprowadź URL obrazu', diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart index 27f0c27d..e732712f 100644 --- a/lib/i18n/strings_pt.g.dart +++ b/lib/i18n/strings_pt.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditPt implements TranslationsMetadataEditEn { @override String get summary => 'Sinopse'; @override String get poster => 'Poster'; @override String get background => 'Plano de Fundo'; + @override String get logo => 'Logo'; + @override String get squareArt => 'Imagem Quadrada'; @override String get selectPoster => 'Selecionar Poster'; @override String get selectBackground => 'Selecionar Plano de Fundo'; + @override String get selectLogo => 'Selecionar Logo'; + @override String get selectSquareArt => 'Selecionar Imagem Quadrada'; @override String get fromUrl => 'Da URL'; @override String get uploadFile => 'Enviar Arquivo'; @override String get enterImageUrl => 'Insira a URL da imagem'; @@ -2159,8 +2163,12 @@ extension on TranslationsPt { 'metadataEdit.summary' => 'Sinopse', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Plano de Fundo', + 'metadataEdit.logo' => 'Logo', + 'metadataEdit.squareArt' => 'Imagem Quadrada', 'metadataEdit.selectPoster' => 'Selecionar Poster', 'metadataEdit.selectBackground' => 'Selecionar Plano de Fundo', + 'metadataEdit.selectLogo' => 'Selecionar Logo', + 'metadataEdit.selectSquareArt' => 'Selecionar Imagem Quadrada', 'metadataEdit.fromUrl' => 'Da URL', 'metadataEdit.uploadFile' => 'Enviar Arquivo', 'metadataEdit.enterImageUrl' => 'Insira a URL da imagem', diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart index 9e7cca5e..1a2f3e54 100644 --- a/lib/i18n/strings_ru.g.dart +++ b/lib/i18n/strings_ru.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditRu implements TranslationsMetadataEditEn { @override String get summary => 'Описание'; @override String get poster => 'Постер'; @override String get background => 'Фон'; + @override String get logo => 'Логотип'; + @override String get squareArt => 'Квадратное изображение'; @override String get selectPoster => 'Выбрать постер'; @override String get selectBackground => 'Выбрать фон'; + @override String get selectLogo => 'Выбрать логотип'; + @override String get selectSquareArt => 'Выбрать квадратное изображение'; @override String get fromUrl => 'По URL'; @override String get uploadFile => 'Загрузить файл'; @override String get enterImageUrl => 'Введите URL изображения'; @@ -2159,8 +2163,12 @@ extension on TranslationsRu { 'metadataEdit.summary' => 'Описание', 'metadataEdit.poster' => 'Постер', 'metadataEdit.background' => 'Фон', + 'metadataEdit.logo' => 'Логотип', + 'metadataEdit.squareArt' => 'Квадратное изображение', 'metadataEdit.selectPoster' => 'Выбрать постер', 'metadataEdit.selectBackground' => 'Выбрать фон', + 'metadataEdit.selectLogo' => 'Выбрать логотип', + 'metadataEdit.selectSquareArt' => 'Выбрать квадратное изображение', 'metadataEdit.fromUrl' => 'По URL', 'metadataEdit.uploadFile' => 'Загрузить файл', 'metadataEdit.enterImageUrl' => 'Введите URL изображения', diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index ec7b896d..6e2b60a7 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditSv implements TranslationsMetadataEditEn { @override String get summary => 'Sammanfattning'; @override String get poster => 'Poster'; @override String get background => 'Bakgrund'; + @override String get logo => 'Logotyp'; + @override String get squareArt => 'Kvadratisk bild'; @override String get selectPoster => 'Välj poster'; @override String get selectBackground => 'Välj bakgrund'; + @override String get selectLogo => 'Välj logotyp'; + @override String get selectSquareArt => 'Välj kvadratisk bild'; @override String get fromUrl => 'Från URL'; @override String get uploadFile => 'Ladda upp fil'; @override String get enterImageUrl => 'Ange bild-URL'; @@ -2159,8 +2163,12 @@ extension on TranslationsSv { 'metadataEdit.summary' => 'Sammanfattning', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Bakgrund', + 'metadataEdit.logo' => 'Logotyp', + 'metadataEdit.squareArt' => 'Kvadratisk bild', 'metadataEdit.selectPoster' => 'Välj poster', 'metadataEdit.selectBackground' => 'Välj bakgrund', + 'metadataEdit.selectLogo' => 'Välj logotyp', + 'metadataEdit.selectSquareArt' => 'Välj kvadratisk bild', 'metadataEdit.fromUrl' => 'Från URL', 'metadataEdit.uploadFile' => 'Ladda upp fil', 'metadataEdit.enterImageUrl' => 'Ange bild-URL', diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index ff765317..7135975c 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -1110,8 +1110,12 @@ class _TranslationsMetadataEditZh implements TranslationsMetadataEditEn { @override String get summary => '简介'; @override String get poster => '海报'; @override String get background => '背景'; + @override String get logo => '标志'; + @override String get squareArt => '方形图片'; @override String get selectPoster => '选择海报'; @override String get selectBackground => '选择背景'; + @override String get selectLogo => '选择标志'; + @override String get selectSquareArt => '选择方形图片'; @override String get fromUrl => '从 URL'; @override String get uploadFile => '上传文件'; @override String get enterImageUrl => '输入图片 URL'; @@ -2159,8 +2163,12 @@ extension on TranslationsZh { 'metadataEdit.summary' => '简介', 'metadataEdit.poster' => '海报', 'metadataEdit.background' => '背景', + 'metadataEdit.logo' => '标志', + 'metadataEdit.squareArt' => '方形图片', 'metadataEdit.selectPoster' => '选择海报', 'metadataEdit.selectBackground' => '选择背景', + 'metadataEdit.selectLogo' => '选择标志', + 'metadataEdit.selectSquareArt' => '选择方形图片', 'metadataEdit.fromUrl' => '从 URL', 'metadataEdit.uploadFile' => '上传文件', 'metadataEdit.enterImageUrl' => '输入图片 URL', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index f2a1a1a7..5b18310a 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -887,8 +887,12 @@ "summary": "Sammanfattning", "poster": "Poster", "background": "Bakgrund", + "logo": "Logotyp", + "squareArt": "Kvadratisk bild", "selectPoster": "Välj poster", "selectBackground": "Välj bakgrund", + "selectLogo": "Välj logotyp", + "selectSquareArt": "Välj kvadratisk bild", "fromUrl": "Från URL", "uploadFile": "Ladda upp fil", "enterImageUrl": "Ange bild-URL", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index b1f2a898..773cf7e0 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -887,8 +887,12 @@ "summary": "简介", "poster": "海报", "background": "背景", + "logo": "标志", + "squareArt": "方形图片", "selectPoster": "选择海报", "selectBackground": "选择背景", + "selectLogo": "选择标志", + "selectSquareArt": "选择方形图片", "fromUrl": "从 URL", "uploadFile": "上传文件", "enterImageUrl": "输入图片 URL", diff --git a/lib/screens/metadata_edit_screen.dart b/lib/screens/metadata_edit_screen.dart index a00db25a..bd68b1af 100644 --- a/lib/screens/metadata_edit_screen.dart +++ b/lib/screens/metadata_edit_screen.dart @@ -367,6 +367,8 @@ class _MetadataEditScreenState extends State { bool get _showTagline => _mediaType == PlexMediaType.movie || _mediaType == PlexMediaType.show; bool get _showBackground => _mediaType == PlexMediaType.movie || _mediaType == PlexMediaType.show || _mediaType == PlexMediaType.episode; + bool get _showExtendedArtwork => + _mediaType == PlexMediaType.movie || _mediaType == PlexMediaType.show || _mediaType == PlexMediaType.collection; bool get _showAdvanced => _mediaType != PlexMediaType.episode; List<({String key, String label})> get _tagFields { @@ -606,6 +608,35 @@ class _MetadataEditScreenState extends State { ); } + Widget _buildArtworkTile({ + required double width, + required double height, + required String? imagePath, + required String label, + required String element, + BoxFit fit = BoxFit.cover, + }) { + return ListTile( + leading: SizedBox( + width: width, + height: height, + child: ClipRRect( + borderRadius: const BorderRadius.all(Radius.circular(4)), + child: PlexOptimizedImage( + client: _client, + imagePath: imagePath, + width: width, + height: height, + fit: fit, + ), + ), + ), + title: Text(label), + trailing: const AppIcon(Symbols.chevron_right_rounded), + onTap: () => _openArtworkPicker(element), + ); + } + Widget _buildArtworkCard() { final meta = _fullMetadata ?? widget.metadata; @@ -620,45 +651,13 @@ class _MetadataEditScreenState extends State { style: Theme.of(context).textTheme.titleMedium?.copyWith(fontWeight: FontWeight.bold), ), ), - ListTile( - leading: SizedBox( - width: 40, - height: 60, - child: ClipRRect( - borderRadius: const BorderRadius.all(Radius.circular(4)), - child: PlexOptimizedImage( - client: _client, - imagePath: meta.thumb, - width: 40, - height: 60, - fit: BoxFit.cover, - ), - ), - ), - title: Text(t.metadataEdit.poster), - trailing: const AppIcon(Symbols.chevron_right_rounded), - onTap: () => _openArtworkPicker('posters'), - ), + _buildArtworkTile(width: 40, height: 60, imagePath: meta.thumb, label: t.metadataEdit.poster, element: 'posters'), if (_showBackground) - ListTile( - leading: SizedBox( - width: 80, - height: 45, - child: ClipRRect( - borderRadius: const BorderRadius.all(Radius.circular(4)), - child: PlexOptimizedImage( - client: _client, - imagePath: meta.art, - width: 80, - height: 45, - fit: BoxFit.cover, - ), - ), - ), - title: Text(t.metadataEdit.background), - trailing: const AppIcon(Symbols.chevron_right_rounded), - onTap: () => _openArtworkPicker('arts'), - ), + _buildArtworkTile(width: 80, height: 45, imagePath: meta.art, label: t.metadataEdit.background, element: 'arts'), + if (_showExtendedArtwork) + _buildArtworkTile(width: 80, height: 32, imagePath: meta.clearLogo, label: t.metadataEdit.logo, element: 'clearLogos', fit: BoxFit.contain), + if (_showExtendedArtwork) + _buildArtworkTile(width: 50, height: 50, imagePath: meta.backgroundSquare, label: t.metadataEdit.squareArt, element: 'squareArts'), ], ), ); diff --git a/lib/widgets/artwork_picker_dialog.dart b/lib/widgets/artwork_picker_dialog.dart index ac881eb3..e9c4d74d 100644 --- a/lib/widgets/artwork_picker_dialog.dart +++ b/lib/widgets/artwork_picker_dialog.dart @@ -31,7 +31,15 @@ class _ArtworkPickerDialogState extends State { bool _isLoading = true; bool _isApplying = false; - bool get _isPosters => widget.element == 'posters'; + ({int crossAxisCount, double aspectRatio, String title}) get _elementConfig { + return switch (widget.element) { + 'posters' => (crossAxisCount: 3, aspectRatio: 2.0 / 3.0, title: t.metadataEdit.selectPoster), + 'arts' => (crossAxisCount: 2, aspectRatio: 16.0 / 9.0, title: t.metadataEdit.selectBackground), + 'clearLogos' => (crossAxisCount: 2, aspectRatio: 2.5 / 1.0, title: t.metadataEdit.selectLogo), + 'squareArts' => (crossAxisCount: 3, aspectRatio: 1.0, title: t.metadataEdit.selectSquareArt), + _ => (crossAxisCount: 3, aspectRatio: 2.0 / 3.0, title: t.metadataEdit.selectPoster), + }; + } @override void initState() { @@ -124,10 +132,8 @@ class _ArtworkPickerDialogState extends State { @override Widget build(BuildContext context) { - final title = _isPosters ? t.metadataEdit.selectPoster : t.metadataEdit.selectBackground; - return AlertDialog( - title: Text(title), + title: Text(_elementConfig.title), content: SizedBox( width: 500, height: 400, @@ -177,15 +183,14 @@ class _ArtworkPickerDialogState extends State { } Widget _buildGrid() { - final crossAxisCount = _isPosters ? 3 : 2; - final aspectRatio = _isPosters ? 2.0 / 3.0 : 16.0 / 9.0; + final config = _elementConfig; return GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: crossAxisCount, + crossAxisCount: config.crossAxisCount, crossAxisSpacing: 8, mainAxisSpacing: 8, - childAspectRatio: aspectRatio, + childAspectRatio: config.aspectRatio, ), itemCount: _artworkList!.length, itemBuilder: (context, index) {