Skrive destinasjoner for Dropzone

Dropzone er ikke bare en annen FTP-oppladningsklient, men en stor verktøyplattform for behandling av filer og tekst. Dropzone er en samling av destinasjoner som kan ha to typer handlinger: dra og slipp handling og / eller a klikk på handling. Det er mange forhåndsprogrammerte destinasjoner å bruke, men du kan også skrive dine egne destinasjoner i Ruby!

Introduserer Dropzone


Dropzone Dropdown Menu

Når du starter Dropzone, plasserer det et nytt menylinjeikon øverst på skjermen. Når du klikker på den, avslører den alle destinasjonene du har konfigurert. Dette drop-området kan ha så mange destinasjoner som du vil konfigurere. Filer eller tekst kan slippes på disse målene, eller du kan klikke på dem for å gjøre klikkhandlingen.


Dropzone-sirkler

Når du beveger musen til venstre eller høyre, avhengig av konfigurasjonen din, vises Dropzone-kretsene. Du kan ha maksimalt fem forskjellige destinasjoner i kretsene. Du kan dra filer til disse målkretsene for å utføre handlingen på dem, eller dra filer til rullegardinmenyen for menylinjen for samme effekt. Dropzone gir en fin indikator på fremdriften av handlingen.


Dropzone Dropdown Menu: Velge Innstillinger

For å konfigurere de forskjellige destinasjonene dine, klikk bare på menylinjeikonet og velg Preferanser… .


Dialogboksen Dropzone-destinasjoner

Innstillingsdialogen åpnes til listen over destinasjoner. Her kan nye destinasjoner opprettes, og gamle destinasjoner kan redigeres eller slettes.

Standardhandlinger du kan bruke er:

  • Flytt filer
  • Amazon S3
  • Kopier filer
  • Kopier filer
  • Kopier filer
  • Image Shack
  • Installer program
  • Åpne applikasjon
  • Lagre tekst
  • Del tekst
  • TwitPic

Du kan også laste ned mange andre fra deres nettsted også.

Et mål er ganske enkelt en enkelt fil med Ruby-kode med utvidelsen endret til .droppsone i stedet for .rb. Derfor kan alle med litt kunnskap om Ruby lage sine egne destinasjoner og dele dem med andre.


Dialogboksen Dropzone-innstilling

De Innstillinger Dialog lar deg slå på sirkler, velg sirkler som skal være på venstre eller høyre side av skjermen, og rediger handlingene du har lastet inn i systemet. Ved å redigere en handling kaller du standard tekstredigerer for å redigere destinasjonsfilen.

Tips: Alle destinasjonsfilene er plassert på ~ / Bibliotek / Application Support / Dropzone / Destinasjonsskript /. Eventuelle endringer du lager i en fil, brukes umiddelbart. Derfor kan du bare lage filer der for å installere dem som gyldige handlinger i dialogboksen. Når du dobbeltklikker på et Dropzone-mål, kopieres det bare til denne katalogen.

Komprimer / Konverter bilde destinasjon

Jeg jobber med bilder for opplæring og blogginnlegg hele tiden. Jeg er alltid nødt til å gjøre dem mindre og skalere dem ned til en mer gjennomførbar størrelse. Det kan være tidkrevende og kjedelig. Men, automatisering er hva Dropzone handler om. Et godt eksempel destinasjon ville være en å motta bildefiler og konvertere dem mens du lagrer originalen i en sikkerhetskatalog.

Hvis du er ny til Ruby og ønsker å lære mer om det, bør du sjekke ut The Fundamentals of Ruby course on Tuts+.

Tips: I nedlastingslipset for denne leksjonen legger jeg inn en Alfred Workflow for visning av Dropzone Destinasjonsskript katalog.

