Giter Site home page Giter Site logo

hfrgmtools's Introduction

HFRGMTools

Utilitaires de scripts GreaseMonkey pour HFR.

Si tu n'es pas développeur, va plutôt ici sur la documentation utilisateur.

MPStorage Version 0.1

Utilisation d'un MP pour stocker des données à utiliser par des scripts GM et par les applications Android et iOS.

Principe

Un message privé unique est créé, sa première réponse servira à stocker un JSON contenant les données.

A l'initialisation du script, il convient de déterminer trois éléments, qui seront nécessaires par la suite :

  • le pseudo de l'utilisateur
  • l'ID HFR de la conversation MP
  • l'ID HFR de la première réponse dans le MP

Ces données sont à conserver en local par la suite pour ne pas avoir à faire cette lourde procédure à chaque fois...

Récupération du pseudo

Un exemple est donné dans MPStorage.user.js méthode getUsername.

Récupération des ID

Un exemple est donné dans MPStorage.user.js méthode findStorageMPOnPage.

Le MP pouvant être sur une autre page que la première, il faudra paginer jusqu'à le trouver.

Si le MP est introuvable c'est qu'il n'existe pas, il faut alors le créer.

Un exemple est donné dans MPStorage.user.js méthode createStorageMP.

Récupération des données

Un exemple est donné dans MPStorage.user.js méthode getStorageData.

Enregistrement des données

Un exemple est donné dans MPStorage.user.js méthode setStorageData.

Convention

Pour que le système fonctionne sur toutes les plateformes, il faut que chaque script respecte une convention.

Le MP servant au stockage devra être nommé :

a2bcc09b796b8c6fab77058ff8446c34

Le JSON stocké devra respecter la structure décrite ci-dessous.

Structure de stockage

Structure générale

{
    data : [ENTRY],
    sourceName : TOOLNAME,
    lastUpdate : TIMESTAMP
}
  • TOOLNAME : Nom de l'outil utilisé pour modifier le JSON (Script GM, appli mobile...)
  • TIMESTAMP : Timestamp du moment où a été modifié le JSON

Structure d'une ENTRY

{
    version : MPSTORAGE_VERSION,
    mpFlags : MP_FLAGS,
    blacklist : BLACKLIST,
	bookmarks: BOOKMARKS,
    sourceName : TOOLNAME,
    lastUpdate : TIMESTAMP

}
  • MPSTORAGE_VERSION : Version de MPStorage avec laquelle la structure est valide. Cette donnée est utilisée pour que des scripts utilisant une version différente de MPStorage puissent fonctionner en parallèle. Si un script utilise une version supérieure, il devra maintenir les ENTRY des anciennes versions supportées
  • TOOLNAME : Nom de l'outil utilisé pour modifier le JSON (Script GM, appli mobile...)
  • TIMESTAMP : Timestamp du moment où a été modifié le JSON

Structure du MP_FLAGS

{
    list : [
        {
            uri : POST_URI,
            post : POST_ID,
            page : FLAG_PAGE,
            href : RESPONSE_ANCHOR,
            p : FLAG_PAGE
        }
    ],
    sourceName : TOOLNAME,
    lastUpdate : TIMESTAMP
}
  • TOOLNAME : Nom de l'outil utilisé pour modifier le JSON (Script GM, appli mobile...)
  • TIMESTAMP : Timestamp du moment où a été modifié le JSON

Exemple :

{
  "uri":"https://forum.hardware.fr/forum2.php?config=hfr.inc&cat=prive&post=123456&page=1&p=1&sondage=0&owntopic=0&trash=0&trash_post=0&print=0&numreponse=0&quote_only=0&new=0&nojs=0#t789987",
  "post":123456,
  "page":1,
  "href":"t789987",
  "p":"1"
}

Structure de la BLACKLIST

{
    list : [
        {
            username : PSEUDO_HFR,
            createDate : TIMESTAMP
        }
    ],
    sourceName : TOOLNAME,
    lastUpdate : TIMESTAMP
}
  • TOOLNAME : Nom de l'outil utilisé pour modifier le JSON (Script GM, appli mobile...)
  • TIMESTAMP : Timestamp du moment où a été modifié le JSON

Structure de BOOKMARKS

{
    list : [
        {
            numreponse : ID_HFR_REPONSE (sans le t),
			post: ID_HFR_TOPIC,
			cat: ID_HFR_CATEGORIE_TOPIC,
			author: PSEUD0_HFR_AUTEUR_REPONSE,
			label: STRING_LABEL_BOOKMARK,
            createDate : TIMESTAMP
        }
    ],
    sourceName : TOOLNAME,
    lastUpdate : TIMESTAMP
}
  • TOOLNAME : Nom de l'outil utilisé pour modifier le JSON (Script GM, appli mobile...)
  • TIMESTAMP : Timestamp du moment où a été modifié le JSON

