henchman-sync 0.3.2 → 0.3.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 268f8796ffcc52cc93450042d33c1303b5620b8b
4
- data.tar.gz: 26b828d81890a194303180767bad326a1c863621
3
+ metadata.gz: ba50beb7184c552a3a27c1c6c993a70d9eb53496
4
+ data.tar.gz: c1c5bb43fd8eb9dd21dd3e976ce22fd8efc8215a
5
5
  SHA512:
6
- metadata.gz: 678c2e611262bfc9236c7bbee2bf9cda2be634389322f9a1180a373ba0b052549f03440125566c01ff87fb67c19189d24cdb7400931a02923fa8f0c79c560831
7
- data.tar.gz: a37aeb86dce167e4e509d723d01157637374d366773e3cfb287c6164b46c02d26a50b2372be038dd5c68bbc84a0215c335a5f267da5065b8ba90f44443ed8a69
6
+ metadata.gz: 4c06ad0803566f62aa4ad348801409c2b7b0a061cbb4dfea5e1a840cb1597c51c152be9baf260d3d9d0941d26527bbbd875ec34854039aa4cb8832e8ff253d09
7
+ data.tar.gz: 4db7132de8baacbc36b82a3890e040742d0fd753e10126e29fa90a7dce3ce3b1ac3b5f6d2f31d4412bb428516fc4d27e0091b80fb0deb9a08238092c88b650aa
data/lib/applescript.rb CHANGED
@@ -5,7 +5,8 @@ module Henchman
5
5
  class AppleScript
6
6
 
7
7
  def setup config
8
- @delimiter = config[:delimiter]
8
+ @delimiter = config[:delimiter]
9
+ @delimiter_major = config[:delimiter_major]
9
10
  end
10
11
 
11
12
  def get_active_app_script
@@ -88,7 +89,7 @@ module Henchman
88
89
  " set str to str & data_artist & \"#{@delimiter}\" "\
89
90
  " & data_album & \"#{@delimiter}\" "\
90
91
  " & data_title & \"#{@delimiter}\" "\
91
- " & data_id & \"#{@delimiter*2}\"\n"\
92
+ " & data_id & \"#{@delimiter_major}\"\n"\
92
93
  " end if\n"\
93
94
  " end repeat\n"\
94
95
  " return str\n"\
@@ -112,53 +113,46 @@ module Henchman
112
113
  "end tell"\
113
114
  end
114
115
 
115
- # def get_playlist_tracks_script playlist, offset, size
116
- # "tell application \"iTunes\"\n"\
117
- # " try\n"\
118
- # " set playlist_tracks to every track in playlist \"#{playlist}\"\n"\
119
- # " if (#{offset} + 1) * #{size} is less than (count of playlist_tracks) then\n"\
120
- # " set max to (#{offset} + 1) * #{size}\n"\
121
- # " else\n"\
122
- # " set max to count of playlist_tracks\n"\
123
- # " end if\n"\
124
- # " set min to (#{offset} * #{size}) + 1\n"\
125
- # " display dialog min\n"\
126
- # " display dialog max\n"\
127
- # " set str to \"\"\n"\
128
- # " repeat with n from min to max\n"\
129
- # " set data_track to item n of playlist_tracks\n"\
130
- # " set data_artist to artist of data_track as string\n"\
131
- # " set data_album to album of data_track as string\n"\
132
- # " set data_title to name of data_track as string\n"\
133
- # " set data_id to database ID of data_track as string\n"\
134
- # " set data_location to POSIX path of (location of data_track as string)\n"\
135
- # " set str to str & data_artist & \"#{@delimiter}\" "\
136
- # " & data_album & \"#{@delimiter}\" "\
137
- # " & data_title & \"#{@delimiter}\" "\
138
- # " & data_id & \"#{@delimiter}\" "\
139
- # " & data_location & \"#{@delimiter*2}\n"\
140
- # " end repeat\n"\
141
- # " on error\n"\
142
- # " return 0\n"\
143
- # " end try\n"\
144
- # "end tell"
145
- # end
146
- def get_playlist_tracks_script playlist
116
+ def progress
117
+ "set progress description to \"A simple progress indicator\"\n"\
118
+ "set progress additional description to \"Preparing…\"\n"\
119
+ "set progress total steps to -1\n"\
120
+ "\n"\
121
+ "delay 5\n"\
122
+ "\n"\
123
+ "set progress total steps to 100\n"\
124
+ "repeat with i from 1 to 100\n"\
125
+ " try\n"\
126
+ " set progress additional description to \"I am on step \" & i\n"\
127
+ " set progress completed steps to i\n"\
128
+ " delay 0.2\n"\
129
+ " on error thisErr\n"\
130
+ " display alert thisErr\n"\
131
+ " exit repeat\n"\
132
+ " end try\n"\
133
+ "end repeat"
134
+ end
135
+
136
+ def get_playlist_tracks_script playlist, skip = [], size = 100
137
+ "property counter : 0\n"\
147
138
  "tell application \"iTunes\"\n"\
