apple_music_library 0.10.0 → 0.13.0

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
  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