#!/usr/bin/env ruby # # Copyright 2007-2009 David Shakaryan # Copyright 2007-2009 Brenden Matthews # # Distributed under the terms of the GNU General Public License v3 # require 'tempfile' argv = Array.new quiet = false url_only = false help = false skip = false filename = 'pasta' $stdin.fcntl(4, File::NONBLOCK) stdin = $stdin.read if !$stdin.eof unless stdin.nil? argv << '' end ARGV.each_index do |i| if skip skip = false next end if ARGV[i] =~ /-q|--quiet/ quiet = true elsif ARGV[i] =~ /-u|--url/ url_only = true elsif ARGV[i] =~ /-h|--help/ help = true elsif ARGV[i] =~ /-f|--filename/ filename = ARGV[i + 1] skip = true else argv << ARGV[i] end end nocurl = false curl = %x{curl --version 2> /dev/null} if curl.empty? nocurl = true $stderr.puts 'Error: curl missing or not in path. Cannot continue.' $stderr.puts end if (ARGV.size < 1 and (stdin.nil? or stdin.empty?)) or help or nocurl $stderr.puts 'Usage: ompload [-h|--help] [options] [file(s)]' $stderr.puts ' -q, --quiet Only output errors and warnings' $stderr.puts ' -u, --url Only output URL when finished' $stderr.puts ' -f, --filename Filename to use when posting data' $stderr.puts ' from stdin' $stderr.puts $stderr.puts ' You can supply a list of files or data via stdin (or both)' $stderr.puts $stderr.puts ' This script requires a copy of cURL in the path.' Process.exit end errors = 0 wait = 5 Url = 'http://omploader.org/' Max_size = 2**30 used_stdin = false first = true argv.each do |arg| if stdin.nil? and !used_stdin and !File.file?(arg) $stderr.puts "Invalid argument '#{arg}': file does not exist (or is not a regular file)." errors += 1 next elsif File.size(arg) > Max_size $stderr.puts "Error omploading '#{arg}': file exceeds " + (Max_size).to_s + " bytes (size was " + File.size(arg).to_s + ")." errors += 1 next end if !first # try not to hammer the server puts 'Sleeping for ' + wait.to_s + 's' if !quiet and !url_only sleep(wait) else first = false end tmp = Tempfile.new(filename) if !stdin.nil? and !used_stdin # upload from stdin puts "Progress for '#{arg}'" if !quiet and !url_only if quiet or url_only p = IO.popen("curl -s -F 'file1=@-;filename=\"#{filename}\"' #{Url}upload -o '#{tmp.path}'", "w+") else p = IO.popen("curl -# -F 'file1=@-;filename=\"#{filename}\"' #{Url}upload -o '#{tmp.path}'", "w+") end p.puts stdin p.close_write Process.wait used_stdin = true else # upload file puts "Progress for '#{arg}'" if !quiet and !url_only # escape quotes tmp_path = arg.gsub('"', '\"') if quiet or url_only %x{curl -s -F file1=@"#{tmp_path}" #{Url}upload -o '#{tmp.path}'} else %x{curl -# -F file1=@"#{tmp_path}" #{Url}upload -o '#{tmp.path}'} end end if !File.size?(tmp.path) $stderr.puts "Error omploading '#{arg}'" errors += 1 next end output = IO.read(tmp.path) # parse for an ID if output =~ /View file: / id = $1 puts "Omploaded '#{arg}' to #{Url}v#{id}" if !quiet wait = 5 elsif output =~ /Slow down there, cowboy\./ wait += 60 argv << arg $stderr.puts "Got throttled when trying to ompload '#{arg}'" $stderr.puts "Increasing wait and attempting to continue..." errors += 1 else $stderr.puts "Error omploading '#{arg}'" errors += 1 end end if !quiet and !url_only if errors < 1 puts "Success." else puts "Finished with #{errors} errors." end end