venom-xbmc-addons icon indicating copy to clipboard operation
venom-xbmc-addons copied to clipboard

Multi thread pour la recherche & ajout de lien direct (utilisable dans Tmdb Helper)

Open detobel36 opened this issue 3 years ago • 32 comments

Je suis de nouveau la avec une grosse pull request... Promis c'est la dernière avant un bout de temps :smile:

Introduction

Je souhaitais pouvoir lancer directement un film. Je suis donc tombé sur TmdbHelper. Il permet de lancer le player d'une autre extension. Super, c'est ce que je voulais ! Sauf que ce n'est pas directement disponible dans vStream (d'autres addon le font mais vStream est plus complet pour récupérer des films FR).
J'ai donc adapté vStream pour qu'il soit possible de lancer un film depuis TmdbHelper. Voici le fichier que vous devez utilisé (bien évidemment il faut aussi installé le code lié à cette PR :wink: ):

Fichier à mettre dans TmdbHelper
{
    "name" : "[COLORblue]vStream[/COLOR]",
    "plugin" : "plugin.video.vstream",
    "priority" : 101,
    "is_resolvable" : "false",
    "search_movie": "plugin://plugin.video.vstream/?function=quickSearch&site=cSearch&title={title}&year={year}&cat=1",
    "play_movie" : "plugin://plugin.video.vstream/?function=playVideo&site=cSearch&title={title}&year={year}&cat=1"
}

Description

Dans cette pull request j'ai donc:

  • déplacé la recherche "globalSearch" dans un fichier search.py
  • multi thread la recherche (pour ceux qui sont "non technique": j'ai fais en sorte que la recherche se fasse en parallèle)
  • ajouter un lien (pas de nouveau menu dans vStream, seulement un "lien" accèssible par d'autres applications de Kodi) permettant de directement lancer un film (playVideo) ou faire une recherche (quickSearch).
  • ajout d'une option pour choisir si le film lancé doit obligatoirement être VF ou s'il peut être VF et VOSTFR ou encore si on accepte tout.

Pour faire cela, j'ai du:

  • faire en sorte que les résultats d'une recherche soient associé à un host. Donc les résultats dans le fichier gui.py sont stocké dans un dictionnaire et non plus dans une liste
  • faire en sorte de "passer" les informations d'un appel de méthode à l'autre. En effet, certains site donne directement l'information de la langue, d'autres c'est seulement quand on choisi le film ou le host ect ect... Donc toutes les informations sont copié d'un appel à l'autre

Limitation

  • Pour l'instant cela ne fonctionne que avec les films. Pour les séries, il faudra aller sur chaque site renseigner la saison et l'épisode dans les cOutputParameterHandler.
  • Le fait de faire les actions en parallèle augmente la vitesse où on récupère des résultats. Mais cela dépend de votre matériel... En effet, si vous avez un seul CPU multi-coeur, ça va rien changer. Si vous avez un deux coeur, vous pouvez avoir au mieux un résultat 2 fois plus rapidement :smile: Bref, sur un raspberry pi 4 par exemple vous pouvez avoir jusqu'à 4 opérations faites en même temps. Avant vStream traitait les informations "une à une" (en tout cas pour la recherche), maintenant il pourra (c'est pas pour ça qu'il va le faire à tous les cout mais c'est possible) faire la recherche sur 4 sites différents "en même temps". Il faut nuance tout ça hein... A priori vous avez une connexion internet, donc le vStream va quand même finir par traiter les choses "une à une" mais les certaines opérations seront plus rapide.

Bug connu

  • J'ai déjà eu des plantages de l'application en faisant des tests (bon après j'y allait un peu "bourrin"). Donc à voir...
  • Parfoir les "notifications" pour dire qu'un site a été "résolve" pop... Je ne sais pas trop pourquoi. A priori, ça ne dérange pas la lecture.
  • Si un hébergeur fourni un lien de vidéo qui n'est pas valide (j'ai eu le cas avec Gounlimited), le player va essayer de le lancer, va croire que tout est bon et plantera "plus tard"... La solution: obligatoirement faire une "recherche" pour choisir un autre lien que Gounlimited.

La suite

  • Actuellement il n'y a aucun filtre sur la qualité du film lancé. Il faudra faire des modifications plus profonde dans les sites.
  • Détecté de manière plus fiable quand une vidéo ne se lance pas et essayer de lancer un autre lien
  • Retenir le lien de la vidéo en cache pour pouvoir directement essayer de relancer la vidéo (sans devoir refaire toute la recherche)
  • Je dois encore lancer Pylint pour être que j'ai pas fait des fautes niveau "variable inutilisé" ou "méthode inutilisé".

Screen

settings
Paramètre permettant de choisir la langue

search
Nouveau popup lorsqu'on fait une recherche

result
Résultat (lorsqu'on clic sur les liens, le film se lance directement (vu que c'est directement la liste des hosters))