For å starte, lager en fil i katalogen Dropzone-skript som heter CompressImage.dropzone. Alle Dropzone destinasjonsskript starter med en header. Denne overskriften forteller Dropzone hvordan du kan samhandle med denne destinasjonen. I filen du oppretter, legger du til følgende tekst:

 #! / usr / bin / ruby ​​# Dropzone Destinasjonsinfo # Navn: Komprimer bilde # Beskrivelse: Dette målet er for å komprimere bildene som er gitt. Du må ha imagemagick biblioteket (http://www.imagemagick.org/script/index.php) installert. Det er best å installere fra HomeBrew (http://brew.sh/). # Håndtak: NSFilenamesPboardType # Hendelser: Clicked, Dragged # Creator: Richard Guay  # URL: http://customct.com # IconURL: http://www.customct.com/images/CompressFile.png

Den første linjen er standarden sha-bang for et rubin skript. Etter sha-bang, Det er en kommentarblokk som inneholder den nødvendige informasjonen for Dropzone å gjøre bruk av destinasjonen. Alle disse feltene må være i hver destinasjonsfil. De forskjellige feltene er:

Navn

Navn Bare det navnet du vil at Dropzone skal vise brukeren i handlingslisten. Det er best å ikke ringe dette til en destinasjon her, men har et navn som nøyaktig beskriver handlingen som utføres.

Beskrivelse

Beskrivelse vises teksten for handlingen. Dropzone viser bare to linjer. Den her er for stor til å bli sett helt inn i dialogboksen. Men brukeren ser det og kan se på destinasjonsfilen for å se hele greia. Det er for øyeblikket ikke noe bedre sted å dokumentere noen ting om destinasjonen.

håndtak

håndtak beskriver hvilke handlinger som destinasjonen vil ta. De to mulighetene er NSFilenamesPboardType og NSStringPboardType.

De NSFilenamesPboardType forteller Dropzone at du bare tar hele systemfilnavnet. De NSStringPboardType forteller Dropzone at du bare tar strenger. Hvis du lister begge med et komma, vil Dropzone sende deg begge typer. Innenfor målkoden kan du sjekke miljøvariabelen ENV [ 'DRAGGED_TYPE'] for å se hvilken type som ble sendt til destinasjonen. For denne destinasjonen er det bare NSFilenamesPboardType er nødvendig fordi bare filer blir bearbeidet.

arrangementer

arrangementer forteller Dropzone hvilken type hendelser målet kan håndtere. Det er bare to hendelser: Dro og klikket. EN Dro hendelsen vil tillate brukeren å slippe filer og / eller tekst på destinasjonen. EN klikket hendelsen vil tillate destinasjonen å bli klikket for en handling. Dette destinasjonen bruker begge deler skilt med komma.

skaperen

skaperen forteller Dropzone som forfatteren av destinasjonen er og deres e-postadresse. Dette vises på Destinasjonsdialog når destinasjonshandlingen er lagt til brukerens liste over destinasjoner.

URL

URL gir Dropzone en URL som skal vises for mer informasjon for destinasjonen. Derfor kan forfatteren gi en lenke til sin egen nettside eller en side på deres nettside som forklarer hvordan du skal bruke destinasjonen. Dette vises også i Destinasjonsdialog når destinasjonshandlingen er lagt til brukerens liste over destinasjoner.

IconURL

IconURL gi Dropzone en URL for å få ikonet til å vises for denne destinasjonen. Dette ikonet brukes til sirkel-dropzones og drop-down drop zones i menyen. Dette ikonet bør være noe beskrivende av målets handling og bør være et sted som er lett tilgjengelig (dvs. det ville være best hvis det ikke var på ditt personlige system med en DynDNS som peker på det. Det er kanskje ikke lett tilgjengelig. offentlig Dropbox-kobling ville fungere. Det er så lenge det ikke er slettet!). Her har jeg ikonet på nettstedet mitt for nedlasting til Dropzone.

Destinasjonshandlingsfunksjoner

