Kodi-vStream / venom-xbmc-addons

Addon de Streaming français pour Xbmc
GNU General Public License v3.0
484 stars 273 forks source link

Config.py et performance. #1011

Closed TmpName closed 7 years ago

TmpName commented 7 years ago

Bon j'avais deja aborde le sujet, mais la j'use et abuse de ce fichier et je trouve que ca devient inquietant. Par exemple, si je veut juste un dialogue oui/non, je fais cConfig().yesno("le texte"), le probleme c'est que si on regarde la fonction a cause du init ca fait en meme temps beacoup de calcul et de chargement de fichier pas forcement utile.

Le travail effectue par la machine juste pour un cConfig().log'('texte') est enorme juste pour afficher un texte en debug.

Je propose de la laisser telle quelle pour la compatibilitee, mais de commencer dans le meme fichier une nouvelle classe, mais qui tournerait sans le init()

ou meme mieux hors d'une classe, juste des fonctions en vrac, eg la fonction log() n'a vraiment pas besoin d'etre dans une classe.

ghost commented 7 years ago

Pour optimisé je suis d'accord certain addon sont plus rapide pour cree des repertoire et afficher des pages Les fonctions les plus utilisé il faut les mettre dans un fichier leger comme log ou getlanguage,etc...

Ex: La fonction gethoster de hosterhandler pourrait etre mise dans /gui/ hoster

LordVenom commented 7 years ago

J'aime bien ceux qu'a fait exodus fichier control.py

lang = xbmcaddon.Addon().getLocalizedString

puis il apelle control.lang(32065)

Faudrais aussi virer le isDharma c'est la version 10 ça date lol

TmpName commented 7 years ago

Ha oui, pour la fonction gethoster de hosterhandler, j'ai meme pas vu a quoi ca servait ^^. Il y a plein de fichiers qui importe cette fonction, mais qui s'en servent jamais.

Pour le code utilise par exodus, je viens de faire des tests, c'est plus propre, mais dans tout les cas l'integralitee des fonction sont appelle (meme si tu fais juste control.lang(32065), ca execute aussi dataPath = xbmc.translatePath(addonInfo('profile')).decode('utf-8')), donc pas plus leger que la methode Vstream. Et le gros prb c'est que si on fait pareil, ca va rendre les version imcompatible, pr le moment je prefere commencer leger ^^.

