about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--projects/mongrel_upload_progress/Rakefile2
-rw-r--r--projects/mongrel_upload_progress/lib/mongrel_upload_progress/init.rb40
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