feat(themes): Theme Store install counts, downloads & sort (#1036)

* feat(themes): install counts, downloads, popularity & sort in the Theme Store

Each registry theme now carries an install count and a last-changed date. Store
rows show them in a dedicated meta panel (author, popularity bar, total
downloads, last changed), plus a sort dropdown (most popular / newest / name),
zebra-striped rows, a numbered pager, and a note that the stats refresh daily.
Adds a shared formatRelativeTime helper (formatLastSeen now delegates to it).

* test(themes): cover sort modes, pager jump and relative-time formatting

* fix(build): gate nvidia_quirk_active to Linux

Its only caller is the Linux branch of theme_animation_risk, so on Windows and
macOS the function was dead code and tripped clippy's -D warnings.

* docs: CHANGELOG + credits for theme store download stats & sort (#1036)
This commit is contained in:
Psychotoxical
2026-06-08 22:05:41 +02:00
committed by GitHub
parent 68f0f09aae
commit 0878cbf308
19 changed files with 346 additions and 48 deletions
+8 -1
View File
@@ -325,6 +325,7 @@ export const settings = {
themeStoreSubmitText: "Vous avez créé votre propre thème ? Partagez-le avec la communauté — plus d'infos dans le dépôt de thèmes.",
themeStoreSubmitLink: 'Ouvrir le dépôt de thèmes',
themeStoreNetworkNotice: 'Le Theme Store charge son catalogue et ses aperçus depuis des services externes (le CDN jsDelivr et GitHub). Aucune donnée personnelle nest envoyée.',
themeStoreStatsNotice: 'Les statistiques de téléchargements et de dernière modification sont actualisées une fois par jour (vers 04h17 UTC).',
themeStoreSearchPlaceholder: 'Rechercher des thèmes…',
themeStoreFilterMode: 'Filtrer par mode',
themeStoreModeAll: 'Tous',
@@ -338,7 +339,13 @@ export const settings = {
themeStoreEmpty: 'Aucun thème ne correspond à vos filtres.',
themeStoreActive: 'Actif',
themeStoreEnlarge: "Agrandir l'aperçu",
themeStoreByAuthor: 'par {{author}}',
themeStoreSortPopular: 'Les plus populaires',
themeStoreSortNewest: 'Plus récents',
themeStoreSortName: 'Alphabétique',
themeStoreAuthor: 'Auteur',
themeStorePopularity: 'Popularité',
themeStoreDownloads: 'Téléchargements totaux',
themeStoreLastChanged: 'Dernière modification',
themeMigrationNoticeTitle: 'Thème déplacé vers la boutique',
themeMigrationNoticeBody: "{{themes}} n'est plus inclus dans l'application. Vous pouvez le réinstaller depuis la boutique de thèmes (Paramètres → Thèmes) ou choisir un autre thème.",
themeMigrationNoticeOpen: 'Ouvrir la boutique de thèmes',