apple_music_library 0.10.0 → 0.13.0

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
  SHA256:
3
- metadata.gz: b67a41ade93ef2a93fb61db6496506bfd4bb57f6df952c7b3c57f91474116fdc
4
- data.tar.gz: '068639ed7660feb425b667394861d5f295b0f4a211c6cb6c4c2bf4334357649e'
3
+ metadata.gz: 8a7c56a173f838819c8b5e9fe672030b2d592571367e4d98ea5898deff6b26c1
4
+ data.tar.gz: 0c7941388118cb202ff0e1d0483f0bc5d0241380ed5ba816db6f838aa01d8a33
5
5
  SHA512:
6
- metadata.gz: 62eaabf37c4288bf1dc65fd00ce39b7bd944882c647043cb79df6b5340461109e959e80016d98e74800d170e9f66bc15aa05c01cd887aba3d068366682f5b01f
7
- data.tar.gz: d8b7ed8641d329c4f33d3aedd0fd2262d021e817ca02aa2bb2d2994c1e91993ab9d9210eb1fd7202dc3b1bd7d6716212daa3d63620b65ed7ed26d5fa865913b8
6
+ metadata.gz: 1780aa02d02a2511d3c5147e25366a0b2075fd65d0bbb7a8afd516adc29321aa9ea13ded93528f6e63d9e90b10bf060ecc87a644eee408bc69de2cab579c26f4
7
+ data.tar.gz: eedebe0a903e4c46554589b2e6ab8a418032186ee83f87346b31797883624e81279460dfc703eb81320eba4bc1ef5c256f28382f68d95312aa08cd32d438285b
data/CHANGELOG.md CHANGED
@@ -3,7 +3,19 @@
3
3
  ## [Unreleased]
4
4
  - Ability to print out playlist folder hierarchy
5
5
 
6
- ## 0.10.0 - 2022-03-15
6
+ ## 0.13.0 - 2022-03-26
7
+ ### Added
8
+ - Added handling for system verses user-created playlists
9
+
10
+ ## 0.12.0 - 2022-03-26
11
+ ### Added
12
+ - Added handling for smart versus regular playlists
13
+
14
+ ## 0.11.0 - 2022-03-19
15
+ ### Added
16
+ - Added Decade model to retrieve track and album info per decade
17
+
18
+ ## 0.10.0 - 2022-03-16
7
19
  ### Fixed
8
20
  - Fixed incorrect handling of tracks when added to track collections
9
21
  ### Added
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- apple_music_library (0.10.0)
4
+ apple_music_library (0.13.0)
5
5
  facets (~> 3.1)
6
6
  plist (~> 3.6)
7
7
 
data/README.md CHANGED
@@ -32,12 +32,29 @@ library = AppleMusicLibrary.new('path/to/Library.xml')
32
32
  # Count albums
33
33
  puts library.albums.count
34
34
 
35
- # Show playlist inside playlist folder
35
+ # Show playlists contained in a playlist folder
36
36
  playlist_folder = library.playlist_folder('Folder for Testing')
37
37
  playlist_folder.playlists.each do |playlist|
38
38
  puts playlist.name
39
39
  end
40
40
 
41
+ # List all playlists
42
+ library.playlists.each do |playlist|
43
+ puts playlist.name
44
+ end
45
+
46
+ # List only 'smart' playlists
47
+ library.playlists(:smart).each do |playlist|
48
+ puts playlist.name
49
+ end
50
+
51
+ # List all regular (not 'smart') playlists
52
+ # This filter also excludes apple-created playlists (e.g. the 'Library' and 'Downloaded' playlists)
53
+ library.playlists(:regular).each do |playlist|
54
+ puts playlist.name
55
+ end
56
+
57
+
41
58
  # Show tracks in a specific playlist
42
59
  playlist = library.playlist('XTC Favorites')
43
60
  playlist.tracks.each do |track|
@@ -81,6 +98,20 @@ library.years.each do |year|
81
98
  puts "#{year.track_count} #{year.name}"
82
99
  end
83
100
 
101
+ # Display track counts per decade
102
+ library.decades.each do |decade|
103
+ puts "#{decade.track_count} #{decade.name}"
104
+ end
105
+
106
+ # Print a report on all decades in the library
107
+ # e.g.
108
+ # 1970-1979 - 336 tracks on 10 albums
109
+ # 1980-1989 - 816 tracks on 16 albums
110
+ # 1990-1999 - 300 tracks on 8 albums
111
+ # 2000-2009 - 110 tracks on 5 albums
112
+ library.decades_report
113
+
114
+
84
115
 
85
116
  ```
86
117
  All stored attributes are available via snake_cased methods on `Track` and `Playlist`. However, note that `#artist`, `#album`, and `#genre` are special cases, returning Ruby objects rather than their associated string values. Methods to return the string versions of these track attributes are provided as `track.artist_name`, `track.album_name`, and `track.genre_name`.
