diff --git a/lib/i18n/az.i18n.json b/lib/i18n/az.i18n.json index 68a3b6b7c..5568b1183 100644 --- a/lib/i18n/az.i18n.json +++ b/lib/i18n/az.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Yan menyu genişlənmiş qalır və məzmun sahəsi buna uyğunlaşır", "showUnwatchedCount": "Baxılmamış sayını göstər", "showUnwatchedCountDescription": "Seriallarda və mövsümlərdə baxılmamış seriya sayını göstər", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Kartlarda seriya nömrəsini göstər", "showEpisodeNumberOnCardsDescription": "Seriya kartlarında mövsüm və seriya nömrəsini göstər", "showSeasonPostersOnTabs": "Mərhələlərdə mövsüm posterlərini göstər", diff --git a/lib/i18n/bg.i18n.json b/lib/i18n/bg.i18n.json index afe91c315..484cfbd2f 100644 --- a/lib/i18n/bg.i18n.json +++ b/lib/i18n/bg.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Страничната лента остава разгъната и зоната със съдържание се наглася да пасне", "showUnwatchedCount": "Показвай броя негледани", "showUnwatchedCountDescription": "Показвай броя негледани епизоди при сериали и сезони", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Показвай номера на епизода върху картите", "showEpisodeNumberOnCardsDescription": "Показвай сезон и номер на епизод върху картите на епизодите", "showSeasonPostersOnTabs": "Показвай постери на сезоните в табовете", diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json index 9b765929d..d9c0dc7cd 100644 --- a/lib/i18n/da.i18n.json +++ b/lib/i18n/da.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Sidepanelet forbliver udvidet, og indholdsområdet tilpasser sig", "showUnwatchedCount": "Vis antal usete", "showUnwatchedCountDescription": "Vis antal usete episoder på serier og sæsoner", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Vis episodenummer på kort", "showEpisodeNumberOnCardsDescription": "Vis sæson- og episodenummer på episodekort", "showSeasonPostersOnTabs": "Vis sæsonplakater på faner", diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index 8360b7341..18f9f215c 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Seitenleiste bleibt erweitert und Inhaltsbereich passt sich an", "showUnwatchedCount": "Anzahl nicht gesehener Folgen anzeigen", "showUnwatchedCountDescription": "Zeigt die Anzahl nicht gesehener Episoden bei Serien und Staffeln an", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Episodennummer auf Karten anzeigen", "showEpisodeNumberOnCardsDescription": "Staffel- und Episodennummer auf Episodenkarten anzeigen", "showSeasonPostersOnTabs": "Staffelposter auf Tabs anzeigen", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index 5d94263df..fea814981 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Sidebar stays expanded and content area adjusts to fit", "showUnwatchedCount": "Show Unwatched Count", "showUnwatchedCountDescription": "Display unwatched episode count on shows and seasons", + "showWatchedIndicators": "Show Watched Indicators", + "showWatchedIndicatorsDescription": "Display a checkmark on watched movies, shows, and episodes", "showEpisodeNumberOnCards": "Show Episode Number on Cards", "showEpisodeNumberOnCardsDescription": "Show season and episode number on episode cards", "showSeasonPostersOnTabs": "Show Season Posters on Tabs", diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index fdf1561a5..bdee754b0 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "La barra lateral permanece expandida y el área de contenido se ajusta para adaptarse", "showUnwatchedCount": "Mostrar el número de elementos no vistos", "showUnwatchedCountDescription": "Mostrar el número de episodios no vistos en series y temporadas", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Mostrar número de episodio en las tarjetas", "showEpisodeNumberOnCardsDescription": "Mostrar temporada y episodio en tarjetas de episodio", "showSeasonPostersOnTabs": "Mostrar pósters de temporada en las pestañas", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index cf967cad2..4d13eed1e 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "La barre latérale reste étendue et la zone de contenu s'adapte", "showUnwatchedCount": "Afficher le nombre d’éléments non vus", "showUnwatchedCountDescription": "Afficher le nombre d’épisodes non vus pour les séries et les saisons", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Afficher le numéro de l’épisode sur les cartes", "showEpisodeNumberOnCardsDescription": "Afficher les numéros de saison et d’épisode sur les cartes d’épisode", "showSeasonPostersOnTabs": "Afficher les affiches de saison sur les onglets", diff --git a/lib/i18n/hu.i18n.json b/lib/i18n/hu.i18n.json index f5a6c81ba..d14a10d61 100644 --- a/lib/i18n/hu.i18n.json +++ b/lib/i18n/hu.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Az oldalsáv kibontva marad, a tartalom területe igazodik hozzá", "showUnwatchedCount": "Nem látott elemek számának megjelenítése", "showUnwatchedCountDescription": "Megjeleníti a még nem látott epizódok számát a sorozatoknál és évadoknál", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Epizódszám megjelenítése a kártyákon", "showEpisodeNumberOnCardsDescription": "Megjeleníti az évad- és epizódszámot az epizódkártyákon", "showSeasonPostersOnTabs": "Évadborítók megjelenítése a füleken", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index 8f7882574..5596694ca 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "La barra laterale rimane espansa e l'area del contenuto si adatta", "showUnwatchedCount": "Mostra il numero di episodi non visti", "showUnwatchedCountDescription": "Mostra il numero di episodi non visti per serie e stagioni", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Mostra il numero dell'episodio sulle schede", "showEpisodeNumberOnCardsDescription": "Mostra il numero della stagione e dell'episodio sulle schede degli episodi", "showSeasonPostersOnTabs": "Mostra i poster delle stagioni nelle schede", diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json index 35f66a824..439d4f79f 100644 --- a/lib/i18n/ja.i18n.json +++ b/lib/i18n/ja.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "サイドバーを展開したままにし、コンテンツ領域を幅に合わせて調整します", "showUnwatchedCount": "未視聴数を表示", "showUnwatchedCountDescription": "番組とシーズンに未視聴エピソード数を表示", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "カードにエピソード番号を表示", "showEpisodeNumberOnCardsDescription": "エピソードカードにシーズン番号とエピソード番号を表示します", "showSeasonPostersOnTabs": "タブにシーズンポスターを表示", diff --git a/lib/i18n/kk.i18n.json b/lib/i18n/kk.i18n.json index 502a5bd66..02fed3989 100644 --- a/lib/i18n/kk.i18n.json +++ b/lib/i18n/kk.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Жүйелік мәзір ашық күйінде қалады", "showUnwatchedCount": "Көрілмегендер санын көрсету", "showUnwatchedCountDescription": "Сериалдар мен маусымдарда көрілмеген бөлімдер санын көрсету", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Карточкаларда бөлім нөмірін көрсету", "showEpisodeNumberOnCardsDescription": "Бөлім карточкаларында маусым мен бөлім нөмірін көрсету", "showSeasonPostersOnTabs": "Қойындыларда маусым постерлерін көрсету", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index af7726f2b..312cf03ec 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "사이드바가 확장된 상태로 유지되고 콘텐츠 영역이 맞춰집니다", "showUnwatchedCount": "미시청 수 표시", "showUnwatchedCountDescription": "시리즈 및 시즌에 미시청 에피소드 수 표시", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "카드에 에피소드 번호 표시", "showEpisodeNumberOnCardsDescription": "에피소드 카드에 시즌 및 에피소드 번호 표시", "showSeasonPostersOnTabs": "탭에 시즌 포스터 표시", diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json index 2835afbfe..d32f11e13 100644 --- a/lib/i18n/nb.i18n.json +++ b/lib/i18n/nb.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Sidefeltet forblir utvidet og innholdsområdet tilpasser seg", "showUnwatchedCount": "Vis antall usette", "showUnwatchedCountDescription": "Vis antall usette episoder på serier og sesonger", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Vis episodenummer på kort", "showEpisodeNumberOnCardsDescription": "Vis sesong- og episodenummer på episodekort", "showSeasonPostersOnTabs": "Vis sesongplakater på faner", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index af0c36cf8..3d5e6f742 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Zijbalk blijft uitgevouwen en inhoudsgebied past zich aan", "showUnwatchedCount": "Aantal ongekeken tonen", "showUnwatchedCountDescription": "Toon aantal ongekeken afleveringen bij series en seizoenen", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Afleveringsnummer op kaarten tonen", "showEpisodeNumberOnCardsDescription": "Toon seizoen- en afleveringsnummer op afleveringskaarten", "showSeasonPostersOnTabs": "Toon seizoensposters op tabbladen", diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json index cb95b6cdc..72d0cfead 100644 --- a/lib/i18n/pl.i18n.json +++ b/lib/i18n/pl.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Panel boczny jest rozwinięty, a obszar treści dostosowuje się", "showUnwatchedCount": "Pokaż liczbę nieobejrzanych", "showUnwatchedCountDescription": "Wyświetl liczbę nieobejrzanych odcinków w serialach i sezonach", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Pokaż numer odcinka na kartach", "showEpisodeNumberOnCardsDescription": "Pokazuj numer sezonu i odcinka na kartach odcinków", "showSeasonPostersOnTabs": "Pokaż plakaty sezonów na zakładkach", diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json index 2741bceec..c0dd5c758 100644 --- a/lib/i18n/pt.i18n.json +++ b/lib/i18n/pt.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "A barra lateral fica expandida e a área de conteúdo se ajusta", "showUnwatchedCount": "Mostrar Contagem de Não Assistidos", "showUnwatchedCountDescription": "Exibir contagem de episódios não assistidos em séries e temporadas", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Mostrar Número do Episódio nos Cards", "showEpisodeNumberOnCardsDescription": "Mostrar temporada e episódio nos cartões de episódio", "showSeasonPostersOnTabs": "Mostrar Pôsteres de Temporada nas Abas", diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json index 4b8d48a0e..314898d77 100644 --- a/lib/i18n/ru.i18n.json +++ b/lib/i18n/ru.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Боковая панель остаётся развёрнутой, область контента подстраивается", "showUnwatchedCount": "Показывать количество непросмотренных", "showUnwatchedCountDescription": "Отображать количество непросмотренных эпизодов для сериалов и сезонов", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Показывать номер эпизода на карточках", "showEpisodeNumberOnCardsDescription": "Показывать номер сезона и серии на карточках серий", "showSeasonPostersOnTabs": "Показывать постеры сезонов на вкладках", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index d20d2bf4c..1e32d7252 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,7 +4,7 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 22 -/// Strings: 43756 (1988 per locale) +/// Strings: 43758 (1989 per locale) // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index bfa07fefd..eec892713 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -546,6 +546,12 @@ class Translations$settings$en { /// en: 'Display unwatched episode count on shows and seasons' String get showUnwatchedCountDescription => 'Display unwatched episode count on shows and seasons'; + /// en: 'Show Watched Indicators' + String get showWatchedIndicators => 'Show Watched Indicators'; + + /// en: 'Display a checkmark on watched movies, shows, and episodes' + String get showWatchedIndicatorsDescription => 'Display a checkmark on watched movies, shows, and episodes'; + /// en: 'Show Episode Number on Cards' String get showEpisodeNumberOnCards => 'Show Episode Number on Cards'; @@ -7129,6 +7135,8 @@ extension on Translations { 'settings.alwaysKeepSidebarOpenDescription' => 'Sidebar stays expanded and content area adjusts to fit', 'settings.showUnwatchedCount' => 'Show Unwatched Count', 'settings.showUnwatchedCountDescription' => 'Display unwatched episode count on shows and seasons', + 'settings.showWatchedIndicators' => 'Show Watched Indicators', + 'settings.showWatchedIndicatorsDescription' => 'Display a checkmark on watched movies, shows, and episodes', 'settings.showEpisodeNumberOnCards' => 'Show Episode Number on Cards', 'settings.showEpisodeNumberOnCardsDescription' => 'Show season and episode number on episode cards', 'settings.showSeasonPostersOnTabs' => 'Show Season Posters on Tabs', @@ -7484,10 +7492,10 @@ extension on Translations { 'fileInfo.previewIndex' => 'Preview Index', 'fileInfo.packetLength' => 'Packet Length', 'fileInfo.filePresent' => 'File Present', - 'fileInfo.fileReadable' => 'Readable by Server', - 'fileInfo.streamPath' => 'Stream Path', _ => null, } ?? switch (path) { + 'fileInfo.fileReadable' => 'Readable by Server', + 'fileInfo.streamPath' => 'Stream Path', 'fileInfo.optimizedForStreaming' => 'Optimized for Streaming', 'fileInfo.has64bitOffsets' => '64-bit Offsets', 'fileInfo.protocol' => 'Protocol', @@ -7998,10 +8006,10 @@ extension on Translations { 'libraries.groupings.shows' => 'TV Shows', 'libraries.groupings.seasons' => 'Seasons', 'libraries.groupings.episodes' => 'Episodes', - 'libraries.groupings.artists' => 'Artists', - 'libraries.groupings.albums' => 'Albums', _ => null, } ?? switch (path) { + 'libraries.groupings.artists' => 'Artists', + 'libraries.groupings.albums' => 'Albums', 'libraries.groupings.tracks' => 'Tracks', 'libraries.groupings.folders' => 'Folders', 'libraries.filterCategories.genre' => 'Genre', @@ -8512,10 +8520,10 @@ extension on Translations { 'downloads.includeSpecials' => 'Include Specials', 'downloads.howManyEpisodes' => 'How many episodes?', 'downloads.invalidEpisodeCount' => 'Enter a valid episode count.', - 'downloads.keepSynced' => 'Keep synced', - 'downloads.downloadOnce' => 'Download once', _ => null, } ?? switch (path) { + 'downloads.keepSynced' => 'Keep synced', + 'downloads.downloadOnce' => 'Download once', 'downloads.keepNUnwatched' => ({required Object count}) => 'Keep ${count} unwatched', 'downloads.editSyncRule' => 'Edit sync rule', 'downloads.removeSyncRule' => 'Remove sync rule', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index 5dc0eb52a..68fc7f7ac 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Sidofältet förblir utfällt och innehållsytan anpassas efter det", "showUnwatchedCount": "Visa antal osedda", "showUnwatchedCountDescription": "Visa antal osedda avsnitt för serier och säsonger", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Visa avsnittsnummer på kort", "showEpisodeNumberOnCardsDescription": "Visa säsongs- och avsnittsnummer på avsnittskort", "showSeasonPostersOnTabs": "Visa säsongsaffischer på flikar", diff --git a/lib/i18n/tr.i18n.json b/lib/i18n/tr.i18n.json index 43a3db642..5c2b21f01 100644 --- a/lib/i18n/tr.i18n.json +++ b/lib/i18n/tr.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Yan menü genişletilmiş kalır ve içerik alanı buna göre ayarlanır", "showUnwatchedCount": "İzlenmemiş Sayısını Göster", "showUnwatchedCountDescription": "Dizilerde ve sezonlarda izlenmemiş bölüm sayısını göster", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Kartlarda Bölüm Numarasını Göster", "showEpisodeNumberOnCardsDescription": "Bölüm kartlarında sezon ve bölüm numarasını göster", "showSeasonPostersOnTabs": "Sekmelerde Sezon Afişlerini Göster", diff --git a/lib/i18n/uz.i18n.json b/lib/i18n/uz.i18n.json index 444553156..c1790c1a5 100644 --- a/lib/i18n/uz.i18n.json +++ b/lib/i18n/uz.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "Yon menyu ochiq holatda qoladi", "showUnwatchedCount": "Koʻrilmaganlar sonini koʻrsatish", "showUnwatchedCountDescription": "Seriallar va mavsumlarda koʻrilmagan qismlar sonini koʻrsatish", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "Kartochkalarda qism raqamini koʻrsatish", "showEpisodeNumberOnCardsDescription": "Qism kartochkalarida mavsum va qism raqamini koʻrsatish", "showSeasonPostersOnTabs": "Varaqlarda mavsum posterlarini koʻrsatish", diff --git a/lib/i18n/zh-Hant.i18n.json b/lib/i18n/zh-Hant.i18n.json index fd3e5a550..770f97271 100644 --- a/lib/i18n/zh-Hant.i18n.json +++ b/lib/i18n/zh-Hant.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "側邊欄保持展開狀態,內容區域自動調整", "showUnwatchedCount": "顯示未觀看數量", "showUnwatchedCountDescription": "在影集和單季上顯示未觀看的集數", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "在卡片上顯示集數", "showEpisodeNumberOnCardsDescription": "在單集卡片上顯示季和集編號", "showSeasonPostersOnTabs": "在索引標籤上顯示單季海報", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index 8d13c54c4..b0725fce5 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -169,6 +169,8 @@ "alwaysKeepSidebarOpenDescription": "侧边栏保持展开状态,内容区域自动调整", "showUnwatchedCount": "显示未观看数量", "showUnwatchedCountDescription": "在剧集和季上显示未观看集数", + "showWatchedIndicators": "", + "showWatchedIndicatorsDescription": "", "showEpisodeNumberOnCards": "在卡片上显示集数", "showEpisodeNumberOnCardsDescription": "在剧集卡片上显示季和集编号", "showSeasonPostersOnTabs": "在选项卡上显示季海报", diff --git a/lib/screens/libraries/folder_tree_item.dart b/lib/screens/libraries/folder_tree_item.dart index 155e15d78..5c738a314 100644 --- a/lib/screens/libraries/folder_tree_item.dart +++ b/lib/screens/libraries/folder_tree_item.dart @@ -395,6 +395,7 @@ class _FolderTreeItemState extends State with ContextMenuTapMixi SettingsService.episodePosterMode, SettingsService.hideSpoilers, SettingsService.showUnwatchedCount, + SettingsService.showWatchedIndicators, ], builder: _buildMediaRow, ); diff --git a/lib/screens/settings/appearance_settings_screen.dart b/lib/screens/settings/appearance_settings_screen.dart index 8e17bc09a..e99af2e32 100644 --- a/lib/screens/settings/appearance_settings_screen.dart +++ b/lib/screens/settings/appearance_settings_screen.dart @@ -65,8 +65,12 @@ class AppearanceSettingsScreen extends StatelessWidget { title: t.settings.hideSpoilers, subtitle: t.settings.hideSpoilersDescription, ), - // TODO: "Show watched indicators" toggle (#1998) goes here; the - // pref gates the corner badge on media cards and grid tiles. + SettingSwitchTile( + pref: SettingsService.showWatchedIndicators, + icon: Symbols.check_circle_rounded, + title: t.settings.showWatchedIndicators, + subtitle: t.settings.showWatchedIndicatorsDescription, + ), if (PlatformDetector.isTV()) SettingSwitchTile( pref: SettingsService.tvFullCardLayout, diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index dad5153ab..8ab53d8e5 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -620,6 +620,10 @@ class SettingsService extends BaseSharedPreferencesService { /// stays collapsed across launches instead of springing back open (#1896). static const librariesSectionExpanded = BoolPref('libraries_section_expanded', defaultValue: true); static const showUnwatchedCount = BoolPref('show_unwatched_count', defaultValue: true); + + /// The corner checkmark on watched posters/thumbnails (#1998). Progress bars + /// and unwatched counts are unaffected. + static const showWatchedIndicators = BoolPref('show_watched_indicators', defaultValue: true); static const showEpisodeNumberOnCards = BoolPref('show_episode_number_on_cards', defaultValue: true); static const showSeasonPostersOnTabs = BoolPref('show_season_posters_on_tabs'); static const hideSpoilers = BoolPref('hide_spoilers'); @@ -1159,6 +1163,7 @@ class SettingsService extends BaseSharedPreferencesService { alwaysKeepSidebarOpen, librariesSectionExpanded, showUnwatchedCount, + showWatchedIndicators, showEpisodeNumberOnCards, showSeasonPostersOnTabs, hideSpoilers, diff --git a/lib/widgets/media_card.dart b/lib/widgets/media_card.dart index e2fb5af8b..11e934341 100644 --- a/lib/widgets/media_card.dart +++ b/lib/widgets/media_card.dart @@ -435,6 +435,7 @@ class MediaCardState extends State with ContextMenuTapMixin pump(WidgetTester tester, WatchedIndicator indicator) => tester.pumpWidget( + MaterialApp( + theme: monoTheme(dark: true), + home: SizedBox(width: 200, height: 300, child: indicator), + ), + ); + + final watchedMovie = testMediaItem(id: 'movie', kind: MediaKind.movie, viewCount: 1); + + testWidgets('shows the watched checkmark by default', (tester) async { + await pump(tester, WatchedIndicator(item: watchedMovie)); + + expect(find.byIcon(Symbols.check_rounded), findsOneWidget); + }); + + testWidgets('hides only the checkmark when watched indicators are off (#1998)', (tester) async { + await SettingsService.instance.write(SettingsService.showWatchedIndicators, false); + final partiallyWatchedShow = testMediaItem(id: 'show', kind: MediaKind.show, leafCount: 10, viewedLeafCount: 4); + final inProgressMovie = testMediaItem( + id: 'movie-2', + kind: MediaKind.movie, + durationMs: 100000, + viewOffsetMs: 50000, + ); + + await pump(tester, WatchedIndicator(item: watchedMovie)); + expect(find.byIcon(Symbols.check_rounded), findsNothing); + + await pump(tester, WatchedIndicator(item: partiallyWatchedShow)); + expect(find.byType(UnwatchedCountBadge), findsOneWidget, reason: 'unwatched counts are a separate pref'); + + await pump(tester, WatchedIndicator(item: inProgressMovie)); + expect(find.byType(MediaProgressBar), findsOneWidget, reason: 'progress bars are not indicators'); + }); +}