Scrivere le destinazioni per Dropzone

Dropzone non è solo un altro client di upload FTP, ma una grande piattaforma di utilità per l'elaborazione di file e testo. Dropzone è una raccolta di destinazioni che possono avere due tipi di azioni: trascinare e rilasciare l'azione e / o a fare clic su azione. Ci sono molte destinazioni pre-programmate da usare, ma puoi anche scrivere le tue destinazioni in Ruby!

Presentazione di Dropzone


Menu a discesa Dropzone

Quando lanci Dropzone, colloca una nuova icona nella barra dei menu nella parte superiore dello schermo. Quando fai clic su di esso, espone tutte le destinazioni che hai configurato. Questa area di rilascio può avere tutte le destinazioni che vuoi configurare. File o testo possono essere eliminati su questi target oppure puoi fare clic su di essi per eseguire l'azione di clic.


Cerchi Dropzone

Quando si sposta il mouse all'estrema sinistra o destra, a seconda della configurazione, vengono visualizzati i cerchi Dropzone. Puoi avere, al massimo, cinque diverse destinazioni nelle cerchie. Puoi trascinare i file in queste cerchie di destinazione per eseguire l'azione su di essi o trascinare i file nel menu a discesa della barra dei menu per lo stesso effetto. Dropzone fornisce un buon indicatore del progresso dell'azione.


Menu a discesa Dropzone: selezione delle preferenze

Per configurare le diverse destinazioni, fai clic sull'icona della barra dei menu e seleziona Preferenze ... .


Finestra di dialogo Destinazioni Dropzone

La finestra di dialogo delle preferenze si apre all'elenco delle destinazioni. Qui è possibile creare nuove destinazioni e le vecchie destinazioni possono essere modificate o eliminate.

Le azioni predefinite che puoi utilizzare sono:

  • Sposta i file
  • Amazon S3
  • Copia file
  • Copia file
  • Copia file
  • Immagine Shack
  • Installa l'applicazione
  • Apri l'applicazione
  • Salva testo
  • Condividi testo
  • TwitPic

Puoi anche scaricare molti altri dal loro sito web.

Una destinazione è semplicemente un singolo file di codice Ruby con l'estensione modificata in .zona di rilascio invece di .rb. Pertanto, chiunque abbia una scarsa conoscenza di Ruby può creare le proprie destinazioni e condividerle con gli altri.


Finestra di dialogo Impostazioni Dropzone

Il Finestra di dialogo Impostazioni ti permette di accendere i cerchi, scegliere i cerchi che si trovano sul lato sinistro o destro dello schermo e modificare le azioni che hai caricato nel tuo sistema. La modifica di un'azione chiama semplicemente l'editor di testo predefinito per modificare il file di destinazione.

Mancia: Tutti i file di destinazione si trovano in ~ / Libreria / Supporto applicazioni / Dropzone / Script di destinazione /. Qualsiasi modifica apportata a un file viene utilizzata immediatamente. Pertanto, puoi semplicemente creare i file lì per installarli come azioni valide nella finestra di dialogo. Quando fai doppio clic su una destinazione Dropzone, viene semplicemente copiata in questa directory.

Comprimi / Converti destinazione immagine

Lavoro sempre con immagini per tutorial e post di blog. Devo sempre ridurli e ridimensionarli ad una dimensione più fattibile. Questo può richiedere molto tempo e noioso. Ma l'automazione è l'essenza di Dropzone. Una buona destinazione di esempio potrebbe essere quella di ricevere file di immagini e convertirli mentre si salva l'originale in una directory di backup.

Se sei nuovo a Ruby e vorresti saperne di più, ti consigliamo di consultare il corso The Fundamentals of Ruby su Tuts+.

Mancia: Nello zip di download per questa lezione, ho inserito un Alfred Workflow per la visualizzazione di Script di destinazione Dropzone elenco.