Donc pour eviter de foutre le bordel, je propose de mettre les fonctions legeres dans le fichier util (c'est un fichier bateau), en mettant de nouveau nom. En disant fonctions legeres, pour le moment je pense a celles qui n'utilisent aucun import de Vstream, c'est a dire pas d'utilisation de cConfig ou cHosterHandler.

Ca ne perturbera pas le code actuel, et petit a petit on pourra nettoyer l'ancien code sans tout planter.

LordVenom commented 7 years ago

Vendu

ghost commented 7 years ago

La ou les fonction create ,update dialog aussi pour les sites etc...

TmpName commented 7 years ago

Bon J'ai commence a refaire les fonctions dialog pour la progressBar mais je sais pas trop quelle orientation prendre. Oblige de remettre dans une classe a cause de COUNT, si on utilise une classe du coup on peut aussi y mettre oDialog.

Donc ca donnerait dialog = VSProgessBar() dialog.updateDialog(50) dialog.finishDialog()

Pas teste si la difference se voit en performance.

ghost commented 7 years ago

Doit bien avoir un moyen de le faire sans class edit; j'ai réussi en ajoutant count dans le fichier site je cherche une autre methode

ghost commented 7 years ago

c'est bon et j'ai l'impression plus rapide quand il y a que 10ep on n'a pas le tps de lire

edit: le probleme c'est qu'on peut pas modif les fichiers site avant la prochaine version

TmpName commented 7 years ago

Nope, mais pas genant, on teste now, et ca passera en MAJ auto apres la grosse MAJ. La je suis reparti sur mon interpreteur JS a cause de openload, leur code chnage tout les jours, pas trouve mieux que d'interpreter le code JS.

ghost commented 7 years ago

Je parlé de si on remplace cConfig par ulil ça fonctionnera pas chez les users

edit jdownloaderHandler.py ne sert pas en faite ?

TmpName commented 7 years ago

Nope, plus maintenant je pense, encore un reliquat d'une epoque lointaine ^^.

Ca fonctionnera pas chez les users maintenant, mais apres la MAJ mensuelle, ils auront le bon fichier utils, et on pourra commencer a mettre a jour les fichiers sites, faut juste etre sur que cela va fonctionner, car sinon oblige d'attendre 1 mois de plus pour corriger.

ghost commented 7 years ago

Et en faite j'ai remarqué le fichier logger.py qui aurait pu faire le jobs pour log pareil je ne sais pas s'il est utilisé

TmpName commented 7 years ago

Mwé, je sais pas si c'est utile, c'est pas pour ce que ca coute, suis pas sur que ce soit utile les 3 niveau de log ? Moi je m'en sert jamais. Deja ce fichier je le fairais sauter, mais pas sur que ce soit utile de recuperer le systeme de log, celui en place me suffit. Peut etre supprimer quelques affichages ? Mettre une option debug dans les parametres de vstrzeam ?

ghost commented 7 years ago

c'est l'ancien systeme qui servait a affiché quelque chose dans le log si besoin

LordVenom commented 7 years ago

Depuis le nouveaux systeme d'import les message d'erreur sont un peux limiter j'ai refait le code vite fait pour au moin avoir une petite indication d'ou vient l'erreur la si tu oublie juste un ' vStream te dit rien.J'ai penser au mode debug activer ou pas dans les parametres de vStream mais ont vas juste gagner quelque ligne d’écriture je pense pas que ce soit le plus gourmand.Perso la latente des menus est arrive avec Kodi 17.

TmpName commented 7 years ago

Ha oui exact, c'est possible, ca rame depuis la V 17 chez moi. Moi je laisserais comme ca pr les debug et je ferais sauter le fichier logger.py. Par contre j'allegerais les ligne de debug quand par exemple ca liste les fichiers (soit desactiver, sa s'affiche que en mode debug kodi), soit moins de ligne.

ghost commented 7 years ago

Quand vous parlez de Latence des menus > delai d'affichage d'une page ?

TmpName commented 7 years ago

Yep mais plus le temps de la barre de progression, meme l'affichage de la page home, j'ai l'impression quelle est plus longue, apres j'ai rien chronometre.

LordVenom commented 7 years ago

Avec leur nouveau skin j'ai l'impression qu'il charge leur ecrand noir puis la popup de chargement vStream puis coupe leur fenêtre de Load.Avec un delai entre tous ça ben ça fait un petit temps. Mais y a pas a rougir avec ceux que mange vStream comparer au addon au 3 source c'est plutôt pas mal.Faut pas oublier que ce code date de la version 12.

J'ai même reussis le thread sur la recherche visuelle mais j'ai pas trouver ça ouff donc pas utiliser.

ghost commented 7 years ago

il y a possibilité de print la version de vstream quand on appelle VSlog dans util vous en pensez quoi ? et par la suite de remplacer les cConfig.log par util.VSlog

xbmc.log('\t[PLUGIN] Vstream ' + VStranslatePath('version') + ': ' + str(e), xbmc.LOGNOTICE)

TmpName commented 7 years ago

Ben je sais pas, si c'est en memoire, c'est pas genant, mais il y a des chance pour que kodi aille chercher l'info sur un fichier, du coup chute de performance. Pr les logs, au pire on peut le rajouter en log si la personne passe par les outils de Vstream.

Sinon je me tate pour remettre les 3 fonctions createDialog/updateDialog/finishDialog dans une classe juste pour ces 3. Il n'y a pas d'init, donc ca devrait pas rallentir, le truc c'est que c'est utile uniquement si ces fonctions servent toujours ensembles, eg est ce qu'on peut avoir besoin de finishDialog sans utiliser les 2 autres ?

ghost commented 7 years ago

Les 3 fonctions fonctionne sans class ça va changer quoi d'en remettre une ?

TmpName commented 7 years ago

Absolument rien, juste au niveau dev, ca fait "package", et que tu peux te passer de dialog du coup (et que COUNT se retrouve uniquement dedans).

class = createDialog("site")
class.updateDialog(12)
class.finishDialog()

Mais c'est purement esthetique, une fois le fichier charge en memoire, classe ou 3 fonctions, ca m'etonnerait que ca chnage quelque chose.

ghost commented 7 years ago

Pour la version dans le log je pensé a la print une seule fois au demarrage mais pas trouvé comment faire Simplement dans default py vu que des qu'on retourne sur home ça reprinté

ghost commented 7 years ago

@TmpName si peut testé la recherche global avec stream ingk avec ce fichier si ça plante chez toi qui remplace cConfig par util chez moi c'est ok chez @LordVenom ça plante la recherche global info fichier

TmpName commented 7 years ago

Pareil que chez @LordVenom , je sais pas pkoi ca marche chez toi. Le pr b viens de DIALOG2, qui empeche la creation d'autre dialog si il y en a deja un d'ouvert, il ya plusieurs moyen de contourner le truc, moi j'ai teste (et je pense que c'est le plus simple)

def createDialog(sSite):
    if xbmcgui.Window(10101).getProperty('search') != 'true':
        oDialog = xbmcgui.DialogProgress()
        oDialog.create(sSite,None)
        return oDialog
    else:
        return False

def updateDialog(dialog,total):
    if not dialog:
        return
    global COUNT
    COUNT += 1
        iPercent = int(float(COUNT * 100) / total)
        dialog.update(iPercent, 'Chargement: '+str(COUNT)+'/'+str(total))

def finishDialog(dialog):
    if not dialog:
        return
    dialog.close()
    del dialog

En fait si il ya une recherche globlale en route, ca bloque des l'initialisation en retournant false, et comme tu utilises cette valeur pr les fonction suivantes, ca bloque tout le reste. Mais du coup on ne pourra utiliser ces fonctions que dans 1 mois, a la prochaine MAJ.

Mais perso, je trouve ca plus fiable et plus sur que la methode originelle. De restester xbmcgui.Window(10101).getProperty a chaque fois, alors que le smilblick peut avoir ete ferme ou bloque.

ghost commented 7 years ago

ça fonctionne chez moi recherche global et site directement

TmpName commented 7 years ago

En fait c'est pas vraiement que ca plante. Je vais dans "Recherche" "Recherche 1 : film", je tape un film. Ca lance la recherche globale, ok sur 75% puis quad j'arrive sur la source streamingk, ca vire la barre de progression, mais ca fonctionne encore. Puis y a la seconde barre de progression, et l'affichage est ok.

ghost commented 7 years ago

J'ai test ta modif ça regle le soucis

TmpName commented 7 years ago

Mais du coup ca repousse d'un mois la possibilitee de s'en servir, cette fois faut etre sur que ca tourne.

ghost commented 7 years ago

en faite fonctionne mais ça vire les résultats ou on utilise util.updatedialog le seul moyen if xbmcgui.Window(10101).getProperty('search') != 'true': pour chaque

edit modif util et defaut pour utilisé util https://github.com/johngf/divers/tree/master/kodi

util :ajout de updatedialogsearch,createDialog de config defaut : juste remplacer config par util

mais encore un bug le dialog affiche en haut le nom du premier site au lieu de rester sur le nom vstream résolu en remplaçant cConfig() par util dans les sites

LordVenom commented 7 years ago

Ya vraiment un gros changement parseque la c'est lourd a modif.??

TmpName commented 7 years ago

J'ai pas compris le "ça vire les résultats ou on utilise util.updatedialog" ?

ghost commented 7 years ago

Ta modif @TmpName lors d'une recherche globale vire le resultat du site si dans le site on utilse util dialog a place de config dialog Mais sur le lien que j'ai posté c'est ok

Si le site utilise config ça fonctionne comme meme sauf le nom vstream du dialog est remplacé par le nom du premier site ou la recherche démarre

Si le site utilise util le nom du dialog recherche reste vstream

apres @LordVenom a t'as question c'est difficile a dire j'ai pas mesuré mais c'est clair que c'est moin lourd au final apres la deco des titres joue aussi sur la vitesse

TmpName commented 7 years ago

Oui, je confirme, dans tout les cas appeller Config() est tres lourd, alors dans une boucle ... Si on appelle les fonctions a @johngf, il y a moins de calcul et pas d'acces disque du tout (enfin suis pas un pro du python mais je pense que le fichier util est importe a 100% au debut donc plus jamais apres durant les appel aux fonctions.

Dans mon code ca deconne a if dialog.iscanceled(): vu que dialog = False. Pr le faire marcher suffit de mettre if dialog and dialog.iscanceled() mais le probleme c'est qu'il n'y a plus moyen d'interrompre le dialogue.

Apres non ce n'est pas lourd a modifier, tu peux faire co-habiter les 2 versions, et nous on pourra l activer via les MA auto, et revenir en arriere si ca fait tout deconner de la meme maniere.

Il y aurait moyen d'acceler en faisant cConfig2 = cConfig() au debut du fichier et n'utiliser que cConfig2 mais je trouve quand meme les fonction light plus propres.

ghost commented 7 years ago

xD je suis largué

LordVenom commented 7 years ago

ben je vous l'aisse faire commenter bien le code que je face pas de modif derrière vous.

TmpName commented 7 years ago

Pas de soucis, c'est juste un plus. Soit ca marche et on s'en servira, soit ca plante, on remet le fichier site comme avant et on attendra la prochaine MAJ. Aucune influence directe sur le coeur de Vstream (c'etait le but originel)