blob: d639f3c72a96a6c8f5218939e84c9c7d46f2c373 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
#!/usr/bin/env ruby
#
# Copyright 2007-2009 David Shakaryan <omp@gentoo.org>
# Copyright 2007-2009 Brenden Matthews <brenden@rty.ca>
#
# 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: <a href="v([A-Za-z0-9+\/]+)">/
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
|