87 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			87 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #!/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 |