Greasemonkey: Ajouter une sauvegarde/restauration

CrĂ©Ă© le 5 dĂ©c. 2017  Â·  29Commentaires  Â·  Source: greasemonkey/greasemonkey

Avec l'ancien graissemonkey, une fonction d'exportation de scripts/préférences n'était pas vraiment nécessaire, car l'utilisateur pouvait simplement déplacer le répertoire gm_scripts d'un profil/ordinateur à un autre : mais maintenant ce n'est plus possible, alors pensez à ajouter une telle fonction à graissemonkey 4 à l'avenir.

Commentaire le plus utile

J'ai donc implémenté trois méthodes d'importation différentes.

  1. Fusionner. Ne touchez à aucun script installé. Seuls les scripts qui n'existent pas actuellement[1] seront ajoutés à la base de données.
  2. Remplacer. Désinstallez tous les scripts actuels et remplacez-les par ceux importés.
  3. Écraser. Comme la fusion, mais si un conflit est trouvĂ©[1], les scripts importĂ©s sont prioritaires.

Attendre d'autres PR avant de soumettre.

[1] Je détermine l'unicité par le id d'un script.

Tous les 29 commentaires

Eh bien, Firefox et ses problĂšmes. Donc, j'implĂ©mentais ceci (et bien sĂ»r une fonction « import »). J'en ai presque fini, mais il y a un obstacle. Cela ne fonctionne que lorsque vous ouvrez le browser toolbox et sĂ©lectionnez "ne pas fermer automatiquement les fenĂȘtres contextuelles". L'importation se fait via un <input type="file"> (ce qui est le seul moyen), cependant, au focus de la fenĂȘtre de navigation, la fenĂȘtre contextuelle se ferme normalement, ainsi la fenĂȘtre est dĂ©truite et aucune fonction n'est exĂ©cutĂ©e. Bogues pertinents :
https://bugzilla.mozilla.org/show_bug.cgi?id=1292701
https://bugzilla.mozilla.org/show_bug.cgi?id=1366330

C'est tellement ennuyeux d'avoir un environnement à moitié idiot dans lequel travailler.

S'applique Ă©galement au #2612. Ce qui peut ĂȘtre abordĂ© en mĂȘme temps que cette question est.