Per iniziare, crea un file nella directory degli script di Dropzone chiamata CompressImage.dropzone. Tutti gli script di destinazione di Dropzone iniziano con un'intestazione. Questa intestazione dice a Dropzone come interagire con questa destinazione. Nel file creato, inserisci il seguente testo:

 #! / usr / bin / ruby ​​# Nome destinazione Dropzone # Nome: Comprimi Immagine # Descrizione: Questa destinazione serve per comprimere le immagini fornite. Devi avere la libreria imagemagick (http://www.imagemagick.org/script/index.php) installata. È meglio installare da HomeBrew (http://brew.sh/). # Handle: NSFilenamesPboardType # Events: Clicked, Dragged # Creator: Richard Guay  # URL: http://customct.com # IconURL: http://www.customct.com/images/CompressFile.png

La prima linea è lo standard sha-bang per uno script rubino. Dopo il sha-bang, c'è un blocco di commenti contenente le informazioni necessarie per Dropzone per utilizzare la destinazione. Tutti questi campi devono essere presenti in ogni file di destinazione. I diversi campi sono:

Nome

Nome semplicemente è il nome che vuoi che Dropzone mostri all'utente nella lista delle azioni. È meglio non chiamare questa destinazione qui, ma avere un nome che descriva accuratamente l'azione che viene eseguita.

Descrizione

Descrizione è il testo visualizzato per l'azione. Dropzone mostra solo due righe. Quello qui è troppo grande per essere visto completamente all'interno della finestra di dialogo. Ma, l'utente vedrà che e può guardare il file di destinazione per vedere il tutto. Al momento non esiste un posto migliore per documentare alcune cose sulla destinazione.

maniglie

maniglie descrive i tipi di azioni che la destinazione richiederà. Le due possibilità sono NSFilenamesPboardType e NSStringPboardType.

Il NSFilenamesPboardType dice a Dropzone che prendi solo i nomi di sistema completi. Il NSStringPboardType dice a Dropzone che prendi solo stringhe. Se si elencano entrambi con una virgola, Dropzone invierà entrambi i tipi. All'interno del codice di destinazione, è possibile controllare la variabile di ambiente ENV [ 'DRAGGED_TYPE'] per vedere quale tipo è stato passato alla destinazione. Per questa destinazione, solo il NSFilenamesPboardType è necessario perché vengono elaborati solo i file.

eventi

eventi dice a Dropzone quale tipo di eventi può gestire la destinazione. Ci sono solo due eventi: trascinato e cliccato. UN trascinato evento consentirà all'utente di rilasciare file e / o testo sulla destinazione. UN cliccato evento consentirà alla destinazione di essere cliccato per un'azione. Questa destinazione utilizza entrambi separati da una virgola.

Creatore

Creatore dice a Dropzone chi è l'autore della destinazione e il loro indirizzo email. Questo è visualizzato sul Finestra di dialogo di destinazione quando l'azione di destinazione viene aggiunta all'elenco delle destinazioni dell'utente.

URL

URL dà a Dropzone un URL da visualizzare per ulteriori informazioni sulla destinazione. Pertanto, l'autore può fornire un link al proprio sito Web o una pagina sul proprio sito Web che spiega come utilizzare la destinazione. Questo è anche visualizzato nel Finestra di dialogo di destinazione quando l'azione di destinazione viene aggiunta all'elenco delle destinazioni dell'utente.

IconURL

IconURL dare a Dropzone un URL per ottenere l'icona da visualizzare per questa destinazione. Questa icona viene utilizzata per i dropzones del cerchio e i dropzones del menu a discesa. Questa icona dovrebbe essere in qualche modo descrittiva dell'azione della destinazione e dovrebbe essere facilmente accessibile da qualche parte (ad esempio: sarebbe meglio se non fosse sul tuo sistema personale con un DynDNS che punta ad essa. Potrebbe non essere facilmente disponibile. il collegamento pubblico a Dropbox funzionerebbe, ovvero finché non verrà eliminato!). Qui, ho l'icona sul mio sito web per il download in Dropzone.

