mirror of
https://github.com/R0m1k3/xtremobile.git
synced 2026-10-12 01:39:36 +02:00
Porting the palette was not enough: the Warm Cinema charter only reached the widgets that read from AppColors. Nineteen screen and widget files still painted Apple TV values inline, so the app kept showing blue — most visibly on the selected navigation pill. Swept out: - 0xFF0A84FF (Apple blue) on the selected nav pill, category card icons and the "add playlist" button - 0xFF4FC3F7 and 0xFF1565C0 in the player overlays - Colors.blueAccent / Colors.blue in dialogs - Apple greys 1C1C1E / 2C2C2E / 3A3A3C / 8E8E93 -> warm charcoals - 128 Colors.white* -> the onSurfaceNN cream ladder (a pure white on a warm ground reads blue, which is the charter's whole point) - Colors.red / green / amber / yellow / grey* -> error, success, ratingGold, outlineVariant - pure black ink on light fills -> onPrimaryFixed, a warm near-black - the white focus glow -> an ember glow Deliberately left true black: the video surface backgrounds and the scrims over posters and video, where a warm tint would clash with the picture. Adds the onPrimaryFixed / primaryFixed / onSurface70 tokens the sweep needed. Verified: no Material or Apple colour literal remains outside lib/core/theme; flutter analyze reports no errors; 19/19 tests pass; release APK builds. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4.6 KiB
4.6 KiB
Task: Alignement sur xtremflow — EPG XMLTV, thème, stabilité des flux
1. EPG — repli XMLTV quand le fournisseur ne répond pas
- Nouveau
lib/features/iptv/services/xmltv_service.dart: téléchargement, gunzip transparent, parse en flux (toXmlEvents), index réduit à une fenêtre-3 h / +18 h, cache disque JSON (TTL 6 h) - Chaîne de repli dans
XtreamServiceMobile:get_short_epg→{dns}/xmltv.phpdu fournisseur → URL personnalisée → source communautaire (epgshare01FR1) - Correspondance par
epg_channel_id, puis par nom normalisé (accents, suffixesHD/FHD/4K, préfixesFR:/|FR|) - Index
streamId → Channelalimenté pargetLiveChannels: aucun site d'appel degetShortEPGn'a changé - Sémaphore EPG (3 requêtes max), comme xtremflow — une grille de 30 tuiles ne noie plus le panel et ne vide plus l'EPG de tout l'écran
- Réglages : « EPG communautaire » (on/off) + « URL XMLTV personnalisée »
2. Thème — port de la charte « Warm Cinema » de xtremflow
app_colors.dart: palette ember/charbon/crème, alias de compatibilité conservés pour les 21 symboles Apple TV déjà utilisésapp_theme.dart: typo Fraunces (display) + Karla (UI), tokens spacing/radius/durations/curves alignés sur xtremflowmobile_theme.dart: dérive désormais deAppTheme(échelle typo mobile) au lieu de dupliquer 390 lignesapp_decorations.dart: hexs Apple codés en dur remplacés par la palette- Passe 2 (v1.6.1) — le thème ne suffisait pas : du bleu restait codé en
dur dans 19 fichiers d'écran/widget, hors palette. Balayage complet :
-
0xFF0A84FF(bleu Apple) dans la pilule de navigation sélectionnée (mobile_scaffold), les icônes de catégorie et le bouton « ajouter » -0xFF4FC3F7/0xFF1565C0(bleus) dans les overlays du lecteur -Colors.blueAccent/Colors.bluedans les boîtes de dialogue - gris Apple1C1C1E/2C2C2E/3A3A3C/8E8E93→ charbons chauds -Colors.white*(128 occurrences) → paliers crèmeonSurfaceNN-Colors.red/green/amber/yellow/grey*→error/success/ratingGold/outlineVariant- noir pur sur remplissage clair → encre chaudeonPrimaryFixed- halo de focus blanc → halo ember - Conservés en noir vrai : fonds de surface vidéo et voiles (scrims) - Vérification : plus aucune couleur Material/Apple codée en dur hors delib/core/theme/
3. Lecture — arrêt en arrière-plan et tenue dans la durée
AppLifecycleState.inactiveretiré du déclencheur d'arrêt : il se déclenchait au moindre volet de notifications_releasePlayback()surpaused/hidden/detached— arrêt du flux, libération du décodeur, annulation des timers, wakelock coupé (les deux moteurs :native_player_screenetlite_player_screen)- Verrou
_isReleased: watchdog et reconnexions ne peuvent plus relancer un flux depuis l'arrière-plan - Abonnements aux
Streamdu player stockés et annulés audispose demuxer-max-back-bytesplafonné à 8 Mo (défaut mpv : 50 Mio) — évite la dérive mémoire qui finissait en kill Android après plusieurs heuressetStatede position limité aux moments où les contrôles sont visibles ; horloge ne reconstruit qu'au changement de minute- FocusNodes du lecteur Lite libérés au
dispose
4. Vitesse de chargement
prewarmHost(): pré-résolution DNS + socket TCP/TLS ouvert puis fermé avant l'ouverture du flux (aucune requête HTTP, donc aucun slot de connexion consommé chez le fournisseur), plafonné à 1,5 s
Non retenu par l'utilisateur : décodage matériel VOD, réduction du probe, audio multicanal natif. Le profil de décodage reste inchangé.
Vérifications
flutter analyze: 0 erreur / 0 warning sur les fichiers touchés (3 warnings de code mort restants, déjà présents dans HEAD)flutter test: 19/19 (18 unitaires + 1 sur un vrai dump)- Vrai dump
epg_ripper_FR1.xml.gz(5,4 Mo gz / 46 Mo XML / 69 802 programmes) : 517 chaînes indexées en 1,1 s, 5/5 correspondances flutter build apk --release→app-release.apk(94,3 Mo)
Non corrigé (pré-existant, hors périmètre) : erreurs d'analyse dans
lib/core/utils/memory_profiler.dart et hive_encryption_benchmark.dart
(orphelins, hors graphe d'import) et test/widget_test.dart.