Skrivningsdestinationer för Dropzone

Dropzone är inte bara en annan FTP-uppladdningsklient, utan en bra verktyg för hantering av filer och text. Dropzone är en samling destinationer som kan ha två typer av åtgärder: dra och släpp åtgärd och / eller a klicka på åtgärd. Det finns många förprogrammerade destinationer att använda, men du kan också skriva dina egna destinationer i Ruby!

Introducerar Dropzone


Dropzone Dropdown-menyn

När du startar Dropzone lägger den en ny menyradik på toppen av skärmen. När du klickar på den, exponerar den alla destinationer du har konfigurerat. Det här droppområdet kan ha så många destinationer som du vill konfigurera. Filer eller text kan släppas på dessa mål eller du kan klicka på dem för att göra klickåtgärden.


Dropzone Cirklar

När du flyttar musen längst till vänster eller höger beroende på konfigurationen visas Dropzone-cirklarna. Du kan ha högst fem olika destinationer i cirklarna. Du kan dra filer till dessa målkretsar för att utföra åtgärden på dem, eller dra filer till menyfältet för samma effekt. Dropzone ger en bra indikator på åtgärdens framsteg.


Dropzone Dropdown-menyn: Välja inställningar

För att konfigurera dina olika destinationer, klicka bara på menyraden och välj Inställningar ... .


Dialogrutan Dropzone Destinations

Dialogrutan Inställningar öppnas för listan över destinationer. Här kan nya destinationer skapas, och gamla destinationer kan redigeras eller raderas.

Standardåtgärderna du kan använda är:

  • Flytta filer
  • Amazon S3
  • Kopiera filer
  • Kopiera filer
  • Kopiera filer
  • Image Shack
  • Installera programmet
  • Öppna applikation
  • Spara text
  • Dela text
  • TwitPic

Du kan också ladda ner många andra från deras hemsida också.

En destination är helt enkelt en enda fil med Ruby-kod med förlängningen ändrad till .dropzone istället för .rb. Därför kan alla med lite kunskap om Ruby skapa sina egna destinationer och dela dem med andra.


Dialogrutan Dropzone-inställning

De Inställningsdialog låter dig slå på cirklarna, välj cirklarna till vänster eller höger på skärmen och redigera de åtgärder du har laddat in i ditt system. Om du redigerar en åtgärd ringer du enkelt standardtextredigeraren för att redigera destinationsfilen.

Tips: Alla destinationsfiler finns på ~ / Bibliotek / Application Support / Dropzone / Destination Scripts /. Eventuella ändringar som du gör till en fil där används direkt. Därför kan du helt enkelt skapa filer där för att installera dem som giltiga handlingar i dialogrutan. När du dubbelklickar på någon Dropzone-destination, kopieras den helt enkelt till den här katalogen.

Komprimera / Konvertera bilddestination

Jag jobbar med bilder för handledning och blogginlägg hela tiden. Jag måste alltid göra dem mindre och skala ner dem till en mer genomförbar storlek. Det kan vara tidskrävande och tråkigt. Men, automatisering är vad Dropzone handlar om. Ett bra exempel destination skulle vara en för att ta emot bildfiler och konvertera dem medan du sparar originalet i en säkerhetskatalog.

Om du är ny på Ruby och skulle vilja lära dig mer om det, bör du kolla in The Fundamentals of Ruby Course på Tuts+.

Tips: I nedladdningslipset för den här lektionen lägger jag in ett Alfred Workflow för visning av Dropzone Destination Scripts katalog.

För att starta, skapa en fil i katalogen Dropzone-skript som heter CompressImage.dropzone. Alla Dropzone-destinationsskript startar med en rubrik. Denna rubrik berättar Dropzone hur man interagerar med den här destinationen. I den skapade filen placerar du följande text:

 #! / usr / bin / ruby ​​# Dropzone Destinationsinfo # Namn: Komprimera bild # Beskrivning: Den här destinationen är för komprimering av bilderna. Du måste ha imagemagick library (http://www.imagemagick.org/script/index.php) installerat. Det är bäst att installera från HomeBrew (http://brew.sh/). # Handtag: NSFilenamesPboardType # Händelser: Clicked, Dragged # Skapare: Richard Guay  # URL: http://customct.com # IconURL: http://www.customct.com/images/CompressFile.png

Den första raden är standarden sha-bang för ett rubin script. Efter sha-bang, Det finns ett kommentarblock som innehåller den information som krävs för att Dropzone ska kunna använda destinationen. Alla dessa fält måste vara i varje destinationsfil. De olika fälten är:

