flickrup 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -28,10 +28,15 @@ class Processor
28
28
 
29
29
  uploader = Uploader.new(@config["api_key"], @config["shared_secret"])
30
30
 
31
- tagged.each { |x|
32
- x.doUpload(uploader)
33
- x.archive(@config["archive_dir"])
34
- }
31
+ if @config[:dryrun]
32
+ logger.info("Would now upload & move #{tagged.length} files, pausing for 5 secs instead")
33
+ sleep 5
34
+ else
35
+ tagged.each { |x|
36
+ x.doUpload(uploader)
37
+ x.archive(@config["archive_dir"])
38
+ }
39
+ end
35
40
 
36
41
  logger.debug("Processed #{tagged.length} valid files")
37
42
 
@@ -18,9 +18,9 @@ require "flickrup/logging"
18
18
  class SlowListener
19
19
  include Logging
20
20
 
21
- IDLE = -1
22
- PROCESSING = 0
23
- CHANGES_QUEUED = 1
21
+ IDLE = 0
22
+ SCHEDULED = 1
23
+ PROCESSING = 2
24
24
 
25
25
  def initialize(config)
26
26
  @wait = config[:timeout]
@@ -33,7 +33,7 @@ class SlowListener
33
33
 
34
34
  def run
35
35
  logger.debug("Watching #{@config['watch_dir']}...")
36
- Listen.to(@config['watch_dir']) do |modified, added, removed|
36
+ Listen.to(@config['watch_dir']) do |modified, added, _|
37
37
  unless modified.empty? && added.empty?
38
38
  on_change
39
39
  end
@@ -42,31 +42,27 @@ class SlowListener
42
42
 
43
43
  def do_upload
44
44
  logger.debug("Checking files for upload")
45
+
46
+ @processing.set PROCESSING
47
+
45
48
  files = Dir["#{@config['watch_dir']}/*.{jpg,JPG,jpeg,JPEG}"]
46
49
 
47
50
  old, new = files.partition { |x| Time.now > File.mtime(x) + @wait }
48
51
 
49
- reschedule = false
52
+ unless new.empty?
53
+ logger.debug("Found #{new.length} new files")
54
+ @processing.set SCHEDULED
55
+ end
50
56
 
51
57
  unless old.empty?
52
58
  logger.debug("Found #{old.length} stable files")
53
- @processing.set PROCESSING
54
59
  @processor.run(old)
55
- changes = @processing.swap IDLE
56
- if changes > 0
57
- logger.debug("Changes occurred while processing")
58
- reschedule = true
59
- end
60
60
  end
61
61
 
62
- unless new.empty?
63
- logger.debug("Found #{new.length} new files")
64
- reschedule = true
65
- end
62
+ @processing.compare_and_swap(PROCESSING,IDLE)
66
63
 
67
- if reschedule
64
+ if @processing.get == SCHEDULED
68
65
  logger.debug("Rescheduling...")
69
- #todo: schedule for latest
70
66
  schedule
71
67
  end
72
68
  end
@@ -74,27 +70,17 @@ class SlowListener
74
70
  def on_change
75
71
  logger.debug("Change detected")
76
72
 
77
- current_state = @processing.get
78
- was_processing = @processing.compare_and_swap(PROCESSING, CHANGES_QUEUED)
79
-
80
- if was_processing
81
- case current_state
82
- when IDLE
83
- on_change #retry
84
- when CHANGES_QUEUED
85
- on_change #retry
86
- when PROCESSING
87
- logger.debug("Scheduling queued") # already queued changes
88
- end
89
- else #wasn't processing
90
- case current_state
91
- when IDLE
92
- schedule
93
- when CHANGES_QUEUED
94
- logger.debug("Scheduling already queued") # already queued changes
95
- when PROCESSING
96
- on_change #retry
97
- end
73
+ previous_state = @processing.swap(SCHEDULED)
74
+
75
+ case previous_state
76
+ when SCHEDULED
77
+ #ignore, already scheduled
78
+ logger.debug("Already scheduled")
79
+ when PROCESSING
80
+ #ignore, processing thread will reschedule
81
+ logger.debug("Scheduling queued")
82
+ when IDLE
83
+ schedule
98
84
  end
99
85
  end
100
86
 
@@ -102,9 +88,7 @@ class SlowListener
102
88
  if @scheduler.jobs.empty?
103
89
  logger.debug("Scheduling processing for #@wait sec")
104
90
  @scheduler.in @wait do
105
- if @processing.get == IDLE
106
- do_upload
107
- end
91
+ do_upload
108
92
  end
109
93
  else
110
94
  logger.debug("Already scheduled")
data/lib/flickrup.rb CHANGED
@@ -26,6 +26,7 @@ module Flickrup
26
26
  opt :loglevel, "Logging level", :type => :string, :default => "INFO"
27
27
  opt :config, "Configuration file", :type => :string, :default => './flickrup.yml'
28
28
  opt :timeout, "Timeout/Wait for file modification", :default => 5*60
29
+ opt :dryrun, "Dry run, don't move or upload (useful for debugging)"
29
30
  end
30
31
 
31
32
  logger.level = Logger::Severity.const_get(opts.loglevel)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flickrup
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 5
10
- version: 0.0.5
9
+ - 6
10
+ version: 0.0.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jonathan Gilbert