Liens

Cette PR peut être en lien avec les issues suivantes:

  • #3312
  • #3160
  • #2683

Mot de la fin

:warning: Je pense qu'il vaut mieux merge cette PR: #3439 avant la PR que vous lisez actuellement... Ce sera plus simple à refactor.

detobel36 avatar Jan 01 '22 16:01 detobel36

Bonjour @detobel36

Ta modif m'intéresse beaucoup... J'ai énormément ''bidouiller'' afin d'arriver a obtenir le lien direct via un player tmdb helper. Jusqu'ici, j'avais réussi pour les films et aussi les séries mais puisqu'il y avait regroupement par source (et que j'utilisait la ligne de la recherche globale): seulement le premier lien disponioble depuis la première source active trouvé était présenté.. (sur le fichier .json, j'ai nommé le player Pastebin'' pour le différencier du player vStream mais si d'autres sources sont actives, il fonctionnera avec les autres sources) Etant une utilisatrice de la source Pastebin de vStream, ceci fonctionnait bien en désactivant toute les autres sources:

{ "name" : "Pastebin", "language" : "fr", "plugin" : "plugin.video.vstream", "priority" : 1000, "search_movie" : [ "plugin://plugin.video.vstream/?function=showSearch&sCat=1&site=globalSearch&siteUrl=http%3a%2f%2fvenom&title=Recherche%20(Films)&action=activate&searchtext={title}", {"title": "{clearname}"} ], "search_episode" : [ "plugin://plugin.video.vstream/?function=showSearch&sCat=2&site=globalSearch&siteUrl=http%3a%2f%2fvenom&title=Recherche%20(S%c3%a9ries%2fAnim%c3%a9s)&action=activate&searchtext={showname}", {"title": "{showname}"}, {"position": "{season}"}, {"season": "{season}", "episode": "{episode}"} ] }

J'ai laissé de l'info ici: https://lesalkodiques.com/docs/liste-de-tutos/tmdb-helper/installer-les-players/ et ici: https://lesalkodiques.com/docs/liste-de-tutos/tmdb-helper/les-players/

Mais bon, ce n'était pas accessibles pour tous les utilisateurs tandis que ce que tu proposes par contre l'est! Puisque la modification est fait directement a l'intérieur de vStream.

Je vais tester avec grand intérêt ta modification d'ici 1 ou 2 jours 👍

alKODIque avatar Jan 01 '22 22:01 alKODIque

j'attendais ton retour @alKODIque car je sais que tu proposes un player tmdbhelper pour lancer un film dans vStream.

Tu conclus que ce code est dans vStream et que ce sera donc plus intéressant. Mais dans ce que propose @detobel36 , il faut aussi mettre en place un player.json 🤔

J'essaie de voir ce que ce code apporte de plus pour l'utilisation avec tmdbHelper ? Est-ce pour avoir des liens directs vers les hosters plutot que par sources ? Cela est indépendant de tmdbHelper car pourrait même être mis en place pour les recherches globales de vStream 🤔

Si je suis bien, cela permet de proposer tous les liens plutôt que le premier trouvé ?

sizanic avatar Jan 01 '22 23:01 sizanic

Je n'ai pas testé encore alors il m'est difficile de me prononcer, d'autant plus que je ne m'y connais pas comme vous... j'imagine que le fichier json servant de player pour tmdb helper doit etre modifié puisque GlobalSearch est dépalcer dans un search.py...

Mais de ce que j'en comprend: oui!! ce serait vraiment intéressant : dans l'état actuel, tout ce qui se produit avec le palyer vstream.json: c'est qu'il fait seulement un recherche globale... donc si on clique sur un épisode: nous aterrissons sur le dossier de la série. le ''pastebin.json'' que j'avais fait lui, permettait d'aterrir directement sur l'épisode choisie... (mais comme j'expliquais, je l'ai nommé pastebin puisque j'utilise cette source)

Meme si présentement ceci est fonctionnel seulement avec les films (Je parle de la solution de @detobel36 ) c'est tout de même avantageux puisque lorsqu'on appui sur ''Play'' depuis TMDb Helper: nous obtenons les liens au lieu d'obtenir des dossiers contenant des liens

Je pourrai tester dans 1 jour ou 2 :)

alKODIque avatar Jan 01 '22 23:01 alKODIque

J'ajoute aussi qu'avec cette possibilité, je crois qu'il sera possible avec un player json, d'appeler ''Play'' mais aussi ''Search''... ce qui n'est pas le cas acxtuellement. ainsi: Play: ira récupérer le premier lien disponible et agira vraiment comme ''PlayMedia''... Ensuite, comme fallback, le ''Search'' pourra être choisi qui lui présentera une série de liens...

Bref: vivement que je test hihi

alKODIque avatar Jan 01 '22 23:01 alKODIque

Merci alkodique, je comprends mieux ce que ça peut apporter par rapport à l'actuel.

sizanic avatar Jan 01 '22 23:01 sizanic

Tant qu'a y être, j'ai une question @detobel36 :

A quoi sert le ''priority'' dans le json, et comment la déterminer?? J'ai jamais compris l'utilité puisque je code pas.... Je vois que ton nouveau json indique la ''Priority 101''.... - sur celui que j'ai partagé plus haut, c'est 1000 (et je ne me souviens plus dutout ou et pourquoi j'ai inscris 1000, j'ai tellement fait d'essais-erreurs lol)

Ca m'a toujours intrigué! ;)

alKODIque avatar Jan 02 '22 00:01 alKODIque

Merci pour les retours 😄

Pour bien expliquer la différence avec la solution "précédente": dans ma solution, on "parcours" les sources, puis les films qui correspondent, puis les hosters et enfin on affiche le résultat à l'utilisateur. En gros, ça fait la rechercher et ça permet à l'utilisateur de simplement "cliquer" sur le résultat pour avoir son film.
La recherche globale, elle ne fait que la première étape: chercher sur chaque source. Donc après l'utilisation à encore au moins 2 "clics" pour lancer son film.
Ma solution permet également de "directement" lancer un film depuis TmdbHelper sans devoir faire d'action dans vStream.

Le fichier ".json" existera quoi qu'il arrive. C'est TmdbHelper qui fonctionne comme ça.

A quoi sert le ''priority'' dans le json, et comment la déterminer??

Je pense que ça permet juste de choisir "l'ordre" dans laquelle sera affiché ton "json" dans la liste des choix de TmdbHelper. Donc si par exemple tu as installé "Gaia" et bien en fonction de la priorité, vStream sera avant ou après Gaia.
Mais j'ai jamais vraiment testé si c'était ça 😝

detobel36 avatar Jan 02 '22 07:01 detobel36

Merci... En fait, je crois que cette ''priority'' était utile il y a quelques années, avec l'extension ''Mod'' ExtendedInfo , Meta et Openmeta qui utilisaient également les players json... Mais avec TMDb helper, j'ai l'impression que cette ''Priority'' est inutile car l'addon fonctionne autrement (et beaucoup mieux a mon avis)... Maintenant, dans la configuration des players, il est possible via les paramètres TMDb Helper de configurer notre player par défaut et ensuite, de choisir des players ''fallback'' si rien n'est trouvé.

C'est donc probablement un vestige des anciens players qui a la base ont été fait pour ces anciens addons j'imagine :)