namn

namn helt enkelt är det namn du vill ha Dropzone för att visa användaren i handlingslistan. Det är bäst att inte kalla detta en destination här, men ha ett namn som exakt beskriver den åtgärd som utförs.

Beskrivning

Beskrivning visas texten som visas för åtgärden. Dropzone visar bara två linjer. Den här är för stor för att ses helt inuti dialogrutan. Men användaren kommer att se det och kan titta på destinationsfilen för att se hela saken. Det finns för närvarande inget bättre ställe att dokumentera några saker om destinationen.

handtag

handtag beskriver vilka typer av åtgärder som destinationen ska ta. De två möjligheterna är NSFilenamesPboardType och NSStringPboardType.

De NSFilenamesPboardType berättar Dropzone att du bara tar hela systemfilerna. De NSStringPboardType berättar Dropzone att du bara tar strängar. Om du listar båda med ett komma, skickar Dropzone dig båda typerna. Inom destinationskoden kan du kontrollera miljövariabeln ENV [ 'DRAGGED_TYPE'] för att se vilken typ som skickades till destinationen. För denna destination, bara NSFilenamesPboardType behövs eftersom endast filer bearbetas.

evenemang

evenemang berättar Dropzone vilken typ av händelser destinationen kan hantera. Det finns bara två händelser: släpade och klickade. en släpade händelse kommer att tillåta användaren att släppa filer och / eller text på destinationen. en klickade händelse kommer att tillåta destinationen att klicka på för en åtgärd. Denna destination använder båda separerade med ett kommatecken.

Skapare

Skapare berättar Dropzone som författaren till destinationen och deras e-postadress. Detta visas på Destinationsdialog när destinationsåtgärden läggs till i användarens lista över destinationer.

URL

URL ger Dropzone en URL som ska visas för mer information för destinationen. Därför kan författaren tillhandahålla en länk till sin egen webbplats eller en sida på deras hemsida som förklarar hur man använder destinationen. Detta visas också i Destinationsdialog när destinationsåtgärden läggs till i användarens lista över destinationer.

IconURL

IconURL ge Dropzone en URL för att få ikonen att visas för denna destination. Den här ikonen används för cirkelvalszoner och dropdown-menyn i menyn. Den här ikonen ska vara något beskrivande av destinationsåtgärden och borde vara någonstans som är tillgänglig (dvs: det vore bäst om det inte var på ditt personliga system med en DynDNS som pekar på den. Det kanske inte är lättillgängligt. Public Dropbox länken skulle fungera. Det är så länge det inte raderas!). Här har jag ikonen på min hemsida för nedladdning till Dropzone.

Destination Action Functions

Destinationen måste definiera en funktion för varje åtgärd som anges som användbar för destinationen. Denna destination kommer att använda båda: släpade handling i släpade funktion för bearbetning av filer, och klickade handling i klickade funktion för att få inställningar för den destination som ska användas. Den här destinationen måste ha den grafiska målbredden och tilläggstypen som ska användas i konverteringsprocessen.

De släpade funktionen är först. Lägg till följande i destinationsfilen:

 kräva "fileutils" def dragg # # Slå på bestämt läge. # $ dz.determinate (true) # # Ange standard retursträng till ett fel. # result = "Du måste ställa in standardvärdena först!" # # Hämta data värdena. # dataDir = File.expand_path ("~ / Library / Application Support / Dropzone / Destination Data /") om File.directory?(dataDir) # # får standardinställningarna. # $ defaults = IO.readlines ("# dataDir /CompressFiles.txt") $ size = $ standardvärden [0] .split (":") [1] .strip $ ext = $ standardvärden [1] .split ":") [1] .strip # # Bearbeta varje bildfil. # total = $ items.count # # Berätta dropzone för att starta ... # $ dz.begin ("Starta komprimera # total bilder ...") # # Skapa den tillfälliga katalogen för originalen. # tmpDir = File.dirname ($ items [0]) + "/ tmp /" om! File.directory?(tmpDir) # # Directory existerar inte! Skapa det! # FileUtils.mkdir_p (tmpDir) end # # Index över alla givna bilder. # för index i 0 ... totalt # # Kopiera originalet till tmp-katalogen. Rsync skulle vara den föredragna # metoden, men det klarar upp procentgrafen i användargränssnittet. # # Rsync.do_copy ($ items [index], tmpDir, false) # FileUtils.copy_file ($ items [index], "# tmpDir # Fil.basename ($ items [index])") #) Skapa det nya filnamnet med tillägget som tillhandahålls av användaren. # $ newFilePath = "# $ items [index] .chomp (File.extname ($ items [index])) # $ ext" # # Konvertera bildfilen. # output = '/ usr / local / bin / convert -background white -quality 90% -alfabakgrund -alpha off + dither -colors 256 -flatten -transparent none -resize # $ size \ "# $ items [index ] \ "\" # $ newFilePath \ ";" # # Om konverteringen inte förstör originalen, ta sedan bort originalet. # if File.extname ($ items [index])! = $ ext File.delete ($ items [index]) slutet # # Berätta Dropzone vilken procentandel är klar. # $ dz.percent ((((index + 1) * 100) / totalt) .to_i) slutet # # Ställ in resultatsträngen för att slutföra. # result = "Färdig komprimering." slutet # # Berätta för användaren att den är klar. # $ dz.finish (result) # # Avsluta dropzone protokal. Om du vill ha en url i urklippet, skicka den # här. Om du bara vill kopiera text till Urklipp, använd $ dz.text () istället. # Endera $ dz.url () eller $ dz.text () måste vara det sista i den slagna metoden. # $ dz.url (falskt) slut