Funzioni di azione della destinazione

La destinazione deve definire una funzione per ciascuna azione elencata come utilizzabile con la destinazione. Questa destinazione utilizzerà entrambi: trascinato azione nel trascinato funzione per l'elaborazione dei file, e cliccato azione nel cliccato funzione per ottenere le preferenze per la destinazione da utilizzare. Questa destinazione deve avere la larghezza di destinazione grafica e il tipo di estensione da utilizzare nel processo di conversione.

Il trascinato la funzione è prima di tutto Aggiungi il seguente al file di destinazione:

 richiede 'fileutils' def trascinato # # Attiva la modalità determinata. # $ dz.determinate (true) # # Imposta la stringa di ritorno predefinita su un errore. # result = "Devi prima impostare i valori predefiniti!" # # Ottieni i valori dei dati. # dataDir = File.expand_path ("~ / Library / Application Support / Dropzone / Destination Data /") se File.directory?(dataDir) # # ottiene i valori predefiniti. # $ defaults = IO.readlines ("# dataDir /CompressFiles.txt") $ size = $ defaults [0] .split (":") [1] .strip $ ext = $ defaults [1] .split ( ":") [1] .strip # # Elabora ogni file immagine. # totale = $ items.count # # Indica dropzone per iniziare ... # $ dz.begin ("Inizia a comprimere # total immagini ...") # # Crea la directory temporanea per gli originali. # tmpDir = File.dirname ($ items [0]) + "/ tmp /" if! File.directory?(tmpDir) # # La directory non esiste! Crealo! # FileUtils.mkdir_p (tmpDir) end # # Indice su tutte le immagini fornite. # per indice in 0 ... totale # # Copia l'originale nella directory tmp. Rsync sarebbe il metodo # preferito, ma rovina il grafico percentuale sull'interfaccia utente. # # Rsync.do_copy ($ items [index], tmpDir, false) # FileUtils.copy_file ($ items [index], "# tmpDir # File.basename ($ items [index])") # # Crea il nuovo nome del file con l'estensione fornita dall'utente. # $ newFilePath = "# $ items [index] .chomp (File.extname ($ items [index])) # $ ext" # # Converti il ​​file immagine. # output = '/ usr / local / bin / convert -background white -quality 90% -alpha background -alpha off + dither -colors 256 -flatten -transparent none -resize # $ size \ "# $ items [indice ] \ "\" # $ newFilePath \ "; ' # # Se la conversione non distrugge l'originale, quindi rimuovere l'originale. # if File.extname ($ items [index])! = $ ext File.delete ($ items [index]) end # # Indica a Dropzone quale percentuale viene eseguita. # $ dz.percent ((((indice + 1) * 100) / totale) .to_i) fine # # Imposta la stringa dei risultati su finito. # result = "Compresso terminato". fine # # Indica all'utente che è stato fatto. # $ dz.finish (result) # # Termina il protocal dropzone. Se vuoi un URL negli appunti, passalo qui. Se vuoi solo copiare il testo negli appunti, usa invece $ dz.text (). # Sia $ dz.url () o $ dz.text () deve essere l'ultima cosa nel metodo trascinato. # $ dz.url (falso) fine

Il primo elemento dichiara le librerie che saranno necessarie per la destinazione. Qui, il fileutils la libreria è necessaria per spostare i file. L'autore del programma raccomanda l'uso di rsync libreria precaricata in Dropzone, ma ha un effetto collaterale di reimpostare la barra di avanzamento ogni volta che viene chiamata. L'autore di Dropzone ha detto che quell'effetto sarà selezionabile on o off nella prossima versione di Dropzone.

Il rsync la libreria interrogherà l'utente se un file esiste già dove uno viene spostato o se sono richieste autorizzazioni più elevate. Il fileutils la libreria non darà e solo darà un errore. Pertanto, utilizzando il fileutils la biblioteca richiede più cautela.

