musicfix 0.1.6 → 0.1.7

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +6 -0
  3. data/README +0 -2
  4. data/bin/musicfix +51 -27
  5. metadata +12 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 95f3528586137687c1f38dafeb11fdc2666c9f51
4
- data.tar.gz: 680c84a9847bdfbfe5bcfd21d5a8bc7dc7169ebf
3
+ metadata.gz: 12ba6b8750f8ba21d9d439843de08a22a590ff65
4
+ data.tar.gz: ef0cf64ea385518284eab1dfc85a0d77f43b5367
5
5
  SHA512:
6
- metadata.gz: 11b7c508f935e211ec32939fef9b84ba08309b2d6d4a4a60de14314824cce6b4cb45cbcbdc9557c061513830aaf0411c494a96d1ec5399ec5b2c12fba59fd3eb
7
- data.tar.gz: 7138bb4481a4e627a4d0a7a5972a145703155afadfbc6b80a0e4fc3115f54dd01ecf0244f92501dd5a6a57ed56229359b04cf50e8e8bb0b6af2b65e1bfd29e48
6
+ metadata.gz: 86728467e24e4099e13b080d8f3127151939c53bcf234d05e334c195f69f4849c86c4b4c676d99ff72088330acea8e7946575c1f051fd6db3c9fe49938441676
7
+ data.tar.gz: 3d17efef7167e023755bb0d1a87a4545eaa01602bee11ad59531382a11619c5ac2e69dd739d915047a7f029d3a3e5dd129ddee79b8293e6df57878d56a1605cb
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.1.7
2
+ * Fix http requests to work with the current API.
3
+ * All stdout output is valid YAML.
4
+ * Sort tracklist of output release file in filename order.
5
+ * Get artwork from the s.pixogs.com domain.
6
+
1
7
  ## 0.1.6
2
8
  * Can now generate release files from audio file tags.
3
9
  * Add the release metadata saving functionality and loading logic.
data/README CHANGED
@@ -1,5 +1,3 @@
1
- # $Id: README,v 1.17 2014/01/12 17:03:44 lostd Exp $
2
-
3
1
  # Description
4
2
 
5
3
  Musicfix is a music file renamer and tagger with consistency concerns.
data/bin/musicfix CHANGED
@@ -1,8 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # encoding: utf-8
3
3
 
4
- # $Id: musicfix,v 1.60 2014/01/12 17:40:11 lostd Exp $
5
-
6
4
  require 'rubygems'
7
5
  require 'fileutils'
8
6
  require 'open-uri'
@@ -11,7 +9,7 @@ require 'taglib'
11
9
  require 'yaml'
12
10
 
13
11
  # Headers
14
- Ver = '0.1.6'
12
+ Ver = '0.1.7'
15
13
  Homepage = 'http://git.2f30.org/musicfix/'
16
14
  Headers = {'User-Agent' => "musicfix/#{Ver} +#{Homepage}"}
17
15
 
@@ -60,6 +58,9 @@ def mkname n
60
58
  n = n.gsub '12"', '12 inch'
61
59
  n = n.gsub "12''", "12 inch"
62
60
  n = n.gsub "12'", "12 inch"
61
+ n = n.gsub '10"', '10 inch'
62
+ n = n.gsub "10''", "10 inch"
63
+ n = n.gsub "10'", "10 inch"
63
64
  n = n.gsub '7"', '7 inch'
64
65
  n = n.gsub "7''", "7 inch"
65
66
  n = n.gsub "7'", "7 inch"
@@ -73,7 +74,8 @@ def getimgurl rel
73
74
  return nil unless rel['images']
74
75
  img = rel['images'].select {|i| i['type'] == 'primary'}.first ||
75
76
  rel['images'].first
76
- img['uri']
77
+ img['uri'].gsub! 'api.discogs.com/images/R-90', 's.pixogs.com/image/R'
78
+ img['uri'].gsub! 'api.discogs.com/images/', 's.pixogs.com/image/'
77
79
  end
78
80
 
79
81
  # Construct position list from tracks filter
@@ -99,7 +101,7 @@ end
99
101
  # Make a sane format string also using format description
100
102
  def mkformat format
101
103
  f = []
102
- # Ignore in favor of LP/EP/7"/12" descriptions
104
+ # Ignore in favor of LP/EP/7"/10"/12" descriptions
103
105
  unless format['name'] == "Vinyl"
104
106
  f << format['name']
105
107
  end