Det första objektet deklarerar några bibliotek som behövs för destinationen. Här, den fileutils bibliotek behövs för att flytta filer runt. Programförfattaren rekommenderar att du använder rsync bibliotek som är förinstallerat i Dropzone, men det har en bieffekt att återställa progressionsfältet varje gång det heter. Författaren till Dropzone sa att den effekten kan väljas till eller från i nästa version av Dropzone.

De rsync biblioteket kommer att fråga användaren om en fil redan finns där en flyttas eller om högre behörigheter krävs. De fileutils biblioteket kommer inte och bara ge ett fel. Därför använder du fileutils biblioteket kräver mer försiktighet.

De släpade funktion först berättar Dropzone att denna åtgärd kommer att ta en bestämd tid. De $ Dz.determinate (true) funktionen utför detta. Om du laddar upp till Internet eller något liknande, skulle du ställa in det här falsk. Om den är inställd på falsk, Progressmätaren visar bara en rullningseffekt över hela dialogrutan istället för att försöka visa framsteg.

Därefter ställs resultatsträngen till ett standardvärde för visning till användaren. Om nästa om då uttalandet är falsk, då kommer det att visas.

De dATADIR är inställd på den fullständiga adressen till den datakatalog som ska användas för att lagra standardvärdena för den destination som ska användas. Om den katalogen finns, läses standardvärdena för grafisk bredd och förlängningen för att ge grafiken. Annars berättas användaren att ställa in inställningarna först.

Tips: Nästa version av Dropzone kommer att ha ett API för att arbeta med en datakatalog.

De $ objekt array är listan över filer som ges till dropzone i en dragåtgärd. Detta är en standard Ruby array och ställs in av Dropzone-programmet innan du ringer till destinationsskript.

De $ Dz.begin () funktionen måste ringas för att visa framdriftsfältet med texten som skickas till funktionen. Om den här funktionen inte kallas visas inte framdriftsfältet och Dropzone vet inte vilket tillstånd det är i.

Därefter tmp katalog skapas i katalogen som innehåller den ursprungliga grafiken. Den ursprungliga grafiken kopieras här innan någon åtgärd tas på dem för att trycka på den ursprungliga grafiken om användaren inte gillar resultatet.

De för ... slutet block används för att slinga över varje grafisk fil i $ objekt array. Den faktiska konverteringen görs med ImageMagick-bibliotekets konverteringsfunktion. Eftersom detta inte är ett standardbibliotek som laddas i Mac OS X-systemet måste användaren av destinationen installera den. Den bästa lösningen är att installera Home Brew och använd kommandot brygga installera imagemagick för att installera biblioteket. Det är lätt att göra och ger mycket bättre resultat än att försöka kompilera och installera det själv!

Efter att ha utfört grafisk konvertering och komprimering behöver framdriftsmätaren uppdateras. Det är vad $ Dz.percent () gör. Du beräknar det heltal som slutförts. Värdet ska vara mellan 0 och 100.

När slingan är färdig, resultat strängen är inställd på ett beskrivande meddelande som skickas till användaren med $ Dz.finish (). Därefter $ Dz.url () eller $ Dz.text () funktioner måste ringas De $ Dz.url () kan vara heller falsk eller en korrekt URL-sträng som ska skickas till användaren och visas i en webbläsare. De $ Dz.text () är densamma, förutom att texten som ges är skickad direkt till urklippet (eller kartong). En av dessa funktioner måste ringas innan du lämnar eller Dropzone vet inte om destinationen är klar.