Exemple complet

{
   "data":[
      {
         "version":"0.1",
         "mpFlags":{
            "list":[
               {
                "uri":"https://forum.hardware.fr/forum2.php?config=hfr.inc&cat=prive&post=123456&page=1&p=1&sondage=0&owntopic=0&trash=0&trash_post=0&print=0&numreponse=0&quote_only=0&new=0&nojs=0#t789987",
                "post":123456,
                "page":1,
                "href":"t789987",
                "p":"1"
               }
            ],
            "sourceName":"HFRGMTools",
            "lastUpdate":1564993571925
         },
         "blacklist":{
            "list":[
               {
                  "username":"MultiMP",
                  "createDate":1564993571925
               },
               {
                  "username":"MultiMP2",
                  "createDate":1564993571925
               }
            ],
            "sourceName":"HFRGMTools",
            "lastUpdate":1564993571925
         },
		 "bookmarks":{
            "list":[
               {
					"numreponse" : 1234,
					"post": 567,
					"cat": 899,
					"author": "MultiMP",
					"label": "toto",
					"createDate" : 1564993571925
               }
            ],
            "sourceName":"HFRGMTools",
            "lastUpdate":1564993571925
         },
         "sourceName":"HFRGMTools",
         "lastUpdate":1564993571925
      }
   ],
   "sourceName":"HFRGMTools",
   "lastUpdate":1564993571925
}

hfrgmtools's People

Contributors

wiripse avatar bzhdeveloper avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

bzhdeveloper

hfrgmtools's Issues

Inclure ClaudeMarks

Ajouter la feature des bookmarks en MPStorage dans HFR4K

Demande de pezzz

Compatibilité de HFR4K avec [HFR] Ouverture en masse mod_r21

Compatibilité de HFR4K avec [HFR] Ouverture en masse mod_r21 pour éviter le chaos entre les deux scripts sur la fonctionnalité de compactage des drapeaux

remplacer le test à la ligne 1419