Destinasjonen må definere en funksjon for hver handling som er oppført som brukbar med destinasjonen. Denne destinasjonen vil bruke begge: Dro handling i dro funksjon for å behandle filer, og klikket handling i klikket funksjon for å få preferanser for destinasjonen som skal brukes. Dette målet må ha den grafiske målbredden og utvidelsestypen som skal brukes i konverteringsprosessen.

De dro funksjonen er først. Legg til følgende i destinasjonsfilen:

 krever 'fileutils' def dragget # # Slå på determinate modus. # $ dz.determinate (true) # # Angi standard returstrengen til en feil. # result = "Du må angi standardverdiene først!" # # Få dataverdiene. # dataDir = File.expand_path ("~ / Library / Application Support / Dropzone / Destinasjonsdata /") hvis File.directory?(dataDir) # # får standardinnstillingene. # $ defaults = IO.readlines ("# dataDir /CompressFiles.txt") $ size = $ standardinnstillinger [0] .split (":") [1] .strip $ ext = $ defaults [1] .split ":") [1] .strip # # Behandle hver bildefil. # total = $ items.count # # Fortell dropzone for å starte ... # $ dz.begin ("Start komprimering av # total bilder ...") # # Opprett midlertidig katalog for originalene. # tmpDir = File.dirname ($ items [0]) + "/ tmp /" if! File.directory?(tmpDir) # # Directory eksisterer ikke! Lag det! # FileUtils.mkdir_p (tmpDir) end # # Indeks over alle de oppgitte bildene. # for indeks i 0 ... totalt # # Kopier originalen til tmp katalogen. Rsync ville være den foretrukne # metoden, men det ødelegger prosentgrafen på brukergrensesnittet. # # Rsync.do_copy ($ items [index], tmpDir, false) # FileUtils.copy_file ($ elementer [indeks], "# tmpDir # File.basename ($ items [index])") #) Lag det nye filnavnet med utvidelsen levert av brukeren. # $ newFilePath = "# $ items [index] .chomp (File.extname ($ items [index])) # # $ ext" # # Konverter bildefilen. # output = '/ usr / local / bin / convert -background hvit -kvalitet 90% -alfabakgrunn -feil off + dither -colors 256 -flatten -transparent none -resize # $ size \ "# $ items [index ] \ "\" # $ newFilePath \ "; ' # # Hvis konverteringen ikke ødelegger originalen, fjern deretter originalen. # Hvis File.extname ($ items [index])! = $ ext File.delete ($ items [index]) slutt # # Fortell Dropzone hvilken prosentandel er gjort. # $ dz.percent ((((index + 1) * 100) / totalt) .til_i) slutt # # Sett resultatstrengen til slutt. # result = "Ferdig komprimering." slutt # # Fortell brukeren at den er ferdig. # $ dz.finish (result) # # Fullfør dråpeområdet protokal. Hvis du vil ha en URL i utklippstavlen, send den # her. Hvis du bare vil kopiere tekst til utklippstavlen, bruk $ dz.text () i stedet. # Enten $ dz.url () eller $ dz.text () må være den siste i den slepte metoden. # $ dz.url (falsk) slutt

Det første elementet erklærer noen biblioteker som er nødvendig for destinasjonen. Her, den fileutils bibliotek er nødvendig for å flytte filer rundt. Programforfatteren anbefaler at du bruker rsync bibliotek som er forhåndsinstallert i Dropzone, men det har en bivirkning ved å tilbakestille fremdriftslinjen hver gang den kalles. Forfatteren av Dropzone sa at den effekten vil bli valgbar av eller på i neste versjon av Dropzone.

De rsync biblioteket vil spørre brukeren om en fil allerede eksisterer der en blir flyttet eller hvis høyere tillatelser kreves. De fileutils biblioteket vil ikke og bare gi en feil. Derfor bruker du fileutils biblioteket krever mer forsiktighet.

