dotfiles/dropzone/Kindle.dropzone
2013-02-16 23:24:51 +04:00

87 lines
2.5 KiB
Ruby
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 Calibres 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