148
139
  " try\n"\
149
140
  " set playlist_tracks to every track in playlist \"#{playlist.gsub(/'/){ %q('"'"') }}\"\n"\
150
141
  " set str to \"\"\n"\
151
142
  " repeat with playlist_track in playlist_tracks\n"\
152
143
  " set data_location to location of playlist_track as string\n"\
153
- " if data_location is equal to \"missing value\" then\n"\
144
+ " set data_id to database ID of playlist_track as string\n"\
145
+ " if data_location is equal to \"missing value\" "\
146
+ " and data_id is not in [#{skip.map{|e| "\"#{e}\""}.join(',')}] then\n"\
154
147
  " set data_artist to artist of playlist_track as string\n"\
155
148
  " set data_album to album of playlist_track as string\n"\
156
149
  " set data_title to name of playlist_track as string\n"\
157
- " set data_id to database ID of playlist_track as string\n"\
158
150
  " set str to str & data_artist & \"#{@delimiter}\""\
159
151
  " & data_album & \"#{@delimiter}\""\
160
152
  " & data_title & \"#{@delimiter}\""\
161
- " & data_id & \"#{@delimiter*2}\"\n"\
153
+ " & data_id & \"#{@delimiter_major}\"\n"\
154
+ " set counter to counter + 1\n"\
155
+ " if counter is equal to #{size} then exit repeat\n"\
162
156
  " end if\n"\
163
157
  " end repeat\n"\
164
158
  " return str\n"\
@@ -180,7 +174,7 @@ module Henchman
180
174
  " set data_date to played date of cur_track\n"\
181
175
  " set str to str & data_id & \"#{@delimiter}\""\
182
176
  " & data_date & \"#{@delimiter}\""\
183
- " & (POSIX path of data_location as string) & \"#{@delimiter*2}\"\n"\
177
+ " & (POSIX path of data_location as string) & \"#{@delimiter_major}\"\n"\
184
178
  " end if\n"\
185
179
  " end repeat\n"\
186
180
  " return str\n"\
@@ -211,7 +205,7 @@ module Henchman
211
205
  def get_tracks_with_location
212
206
  tracks = Array.new