De dro funksjonen først forteller Dropzone at denne handlingen vil ta en bestemt tid. De $ Dz.determinate (true) funksjonen utfører dette. Hvis du laster opp til Internett eller noe lignende, vil du sette dette til falsk. Hvis satt til falsk, fremdriftsmåleren vil bare vise en rullende effekt over hele dialogboksen i stedet for å prøve å vise fremdrift.

Deretter settes resultatstrengen til en standardverdi for visning til brukeren. Hvis neste hvis da erklæringen er falsk, da vil det bli vist.

De dataDir er satt til hele adressen til datakatalogen som skal brukes til lagring av standardverdiene for destinasjonen som skal brukes. Hvis denne katalogen finnes, leses standardverdiene for grafisk bredde og utvidelsen for å gi grafikken. Ellers blir brukeren fortalt å sette inn innstillingene først.

Tips: Den neste versjonen av Dropzone vil ha en API for å jobbe med en datakatalog.

De $ elementer array er listen over filer som er gitt til dropzone i en drag-handling. Dette er en standard Ruby array og er satt av Dropzone-programmet før du ringer målskriptene.

De $ Dz.begin () funksjonen må kalles for å vise fremdriftslinjen med teksten som sendes til funksjonen. Hvis denne funksjonen ikke kalles, vises ikke fremdriftslinjen, og Dropzone vet ikke hvilken tilstand den er i.

Deretter tmp katalog er opprettet i katalogen som inneholder den opprinnelige grafikken. Den opprinnelige grafikken kopieres her før det tas noen handling på dem for å forsyne den opprinnelige grafikken hvis brukeren ikke liker resultatet.

De for ... slutten blokken brukes til å sløyfe over hver grafisk fil i $ elementer array. Den faktiske konverteringen gjøres med ImageMagick-bibliotekets konverteringsfunksjon. Siden dette ikke er et standardbibliotek lastet på Mac OS X-systemet, må brukeren av destinasjonen installere den. Den beste løsningen er å installere Home Brew og bruk kommandoen brygge installasjon imagemagick å installere biblioteket. Det er lett å gjøre og gir mye bedre resultater enn å prøve å kompilere og installere det selv!

Etter å ha utført grafisk konvertering og komprimering, må fremdriftsmåleren oppdateres. Det er hva $ Dz.percent () gjør. Du beregner heltallbeløpet som er fullført. Verdien skal være mellom 0 og 100.

Når sløyfen er ferdig, vil resultat streng er satt til en beskrivende melding som sendes til brukeren ved hjelp av $ Dz.finish (). Etter det, $ Dz.url () eller $ Dz.text () funksjoner må kalles. De $ Dz.url () kan være enten falsk eller en riktig URL-streng som skal sendes til brukeren og vises i en nettleser. De $ Dz.text () er det samme, med unntak av at teksten som er gitt, sendes direkte til utklippstavlen (eller på tavlen). En av disse funksjonene må ringes før du avslutter eller Dropzone vet ikke om målet er ferdig.

