Ecrire des destinations pour Dropzone

Dropzone n'est pas simplement un autre client de téléchargement FTP, mais une excellente plate-forme utilitaire pour le traitement de fichiers et de texte. Dropzone est un ensemble de destinations pouvant avoir deux types d’actions: action glisser-déposer et / ou un action de clic. Il y a beaucoup de destinations pré-programmées à utiliser, mais vous pouvez aussi écrire vos propres destinations en Ruby!

Présentation de Dropzone


Menu déroulant Dropzone

Lorsque vous lancez Dropzone, il place une nouvelle icône de barre de menus en haut de l'écran. Lorsque vous cliquez dessus, toutes les destinations que vous avez configurées sont exposées. Cette zone de dépôt peut contenir autant de destinations que vous souhaitez configurer. Des fichiers ou du texte peuvent être déposés sur ces cibles ou vous pouvez cliquer dessus pour faire l'action de clic.


Dropzone Cercles

Lorsque vous déplacez la souris à l'extrême gauche ou à droite en fonction de votre configuration, les cercles Dropzone apparaissent. Vous pouvez avoir au maximum cinq destinations différentes dans les cercles. Vous pouvez faire glisser des fichiers vers ces cercles de destination pour effectuer l'action sur eux ou dans la liste déroulante de la barre de menus pour obtenir le même effet. Dropzone donne un bel indicateur de la progression de l'action.


Dropzone Dropdown Menu: Sélection des préférences

Pour configurer vos différentes destinations, cliquez simplement sur l’icône de la barre de menus et sélectionnez Préférences… .


Boîte de dialogue Destinations Dropzone

La boîte de dialogue des préférences s'ouvre pour afficher la liste des destinations. Ici, de nouvelles destinations peuvent être créées et les anciennes destinations peuvent être modifiées ou supprimées.

Les actions par défaut que vous pouvez utiliser sont les suivantes:

  • Déplacer des fichiers
  • Amazon S3
  • Copier des fichiers
  • Copier des fichiers
  • Copier des fichiers
  • Cabane à images
  • Installer l'application
  • Application ouverte
  • Enregistrer le texte
  • Partager le texte
  • TwitPic

Vous pouvez également télécharger beaucoup d'autres sur leur site web..

Une destination est simplement un fichier unique de code Ruby avec l’extension modifiée en .zone de largage au lieu de .rb. Par conséquent, toute personne connaissant un peu Ruby peut créer ses propres destinations et les partager avec d'autres..


Boîte de dialogue de configuration Dropzone

le Boîte de dialogue des paramètres vous permet d'activer les cercles, de choisir les cercles situés à gauche ou à droite de l'écran et de modifier les actions que vous avez chargées dans votre système. La modification d'une action appelle simplement l'éditeur de texte par défaut pour modifier le fichier de destination..

Pointe: Tous les fichiers de destination sont situés à ~ / Bibliothèque / Application Support / Dropzone / Scripts de destination /. Toute modification apportée à un fichier est utilisée immédiatement. Par conséquent, vous pouvez simplement y créer des fichiers pour les installer en tant qu’actions valides dans la boîte de dialogue. Lorsque vous double-cliquez sur une destination Dropzone, celle-ci est simplement copiée dans ce répertoire..

Compresser / Convertir la destination de l'image

Je travaille tout le temps avec des images pour des tutoriels et des articles de blog. Je dois toujours les réduire et les réduire à une taille plus réaliste. Cela peut prendre beaucoup de temps et être ennuyeux. Mais, l’automatisation est ce que Dropzone est tout. Un bon exemple de destination serait celui qui reçoit des fichiers image et les convertit tout en sauvegardant l’original dans un répertoire de sauvegarde..

Si vous êtes nouveau sur Ruby et souhaitez en apprendre davantage à ce sujet, vous devriez jeter un coup d'œil sur le cours The Fundamentals of Ruby on Tuts+.

Pointe: Dans le fichier zip de téléchargement de cette leçon, j’ai intégré un flux de production Alfred permettant de visualiser la Scripts de destination Dropzone annuaire.