213
207
  tmp_tracks = %x(#{applescript_command(get_tracks_with_location_script)}).chomp
214
- tmp_tracks = tmp_tracks.split @delimiter*2
208
+ tmp_tracks = tmp_tracks.split @delimiter_major
215
209
  tmp_tracks.each do |track|
216
210
  next if track.empty?
217
211
  tmp_track = track.split @delimiter
@@ -232,10 +226,10 @@ module Henchman
232
226
  end
233
227
  end
234
228
 
235
- def get_playlist_tracks playlist
229
+ def get_playlist_tracks playlist, skip = []
236
230
  tracks = Array.new
237
- tmp_tracks = %x(#{applescript_command(get_playlist_tracks_script playlist)}).chomp
238
- tmp_tracks = tmp_tracks.split @delimiter*2
231
+ tmp_tracks = %x(#{applescript_command(get_playlist_tracks_script playlist, skip)}).chomp
232
+ tmp_tracks = tmp_tracks.split @delimiter_major
239
233
  tmp_tracks.each do |track|
240
234
  next if track.empty?
241
235
  tmp_track = track.split @delimiter
@@ -252,7 +246,7 @@ module Henchman
252
246
  album = selection[:album]
253
247
  tracks = Array.new
254
248
  tmp_tracks = %x(#{applescript_command(get_album_tracks_script artist, album)}).chomp
255
- tmp_tracks = tmp_tracks.split @delimiter*2
249
+ tmp_tracks = tmp_tracks.split @delimiter_major
256
250
  tmp_tracks.each do |track|
257
251
  next if track.empty?
258
252
  tmp_track = track.split @delimiter
data/lib/core.rb CHANGED
@@ -10,16 +10,24 @@ module Henchman
10
10
  def self.run
11
11
  @appleScript = Henchman::AppleScript.new
12
12
  @cache = Henchman::Cache.new
13
+ @update_cache = false
13
14
  threads = []
14
- update_cache = false
15
15
 
16
16
  while itunes_is_active?
17
17
  begin
18
- @config = YAML.load_file(File.expand_path('~/.henchman/config'))
18
+ config_file = File.expand_path('~/.henchman/config')
19
+ @config = YAML.load_file(config_file)
20
+
21
+ # add this for backward compatability:
22
+ if !(@config.include? :delimiter_major)
23
+ @config[:delimiter_major] = Henchman::Templates.config[:delimiter_major]
24
+ File.open(config_file, "w") { |f| f.write( @config.to_yaml ) }
25
+ end
26
+
19
27
  @cache.config @config
20
28
  rescue StandardError => err
21
29
  puts "#{DateTime.now.strftime('%m-%d-%Y %H:%M:%S')}|"\
22
- "Error opening config file. Try rerunning `henchman configure`"
30
+ "Error opening config file. Try rerunning `henchman configure`. (#{err})"
23
31
  return
24
32
  end
25
33
 
@@ -36,7 +44,7 @@ module Henchman
36
44
 
37
45
  if track_selected? track
38
46
  if (missing_track_selected? track) && !(@cache.ignore? :artist, track[:artist])
39
- update_cache = true
47
+ @update_cache = true
40
48
  @cache.update_ignore :artist, track[:artist]
41
49
 
42
50
  opts = ['Album', 'Track']
@@ -74,13 +82,13 @@ module Henchman
74
82
  end
75
83
  else
76
84
  playlist = @appleScript.get_playlist
77
- if playlist
85
+ if playlist && !(@cache.ignore? :playlist, playlist)
78
86
  playlist_tracks = @appleScript.get_playlist_tracks playlist
79
- if (!playlist_tracks.empty?) && !(@cache.ignore? :playlist, playlist)
80
- update_cache = true
87
+ if !playlist_tracks.empty?
88
+ @update_cache = true
81
89
  @cache.update_ignore :playlist, playlist
82
90
  if @appleScript.fetch?([playlist]) == playlist
83
- threads << Thread.new{ download_tracks playlist_tracks }
91
+ threads << Thread.new{ download_playlist playlist, playlist_tracks }
84
92
  end
85
93
  end
86
94
  end
@@ -89,7 +97,7 @@ module Henchman
89
97
  end
90
98
 
91
99
  threads.each { |thr| thr.join }
92
- @cache.flush if update_cache
100
+ @cache.flush if @update_cache
93
101
  end
94
102
 
95
103
  def self.track_selected? track
@@ -102,11 +110,26 @@ module Henchman
102
110
 
103
111
  def self.itunes_is_active?
104
112
  @appleScript.get_active_app == 'iTunes'
105
- # true
106
113
  end
107
114
 
108
- def self.download_tracks album_tracks
109
- album_tracks.each { |album_track| download_and_update album_track }
115
+ def self.download_playlist playlist, playlist_tracks
116
+ puts "#{DateTime.now.strftime('%m-%d-%Y %H:%M:%S')}|Downloading Playlist \"#{playlist}\""
117
+ skip = Array.new
118
+ while true
119
+ download_tracks playlist_tracks, skip
120
+ playlist_tracks = @appleScript.get_playlist_tracks playlist, skip
121
+ break if playlist_tracks.empty?
122
+ end
123
+ end
124
+
125
+ def self.download_tracks album_tracks, skip = []
126
+ album_tracks.each do |album_track|
127
+ begin
128
+ download_and_update album_track
129
+ rescue StandardError => bad_id
130
+ skip.push bad_id
131
+ end
132
+ end
110
133
  end
111
134
 
112
135
  def self.download_and_update track
@@ -125,6 +148,7 @@ module Henchman
125
148
  end
126
149
  rescue StandardError => err
127
150
  puts "#{DateTime.now.strftime('%m-%d-%Y %H:%M:%S')}|#{err}"
151
+ raise track[:id]
128
152
  end
129
153
  end
130
154
 
data/lib/dropbox.rb CHANGED
@@ -69,7 +69,7 @@ module Henchman
69
69
 
70
70
  # if there were no results, raise err
71
71
  if results.empty?
72
- raise "Track not found in Dropbox: #{selection.inspect}"
72
+ raise "Track not found in Dropbox: #{selection.reject{|k,v| k == :id}.values.join(':')}"
73
73
 
74
74
  # if there's only one result, return it
75
75
  elsif results.length == 1
@@ -1,3 +1,3 @@
1
1
  module Henchman
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
data/lib/templates.rb CHANGED
@@ -76,7 +76,8 @@ module Henchman
76
76
  :poll_itunes_open => 10,
77
77
  :poll_track => 3,
78
78
  :reprompt_timeout => 300,
79
- :delimiter => '|~|'
79
+ :delimiter => '|~|',
80
+ :delimiter_major => '|?|'
80
81
  }
81
82
  end
82
83
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: henchman-sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Merritt
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-06 00:00:00.000000000 Z
11
+ date: 2016-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander