diff options
-rw-r--r-- | projects/mongrel_upload_progress/Rakefile | 2 | ||||
-rw-r--r-- | projects/mongrel_upload_progress/lib/mongrel_upload_progress/init.rb | 40 |
2 files changed, 17 insertions, 25 deletions
diff --git a/projects/mongrel_upload_progress/Rakefile b/projects/mongrel_upload_progress/Rakefile index 516c3f2..e451fb4 100644 --- a/projects/mongrel_upload_progress/Rakefile +++ b/projects/mongrel_upload_progress/Rakefile @@ -15,7 +15,7 @@ setup_rdoc ['README', 'LICENSE', 'COPYING', 'lib/**/*.rb', 'doc/**/*.rdoc'] desc "Does a full compile, test run" task :default => [:test, :package] -version="0.2" +version="0.2.1" name="mongrel_upload_progress" setup_gem(name, version) do |spec| diff --git a/projects/mongrel_upload_progress/lib/mongrel_upload_progress/init.rb b/projects/mongrel_upload_progress/lib/mongrel_upload_progress/init.rb index 411f2b1..85e572f 100644 --- a/projects/mongrel_upload_progress/lib/mongrel_upload_progress/init.rb +++ b/projects/mongrel_upload_progress/lib/mongrel_upload_progress/init.rb @@ -36,15 +36,11 @@ class Upload < GemPlugin::Plugin "/handlers" params[Mongrel::Const::REQUEST_METHOD] == 'POST' && upload_id = Mongrel::HttpRequest.query_parse(params['QUERY_STRING'])['upload_id'] if action == :mark - last_checked_time = instance_variable_get(checked_var(upload_id)) rescue nil + last_checked_time = Mongrel::Uploads.last_checked(upload_id) return unless last_checked_time && Time.now - last_checked_time > @frequency end - return unless Mongrel::Uploads.send(action, upload_id, *args) - instance_variable_set(checked_var(upload_id), (action == :finish ? nil : Time.now)) - end - - def checked_var(key) - key && "@checked_#{key}" + Mongrel::Uploads.send(action, upload_id, *args) + Mongrel::Uploads.update_checked_time(upload_id) unless action == :finish end end @@ -57,42 +53,38 @@ class Mongrel::UploadProgress end def check(upid) - puts "#{upid}: Checking" if @debug - instance_variable_get(upload_var(upid)) rescue nil + @counters[upid].last rescue nil + end + + def last_checked(upid) + @counters[upid].first rescue nil + end + + def update_checked_time(upid) + @guard.synchronize { @counters[upid][0] = Time.now } end def add(upid, size) @guard.synchronize do - @counters[upid] = Time.now - instance_variable_set(upload_var(upid), {:size => size, :received => 0}) + @counters[upid] = [Time.now, {:size => size, :received => 0}] puts "#{upid}: Added" if @debug end - true - rescue NameError # bad upid instance var - puts $!.message - @guard.synchronize { @counters[upid] = nil } end def mark(upid, len) + return unless status = check(upid) puts "#{upid}: Marking" if @debug - status = check(upid) - status[:received] = status[:size] - len if status + @guard.synchronize { status[:received] = status[:size] - len } end def finish(upid) @guard.synchronize do puts "#{upid}: Finished" if @debug - instance_variable_set(upload_var(upid), nil) if @counters.delete(upid) + @counters.delete(upid) end - true end def list @counters.keys.sort end - - private - def upload_var(key) - key && "@upload_#{key}" - end end
\ No newline at end of file |