henchman-sync 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
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