Deretter klikket funksjon er definert. Du kan legge til denne koden i skriptet:

 def klikket # # Den klikkte håndtereren skal få størrelsen og utvidelsen å bruke og # lagre den i konfigurasjonsfilen. Lagre data i # ~ / Bibliotek / Programstøtte / Dropzone / Destinasjonsdata / CompressFiles.txt # # # Angi standard returstreng til feiltilstanden. # result = "Beklager, du avbrutt." # # Be om bredden på grafikken. # button1, width = '. / CocoaDialog standard-inputbox --title "Komprimer filer: Grafisk bredde" --e - informativ-tekst "Hvilken bredde?" .split ("\ n") # # Se om brukeren kansellert ut. Ikke fortsett hvis de avbryter. # hvis button1! = "2" # # Be om den grafiske filtypen som skal ende opp med. # button2, extnum = '. / CocoaDialog dropdown --title "Komprimer filer: Grafisk format" - tekst "Hvilket grafisk format?" --items ".jpg" ".png" ".gif" - knapp1 "Ok" - knapp2 "Avbryt" '. split ("\ n") # # Se om brukeren har kansellert. Ikke fortsett hvis de avbryter. # hvis button2! = "2" # # Endre rullegardinnummeret til en streng. # tilfelle extnum.to_i når 0 ext = ".jpg" når 1 ext = ".png" når 2 ext = ".gif" slutt # # Pass på at datakatalogen finnes. # dataDir = File.expand_path ("~ / Library / Application Support / Dropzone / Destinasjonsdata /") hvis! File.directory?(dataDir) # # Directory eksisterer ikke! Lag det! # FileUtils.mkdir_p (dataDir) end # # Skriv datafilen. Ikke legg til, men slett og skriv fersk! # File.open ("# dataDir /CompressFiles.txt", "w") | file | file.write ("Størrelse: # width \ nExt: # ext") # # Fortell brukeren ved å sette returstrengen til hva brukeren ga. # result = "Størrelse: # width px, Ext: # ext" slutten # # Fortell brukeren at den er ferdig. # $ dz.finish (result) # # Fullfør dråpeområdet protokal. Hvis du vil ha en URL i utklippstavlen, send den # her. Hvis du bare vil kopiere tekst til utklippstavlen, bruk $ dz.text () i stedet. # Enten $ dz.url () eller $ dz.text () må være den siste i klikkmetoden. # $ dz.url (falsk) slutt

De klikket funksjon bruker bare det eksterne programmet CocoaDialog for å få bredde målet for grafikken og deretter igjen for utvidelsen å bruke. CocoaDialog er inkludert i Dropzone, men du kan laste ned og bruke den i egne skript også.

Når informasjonen er oppnådd fra brukeren, blir standardkatalogen opprettet hvis den ikke eksisterer og preferansene lagres der i en datafil som heter CompressFiles.txt. De dro funksjonen leser denne filen.

Til slutt ekkoeres preferansene tilbake til brukeren ved hjelp av $ Dz.finish () funksjon og ringe til dz.url () funksjon for å avslutte prosessen.

testing

Hvis du åpner terminalen til ~ / Bibliotek / Application Support / Dropzone / Destinasjonsskript / katalog, vil du se en underkatalog som heter lib. Gå til den katalogen, og du kan teste målet. Ved å skrive:

ruby runner.rb CompressImage.dropzone klikket

Du kan teste den klikkte funksjonen til destinasjonen. På samme måte kan du skrive:

ruby runner.rb CompressImage.dropzone dratt 

Dette vil kjøre den slepte funksjonen med fil. Du må trykke Enter-tasten flere ganger for å komme gjennom hele prosessen. Hvis du plasserer puts funksjonen anrop i koden for å vise variabelverdier, du kan bruke den til å feilsøke koden din.

Du kan også se utgangen av en kjørende destinasjon ved å trykke Skift-Kommando-D på Dropzone-menyen. Dropzone vil da vise Utgangskonsoll som vil vise noe destinasjonsskriptutgangene. En praktisk feilsøkingsfunksjon.

I fremtiden

Dropzone blir aktivt utviklet og andre programmerere lager destinasjonsfiler. Du kan se alternative destinasjoner her eller gaffel Dropzone GitHub-konto, legg til destinasjonsfilen din, og gi en trekkforespørsel.

Dropzone Dropdown Menu

Forfatteren, John Winter, fortalte meg at den nye versjonen vil være ute om noen måneder. Du kan få en sneek forhåndsvisning av versjon 3.0 ovenfor! Versjon 3.0 vil ha noen forbedringer i API og utvidelser til brukergrensesnittet.

Konklusjon

Jeg håper du liker denne destinasjonen så mye som jeg gjør. Jeg bruker det hver dag i jobbene mine. Du kan nå ta det grunnleggende her og eksperimentere med ditt eget. Hvis du lager et nytt reisemål, vennligst del det i kommentarene nedenfor.