Il trascinato la funzione dice innanzitutto a Dropzone che questa azione richiederà un determinato periodo di tempo. Il $ Dz.determinate (true) la funzione esegue questo. Se stai caricando su Internet o qualcosa di simile, dovresti impostarlo su falso. Se impostato su falso, il misuratore di avanzamento mostrerà solo un effetto di scorrimento sull'intero dialogo invece di provare a mostrare il progresso.

Successivamente, la stringa di risultati è impostata su un valore predefinito per la visualizzazione all'utente. Se il prossimo se poi l'affermazione è falso, quindi verrà visualizzato.

Il DataDir è impostato sull'indirizzo completo della directory dei dati da utilizzare per memorizzare i valori predefiniti per la destinazione da utilizzare. Se questa directory esiste, i valori di default vengono letti per la larghezza grafica e l'estensione per dare l'immagine. Altrimenti, all'utente viene detto di impostare prima le preferenze.

Mancia: La prossima versione di Dropzone avrà un'API per lavorare con una directory di dati.

Il articoli $ array è l'elenco dei file dati alla dropzone in un'azione di trascinamento. Questo è un array di Ruby standard ed è impostato dal programma Dropzone prima di chiamare gli script di destinazione.

Il $ Dz.begin () la funzione deve essere richiamata per visualizzare la barra di avanzamento con il testo passato alla funzione. Se questa funzione non viene chiamata, la barra di avanzamento non viene visualizzata e Dropzone non sa in quale stato si trova.

Quindi, il tmp la directory viene creata nella directory che contiene la grafica originale. L'immagine originale viene copiata qui prima che venga presa qualsiasi azione su di loro per mantenere la grafica originale nel caso in cui l'utente non gradisca il risultato.

Il per ... fine il blocco viene utilizzato per eseguire il loop su ogni file grafico in articoli $ array. La conversione effettiva viene eseguita con la funzione di conversione della libreria ImageMagick. Poiché questa non è una libreria standard caricata sul sistema Mac OS X, l'utente della destinazione deve installarlo. La soluzione migliore è installare Home Brew e utilizzare il comando brew install imagemagick per installare la libreria. È facile da fare e dà risultati molto migliori rispetto a cercare di compilarlo e installarlo da solo!

Dopo aver eseguito la conversione e la compressione grafica, il misuratore di avanzamento deve essere aggiornato. Quello è ciò che $ Dz.percent () lo fa. Calcoli l'importo intero che è stato completato. Il valore dovrebbe essere compreso tra 0 e 100.

Quando il ciclo è finito, il risultato stringa è impostata su un messaggio descrittivo che viene inviato all'utente mediante $ Dz.finish (). Dopo quello, il $ Dz.url () o $ Dz.text () le funzioni devono essere chiamate. Il $ Dz.url () può essere o falso o una stringa URL appropriata da inviare all'utente e visualizzata in un browser. Il $ Dz.text () è lo stesso, ad eccezione del fatto che il testo fornito viene passato direttamente negli appunti (o nel cartone). Una di queste funzioni deve essere chiamata prima di uscire o Dropzone non saprà se la destinazione è finita.