if(curSibling.className==='sujet'){

par

if(curSibling.classList.contains("sujet") && !curSibling.classList.contains("ligne_booleen"){

ensuite il s'agit d'avoir des configurations cohérentes sur les deux scripts :

si j'ai bien compris (mais c'est pas sûr) HFR4K a 2 modes pour les sujets compacts, soit il rajoute des lignes vides (par defaut) soit il enlève tout (mode super compact)

pour [HFR] Ouverture en masse mod_r21 y'a trois modes soit il fait rien (par défaut), soit il compacte tout (pareil que HFR4K), soit il compacte un peu

-> y'a que en n'activant rien dans les 2 scripts, ou en choisissant le compactage total dans les 2 scripts qu'on doit avoir un fonctionnement cohérent, dans tous les autres cas c'est foireux (j'imagine)

Quotes des pseudos mal encodés non masquées

Les pseudos avec caractères spéciaux sont rendus différemment dans le bloc info (utilisé pour la blacklist) et dans les quotes.

Résultat un pseudo blacklisté ne voit pas ses quotes masquées car le pseudo dans la quote n'est pas le même que celui du block info et donc enregistré en MPStorage.

Proposition de solution : ajouter un bouton de blacklist dans les quotes pour que l'utilisateur puisse forcer l'ajout d'un pseudo récalcitrant dans sa BL.

SuperFavs Tests inutiles

Avec le périmètre d'URLs définies dans la conf GM, il est inutile de tester ces URLs dans le code

SuperFavs MP

Possibilité d'ajouter des MP en SuperFav comme pour les topics

Màj conf MP

Lors du premier lancement d'un script GM, on cherche le MP servant pour le stockage, on le crée éventuellement s'il n'existe pas, et on enregistre son ID.
Par la suite, on ne va plus jamais faire ce travail. Si le MP est supprimé, le script ne fonctionnera plus car il ne pourra plus récupérer les infos.

Mettre en place un mécanisme intelligent qui relance la recherche du MP si la lecture échoue.

Ça marche pas

Chrome Version 76.0.3809.132 (Official Build) (64-bit)
TM 4.8.41

Screenshot 2019-09-19 at 16 16 13
Screenshot 2019-09-19 at 16 18 00

DTCloud : ne plus stocker les liens

Stocker les liens complets des DT n'a pas grand intérêt et ajoute de la donnée inutilement.
En stockant uniquement les bons IDs ont peut reconstruire le lien à la volée.

Compatibilité de HFR4K avec [HFR] New Page Number

Compatibilité de HFR4K avec [HFR] New Page Number sur la fonctionnalité ezzzi drap notamment,

[HFR] New Page Number modifie le lien des drapals pour gérer l'ouverture en masse sur les drapals

pour prendre en compte cette modification (et afin de pouvoir récupérer l'adresse du drapal) il faut remplacer le code

topic.querySelector('a').href

à la ligne 1157 par

topic.querySelector('a').hasAttribute("href") ? topic.querySelector('a').href : topic.querySelector('a').dataset.href

et

caseDrapal.querySelector('a').href;

à la ligne 1497 par

caseDrapal.querySelector('a').hasAttribute("href") ? caseDrapal.querySelector('a').href : caseDrapal.querySelector('a').dataset.href

ou quelque chose de similaire qui récupère le dataset.href quand le href n'est pas présent

[MPStorage] problème de création du mp, le pseudal est encodé 2 fois (et deux autres problèmes)

Dans mp storage le pseudal est récupéré depuis le cookie à la ligne 287

mais le contenue du cookie est déjà encodé (on dirait un urlencode de php, dans mon cas, un pseudal avec espace, l'espace est remplacé par un +, il faudrait tester avec un pseudal avec des caractères speciaux)

il est ensuite ré-encodé avec encodeURIComponent lors de la requête à la ligne 269 du coup les caractères déjà encodés sont alors sur-encodés et le pseudal n'est pas reconnu par le forum, la création du mp échoue (pseudal inconnu)

il faut voir si on peut se passer du encodeURIComponent, dans mon cas ça marche mais il faudrait vérifier avec des caractères spéciaux

Deux autre problèmes :

  • lorsque ce processus de création plante il n'y a pas de garde-fou

le script part en boucle sur des requêtes ajax sans fin (findStorageMPOnPage puis createStorageMP (qui échoue) puis à nouveau findStorageMPOnPage et rebelote), il faut donc gérer les cas de plantage pour stopper le script, soit en analysant la réponse du forum sur la création du mp et s'arrêter si la réponse n'est pas bonne (le forum renvoie une page basique avec un truc du genre "message posté" puis redirige sur la page des mp) soit simplement en stoppant le script si il passe une deuxième fois dans createStorageMP

et de plus il faudrait rajouter par sécurité des timeout sur les requêtes ajax

par exemple remplacer la ligne 186 par :

window.setTimeout(function() {mpStorage.findStorageMPOnPage(pageId + 1, callback);}, 250);

la ligne 193 par :

window.setTimeout(function() {mpStorage.findStorageMPOnPage(1, callback);}, 250);

et faire de même sur la création du mp, soit sur le bloc à la ligne 189 soit à la ligne 274

ou mieux, gérer un tempo globale sur les appel à loadPage

  • le code de récupération des pages est monstrueusement obsolète et n'a aucun sens aujourd'hui

il faut virer getElementByXpath et utiliser des querySelector(All)

et virer complètement la toyoajaxlib (et son horreur window.ActiveXObject) et la remplacer par des requêtes fetch en same-origin qui forcent le script a n’accéder qu'à hfr et rien d'autre

Ajout Fonction New Page Number

Suite discussion sur HFR, serait-ce possible d’ajouter la fonctionnalité de New Page Number (affichage nombre de pages de retard).

Merci

Mode Edit Superfav

Créer le mode "edit" pour les superfav.

En mode edit, les icônes des topics sont clickables, remplacées par le statut du favoris.
En dehors du mode edit, les icônes sont celles envoyées par HFR et ne sont pas clickables.

Actuellement, on est tout le temps en mode edit.

Externaliser option catégories compactes

Actuellement l'option catégories compactes est dans le menu des superfavs alors que techniquement elle n'a aucun rapport. Résultat on s'attend à ce qu'elle ne fonctionne pas si on n'active pas superfavs, alors que si.

La mettre dans son propre menu éviterait la confusion.

Attention, son code doit s'exécuter après le rendu (effectif ou non) des superfavs.

Ajouter catégorie MP dans les drapeaux

A la façon de DTCloud, ajouter une catégorie MP dans les drapeaux pour voir immédiatement les MP non lus, sans devoir aller sur la page dédiée
Prendre en compte les drapals DT évidemment

Constantiser les URLs

Actuellement les URLs, en particulier celle vers les MP, sont toutes en dur à chaque fois qu'on en a besoin.

Certes c'est peu probable quelles changent, mais tout de même. En mettre des constantes facilitera une éventuelle mise à jour et surtout simplifie immédiatement leur gestion.

plantage de la création du mp si l'utilisateur n'a aucun de mp

plantage à la ligne 207 de mpstorage si l'utilisateur n'a aucun de mp

resp.getElementsByClassName('fondForum1PagesHaut') n'existe pas

faire un test préalable sur l’existence de resp.getElementsByClassName('fondForum1PagesHaut')

et s'il n'existe pas définir maxpage à 1 (au lieu d'essayer de le recup)

et le reste devrait couler : pas de passage dans le boucle des mps puis passage dans le esle vers createStorageMP

c'est pas forcement compatible avec un plantage de la requête (pour n'importe qu'elle raison), dans ce cas resp.getElementsByClassName('fondForum1PagesHaut') pourrait ne pas exister non plus

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.