Pour commencer, créez un fichier dans le répertoire des scripts Dropzone appelé CompressImage.dropzone. Tous les scripts de destination Dropzone commencent par un en-tête. Cet en-tête indique à Dropzone comment interagir avec cette destination. Dans le fichier créé, placez le texte suivant:

 #! / usr / bin / ruby ​​# Informations sur la destination Dropzone # Nom: Compresser Image # Description: Cette destination sert à la compression des images fournies. La bibliothèque imagemagick (http://www.imagemagick.org/script/index.php) doit être installée. Il est préférable d’installer à partir de HomeBrew (http://brew.sh/). # Poignées: NSFilenamesPboardType # Événements: cliqués, traînés # Créateur: Richard Guay  # URL: http://customct.com # IconURL: http://www.customct.com/images/CompressFile.png

La première ligne est la norme sha-bang pour un script ruby. Après le sha-bang, il existe un bloc de commentaires contenant les informations nécessaires à Dropzone pour utiliser la destination. Tous ces champs doivent obligatoirement figurer dans chaque fichier de destination. Les différents champs sont:

prénom

prénom C’est tout simplement le nom que vous souhaitez que Dropzone affiche à l’utilisateur dans la liste des actions. Il est préférable de ne pas appeler cela une destination ici, mais d'avoir un nom qui décrit avec précision l'action effectuée..

La description

La description est le texte affiché pour l'action. Dropzone n'affiche que deux lignes. Celui ici est trop grand pour être vu complètement à l'intérieur de la boîte de dialogue. Mais, l'utilisateur verra cela et pourra consulter le fichier de destination pour tout voir. Il n'y a actuellement aucun meilleur endroit pour documenter certaines choses sur la destination.

Poignées

Poignées décrit les types d'actions que la destination va entreprendre. Les deux possibilités sont NSFilenamesPboardType et NSStringPboardType.

le NSFilenamesPboardType indique à Dropzone que vous ne prenez que les noms de fichiers système complets. le NSStringPboardType indique à Dropzone que vous ne prenez que des chaînes. Si vous inscrivez les deux avec une virgule, Dropzone vous enverra les deux types. Dans le code de destination, vous pouvez vérifier la variable d'environnement ENV ['DRAGGED_TYPE'] pour voir quel type a été passé à la destination. Pour cette destination, seuls les NSFilenamesPboardType est nécessaire car seuls les fichiers sont en cours de traitement.

Événements

Événements indique à Dropzone le type d'événements que la destination peut gérer. Il n'y a que deux événements: Traîné et Cliqué. UNE Traîné L’événement permettra à l’utilisateur de déposer des fichiers et / ou du texte sur la destination. UNE Cliqué L'événement permettra à la destination d'être cliquée pour une action. Cette destination utilise les deux séparés par une virgule.

Créateur

Créateur indique à Dropzone l'auteur de la destination et son adresse électronique. Ceci est affiché sur le Dialogue de destination lorsque l'action de destination est ajoutée à la liste des destinations de l'utilisateur.

URL

URL donne à Dropzone une URL à afficher pour plus d’informations sur la destination. Par conséquent, l'auteur peut fournir un lien vers son propre site Web ou une page de son site Web expliquant comment utiliser la destination. Ceci est également affiché dans le Dialogue de destination lorsque l'action de destination est ajoutée à la liste des destinations de l'utilisateur.

IconURL

IconURL donnez à Dropzone une URL pour que l'icône apparaisse pour cette destination. Cette icône est utilisée pour les zones de cercle et les zones de menu déroulantes. Cette icône devrait décrire de manière quelque peu l'action de la destination et figurer dans un emplacement facilement disponible (par exemple: il serait préférable que ce ne soit pas sur votre système personnel avec un DynDNS pointant dessus. Il se peut que ce ne soit pas immédiatement disponible. lien public Dropbox fonctionnerait, c’est-à-dire tant qu’il n’est pas supprimé!). Ici, j'ai l'icône sur mon site web pour le téléchargement dans Dropzone.

Fonctions d'action de destination