@@ -0,0 +1,25 @@
1
+ require_relative 'track_collection'
2
+
3
+ module AppleMusicLibrary
4
+ class Decade < TrackCollection
5
+
6
+ def self.report
7
+ self.all.sort_by{|d| d.name}.each do |decade|
8
+ puts "#{decade.name} - #{decade.track_count} tracks on #{decade.album_count} albums"
9
+ end
10
+ end
11
+
12
+ def self.find_or_create_for(year_name)
13
+ decade_start_year = year_name.to_i - (year_name.to_i % 10)
14
+ decade_stop_year = decade_start_year + 9
15
+ decade_name = "#{decade_start_year}-#{decade_stop_year}"
16
+
17
+ self.find_or_create(decade_name)
18
+ end
19
+
20
+ def self.token
21
+ :decade
22
+ end
23
+
24
+ end
25
+ end
@@ -1,11 +1,4 @@
1
- require_relative 'album'
2
- require_relative 'artist'
3
- require_relative 'genre'
4
- require_relative 'playlist'
5
- require_relative 'playlist_folder'
6
- require_relative 'track'
7
- require_relative 'year'
8
- require_relative "utils"
1
+ Dir[File.join(__dir__, '.', '*.rb')].each { |file| require file }
9
2
  require 'plist'
10
3
 
11
4
  module AppleMusicLibrary
@@ -61,8 +54,9 @@ module AppleMusicLibrary
61
54
  Genre.find_by_name(genre_name)
62
55
  end
63
56
 
64
- def playlists
65
- @playlists ||= Playlist.all
57
+ def playlists(filter = nil)
58
+ return Playlist.all unless filter
59
+ Playlist.send(filter)
66
60
  end
67
61
 
68
62
  def playlist(playlist_name)
@@ -89,6 +83,14 @@ module AppleMusicLibrary
89
83
  @years ||= Year.all
90
84
  end
91
85
 
86
+ def decades
87
+ @decades ||= Decade.all
88
+ end
89
+
90
+ def decades_report
91
+ Decade.report
92
+ end
93
+
92
94
  def valid?
93
95
  has_tracks?
94
96
  end
@@ -8,16 +8,25 @@ module AppleMusicLibrary
8
8
 
9
9
  @@playlists = {}
10
10
 
11
- ATTRIBUTES = ['Name',
12
- 'Description',
13
- 'Playlist ID',
14
- 'Playlist Persistent ID',
15
- 'Parent Persistent ID',
16
- 'All Items',
17
- 'Smart Info',
18
- 'Smart Criteria',
19
- 'Playlist Items',
20
- 'Folder']
11
+ ATTRIBUTES = [
12
+ 'Name',
13
+ 'Description',
14
+ 'Playlist ID',
15
+ 'Playlist Persistent ID',
16
+ 'Parent Persistent ID',
17
+ 'All Items',
18
+ 'Smart Info',
19
+ 'Smart Criteria',
20
+ 'Playlist Items',
21
+ 'Folder'
22
+ ]
23
+
24
+ SYSTEM_PLAYLISTS = [
25
+ 'Downloaded',
26
+ 'Library',
27
+ 'Music',
28
+ 'Recently Played'
29
+ ]
21
30
 
22
31
  def initialize(info)
23
32
  @info = info
@@ -37,6 +46,18 @@ module AppleMusicLibrary
37
46
  @@playlists.values
38
47
  end
39
48
 
49
+ def self.smart
50
+ @@playlists.values.select{|p| p.smart?}
51
+ end
52
+
53
+ def self.regular
54
+ @@playlists.values.select{|p| !p.smart? and !p.system?}
55
+ end
56
+
57
+ def self.system
58
+ @@playlists.values.select{|p| p.system?}
59
+ end
60
+
40
61
  def self.find_by_name(playlist_name)
41
62
  results = @@playlists.values.select{|p| p.name == playlist_name}
42
63
  if results.size == 1
@@ -59,6 +80,14 @@ module AppleMusicLibrary
59
80
  folder.present?
60
81
  end
61
82
 
83
+ def smart?
84
+ smart_info.present?
85
+ end
86
+
87
+ def system?
88
+ SYSTEM_PLAYLISTS.include?(name)
89
+ end
90
+
62
91
  def token
63
92
  :playlist
64
93
  end
@@ -46,6 +46,9 @@ module AppleMusicLibrary
46
46
  if year_name.present?
47
47
  @year = Year.find_or_create(year_name)
48
48
  @year.add_track(self)
49
+
50
+ @decade = Decade.find_or_create_for(year_name)
51
+ @decade.add_track(self)
49
52
  end
50
53
 
51
54
  @artist.add_track(self)
@@ -43,6 +43,10 @@ module AppleMusicLibrary
43
43
  @track_count ||= tracks.count
44
44
  end
45
45
 
46
+ def album_count
47
+ @ablum_count ||= tracks.map(&:album).uniq.count
48
+ end
49
+
46
50
  def star_rating
47
51
  return nil if rated_tracks.empty?
48
52
  rated_tracks.map(&:star_rating).sum / rated_tracks.size
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppleMusicLibrary
4
- VERSION = "0.10.0"
4
+ VERSION = "0.13.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apple_music_library
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Gehman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-16 00:00:00.000000000 Z
11
+ date: 2022-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -126,6 +126,7 @@ files:
126
126
  - lib/apple_music_library.rb
127
127
  - lib/apple_music_library/album.rb
128
128
  - lib/apple_music_library/artist.rb
129
+ - lib/apple_music_library/decade.rb
129
130
  - lib/apple_music_library/genre.rb
130
131
  - lib/apple_music_library/library.rb
131
132
  - lib/apple_music_library/playlist.rb