wistia-uploader 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/bin/wistia-uploader +61 -19
- data/lib/wistia-uploader.rb +49 -20
- data/wistia-uploader.gemspec +2 -2
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.4
|
data/bin/wistia-uploader
CHANGED
@@ -75,7 +75,7 @@ end.parse!
|
|
75
75
|
# If there's anything left in ARGV after options parsing, assume it's a path
|
76
76
|
# to a media file.
|
77
77
|
if ARGV[0]
|
78
|
-
options[:media_file] = ARGV
|
78
|
+
options[:media_file] = ARGV
|
79
79
|
end
|
80
80
|
|
81
81
|
# Load defaults from ~/.wistia.conf, if present. Only valid loadable options
|
@@ -107,30 +107,72 @@ unless options.keys.to_set.superset?(required)
|
|
107
107
|
end
|
108
108
|
|
109
109
|
# Ok, time to upload!
|
110
|
-
$stdout.write("Uploading '#{options[:media_file]}' ...") if !options[:quiet]
|
111
|
-
$stdout.flush
|
112
110
|
begin
|
113
|
-
|
114
|
-
|
111
|
+
|
112
|
+
if options[:media_file].is_a? Array
|
113
|
+
paths = options[:media_file]
|
114
|
+
# NOTE: Ignoring media name for multiple files!
|
115
|
+
if paths.length > 1
|
116
|
+
options[:media_name] = nil
|
117
|
+
end
|
118
|
+
else
|
119
|
+
paths = [options[:media_file]]
|
115
120
|
end
|
116
121
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
122
|
+
paths.each do |local_media|
|
123
|
+
|
124
|
+
puts "Uploading '#{local_media}'..." if !options[:quiet]
|
125
|
+
# Find the proper expansion of the path.
|
126
|
+
unless File.exists?(local_media) && !File.directory?(local_media)
|
127
|
+
puts "Detected possible shell glob. Computing paths."
|
128
|
+
paths = Dir.glob local_media
|
129
|
+
exit
|
130
|
+
end
|
121
131
|
|
122
|
-
|
132
|
+
unless File.exists? local_media
|
133
|
+
puts "ERROR: The file '#{local_media}' doesn't seem to exist."
|
134
|
+
exit
|
135
|
+
end
|
123
136
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
puts " bytes: #{data['filesize']}"
|
128
|
-
puts " md5: #{data['md5']}"
|
129
|
-
end
|
137
|
+
thread = WistiaUploader.upload_media(
|
138
|
+
options[:api_password], options[:project_id],
|
139
|
+
local_media, options[:media_name], options[:contact_id])
|
130
140
|
|
131
|
-
|
132
|
-
|
133
|
-
|
141
|
+
$stdout.sync
|
142
|
+
|
143
|
+
phases = ["-", "\\", "|", "/"]
|
144
|
+
phase = 0
|
145
|
+
while (!thread[:upload_status])
|
146
|
+
if thread[:progress] == nil
|
147
|
+
comp = 0
|
148
|
+
else
|
149
|
+
comp = (thread[:progress] * 50).round
|
150
|
+
end
|
151
|
+
if thread[:samples] && (thread[:samples].length > 0)
|
152
|
+
bps = (thread[:samples].inject{|sum,x| sum + x[0] }) / thread[:samples].length
|
153
|
+
else
|
154
|
+
bps = 0.0
|
155
|
+
end
|
156
|
+
unless options[:quiet]
|
157
|
+
$stdout.write("\r")
|
158
|
+
$stdout.write(" #{'%3d' % (2*comp)}% [#{'=' * comp}>#{' ' * (50 - comp)}] #{phases[phase]} #{thread[:last_pos]} bytes")
|
159
|
+
end
|
160
|
+
phase = (phase + 1) % 4
|
161
|
+
sleep 0.2
|
162
|
+
end
|
163
|
+
$stdout.write("\n") unless options[:quiet]
|
164
|
+
|
165
|
+
if thread[:upload_status] == :success
|
166
|
+
data = JSON.parse(thread[:body])
|
167
|
+
# Pretty-print the resultant media details.
|
168
|
+
puts " Media (id:#{data['id']}) successfully created." unless options[:quiet]
|
169
|
+
# Spit out the JSON data returned from wistia.
|
170
|
+
puts data if options[:json]
|
171
|
+
else
|
172
|
+
# Error state.
|
173
|
+
puts "An error occurred during upload!" unless options[:quiet]
|
174
|
+
exit 1
|
175
|
+
end
|
134
176
|
end
|
135
177
|
rescue
|
136
178
|
puts "ERROR! Upload failed. Msg: #{$!}"
|
data/lib/wistia-uploader.rb
CHANGED
@@ -3,6 +3,21 @@ require 'net/http/post/multipart'
|
|
3
3
|
|
4
4
|
UPLOAD_URL = "https://upload.wistia.com/"
|
5
5
|
|
6
|
+
# Hacktacular mostly-accurate patch for upload monitoring.
|
7
|
+
class WFile < File
|
8
|
+
def set_thread(thread)
|
9
|
+
@thread = thread
|
10
|
+
end
|
11
|
+
def read(*args)
|
12
|
+
if @thread
|
13
|
+
@thread[:progress] = ((1.0 * self.pos()) / self.size()).round(2)
|
14
|
+
@thread[:last_pos] = self.pos()
|
15
|
+
end
|
16
|
+
super(*args)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
6
21
|
class WistiaUploader
|
7
22
|
|
8
23
|
def self.upload_media(api_pass, project, file, name=nil, contact=nil)
|
@@ -10,34 +25,48 @@ class WistiaUploader
|
|
10
25
|
params[:contact_id] = contact if contact
|
11
26
|
params[:name] = name if name
|
12
27
|
|
13
|
-
|
14
|
-
return body
|
28
|
+
return self.post_file_to_wistia('', params, file)
|
15
29
|
end
|
16
30
|
|
17
31
|
def self.post_file_to_wistia(path, data, file, timeout=nil)
|
18
|
-
|
32
|
+
Thread.new do
|
33
|
+
thread = Thread.current
|
34
|
+
thread[:progress] = 0.0
|
35
|
+
thread[:last_pos] = 0
|
19
36
|
|
20
|
-
|
21
|
-
data.reject! { |k,v| (v == nil) || v.empty? }
|
37
|
+
uri = URI(UPLOAD_URL + path)
|
22
38
|
|
23
|
-
|
24
|
-
|
39
|
+
# Sanitize the params hash.
|
40
|
+
data.reject! { |k,v| (v == nil) || v.empty? }
|
25
41
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
42
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
43
|
+
http.use_ssl = true if (uri.scheme == 'https')
|
44
|
+
|
45
|
+
# Set the connection timeouts, if specified
|
46
|
+
if timeout
|
47
|
+
http.ssl_timeout = 10
|
48
|
+
http.open_timeout = 10
|
49
|
+
http.read_timeout = 10
|
50
|
+
end
|
51
|
+
|
52
|
+
media = WFile.open(file)
|
53
|
+
media.set_thread(thread)
|
32
54
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
media.close
|
55
|
+
req = Net::HTTP::Post::Multipart.new uri.request_uri, data.merge({
|
56
|
+
'file' => UploadIO.new(media, 'application/octet-stream', File.basename(file))
|
57
|
+
})
|
58
|
+
res = http.request(req)
|
59
|
+
media.close
|
39
60
|
|
40
|
-
|
61
|
+
thread[:code] = res.code
|
62
|
+
thread[:body] = res.body
|
63
|
+
|
64
|
+
if res.code == '200'
|
65
|
+
thread[:upload_status] = :success
|
66
|
+
else
|
67
|
+
thread[:upload_status] = :failed
|
68
|
+
end
|
69
|
+
end
|
41
70
|
end
|
42
71
|
|
43
72
|
end
|
data/wistia-uploader.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "wistia-uploader"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jason Lawrence"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-12-06"
|
13
13
|
s.description = "A simple CLI uploader for Wistia users."
|
14
14
|
s.email = "jason@wistia.com"
|
15
15
|
s.executables = ["wistia-uploader"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wistia-uploader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -143,7 +143,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
143
|
version: '0'
|
144
144
|
segments:
|
145
145
|
- 0
|
146
|
-
hash:
|
146
|
+
hash: 3095705562316825160
|
147
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
148
|
none: false
|
149
149
|
requirements:
|