Erreurs avec la fonction saveEqLogic() appellée par plugin.template.js du core

BugReport

Depuis la v1 de Jeedom et encore aujourd’hui dans la dernière alpha, il est possible d’implémenter la fonction javascript saveEqLogic(eqLogic) afin de modifier à la volée l’eqLogic au moment de la sauvegarde.

Or nous avons rencontré avec jMQTT des problèmes avec cette fonction, car elle reste chargée lors du changement de page, par exemple : en passant d’un équipement jMQTT (qui implémente saveEqLogic) à un équipement virtuel (qui ne l’implémente pas).

Le problème est réglé pour jMQTT, car nous avons ajouté un test supplémentaire dans la fonction pour sortir directement s’il ne s’agit pas d’un eqLogic jMQTT, mais cela soulève une question de fond quand à cette fonction.

Ce que je trouverais logique (et donc recommande) serait que cette fonction soit spécialisée par plugin, par exemple utiliser jMQTT_saveEqLogic(eqLogic) pour jMQTT, virtual_saveEqLogic(eqLogic) pour virtual, etc. Une sorte de « namespace » pour éviter qu’une fonction inadaptée soit appelée par un autre plugin.

Je peux PR le code dans ce sens en faisant uniquement l’appel à la fonction préfixée du nom du plugin si elle existe, sinon l’ancienne saveEqLogic(eqLogic).

Page concernée : (Equipement d’un plugin)
Version Core : toutes les versions

Etape pour reproduire le Bug :
De nombreuses références sont disponibles sur Commu, les plus parlantes :

Il suffit de passer de la page d’un équipement d’un plugin qui implémente la fonction (tout en utilisant des configs/variables incompatible avec un autre plugin), puis d’aller sur la page d’un équipement de l’autre plugin qui ne l’implemente pas et de sauvegarder.

Le détail de l’identification du problème est ici : https://github.com/Domochip/jMQTT/issues/153#issuecomment-1127372865

Bad

3 « J'aime »

Salut,

Bon je déterre un vieux sujet mais en fait ce problème est toujours là évidement, je viens de retomber dessus.

On décide ce qu’on fait pour la v4.4?

2 « J'aime »

Bonjour,
Désolé j’ai raté le sujet. Faut je regarde mais je crois on peu onload une fonction en javascript suffirai de la faire lors du page load. J’aurais pas le temps cette semaine avec tous ce qui me tombe dessus mais je me le note pour la 4.4

En fait je regardais pourquoi le problème ne se pose pas avec printEqLogic et dans desktop\common\js\utils.js je vois qu’on met les function à undefined

var prePrintEqLogic = undefined
var printEqLogic = undefined
var addCmdToTable = undefined

on ne devrait pas ajouter saveEqLogic là simplement?

Bonjour,
Oui ca serait le plus simple je pense et pas de changement coté plugin.

testé & fixé en local, je t’ai fait le PR: fix: saveEqLogic function is not unloaded when switching from one plugin to another by Mips2648 · Pull Request #2303 · jeedom/core · GitHub

comme tu disais il fallait aussi le faire un peu plus bas dans le page load

Parfait merci bcp j’ai validé.

Bonjour à tous et merci pour le fix ! :slight_smile:

Du coup, en v4.4, à chaque changement de page saveEqLogic est mise à undefined ?
Est-ce que le fix/PR sera porté en v4.3 ?

Bad

Je pense oui j’y reflechis encore mais oui je pense la pousser.

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.