Skip to content

Plan de refactorisation de la logique spĂ©cifique LG ​

Concept ​

Ce plan vise Ă  refactoriser la logique spĂ©cifique LG en sĂ©parant les responsabilitĂ©s entremĂȘlĂ©es dans utilsLg.ts, en crĂ©ant une structure modulaire similaire Ă  Philips pour amĂ©liorer la testabilitĂ©, la maintenabilitĂ© et l'Ă©volutivitĂ©. L'objectif est d'isoler les transports, les services mĂ©tier et les intĂ©grations UI pour faciliter les futures extensions LG.

1. État des lieux ​

1.1 Monolithe utilsLg ​

  • Toute la logique d'appel Ă  l'API Idcap (chargement du script, singleton, exĂ©cution des requĂȘtes) est concentrĂ©e dans src/lib/utilsLg.ts, au mĂȘme titre que le contrĂŽle des applications, de la TV et du HDMI.【F:src/lib/utilsLg.ts†L1-L209】
  • Le mĂȘme fichier expose Ă©galement la gestion de l'audio, du rĂ©seau, des rĂ©glages (debug, sĂ©quence de boot, sĂ©curitĂ©) et la crĂ©ation d'un dialog LG, ce qui mĂ©lange des responsabilitĂ©s de bas niveau (transport Idcap) et de haut niveau (interactions UI/DOM).【F:src/lib/utilsLg.ts†L209-L553】