Därefter klickade funktionen definieras. Du kan lägga till den här koden i skriptet:

 def klickade # # Den klickade hanteraren ska få storlek och tillägg att använda och # spara det i konfigurationsfilen. Spara data i # ~ / Bibliotek / Application Support / Dropzone / Destination Data / CompressFiles.txt # # # Ställ in standard retursträng till felet. # result = "Ursäkta, du avbokade." # # Begär bredden på grafiken. # button1, width = '. / CocoaDialog standard-inputbox - title "Komprimera filer: Grafisk bredd" --e -informativ-text "Vilken bredd?" .split ("\ n") # # Se om användaren avbruten. Fortsätt inte om de avbryter. # if button1! = "2" # # Begär om den grafiska filtypen slutar med. # button2, extnum = '. / CocoaDialog dropdown --title "Komprimera filer: Grafiskt format" --text "Vad grafiskt format?" --items ".jpg" ".png" ".gif" - knapp1 "Ok" - knapp2 "Avbryt" '. split ("\ n") # # Se om användaren avbröts. Fortsätt inte om de avbryter. # if button2! = "2" # # Ändra rullgardinsnumret till en sträng. # case extnum.to_i när 0 ext = ".jpg" när 1 ext = ".png" när 2 ext = ".gif" slut # # Se till att datakatalogen finns. # dataDir = File.expand_path ("~ / Bibliotek / Application Support / Dropzone / Destination Data /") om! File.directory?(dataDir) # # Directory finns inte! Skapa det! # FileUtils.mkdir_p (dataDir) slut # # Skriv datafilen. Lägg inte till, men ta bort och skriv färskt! # File.open ("# dataDir /CompressFiles.txt", "w") | file | file.write ("Storlek: # width \ nExt: # ext") # # Berätta användaren genom att ställa in retursträngen till vad användaren gav. # result = "Storlek: # width px, Ext: # ext" slutet slutet # # Berätta för användaren att den är klar. # $ dz.finish (result) # # Avsluta dropzone protokal. Om du vill ha en url i urklippet, skicka den # här. Om du bara vill kopiera text till Urklipp, använd $ dz.text () istället. # Endera $ dz.url () eller $ dz.text () måste vara det sista i den klickade metoden. # $ dz.url (falskt) slut

De klickade funktionen använder helt enkelt det externa programmet CocoaDialog för att få breddmålet för grafiken och sedan igen för att förlängningen ska användas. CocoaDialog ingår i Dropzone, men du kan ladda ner och använda den i dina egna skript också.

När informationen har erhållits från användaren skapas standardkatalogen om den inte existerar och inställningarna lagras där i en datafil som heter CompressFiles.txt. De släpade funktionen läser den här filen.

Slutligen echos inställningarna till användaren med hjälp av $ Dz.finish () funktion och ringa dz.url () funktion för att avsluta processen.

Testning

Om du öppnar terminalen till ~ / Bibliotek / Application Support / Dropzone / Destination Scripts / katalog, kommer du att se en underkatalog som heter lib. Gå till den katalogen och du kan testa målet. Genom att skriva:

ruby runner.rb CompressImage.dropzone klickade

Du kan testa destinationens klickade funktion. På samma sätt kan du skriva:

ruby runner.rb CompressImage.dropzone släpade 

Detta kör den slagna funktionen med fil. Du måste trycka på Enter-knappen flera gånger för att komma igenom hela processen. Om du placerar sätter funktionen samtal i koden för att visa variabla värden, du kan använda den för att felsöka din kod.

Du kan även se utmatningen från en kördestination genom att trycka på Skift-kommando-D på Dropzone-menyn. Dropzone visar då Utgångskonsol som visar någonting destinationskriptutgångarna. En praktisk debugging-funktion.

I framtiden

Dropzone utvecklas aktivt och andra programmerare skapar destinationsfiler. Du kan visa alternativa destinationer här eller gaffel Dropzone GitHub-konto, lägg till din destinationsfil och ge en begäran om dragning.

Dropzone Dropdown-menyn

Författaren John Winter berättade för mig att den nya versionen kommer att vara ute om några månader. Du kan få en snygg förhandsgranskning av version 3.0 ovan! Version 3.0 kommer att ha några förbättringar i API: n och utvidgningar till användargränssnittet.

Slutsats

Jag hoppas att du njuter av denna destination så mycket som jag gör. Jag använder det varje dag i mina jobb. Du kan nu ta grunderna här och experimentera med din egen. Om du gör en ny destination, vänligen dela den i kommentarerna nedan.