@Sxderp Si la fermeture de la fenĂȘtre contextuelle est un problĂšme, le moyen normal de rĂ©soudre / contourner consiste simplement Ă  ouvrir un onglet ou une fenĂȘtre (pointant vers une page HTML dans l'extension) dans laquelle vous effectuez tout ce que vous devez faire. Ces onglets/fenĂȘtres ne se ferment pas automatiquement et prĂ©sentent le mĂȘme environnement qu'une fenĂȘtre contextuelle. Bien que cela ne soit peut-ĂȘtre pas aussi clair que d'avoir tout dans la fenĂȘtre contextuelle du navigateur, cela devrait ĂȘtre fonctionnel.

Je pourrais faire ça. Cela impliquerait de déplacer un tas de code. Je me renseignerai une autre fois.

J'ai terminé l'import/export. Aucun test et trÚs peu de gestion des erreurs. Mais ça marche. Cependant, pour plus de simplicité, j'ai fait en sorte qu'une importation écrase toute la base de données. Avec une demande de confirmation bien sûr.

Je pense qu'idéalement, l'utilisateur pourrait choisir de remplacer ou de fusionner l'importation. Le stylet ne fait que fusionner, ce qui est également un mauvais IME. Le choix de l'utilisateur, avec des valeurs par défaut qui pourraient fonctionner, semble le meilleur.

Bien sûr, mais nous rencontrons alors beaucoup de conditionnels. J'aimerais voir un organigramme quelconque sur la nature _exacte_ de la fusion.

Surtout en termes de conflits. Écraser le contenu, Ă©craser les clĂ©s/valeurs (oui, celles-ci sont Ă©galement exportĂ©es), demander tout (cela semble ĂȘtre une mauvaise expĂ©rience utilisateur), etc. ?

Je veux dire simplement : importez tous les scripts du fichier (et écrasez-les complÚtement dans cet état), mais ne touchez/supprimez pas les scripts qui ne sont pas dans le fichier.

Oh. C'est beaucoup plus simple. Ouais, ça sonne bien.

J'ai donc implémenté trois méthodes d'importation différentes.

  1. Fusionner. Ne touchez à aucun script installé. Seuls les scripts qui n'existent pas actuellement[1] seront ajoutés à la base de données.
  2. Remplacer. Désinstallez tous les scripts actuels et remplacez-les par ceux importés.
  3. Écraser. Comme la fusion, mais si un conflit est trouvĂ©[1], les scripts importĂ©s sont prioritaires.

Attendre d'autres PR avant de soumettre.

[1] Je détermine l'unicité par le id d'un script.

Et ça?

  1. Mettre à jour. Importez (écrasez) uniquement les scripts qui existent déjà.

Ceci est complémentaire à 1. Fusionner

  1. Écraser. Comme la fusion, mais si un conflit est trouvĂ©[1], les scripts importĂ©s sont prioritaires.

@Sxderp Je suppose que "Comme la fusion" n'inclut pas la contrainte "Seuls les scripts qui n'existent pas actuellement"...
(cette contrainte n'a pas de sens ici) Cela signifie, Écraser = Importer tous les scripts, les scripts en conflit sont Ă©crasĂ©s par l'archive...

Laquelle de ces options (mise à jour/fusion/etc.) est proposée par VM, TM ou autre ?

  1. Mettre à jour. Importez (écrasez) uniquement les scripts qui existent déjà.

Bien sĂ»r, cela devrait ĂȘtre faisable.

Cela signifie que, Écraser = Importer tous les scripts, les scripts en conflit sont Ă©crasĂ©s par l'archive...

Correct.

Laquelle de ces options (mise à jour/fusion/etc.) est proposée par VM, TM ou autre ?

Pas vraiment sĂ»r. Mais cela a soulevĂ© une autre prĂ©occupation pour moi. CompatibilitĂ© avec les archives. En supposant que ces addons prennent en charge l'exportation complĂšte de la base de donnĂ©es (scripts + donnĂ©es), alors idĂ©alement, les importations devraient ĂȘtre compatibles les unes avec les autres.

Mettre à jour. Importez (écrasez) uniquement les scripts qui existent déjà.

Maintenant que j'y pense (tout de genre 3 minutes), j'ai un souci. Qu'en est-il des donnĂ©es associĂ©es (get/setValue) ? Les donnĂ©es actuellement stockĂ©es doivent-elles rester ? Les donnĂ©es importĂ©es doivent-elles primer ? Une sorte de fusion ? Et puis reprĂ©senter clairement cette option/Ă©tat Ă  l'utilisateur. C'est en fait un peu plus dĂ©licat qu'un premier coup d'Ɠil.

J'ai fait quelques vérifications rapides, ce n'est pas complet à 100% mais donne un aperçu général, ainsi que ce que je devrais probablement changer en ce qui concerne mon implémentation.

VM et TM exportent tous deux dans des fichiers zip. À l'intĂ©rieur des fichiers zip, vous pouvez trouver des fichiers .user.js pour chacun de vos scripts. Cependant, en ce qui concerne l'exportation des dĂ©tails spĂ©cifiques au stockage / Ă  la mise en Ɠuvre, les deux le font un peu diffĂ©remment. VM encapsule les dĂ©tails spĂ©cifiques Ă  l'implĂ©mentation et les donnĂ©es de script, pour ce qui ressemble Ă  tous les scripts, dans un seul fichier, violentmonkey . TM fait cela un peu plus sainement. Les dĂ©tails spĂ©cifiques Ă  l'implĂ©mentation, pour chaque script, sont exportĂ©s vers des fichiers .options.js , tandis que les donnĂ©es de script sont exportĂ©es vers .storage.json .

Je pense que je vais retravailler mon implĂ©mentation pour suivre la MT. En gĂ©nĂ©ral, je pense que c'est une meilleure norme car elle sĂ©pare les dĂ©tails de mise en Ɠuvre des donnĂ©es.

Quant à la "méthode d'importation" (décrite dans mon message ci-dessus):

TM fournit une interface « sélectionner chaque script ». Lorsque vous importez une archive, vous sélectionnez si vous souhaitez importer chaque script spécifique. Si vous le cochez, il écrasera toutes les données de ce script.

VM ne semble offrir que ce que j'ai dĂ©crit ci-dessus comme « Ecraser ». Cependant, il existe une option pour NE PAS importer les donnĂ©es de script associĂ©es (globales pour tous les scripts). Du point de vue de l'interface utilisateur, je pense que la mise en Ɠuvre de cette option dans GM serait difficile. Cependant, si nous adoptons l'approche TM pour exporter/importer la base de donnĂ©es, un utilisateur pourrait simplement ouvrir l'archive et supprimer le fichier .storage.json .

Si quelqu'un veut tester, j'ai mis à jour ma branche, sxderp:import-export-database-merge , pour inclure la fonctionnalité .zip j'ai parlé précédemment. Je n'ai pas implémenté l'option update suggérée par @Eselce car je ne suis toujours pas sûr des détails.

@Sxderp Merci d'avoir développé cette fonctionnalité. J'ai construit le package et l'ai installé dans Firefox Developer Edition (pour permettre l'installation d'extensions non signées). J'ai mis à niveau un profil existant avec cette version de navigateur, écrasé l'installation existante de GreaseMonkey et exporté ma base de données sans problÚme.

L'importation dans un nouveau profil Firefox avec ce GreaseMonkey installé a cependant causé un problÚme. Il semble qu'un script utilisateur spécifique qui soit assez volumineux (user.js et gm_details.js font environ 230 Ko cause des problÚmes d'importation. AprÚs avoir remplacé la base de données, GM cesse de fonctionner. Cliquer sur l'icÎne GM ouvre une liste déroulante vide (environ 10x10 carré).

Je préfÚre ne pas partager le script utilisateur spécifique publiquement. En utilisant cette astuce, j'ai trouvé votre adresse e-mail et je vais vous envoyer un message de cette façon.

Edit: La seule façon de faire fonctionner GM aprÚs sa panne est de supprimer l'extension, de redémarrer Firefox et de l'ajouter à nouveau.

GMexport_20180 2 17_164139.zip ???

Importation de tout un tas de scripts (en partie) volumineux (> 20) à partir d'un fichier zip de 3,4 Mo sans se plaindre. Pas d'examen détaillé cependant...

  return 'GMexport_'
       + date.getFullYear().toString()
       + date.getMonth().toString().padStart(2, '0')
       + date.getDate().toString().padStart(2, '0')
       + '_'
       + date.getHours().toString().padStart(2, '0')
       + date.getMinutes().toString().padStart(2, '0')
       + date.getSeconds().toString().padStart(2, '0')
       + '.zip'

IIRC, getMonth() commence Ă  0... ; manquant...

IIRC, getMonth() commence Ă  0... ; manquant...

DÉCHIRURE

Je n'ai pas travaillé sur cette branche depuis un moment. Je vais prendre aujourd'hui et rebaser sur master et faire un tas de nettoyage.

J'ai rebasé ma branche sur master et apporté des modifications importantes à la mise en page qui, je pense, offre une meilleure lisibilité.
@ArmEagle Sur ma branche mise à jour, j'ai pu importer le fichier que vous avez envoyé. Si vous rencontrez toujours des problÚmes, faites-le moi savoir et j'examinerai la question plus en détail.

Fusionné avec les modifications apportées à 7fe8bfe94efbadeb1da1a6491aaf424fc8275f09 . Réouverture pour suivre/discuter de certains problÚmes que j'ai vus.

RĂ©ouverture pour suivre/discuter de certains problĂšmes que j'ai vus.

Quels Ă©taient les problĂšmes ?

C'était un test rapide unique, je ne suis pas sûr, une partie du script que je m'attendais à installer n'était pas répertorié. Mais je veux le répéter et suivre attentivement et écrire les résultats. Il y a beaucoup de cas possibles.

J'ai enfin un peu réfléchi à ça.

Il ne sauvegarde que les .user.js et les "détails". Ce qui arrive à inclure accidentellement le contenu requis, mais manque les ressources (JSON sérialisant le blob jusqu'à {} ). AFAICT il va .setKnownResources() avec des blobs vides/cassés, et donc ne fonctionnera pas.

Il semblerait prĂ©fĂ©rable que chaque script ait son propre dossier, que ce dossier contienne un fichier pour le .user.js , pour chaque @require et @resource , puis peut-ĂȘtre le reste les dĂ©tails personnalisĂ©s et les valeurs stockĂ©es. Je pense que cela pourrait mĂȘme ĂȘtre suffisamment meilleur pour que je renonce Ă  toute compatibilitĂ© entre plates-formes.

Tout Ă  fait d'accord. Tout comme enregistrer un document "en tant que page Web", ce qui crĂ©erait un htm -document plus un dossier du mĂȘme nom (de base) avec les dĂ©pendances...

Ce qui arrive Ă  inclure accidentellement le contenu requis ...

Ce n'Ă©tait pas par accident. L'inclut Ă  dessein, pour tout changement local qui aurait pu se produire. Je considĂ©rerais les ressources/requis comme des "dĂ©tails d'implĂ©mentation", et donc exportĂ©s en tant que "dĂ©tails". TM n'exporte mĂȘme pas les ressources/nĂ©cessite.

mais manque les ressources (JSON sérialisant le blob jusqu'à {}). AFAICT, il .setKnownResources() avec des blobs vides/cassés et ne fonctionnera donc pas.

Il y a une TODO pour déterminer si les blobs se stringent bien. Cette fonctionnalité a été fusionnée techniquement avant que je ne soumette un PR pour cela.

Pour le moment, le problÚme du Blob serait résolu avec le #2937.

Quant à la création de plus de fichiers dans l'archive de sauvegarde, je ne pense pas que cela apporterait tous les avantages. Bien que l'archivage des ressources et des besoins et tout ce qui soit dans des fichiers séparés puisse sembler agréable lors de l'extraction, cela rendrait probablement le code plus complexe car vous traitez beaucoup de petites choses plutÎt qu'un simple dump.

C'est la "grosse fonctionnalité" de la 4.4, donc j'espÚre vraiment finir/améliorer cela bientÎt.

DeuxiÚme réflexion, c'est fonctionnel. Il y a certaines améliorations que j'aimerais suivre, mais un problÚme pour chacun de ces changements ciblés sera plus facile à gérer.

Cette page vous a été utile?
0 / 5 - 0 notes