1.2 Couche mĂ©tier fortement couplĂ©e ​

  • LgIdentifier orchestre des opĂ©rations hĂ©tĂ©rogĂšnes (configuration Idcap, enregistrement d'applications, gestion du hotspot, interaction avec les stores Svelte) directement via utilsLg, ce qui rend le code difficile Ă  tester et Ă  faire Ă©voluer indĂ©pendamment.【F:src/lib/classes/platforms/identifier.ts†L11-L65】
  • Les lanceurs d'applications et de TV, ainsi que les utilitaires de modales, importent directement des fonctions LG globales au lieu de passer par des interfaces dĂ©diĂ©es, augmentant le couplage entre couches UI et logique plateforme.【F:src/lib/classes/platforms/tvLauncher.ts†L1-L18】【F:src/lib/classes/platforms/appLauncher.ts†L1-L59】【F:src/lib/utilsModals.ts†L1-L69】
  • Le composant Svelte Idcap ajoute des Ă©couteurs globaux et manipule la logique LG sans encapsulation, ce qui complique la rĂ©utilisation et la libĂ©ration des ressources.【F:src/lib/components/lg/Idcap.svelte†L1-L34】

1.3 IntĂ©gration dans le layout et dĂ©tection de plateforme ​

  • Le layout principal dĂ©rive un drapeau isLG pour dĂ©clencher des comportements conditionnels, mais ceux-ci restent Ă©parpillĂ©s (ex. injection Idcap, gestion du bouton retour), sans couche de coordination dĂ©diĂ©e pour LG.【F:src/routes/(connectivity)/+layout.svelte†L106-L173】

1.4 Comparaison avec la structure Philips ​

  • La logique Philips est isolĂ©e dans src/lib/philips/ avec des modules par domaine (API, contrĂŽle rĂ©seau, hotspot, services d'Ă©coute web, paramĂštres professionnels). Chaque module encapsule une responsabilitĂ© claire et expose des fonctions spĂ©cialisĂ©es, facilitant le test et la rĂ©utilisation.【F:src/lib/philips/networkControl.ts†L1-L157】【F:src/lib/philips/hotspot.ts†L73-L138】
  • L'initialisation Philips cĂŽtĂ© store illustre comment dĂ©clencher une configuration spĂ©cifique lors de la dĂ©tection de la plateforme, en s'appuyant sur des modules spĂ©cialisĂ©s sans rĂ©fĂ©rence croisĂ©e directe Ă  la couche UI.【F:src/lib/stores/deviceDetailsStore.ts†L1-L92】

2. Enjeux identifiĂ©s ​

  • ResponsabilitĂ©s entremĂȘlĂ©es : un seul module gĂšre transport, configuration systĂšme, Ă©tat UI et logique mĂ©tier LG.
  • DifficultĂ© de test : l'absence d'abstractions rend complexe l'injection de doublures pour simuler Idcap ou l'environnement DOM.
  • Couplage fort avec l'UI : des fonctions de plateforme sont invoquĂ©es directement depuis des composants ou utilitaires Svelte, empĂȘchant la mutualisation et compliquant la maintenance.
  • ÉvolutivitĂ© limitĂ©e : l'ajout de nouvelles capacitĂ©s LG risque de gonfler davantage utilsLg.ts, contrairement au dĂ©coupage dĂ©jĂ  opĂ©rĂ© pour Philips.

3. Vision cible ​

  • RĂ©pliquer l'approche modulaire appliquĂ©e Ă  Philips : un espace de noms src/lib/lg/ dĂ©coupĂ© par domaines (transport Idcap, contrĂŽle des applications, audio, rĂ©seau, paramĂštres, intĂ©gration UI).
  • Exposer des services/objets clairs consommĂ©s par les factories (identifier, appLauncher, tvLauncher, etc.) au lieu de fonctions utilitaires globales.
  • Limiter les effets de bord (listeners globaux, accĂšs direct au DOM) Ă  des adaptateurs dĂ©diĂ©s, permettant un nettoyage explicite.

4. Plan d'action proposĂ© ​

Phase 1 : PrĂ©paration et sĂ©curisation ​

  1. Cartographier les usages en recensant toutes les importations de utilsLg pour dĂ©finir les frontiĂšres fonctionnelles avant extraction.【F:src/lib/utilsLg.ts†L1-L553】【F:src/lib/classes/platforms/identifier.ts†L11-L65】【F:src/lib/classes/platforms/appLauncher.ts†L1-L59】
  2. Couverture de tests minimale : créer des tests unitaires ciblant la détection de plateforme et les orchestrations critiques (par exemple autour de LgIdentifier) pour sécuriser la refactorisation.

Phase 2 : Extraction modulaire progressive ​

  1. CrĂ©er src/lib/lg/idcap.ts : y dĂ©placer le chargement du script, le singleton et idcapRequest, en exposant des types communs. Les fonctions consommateurs utilisent ce module comme point d'entrĂ©e unique.【F:src/lib/utilsLg.ts†L10-L86】
  2. Isoler les domaines fonctionnels dans des modules dĂ©diĂ©s (ex. appControl.ts, tvControl.ts, audio.ts, network.ts, settings.ts, softap.ts). Chaque module importe idcapRequest et expose uniquement les opĂ©rations de son domaine.【F:src/lib/utilsLg.ts†L88-L395】
  3. CrĂ©er un adaptateur UI (ex. src/lib/lg/ui/dialog.ts) pour addTVLGDialog et la gestion des listeners clavier, afin de sĂ©parer clairement logique mĂ©tier et manipulation du DOM.【F:src/lib/utilsLg.ts†L440-L505】
  4. Introduire un point d’entrĂ©e (src/lib/lg/index.ts) rĂ©exportant les sous-modules pour assurer une transition progressive sans casser les importations existantes.

Phase 3 : Refactoriser les consommateurs ​

  1. Adapter LgIdentifier pour dĂ©pendre d’objets/services (LgSystemConfigurator, LgHotspotService, etc.) injectĂ©s ou importĂ©s depuis src/lib/lg, ce qui facilitera les tests et alignera la structure avec PhilipsIdentifier (basĂ© sur modules spĂ©cialisĂ©s).【F:src/lib/classes/platforms/identifier.ts†L11-L65】【F:src/lib/philips/hotspot.ts†L73-L138】
  2. Mettre Ă  jour les factories (appLauncher, tvLauncher, utilsModals, composants Svelte) pour utiliser les nouveaux modules ou services, en privilĂ©giant des interfaces (ex. LgTvService) plutĂŽt que des fonctions globales.【F:src/lib/classes/platforms/appLauncher.ts†L25-L59】【F:src/lib/classes/platforms/tvLauncher.ts†L13-L18】【F:src/lib/utilsModals.ts†L1-L69】【F:src/lib/components/lg/Idcap.svelte†L1-L34】
  3. Encapsuler l’intĂ©gration layout : centraliser l’initialisation LG (chargement Idcap, listeners spĂ©cifiques) dans un orchestrateur appelĂ© depuis le layout lorsque deviceTypology.isLgTV() est vrai, afin de rĂ©duire les TODO et la logique dispersĂ©e.【F:src/routes/(connectivity)/+layout.svelte†L106-L173】

Phase 4 : Nettoyage et alignement ​

  1. Supprimer ou réduire utilsLg.ts en conservant uniquement les réexportations temporaires, puis le retirer une fois tous les consommateurs migrés.
  2. Documenter la nouvelle architecture (README interne ou ADR) dĂ©crivant l’analogie avec Philips et les points d’extension pour d’autres plateformes.
  3. Renforcer la validation : ajouter des tests ciblant les nouveaux modules et prévoir des tests end-to-end (ou scripts manuels) pour vérifier les parcours critiques (lancement TV, mute, hotspot).

5. Prochaines Ă©tapes recommandĂ©es ​

  • Prioriser l’extraction du transport Idcap (risque Ă©levĂ©) puis des modules rĂ©seau/hotspot qui impactent la configuration initiale.
  • Planifier la migration des composants UI aprĂšs stabilisation des services afin de limiter les rĂ©gressions visibles.
  • Calquer les conventions de nommage et de structure sur le dossier philips pour faciliter l’onboarding et la maintenance multi-plateforme.【F:src/lib/philips/networkControl.ts†L1-L157】

6. Avancement ​

  • Phase 2 engagĂ©e : les modules idcap, appControl, audio, network, settings, tvControl et power sont dĂ©sormais isolĂ©s sous src/lib/lg/, avec un point d’entrĂ©e index.ts qui aligne l’arborescence LG sur celle de Philips.【F:src/lib/lg/idcap.ts†L1-L89】【F:src/lib/lg/index.ts†L1-L9】
  • Adaptateurs mis Ă  jour : LgIdentifier, LgAppLauncher, LgTvLauncher, les utilitaires de modales et le composant Idcap consomment maintenant les nouveaux services, confirmant la faisabilitĂ© de la migration sans dĂ©pendre de utilsLg.ts hĂ©ritĂ©.【F:src/lib/classes/platforms/identifier.ts†L1-L60】【F:src/lib/classes/platforms/appLauncher.ts†L1-L62】【F:src/lib/utilsModals.ts†L1-L52】【F:src/lib/components/lg/Idcap.svelte†L1-L34】
  • Orchestrateur de layout : la logique LG spĂ©cifique au layout connectivitĂ© (Ă©couteur backButton, purge CMS/Directus conditionnelle, synchronisation du store isPurgePolicyDayShift) est dĂ©sormais encapsulĂ©e dans src/lib/lg/orchestrator.ts, le composant Svelte ne faisant plus qu’invoquer cet orchestrateur avec son Ă©tat courant.【F:src/lib/lg/orchestrator.ts†L1-L198】【F:src/routes/(connectivity)/+layout.svelte†L1-L220】

7. PrioritĂ©s immĂ©diates ​

  • ✅ Orchestrateur d’initialisation dans le layout : centralisation effectuĂ©e via $lib/lg/orchestrator, le layout se contentant dĂ©sormais de fournir l’état de la page pour dĂ©clencher la purge et les listeners LG.【F:src/lib/lg/orchestrator.ts†L1-L198】【F:src/routes/(connectivity)/+layout.svelte†L134-L183】
  • Nettoyage des utilitaires historiques : finaliser l’extraction des branches switch LG encore prĂ©sentes dans utilsModals.ts en s’appuyant sur les services spĂ©cialisĂ©s (tvControl, appControl), ce qui permettra ensuite de supprimer utilsLg.ts ou de le rĂ©duire Ă  une simple façade.【F:src/lib/utilsModals.ts†L75-L238】
  • Couverture de test et documentation : ajouter des tests unitaires autour de LgIdentifier/LgTvLauncher et documenter l’orchestrateur afin de sĂ©curiser les fallbacks inter-constructeurs (Vestel/TCL/G4K) avant la suppression complĂšte des reliquats LG historiques.【F:src/lib/classes/platforms/identifier.ts†L16-L39】【F:docs/technique/features/platform-fallback-spec.md†L1-L139】

Diagrammes ​


e-novatis
Date de derniĂšre mise Ă  jour : date inconnue