La destination doit définir une fonction pour chaque action répertoriée comme utilisable avec la destination. Cette destination utilisera à la fois: Traîné action dans le traîné fonction de traitement de fichiers, et Cliqué action dans le cliqué fonction pour obtenir des préférences pour la destination à utiliser. Cette destination doit avoir la largeur de cible graphique et le type d'extension à utiliser dans le processus de conversion..

le traîné la fonction est la première. Ajoutez les éléments suivants au fichier de destination:

 nécessite 'fileutils' def traîné # # Activer le mode déterminé. # $ dz.determinate (true) # # Définit la chaîne de retour par défaut en tant qu'erreur. # result = "Vous devez d'abord définir les paramètres par défaut!" # # Récupère les valeurs de données. # dataDir = File.expand_path ("~ / Support de bibliothèque / d'application / Zone de transfert / Données de destination /") si File.directory?(dataDir) # # récupère les valeurs par défaut. # $ defaults = IO.readlines ("# dataDir /CompressFiles.txt") $ size = $ par défaut [0] .split (":") [1] .strip $ ext = $ par défaut [1] .split ( ":") [1] .strip # # Traite chaque fichier image. # total = $ items.count # # Indiquez à dropzone de commencer… # $ dz.begin ("Commencez à compresser # total images…") # # Créez le répertoire temporaire des originaux. # tmpDir = File.dirname ($ items [0]) + "/ tmp /" if! File.directory?(tmpDir) # # Le répertoire n'existe pas! Créez le! # FileUtils.mkdir_p (tmpDir) end # # Index sur toutes les images fournies. # pour index dans 0… total # # Copiez l'original dans le répertoire tmp. Rsync serait la méthode # préférée, mais cela gâche le graphique de pourcentage sur l'interface utilisateur. # # Rsync.do_copy ($ items [index], tmpDir, false) # FileUtils.copy_file ($ items [index], "# tmpDir # Fichier.basename ($ items [index])") # # Créer le nouveau nom de fichier avec l'extension fournie par l'utilisateur. # $ newFilePath = "# $ items [index] .chomp (File.extname ($ items [index])) # $ ext" # # Convertit le fichier image. # output = '/ usr / local / bin / convert -background blanc -quality 90% -alpha arrière-plan -alpha off + dither -colors 256 -flatten -transparent none -resize # $ size \ "# $ items [index ] \ "\" # $ newFilePath \ "; ' # # Si la conversion ne détruit pas l'original, supprimez l'original. # if File.extname ($ items [index])!! = $ ext File.delete ($ items [index]) end # # Indique à Dropzone quel pourcentage est effectué. # $ dz.percent ((((index + 1) * 100) / total) .to_i) end # # Définit la chaîne de résultats sur finish. # result = "Compression terminée." fin # # Dites à l'utilisateur que c'est fait. # $ dz.finish (result) # # Terminez le protocole dropzone. Si vous voulez une URL dans le presse-papiers, passez-la # ici. Si vous voulez simplement copier du texte dans le presse-papiers, utilisez plutôt $ dz.text (). # Soit $ dz.url () ou $ dz.text () doit être la dernière chose dans la méthode déplacée. # $ dz.url (false) end

Le premier élément déclare les bibliothèques nécessaires à la destination. Ici le fileutils Une bibliothèque est nécessaire pour déplacer des fichiers. L’auteur du programme recommande d’utiliser le Rsync bibliothèque préchargée dans Dropzone, mais elle a pour effet secondaire de réinitialiser la barre de progression à chaque appel. L'auteur de Dropzone a déclaré que cet effet pourrait être activé ou désactivé dans la prochaine version de Dropzone..

le Rsync La bibliothèque demandera à l'utilisateur s'il existe déjà un fichier dans lequel un fichier est déplacé ou si des autorisations plus élevées sont requises. le fileutils bibliothèque ne sera pas et juste donner une erreur. Par conséquent, en utilisant le fileutils bibliothèque nécessite plus de prudence.

