flickrup 0.0.5 → 0.0.6

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.
@@ -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