diff --git a/dropzone/Kindle.dropzone b/dropzone/Kindle.dropzone new file mode 100755 index 0000000..d27f87a --- /dev/null +++ b/dropzone/Kindle.dropzone @@ -0,0 +1,86 @@ +#!/usr/bin/ruby + +# Dropzone Destination Info +# Name: Send to Kindle +# Description: Drop an ebook and it will be converted to MOBI and sent to your Kindle. Hold Option to convert via Amazon service. +# Handles: NSFilenamesPboardType +# Events: Clicked, Dragged +# Creator: Artem Sapegin +# URL: http://sapegin.me +# OptionsNIB: Login +# IconURL: https://raw.github.com/sapegin/dotfiles/master/dropzone/icons/kindle.png +# +# Require: +# - Calibre - http://calibre-ebook.com/download (install command line tools from Calibre’s settings) +# - mutt - brew install mutt --sidebar-patch +# - msmtp - https://gist.github.com/nerab/1410840 - http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/ +# - anytomobi - https://github.com/sapegin/dotfiles/blob/master/bin/anytomobi +# +# Setup: +# - Open Dropzone Kindle destination settings and type your Kindle email in Username field and any string to assword field. + + +require "tmpdir" + + +# http://stackoverflow.com/a/8791484 +def in_tmpdir + path = File.expand_path "#{Dir.tmpdir}/#{Time.now.to_i}#{rand(1000)}/" + FileUtils.mkdir_p path + yield path +ensure + FileUtils.rm_rf(path) if File.exists?(path) +end + + +def dragged + if not ENV["USERNAME"] + $dz.error("Kindle destination not configured", "Open Dropzone Kindle destination settings and type your Kindle email in Username field and any string to assword field.") + exit() + end + + convert_by_amazon = ENV["KEY_MODIFIERS"] == "Option" + + $dz.determinate(false) + + in_tmpdir do |tmp_dir| + for file in $items + filename = File.basename(file) + ext = File.extname(file) + pdf = ext == '.pdf' + + if not pdf and not convert_by_amazon + $dz.begin("Converting #{filename}…") + output = `anytomobi #{file} #{tmp_dir} 2>&1` ; result = $?.success? + if not result + $dz.error("Cannot convert #{filename} to MOBI.", output) + $dz.finish(false) + exit() + end + filename = File.basename(file, ext) + '.mobi' + file = "#{tmp_dir}/#{filename}" + end + + $dz.begin("Sending #{filename}…") + subject = convert_by_amazon ? " -s CONVERT" : "" + output = `echo 'Yay!' | mutt #{subject} -a '#{file}' -- #{ENV['USERNAME']} 2>&1` ; result = $?.success? + if not result + $dz.error("Cannot send #{filename} to Kindle.", output) + $dz.finish(false) + exit() + end + end + end + + $dz.finish("Enjoy reading!") + $dz.url(false) +end + +def clicked + if File.directory?("/Volumes/Kindle") + system("open /Volumes/Kindle/documents/") + else + $dz.error("Kindle not mounted", "Connect your Kindle to computer if you want to open documents folder.") + end + $dz.url(false) +end