#!/usr/bin/env ruby # # $Id: ompload 226 2007-10-31 03:07:43Z brenden $ # # Copyright 2007 David Shakaryan # Copyright 2007 Brenden Matthews # # Distributed under the terms of the GNU General Public License v3 # require 'tempfile' argv = Array.new quiet = 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|--queit/ quiet = 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 ' -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 = 15 old_poop = Time.now - wait new_poop = Time.now Url = 'http://omploader.org/' used_stdin = false argv.each do |arg| if stdin.nil? and !used_stdin and !File.exists?(arg) $stderr.puts "Invalid argument '#{arg}': file does not exist" errors += 1 next end # no more than 1 every 15 seconds is common courtesy turd = new_poop - old_poop if turd < wait puts 'Sleeping for ' + (wait - turd).to_s if !quiet sleep(wait - turd) end old_poop = new_poop tmp = Tempfile.new(filename) if !stdin.nil? and !used_stdin # upload from stdin puts "Progress for '#{arg}'" if !quiet if quiet 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 if quiet %x{curl -s -F file1=@"#{arg}" #{Url}upload -o '#{tmp.path}'} else %x{curl -# -F file1=@"#{arg}" #{Url}upload -o '#{tmp.path}'} end end if !File.size?(tmp.path) $stderr.puts "Error omploading '#{arg}'" errors += 1 new_poop = Time.now 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 elsif output =~ /Slow down there, cowboy\./ wait += 5 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 new_poop = Time.now end if !quiet if errors < 1 puts "Success." else puts "Finished with #{errors} errors." end end