Class: MusicBox
- Inherits:
-
Object
show all
- Defined in:
- lib/musicbox.rb,
lib/musicbox/error.rb,
lib/musicbox/group.rb,
lib/musicbox/player.rb,
lib/musicbox/catalog.rb,
lib/musicbox/discogs.rb,
lib/musicbox/version.rb,
lib/musicbox/exporter.rb,
lib/musicbox/importer.rb,
lib/musicbox/equalizer.rb,
lib/musicbox/extractor.rb,
lib/musicbox/info_to_s.rb,
lib/musicbox/cover_maker.rb,
lib/musicbox/label_maker.rb,
lib/musicbox/catalog/tags.rb,
lib/musicbox/catalog/album.rb,
lib/musicbox/catalog/track.rb,
lib/musicbox/catalog/albums.rb,
lib/musicbox/catalog/artist.rb,
lib/musicbox/catalog/format.rb,
lib/musicbox/catalog/artists.rb,
lib/musicbox/catalog/release.rb,
lib/musicbox/catalog/releases.rb,
lib/musicbox/catalog/collection.rb,
lib/musicbox/catalog/album_track.rb,
lib/musicbox/catalog/release_artist.rb,
lib/musicbox/catalog/collection_item.rb
Defined Under Namespace
Classes: Catalog, CoverMaker, Discogs, Equalizer, Error, Exporter, Extractor, Group, Importer, LabelMaker, Player
Constant Summary
collapse
- VERSION =
'0.1'
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
-
#artist_keys(args) ⇒ Object
-
#cover(args, prompt: false, output_file: '/tmp/cover.pdf') ⇒ Object
-
#csv(args) ⇒ Object
-
#dir(args, group: nil) ⇒ Object
-
#download_images(args) ⇒ Object
-
#dups(args) ⇒ Object
-
#export(args, **params) ⇒ Object
-
#extract(args) ⇒ Object
-
#extract_cover(args) ⇒ Object
-
#fix(args) ⇒ Object
-
#formats(args) ⇒ Object
-
#import(args) ⇒ Object
-
#initialize(root:) ⇒ MusicBox
constructor
A new instance of MusicBox.
-
#label(args) ⇒ Object
-
#open(args, group: nil) ⇒ Object
-
#orphaned ⇒ Object
-
#play(args, prompt: false, equalizer_name: nil, **params) ⇒ Object
-
#select(args) ⇒ Object
-
#select_cover(args, prompt: false) ⇒ Object
-
#show(args, group: nil, mode: :summary, prompt: false) ⇒ Object
-
#update ⇒ Object
-
#update_tags(args, force: false) ⇒ Object
Constructor Details
#initialize(root:) ⇒ MusicBox
Returns a new instance of MusicBox.
53
54
55
56
|
# File 'lib/musicbox.rb', line 53
def initialize(root:)
@catalog = Catalog.new(root: root)
@prompt = TTY::Prompt.new
end
|
Instance Attribute Details
#catalog ⇒ Object
Returns the value of attribute catalog.
51
52
53
|
# File 'lib/musicbox.rb', line 51
def catalog
@catalog
end
|
Class Method Details
.info_to_s(info, indent: 0) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# File 'lib/musicbox/info_to_s.rb', line 3
def self.info_to_s(info, indent: 0)
io = StringIO.new
width = info.map { |i| i.first.length }.max
info.each do |label, value, sub_info|
io.puts '%s%*s: %s' % [
' ' * indent,
width,
label,
value,
]
io.print info_to_s(sub_info, indent: indent + width + 2) if sub_info
end
io.string
end
|
Instance Method Details
#artist_keys(args) ⇒ Object
225
226
227
228
229
230
|
# File 'lib/musicbox.rb', line 225
def artist_keys(args)
if args.empty?
args = @catalog.releases.items.map { |r| r.artists.map(&:name) }.flatten
end
;;pp @catalog.artist_keys(args)
end
|
#cover(args, prompt: false, output_file: '/tmp/cover.pdf') ⇒ Object
124
125
126
127
128
129
130
131
132
|
# File 'lib/musicbox.rb', line 124
def cover(args, prompt: false, output_file: '/tmp/cover.pdf')
releases = []
@catalog.find(args, group: :releases, prompt: prompt).select(&:album).each do |release|
release.select_cover unless release.album.has_cover?
releases << release if release.album.has_cover?
end
CoverMaker.make_covers(*releases, output_file: output_file)
run_command('open', output_file)
end
|
#csv(args) ⇒ Object
206
207
208
209
210
211
|
# File 'lib/musicbox.rb', line 206
def csv(args)
print Catalog::Release.
@catalog.find(args, group: :releases).each do |release|
print release.to_csv
end
end
|
#dir(args, group: nil) ⇒ Object
160
161
162
163
164
|
# File 'lib/musicbox.rb', line 160
def dir(args, group: nil)
@catalog.find(args, group: group).each do |release|
puts "%-10s %s" % [release.id, release.dir]
end
end
|
#download_images(args) ⇒ Object
118
119
120
121
122
|
# File 'lib/musicbox.rb', line 118
def download_images(args)
@catalog.find(args, group: :releases).select(&:cd?).each do |release|
release.download_images
end
end
|
#dups(args) ⇒ Object
213
214
215
216
217
218
219
220
221
222
223
|
# File 'lib/musicbox.rb', line 213
def dups(args)
dups = @catalog.find_dups(@catalog.find(args, group: :releases))
dups.each do |id, formats|
formats.each do |format, releases|
if releases.length > 1
puts
releases.each { |r| puts r }
end
end
end
end
|
#export(args, **params) ⇒ Object
58
59
60
61
62
63
64
|
# File 'lib/musicbox.rb', line 58
def export(args, **params)
exporter = Exporter.new(catalog: @catalog, **params)
@catalog.find(args, group: :releases).each do |release|
album = release.album or raise Error, "Album does not exist for release #{release.id}"
exporter.export_album(album)
end
end
|
66
67
68
69
70
71
|
# File 'lib/musicbox.rb', line 66
def (args)
= Extractor.new(catalog: @catalog)
@catalog.dirs_for_args(@catalog., args).each do |dir|
.(dir)
end
end
|
112
113
114
115
116
|
# File 'lib/musicbox.rb', line 112
def (args)
@catalog.find(args, group: :releases).select(&:album).each do |release|
release.album.
end
end
|
#fix(args) ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/musicbox.rb', line 73
def fix(args)
end
|
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/musicbox.rb', line 99
def formats(args)
formats = {}
@catalog.find(args, group: :releases).each do |release|
release.formats.each do |format|
formats[format.name] ||= 0
formats[format.name] += 1
end
end
formats.each do |name, count|
puts '%5d %s' % [count, name]
end
end
|
#import(args) ⇒ Object
140
141
142
143
144
145
146
147
148
149
|
# File 'lib/musicbox.rb', line 140
def import(args)
importer = Importer.new(catalog: @catalog)
@catalog.dirs_for_args(@catalog.import_dir, args).each do |dir|
begin
importer.import_dir(dir)
rescue Error => e
warn "Error: #{e}"
end
end
end
|
#label(args) ⇒ Object
151
152
153
154
155
156
157
158
|
# File 'lib/musicbox.rb', line 151
def label(args)
labels = @catalog.find(args, group: :releases, prompt: true).map(&:to_label)
output_file = '/tmp/labels.pdf'
label_maker = LabelMaker.new
label_maker.make_labels(labels)
label_maker.write(output_file)
run_command('open', output_file)
end
|
#open(args, group: nil) ⇒ Object
166
167
168
169
170
|
# File 'lib/musicbox.rb', line 166
def open(args, group: nil)
@catalog.find(args, group: group).each do |release|
run_command('open', release.dir)
end
end
|
#orphaned ⇒ Object
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
# File 'lib/musicbox.rb', line 172
def orphaned
@catalog.orphaned.each do |group, items|
unless items.empty?
puts "#{group}:"
items.sort.each do |item|
puts item
end
puts
end
end
images = @catalog.orphaned_images
unless images.empty?
puts "Images:"
images.sort.each do |image|
puts "\t" + image.to_s
end
puts
end
end
|
#play(args, prompt: false, equalizer_name: nil, **params) ⇒ Object
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
|
# File 'lib/musicbox.rb', line 232
def play(args, prompt: false, equalizer_name: nil, **params)
albums = @catalog.find(args, prompt: prompt).map(&:album).compact
if equalizer_name
equalizers = Equalizer.load_equalizers(
dir: Path.new(@catalog.config['equalizers_dir']),
name: equalizer_name)
else
equalizers = nil
end
player = MusicBox::Player.new(
albums: albums,
equalizers: equalizers,
**params)
player.play
end
|
#select(args) ⇒ Object
248
249
250
251
252
253
254
255
|
# File 'lib/musicbox.rb', line 248
def select(args)
ids = []
loop do
releases = @catalog.find(args, group: :releases, prompt: true) or break
ids += releases.map(&:id)
puts ids.join(' ')
end
end
|
#select_cover(args, prompt: false) ⇒ Object
134
135
136
137
138
|
# File 'lib/musicbox.rb', line 134
def select_cover(args, prompt: false)
@catalog.find(args, group: :releases, prompt: prompt).select(&:album).each do |release|
release.select_cover
end
end
|
#show(args, group: nil, mode: :summary, prompt: false) ⇒ Object
192
193
194
195
196
197
198
199
200
201
202
203
204
|
# File 'lib/musicbox.rb', line 192
def show(args, group: nil, mode: :summary, prompt: false)
@catalog.find(args, group: group, prompt: prompt).each do |release|
case mode
when :cover
release.album.show_cover if release.album&.has_cover?
when :details
puts release.details_to_s
puts
when :summary
puts release
end
end
end
|
#update ⇒ Object
257
258
259
|
# File 'lib/musicbox.rb', line 257
def update
Discogs.new(catalog: @catalog).update
end
|
261
262
263
264
265
266
|
# File 'lib/musicbox.rb', line 261
def update_tags(args, force: false)
@catalog.find(args, group: :releases).select(&:album).each do |release|
puts release
release.album.update_tags(force: force)
end
end
|