Appearance
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
dialogLG, 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 â
LgIdentifierorchestre des opĂ©rations hĂ©tĂ©rogĂšnes (configuration Idcap, enregistrement d'applications, gestion du hotspot, interaction avec les stores Svelte) directement viautilsLg, 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
Idcapajoute 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
isLGpour 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 â
- Cartographier les usages en recensant toutes les importations de
utilsLgpour 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ă - 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 â
- Créer
src/lib/lg/idcap.ts : y dĂ©placer le chargement du script, le singleton etidcapRequest, en exposant des types communs. Les fonctions consommateurs utilisent ce module comme point d'entrĂ©e unique.ăF:src/lib/utilsLg.tsâ L10-L86ă - 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 importeidcapRequestet expose uniquement les opĂ©rations de son domaine.ăF:src/lib/utilsLg.tsâ L88-L395ă - CrĂ©er un adaptateur UI (ex.
src/lib/lg/ui/dialog.ts) pouraddTVLGDialoget la gestion des listeners clavier, afin de sĂ©parer clairement logique mĂ©tier et manipulation du DOM.ăF:src/lib/utilsLg.tsâ L440-L505ă - 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 â
- Adapter
LgIdentifierpour dĂ©pendre dâobjets/services (LgSystemConfigurator,LgHotspotService, etc.) injectĂ©s ou importĂ©s depuissrc/lib/lg, ce qui facilitera les tests et alignera la structure avecPhilipsIdentifier(basĂ© sur modules spĂ©cialisĂ©s).ăF:src/lib/classes/platforms/identifier.tsâ L11-L65ăăF:src/lib/philips/hotspot.tsâ L73-L138ă - 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ă - 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 lesTODOet la logique dispersĂ©e.ăF:src/routes/(connectivity)/+layout.svelteâ L106-L173ă
Phase 4Â : Nettoyage et alignement â
- Supprimer ou réduire
utilsLg.tsen conservant uniquement les rĂ©exportations temporaires, puis le retirer une fois tous les consommateurs migrĂ©s. - Documenter la nouvelle architecture (README interne ou ADR) dĂ©crivant lâanalogie avec Philips et les points dâextension pour dâautres plateformes.
- 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
philipspour 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,tvControletpowersont dĂ©sormais isolĂ©s soussrc/lib/lg/, avec un point dâentrĂ©eindex.tsqui 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 composantIdcapconsomment maintenant les nouveaux services, confirmant la faisabilitĂ© de la migration sans dĂ©pendre deutilsLg.tshĂ©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 storeisPurgePolicyDayShift) est dĂ©sormais encapsulĂ©e danssrc/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
switchLG encore prĂ©sentes dansutilsModals.tsen sâappuyant sur les services spĂ©cialisĂ©s (tvControl,appControl), ce qui permettra ensuite de supprimerutilsLg.tsou 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/LgTvLauncheret 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