le traîné La fonction en premier indique à Dropzone que cette action prendra un certain temps. le $ dz.determinate (true) fonction effectue cela. Si vous téléchargez sur Internet ou quelque chose de similaire, définissez cette option sur faux. Si réglé à faux, l'indicateur de progression affichera simplement un effet de défilement dans toute la boîte de dialogue au lieu d'essayer de montrer les progrès.

Ensuite, la chaîne de résultat est définie sur une valeur par défaut pour l'affichage à l'utilisateur. Si le prochain si donc déclaration est faux, alors il sera affiché.

le dataDir est défini sur l'adresse complète du répertoire de données à utiliser pour stocker les valeurs par défaut de la destination à utiliser. Si ce répertoire existe, les valeurs par défaut sont lues pour la largeur du graphique et l'extension pour donner le graphique. Sinon, l'utilisateur est invité à définir les préférences d'abord.

Pointe: La prochaine version de Dropzone aura une API pour travailler avec un répertoire de données.

le $ articles tableau est la liste des fichiers donnés à la zone de dépôt dans une action de glisser. Il s’agit d’un tableau Ruby standard défini par le programme Dropzone avant d’appeler les scripts de destination..

le $ dz.begin () La fonction doit être appelée pour afficher la barre de progression avec le texte transmis à la fonction. Si cette fonction n'est pas appelée, la barre de progression ne s'affiche pas et Dropzone ne sait pas dans quel état il se trouve..

Ensuite, le tmp Le répertoire est créé dans le répertoire contenant les graphiques d'origine. Le graphique original est copié ici avant toute action sur ceux-ci pour le conserver au cas où l'utilisateur n'apprécierait pas le résultat..

le pour… fin bloc est utilisé pour boucler tous les fichiers graphiques de la $ articles tableau. La conversion réelle est effectuée avec la fonction de conversion de la bibliothèque ImageMagick. Comme il ne s'agit pas d'une bibliothèque standard chargée sur le système Mac OS X, l'utilisateur de la destination doit l'installer. La meilleure solution consiste à installer Home Brew et à utiliser la commande brasser installer imagemagick installer la bibliothèque. C’est facile à faire et donne de bien meilleurs résultats que d’essayer de le compiler et de l’installer vous-même.!

Après avoir effectué la conversion graphique et la compression, l'indicateur de progression doit être mis à jour. C'est quoi $ dz.percent () Est-ce que. Vous calculez le montant entier complété. La valeur doit être comprise entre 0 et 100.

Lorsque la boucle est terminée, le résultat chaîne est définie sur un message descriptif envoyé à l'utilisateur à l'aide de $ dz.finish (). Après cela, le $ dz.url () ou $ dz.text () les fonctions doivent être appelées. le $ dz.url () peut être soit faux ou une chaîne d'URL appropriée à envoyer à l'utilisateur et à afficher dans un navigateur. le $ dz.text () est identique, sauf que le texte donné est passé directement dans le presse-papiers (ou le presse-papiers). Une de ces fonctions doit être appelée avant de quitter, sinon Dropzone ne saura pas si la destination est terminée..