alKODIque avatar Jan 02 '22 07:01 alKODIque

Je viens de voir que ça marche pas trop sur Kodi 18 (dû à Python2). Je verrai pour fix ça.

detobel36 avatar Jan 02 '22 19:01 detobel36

Est-ce que ça en vaut vraiment la peine sachant ceci? https://github.com/Kodi-vStream/venom-xbmc-addons/issues/3397

alKODIque avatar Jan 02 '22 19:01 alKODIque

Moi, personnellement, ça dépend si Kodi 19 est adapté pour Raspberri Pi 3...
Si "non", alors je continuerai à maintenir la fonctionnalité pour la version 18 :stuck_out_tongue_closed_eyes:

detobel36 avatar Jan 02 '22 19:01 detobel36

dans ma solution, on "parcours" les sources, puis les films qui correspondent, puis les hosters et enfin on affiche le résultat à l'utilisateur. La recherche globale ne fait que la première étape: chercher sur chaque source.

C'est parce que résoudre les hosters de tous les résultats peut être très long. Ainsi, on ne résout le hoster que pour le résultat sélectionné par l'utilisateur.

Je suis d'accord que ce genre de résolution complete est interessante pour lancer le film depuis tmdb, mais lors d'une recherche globale, il faut voir les performances (en prenant en compte le multi-thread bien sûr).

sizanic avatar Jan 04 '22 01:01 sizanic

Heu la perso je m'inquiete. Tu as testé si les benefices en temps sont vraiment interessant ? On a deja testé ca aussi, et kodi supporte tres mal le Multithread, deja que sans j'arrive a le planter 2 fois par semaine, cette application est codée avec les pieds ....

C'est parce que résoudre les hosters de tous les résultats peut être très long. Ainsi, on ne résout le hoster que pour le résultat sélectionné par l'utilisateur.

Pareil, en fonction de l heure de la journée, de la date de sortie du film, je suis sur d'etre plus rapide que ton code pour trouver un hoster viable, pendant que lui va tous les interroger.

TmpName avatar Jan 04 '22 17:01 TmpName

@TmpName tu cites mon message où je dis qu'on a fait expres de ne pas résoudre tous les hosters car ce serait trop long, pour dire que c'est plus rapide de sélectionner un seul hoster 🤔 Tu redis la même chose en fait, tu n'a pas dû me comprendre. Au moins on est d'accord 😄

sizanic avatar Jan 04 '22 17:01 sizanic

Pareil, en fonction de l heure de la journée, de la date de sortie du film, je suis sur d'etre plus rapide que ton code pour trouver un hoster viable, pendant que lui va tous les interroger.

Attention, il ne fait ça que si tu lui donne l'URL que j'ai créé hein 😉 Il ne fait pas ça pour la recherche "normale" 😄

detobel36 avatar Jan 04 '22 17:01 detobel36

@sizanic oui je suis 100% d'accord avec toi, la reponse etait pas pour toi, mais pour @detobel36 ^^

TmpName avatar Jan 04 '22 17:01 TmpName

ok, a utiliser dans l'url d'un player tmdb. Donc en toute connaissance de cause pour celui qui le met en place 👍🏻

sizanic avatar Jan 04 '22 17:01 sizanic