@@ -118,6 +120,7 @@ def mkshort n
118
120
  ft = {
119
121
  'Cassette' => 'Cass',
120
122
  '12"' => '12inch',
123
+ '10"' => '10inch',
121
124
  '7"' => '7inch',
122
125
  'Mini-Album' => 'MiniAlbum',
123
126
  'Maxi-Single' => 'Maxi',
@@ -139,6 +142,9 @@ def mkshort n
139
142
  'Numbered' => 'Num',
140
143
  'Unofficial Release' => 'Unofficial',
141
144
  'Single Sided' => 'S/Sided',
145
+ 'File MP3' => 'MP3',
146
+ 'File FLAC' => 'FLAC',
147
+ 'File WAV' => 'WAV',
142
148
  }
143
149
  # Note that prefix substitution is broken
144
150
  ftre = /(#{ft.keys.join('|')})/
@@ -195,13 +201,13 @@ end
195
201
  cfg['mdir'] = File.expand_path cfg['mdir']
196
202
 
197
203
  # Print configuration
198
- puts 'Configuration'
204
+ puts '# Configuration'
199
205
  puts cfg.to_yaml
200
206
 
201
207
  # Early file checks
202
208
  if cmd == 'dump' or cmd == 'tags' then
203
209
  if File.exists? relfile then
204
- puts "Release file #{relfile} exists!"
210
+ STDERR.puts "Release file #{relfile} exists!"
205
211
  exit
206
212
  end
207
213
  end
@@ -212,11 +218,11 @@ unless cmd == 'dump' then
212
218
  # Construct file list
213
219
  fl = Dir['*'].select {|f| File.extname(f).match fmtre}.sort
214
220
  if fl.empty? then
215
- puts 'No music files found!'
216
- exit
221
+ STDERR.puts 'No music files found!'
222
+ exit 1
217
223
  end
218
224
  # Output file list
219
- puts 'Files to process'
225
+ puts '# Files to process'
220
226
  puts fl.to_yaml
221
227
  end
222
228
 
@@ -226,8 +232,8 @@ if cmd == 'load' then
226
232
  if relfile then
227
233
  # The user specified some file
228
234
  unless File.exists? relfile then
229
- puts "Release file #{relfile} not found!"
230
- exit
235
+ STDERR.puts "Release file #{relfile} not found!"
236
+ exit 1
231
237
  end
232
238
  else
233
239
  # Look for 'release.yaml' first
@@ -239,14 +245,15 @@ if cmd == 'load' then
239
245
  relfile = relfl.sort.first
240
246
  end
241
247
  unless relfile then
242
- puts 'No release file found!'
243
- exit
248
+ STDERR.puts 'No release file found!'
249
+ exit 1
244
250
  end
245
251
  end
246
- puts "Loading release data..."
252
+ STDERR.puts "Loading release data from file..."
247
253
  rel = YAML.load File.open(relfile, 'r')
248
254
  elsif cmd == 'tags' then
249
255
  # Generate release file from audio file tags
256
+ STDERR.puts "Generating release data from tags..."
250
257
  rel = {}
251
258
  rel['artist'] = []
252
259
  rel['album'] = []
@@ -292,20 +299,27 @@ elsif cmd == 'tags' then
292
299
  rel['format'] = 'CD'
293
300
  else
294
301
  # Get release data from Discogs
295
- puts "Getting release data..."
296
- r = YAML.load(open("http://api.discogs.com/release/#{relid}?f=json",
297
- Headers))['resp']['release']
302
+ STDERR.puts "Getting release data from Discogs..."
303
+ r = YAML.load(open("http://api.discogs.com/releases/#{relid}",
304
+ Headers))
298
305
  mr = if r['master_id'] then
299
- YAML.load(open("http://api.discogs.com/master/#{r['master_id']}?f=json",
300
- Headers))['resp']['master']
306
+ YAML.load(open("http://api.discogs.com/masters/#{r['master_id']}",
307
+ Headers))
301
308
  end
302
309
  # Tracklist can contain dummy header tracks, strip them
303
310
  tl = r['tracklist'].select {|t| t['position'] != ''}
304
311
  # Apply tracks filter if given
305
312
  if tracks then
306
313
  pl = mkposlist tracks
307
- puts "Invalid tracks filter: #{tracks}" unless pl
314
+ unless pl
315
+ STDERR.puts "Invalid tracks filter: #{tracks}"
316
+ exit 1
317
+ end
308
318
  tl = tl.select {|t| pl.include? t['position']}
319
+ if tl.empty?
320
+ STDERR.puts "Filter returned no tracks: #{tracks}"
321
+ exit 1
322
+ end
309
323
  end
310
324
  # Gather release-wide data
311
325
  rel = {}
@@ -320,6 +334,9 @@ else
320
334
  if r['genres'] then r['genres'].first end
321
335
  rel['format'] = mkformat r['formats'].first
322
336
  rel['comment'] = "Discogs: #{r['id']}"
337
+ if tracks then
338
+ rel['comment'] += ", tracks: #{tracks}"
339
+ end
323
340
  rel['imgurl'] = getimgurl r
324
341
  rel['tracklist'] = []
325
342
  # Populate tracklist
@@ -333,8 +350,10 @@ else
333
350
  end
334
351
 
335
352
  # Output release info
353
+ puts '# Release data'
336
354
  puts rel.to_yaml
337
355
  if cmd == 'dump' or cmd == 'tags' then
356
+ STDERR.puts "Save rdata to #{relfile}"
338
357
  unless fake
339
358
  File.open(relfile, 'w') do |f|
340
359
  f.puts rel.to_yaml
@@ -390,7 +409,9 @@ fl.each do |ofname|
390
409
  fn = mkname n
391
410
  x = File.extname(ofname).delete('.').downcase
392
411
  nfname = eval cfg['track']
393
- puts "Copy track to #{nfname}"
412
+ # Add filename to track descriptor
413
+ trk['file'] = nfname
414
+ STDERR.puts "Copy track to #{nfname}"
394
415
  unless fake
395
416
  FileUtils.makedirs(File.dirname nfname)
396
417
  FileUtils.copy(ofname, nfname)
@@ -411,7 +432,7 @@ end
411
432
  zz = '0' * (mkdiscnum tl.last['pos'].to_s).join.length
412
433
  imgname = eval cfg['image']
413
434
  if rel['imgurl'] then
414
- puts "Save image to #{imgname}"
435
+ STDERR.puts "Save image to #{imgname}"
415
436
  unless fake
416
437
  img = open(rel['imgurl'], Headers).read
417
438
  File.open(imgname, 'wb').write img
@@ -419,8 +440,11 @@ if rel['imgurl'] then
419
440
  end
420
441
  # Also save the release file for future use
421
442
  relfile = eval cfg['rdata']
422
- puts "Save rdata to #{relfile}"
443
+ STDERR.puts "Save rdata to #{relfile}"
423
444
  unless fake
445
+ # Sort tracklist in filename order and delete filenames
446
+ rel['tracklist'].sort_by! {|s| s['file']}
447
+ rel['tracklist'].each {|s| s.delete 'file'}
424
448
  File.open(relfile, 'w') do |f|
425
449
  f.puts rel.to_yaml
426
450
  end
@@ -428,10 +452,10 @@ end
428
452
 
429
453
  # Execute command if provided
430
454
  if cfg['after'] then
431
- puts "Executing finishing command"
455
+ run = eval cfg['after']
456
+ STDERR.puts "Executing #{run}"
432
457
  unless fake
433
- run = eval cfg['after']
434
- `#{run}`
458
+ puts `#{run}`
435
459
  end
436
460
  end
437
461
 
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: musicfix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lazaros Koromilas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-12 00:00:00.000000000 Z
11
+ date: 2014-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: stringex
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: taglib-ruby
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: Musicfix is a music file renamer and tagger with consistency concerns.
@@ -46,10 +46,10 @@ executables:
46
46
  extensions: []
47
47
  extra_rdoc_files: []
48
48
  files:
49
- - bin/musicfix
50
- - README
51
- - LICENSE
52
49
  - CHANGELOG
50
+ - LICENSE
51
+ - README
52
+ - bin/musicfix
53
53
  homepage: http://git.2f30.org/musicfix/
54
54
  licenses:
55
55
  - BSD
@@ -60,17 +60,17 @@ require_paths:
60
60
  - lib
61
61
  required_ruby_version: !ruby/object:Gem::Requirement
62
62
  requirements:
63
- - - '>='
63
+ - - ">="
64
64
  - !ruby/object:Gem::Version
65
65
  version: '0'
66
66
  required_rubygems_version: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - '>='
68
+ - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  requirements: []
72
72
  rubyforge_project:
73
- rubygems_version: 2.0.3
73
+ rubygems_version: 2.2.2
74
74
  signing_key:
75
75
  specification_version: 4
76
76
  summary: Music file renamer and tagger that uses Discogs.com