Quindi, il cliccato la funzione è definita. Puoi aggiungere questo codice allo script:

 def clickked # # Il gestore cliccato dovrebbe ottenere la dimensione e l'estensione da usare e # salvarlo nel file di configurazione. Salva i dati in # ~ / Libreria / Supporto applicazione / Dropzone / Dati destinazione / CompressFiles.txt # # # Imposta la stringa di ritorno predefinita sulla condizione di errore. # result = "Scusa, hai annullato." # # Richiedi la larghezza del grafico. # button1, width = '. / CocoaDialog standard-inputbox --title "Comprimi file: larghezza grafica" --e --informative-text "Che larghezza?"' .split ("\ n") # # Verifica se l'utente cancellato. Non continuare se si annulla. # if button1! = "2" # # Chiedi il tipo di file grafico con cui finire. # button2, extnum = '. / CocoaDialog dropdown --title "Comprimi i file: formato grafico" --text "What Graphic Format?" --items ".jpg" ".png" ".gif" --button1 "Ok" --button2 "Annulla" '. split ("\ n") # # Vedi se l'utente ha cancellato. Non continuare se si annulla. # if button2! = "2" # # Cambia il numero del dropdown in una stringa. # case extnum.to_i quando 0 ext = ".jpg" quando 1 ext = ".png" quando 2 ext = ".gif" end # # Assicurarsi che la directory dei dati esista. # dataDir = File.expand_path ("~ / Libreria / Supporto applicazione / Dropzone / Dati destinazione /") if! File.directory?(dataDir) # # La directory non esiste! Crealo! # FileUtils.mkdir_p (dataDir) end # # Scrivi il file di dati. Non aggiungere, ma cancellare e scrivere nuovi! # File.open ("# dataDir /CompressFiles.txt", 'w') | file | file.write ("Size: # width \ nExt: # ext") # # Indica all'utente impostando la stringa di ritorno su ciò che l'utente ha dato. # result = "Dimensione: # larghezza px, Est: # ext" end end # # Indica all'utente che è stato eseguito. # $ dz.finish (result) # # Termina il protocal dropzone. Se vuoi un URL negli appunti, passalo qui. Se vuoi solo copiare il testo negli appunti, usa invece $ dz.text (). # Sia $ dz.url () o $ dz.text () deve essere l'ultima cosa nel metodo cliccato. # $ dz.url (falso) fine

Il cliccato la funzione utilizza semplicemente il programma esterno CocoaDialog per ottenere l'obiettivo di larghezza dell'immagine e quindi di nuovo per l'estensione da utilizzare. CocoaDialog è incluso in Dropzone, ma puoi scaricarlo e utilizzarlo anche nei tuoi script.

Una volta che le informazioni sono state ottenute dall'utente, viene creata la directory defaults se non esiste e le preferenze memorizzate lì in un file di dati chiamato CompressFiles.txt. Il trascinato la funzione legge questo file.

Infine, le preferenze vengono restituite all'utente utilizzando il $ Dz.finish () funzione e chiamando il dz.url () funzione per terminare il processo.

analisi

Se si apre il terminale al ~ / Libreria / Supporto applicazioni / Dropzone / Script di destinazione / directory, vedrai una sottodirectory chiamata lib. Vai a quella directory e puoi testare il bersaglio. Digitando:

ruby runner.rb CompressImage.dropzone ha fatto clic

Puoi testare la funzione cliccata della destinazione. Allo stesso modo, puoi digitare:

ruby runner.rb CompressImage.dropzone trascinato 

Questo eseguirà la funzione trascinata con il file. È necessario premere più volte il tasto Invio per completare l'intero processo. Se posizioni mette chiamate di funzione nel codice per visualizzare valori variabili, è possibile utilizzarlo per eseguire il debug del codice.

È anche possibile vedere l'output di una destinazione corrente premendo Shift-Command-D nel menu a discesa Dropzone. Dropzone mostrerà quindi il Console di uscita questo mostrerà tutto ciò che lo script di destinazione emette. Una comoda funzione di debug.

Nel futuro

Dropzone viene attivamente sviluppato e altri programmatori stanno creando file di destinazione. Puoi visualizzare le destinazioni alternative qui o inserire l'account GitHub di Dropzone, aggiungere il tuo file di destinazione e dare una richiesta di pull.

Menu a discesa Dropzone

L'autore, John Winter, mi ha detto che la nuova versione uscirà tra qualche mese. Puoi avere un'anteprima sneek della precedente versione 3.0! La versione 3.0 presenterà alcuni miglioramenti nell'API e le espansioni nell'interfaccia utente.

Conclusione

Spero che questa destinazione ti piaccia tanto quanto me. Lo sto usando tutti i giorni nei miei lavori. Ora puoi fare le basi qui e sperimentare con le tue. Se crei una nuova destinazione, condividila nei commenti qui sotto.