ok, a utiliser dans l'url d'un player tmdb. Donc en toute connaissance de cause pour celui qui le met en place 👍🏻

Exact.
Dans la recherche "de base" j'ai juste rajouter le multi-thread. A la limite on peut le mettre en option...
Ou revenir en arrière si c'est trop instable.

detobel36 avatar Jan 04 '22 18:01 detobel36

Du nouveau par rapport à ça ? (au-delà de la liste des conflits qui s'allonge mdr).

Arias800 avatar Feb 27 '22 17:02 Arias800

J'ai laissé plusieurs commentaires de codes qui nécessitent une réponse avant de continuer...

sizanic avatar Feb 27 '22 18:02 sizanic

C'était juste pour savoir si il y avait eu des avancés, vu qu'en ce moment je suis plutôt occupé sur Catchup TV, donc je ne regarde pas trop ce qui se passe ici.

Arias800 avatar Feb 27 '22 18:02 Arias800

@sizanic Heu... Je n'ai pas vu où étaient les questions...

Sinon j'ai "rebase" sur la branche Beta. Par contre, je n'ai pas eu l'occasion de tester après mon rebase (il me faut un peu de temps, je n'ai pas de "setup de test" pret). Si quelqu'un à l'occasion :wink:

detobel36 avatar Feb 27 '22 22:02 detobel36

ok, je ne dois pas maitriser le système de review 😄 Je viens de comprendre qu'il fallait soumettre pour qu'elle soit visible.

sizanic avatar Feb 27 '22 23:02 sizanic

Du coup, j'ai fais un fixup...
Pour ceux qui ne connaitrait pas, ça permet aux personnes qui ont déjà review de ne pas devoir "tout" review mais seulement les corrections faites.

Ici en l'occurence: https://github.com/Kodi-vStream/venom-xbmc-addons/pull/3447/commits/89af7e799a60cdaef4f53cccb35dce0bb1d26bf7

Avant de merge, on "rebase" afin d'intégrer directement les fix dans les commits existant :wink:

detobel36 avatar Feb 28 '22 20:02 detobel36

Cette pull request est trop grosse. Trop de modifications recouvrant plusieurs fonctionnalités.

Pour l'instant, j'ai mergé cette partie :

  • déplacer la recherche "globalSearch" dans un fichier search.py
  • multi thread la recherche

sizanic avatar Mar 04 '22 23:03 sizanic

J'ai corrigé les conflits mais j'ai pas encore re-testé...

Je dois également repasser sur les remarques faites pour être sûr d'avoir fait les modifications :wink:

detobel36 avatar May 25 '22 21:05 detobel36

Je test la fonctionnalité depuis quelques jours/semaines et personnellement je n'ai pas eu de gros bug... Juste le nombre de résultat qui n'est pas toujours correcte suite au multi-thread (mais je suis même pas sûr que c'est lié à cette PR).

detobel36 avatar Jul 10 '22 08:07 detobel36

Tu testes le multi-thread de la recherche ou le lien tmdb ? Car le multi-thread de recherche est déjà repris dans vStream 🤔

sizanic avatar Jul 10 '22 11:07 sizanic

Tu testes le multi-thread de la recherche ou le lien tmdb ? Car le multi-thread de recherche est déjà repris dans vStream 🤔

Le multi thread est utilisé par le lien tmdb... Donc je test le fait d'utiliser le "lien direct" et quand je ne trouve pas ce que je veux, j'utilise le lien TMDB pour faire une recharge générale (exactement comme si je faisais cette recherche dans vStream).

Pour m'auto paraphraser, je n'ai pas trouvé de bug sur mon code, mais je pense avoir trouvé un bug dans la version déjà présenté sur ce qui a été merge.

detobel36 avatar Jul 10 '22 11:07 detobel36

Dans tous les cas, sache qu'on ne t'a pas oublié, on va regarder cela prochainement 👍

sizanic avatar Jul 10 '22 11:07 sizanic