Ensuite, le cliqué la fonction est définie. Vous pouvez ajouter ce code au script:

 def clicked # # Le gestionnaire cliqué devrait avoir la taille et l'extension à utiliser et # l'enregistrer dans le fichier de configuration. Enregistrer les données dans # ~ / Bibliothèque / Application Support / Dropzone / Destination Data / CompressFiles.txt # # # Définissez la chaîne de retour par défaut sur la condition d'erreur. # result = "Désolé, vous avez annulé." # # Demander la largeur du graphique. # button1, width = '. / CocoaDialog standard-inputbox --title "Compresser les fichiers: largeur graphique" --e --informative-text "Quelle largeur?"' .split ("\ n") # # Voir si l'utilisateur annulé. Ne continuez pas s'ils annulent. # if button1! = "2" # # Demandez au type de fichier graphique de se retrouver. # button2, extnum = '. / CocoaDialog dropdown --title "Compresser les fichiers: format graphique" - texte "Quel format graphique?" --items ".jpg" ".png" ".gif" --button1 "Ok" --button2 "Annuler" 'split ("\ n") # # Voir si l'utilisateur a annulé sa participation. Ne continuez pas s'ils annulent. # if button2! = "2" # # Remplace le numéro de liste déroulante par une chaîne. # case extnum.to_i lorsque 0 ext = ".jpg" lorsque 1 ext = ".png" lorsque 2 ext = ".gif" end # # Assurez-vous que le répertoire de données existe. # dataDir = File.expand_path ("~ / Bibliothèque / Application Support / Dropzone / Destination Data /") if! File.directory?(dataDir) # # Le répertoire n'existe pas! Créez le! # FileUtils.mkdir_p (dataDir) end # # Écrivez le fichier de données. Ne pas ajouter, mais supprimer et écrire frais! # File.open ("# dataDir /CompressFiles.txt", 'w') | file | file.write ("Taille: # largeur \ nExt: # ext") # # Indiquez à l'utilisateur en définissant la chaîne de retour comme il l'a spécifiée. # resultat = "Taille: # largeur px, Ext: # ext" fin fin # # Dites à l'utilisateur que c'est fait. # $ dz.finish (result) # # Terminez le protocole dropzone. Si vous voulez une URL dans le presse-papiers, passez-la # ici. Si vous voulez simplement copier du texte dans le presse-papiers, utilisez plutôt $ dz.text (). # Soit $ dz.url () ou $ dz.text () doit être la dernière chose dans la méthode cliquée. # $ dz.url (false) end

le cliqué la fonction utilise simplement le programme externe CacaoDialog pour obtenir la largeur cible du graphique, puis à nouveau pour l'extension à utiliser. CacaoDialog est inclus avec Dropzone, mais vous pouvez aussi le télécharger et l’utiliser dans vos propres scripts.

Une fois les informations obtenues de l'utilisateur, le répertoire par défaut est créé s'il n'existe pas et les préférences sont stockées dans un fichier de données appelé CompressFiles.txt. le traîné la fonction lit ce fichier.

Enfin, les préférences sont renvoyées à l'utilisateur à l'aide du bouton $ dz.finish () fonction et appelant le dz.url () fonction pour terminer le processus.

Essai

Si vous ouvrez le terminal au ~ / Bibliothèque / Application Support / Dropzone / Scripts de destination / répertoire, vous verrez un sous-répertoire appelé lib. Allez dans ce répertoire et vous pourrez tester la cible. En tappant:

ruby runner.rb CompressImage.dropzone a cliqué

Vous pouvez tester la fonction cliquée de la destination. De même, vous pouvez taper:

ruby runner.rb CompressImage.dropzone déplacé 

Ceci lancera la fonction glissée avec le fichier. Vous devez appuyer plusieurs fois sur la touche Entrée pour suivre l'ensemble du processus. Si vous placez met appels de fonction dans le code pour afficher des valeurs variables, vous pouvez l’utiliser pour déboguer votre code.

Vous pouvez également voir la sortie d’une destination en cours en appuyant sur Maj-Commande-D dans le menu déroulant Dropzone. Dropzone affichera ensuite le Console de sortie cela affichera tout ce que le script de destination génère. Une fonctionnalité de débogage pratique.

A l'avenir

Dropzone est activement développé et d’autres programmeurs créent des fichiers de destination. Vous pouvez afficher d'autres destinations ici ou créer un compte GitHub Dropzone, ajouter votre fichier de destination et envoyer une demande d'extraction..

Menu déroulant Dropzone

L'auteur, John Winter, m'a dit que la nouvelle version sortira dans quelques mois. Vous pouvez obtenir un aperçu de la version 3.0 ci-dessus! La version 3.0 apportera quelques améliorations à l'API et des extensions à l'interface utilisateur.

Conclusion

J'espère que vous apprécierez cette destination autant que moi. Je l'utilise tous les jours dans mon travail. Vous pouvez maintenant prendre les bases ici et expérimenter les vôtres. Si vous faites une nouvelle destination, merci de la partager dans les commentaires ci-dessous.