id3tag 1.0.0 → 1.1.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: 011333bf23567c8f51e7229c2c821acda9666e31c40d5b39a93ad2c5a226134d
4
- data.tar.gz: 077f4efc53c1fca9760a893b1b70bf94a157ce1b20e6079d5be743e9576abbaf
3
+ metadata.gz: 071d390948742ea6e37aabbe14326029cf1f61e7e783a282df493ff82d444d05
4
+ data.tar.gz: 74e9674570cb0eecfef7d47f8307f30bdaf9ecbf07563b6e8755009519af53c1
5
5
  SHA512:
6
- metadata.gz: 5b8d016a28c5e7e1b1438b64db2e615071bb107ee4b163b8d96002d11081e45dc47d2119d2aad30d66eb9c06d6649a61f951c271766ce17513aefa7c136e60cd
7
- data.tar.gz: 5551c6c5bf45487f82489781dc6ff287bcbb73a248e95a81a1f8886bcdf8c51bf71fe6ee6fb870639508fa77c834a4e26736293a7c6c0cd1aa7386cc64342f2e
6
+ metadata.gz: 22f0aac5137628fcc381f88307d449a3d0870ba8a9fe2ce8acf4101ab367674afbdf3133b5d200669c71c33f2cee86cb7b8dd002b631ca34f9dca894c014f75b
7
+ data.tar.gz: 350be9a1f12bb7098f99a7924bd247e5a41a5f3f42e0a2684f7bb9e2a0342c1ce381b764325197435bb07cbe5c8362de3b3ba6f31b37a0b7a6f61d7f835b13d9
@@ -0,0 +1,48 @@
1
+ module ID3Tag
2
+ module Frames
3
+ module V2
4
+ class ChapterFrame < BasicFrame
5
+ def element_id
6
+ unpacked[:element_id]
7
+ end
8
+
9
+ def start_time
10
+ unpacked[:start_time]
11
+ end
12
+
13
+ def end_time
14
+ unpacked[:end_time]
15
+ end
16
+
17
+ def start_offset
18
+ unpacked[:start_offset]
19
+ end
20
+
21
+ def end_offset
22
+ unpacked[:end_offset]
23
+ end
24
+
25
+ def subframes
26
+ unpacked[:subframes]
27
+ end
28
+
29
+ alias_method :inspectable_content, :element_id
30
+
31
+ private
32
+
33
+ def unpacked
34
+ return @unpacked if defined?(@unpacked)
35
+ @unpacked = {}
36
+ raw_content_io.rewind
37
+ @unpacked[:element_id] = IOUtil.read_until_terminator(raw_content_io, 1)
38
+ @unpacked[:start_time] = raw_content_io.read(4).unpack1("N")
39
+ @unpacked[:end_time] = raw_content_io.read(4).unpack1("N")
40
+ @unpacked[:start_offset] = raw_content_io.read(4).unpack1("N")
41
+ @unpacked[:end_offset] = raw_content_io.read(4).unpack1("N")
42
+ @unpacked[:subframes] = ID3V2FrameParser.new(raw_content_io.read, @major_version_number).frames
43
+ @unpacked
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -24,6 +24,10 @@ module ID3Tag
24
24
  UserTextFrame
25
25
  when /^T/
26
26
  TextFrame
27
+ when /^WXXX$/
28
+ UserUrlFrame
29
+ when /^W/
30
+ UrlFrame
27
31
  when /^(COM|COMM)$/
28
32
  CommentsFrame
29
33
  when /^(ULT|USLT)$/
@@ -36,6 +40,10 @@ module ID3Tag
36
40
  PictureFrame
37
41
  when /^PRIV$/
38
42
  PrivateFrame
43
+ when /^CHAP$/
44
+ ChapterFrame
45
+ when /^CTOC$/
46
+ TableOfContentsFrame
39
47
  else
40
48
  BasicFrame
41
49
  end
@@ -11,7 +11,7 @@ module ID3Tag
11
11
  0x03 => :cover_front, # Cover (front)
12
12
  0x04 => :cover_back, # Cover (back)
13
13
  0x05 => :leaflet_page, # Leaflet page
14
- 0x06 => :media, # Media (e.g. lable side of CD)
14
+ 0x06 => :media, # Media (e.g. label side of CD)
15
15
  0x07 => :lead_artist, # Lead artist/lead performer/soloist
16
16
  0x08 => :artist, # Artist/performer
17
17
  0x09 => :conductor, # Conductor
@@ -0,0 +1,59 @@
1
+ module ID3Tag
2
+ module Frames
3
+ module V2
4
+ class TableOfContentsFrame < BasicFrame
5
+ FLAG_A_TOP_LEVEL_BIT = "00000001".to_i(2)
6
+ FLAG_B_ORDERED_BIT = "00000010".to_i(2)
7
+
8
+ def element_id
9
+ unpacked[:element_id]
10
+ end
11
+
12
+ def top_level?
13
+ unpacked[:flags] & FLAG_A_TOP_LEVEL_BIT > 0
14
+ end
15
+
16
+ def ordered?
17
+ unpacked[:flags] & FLAG_B_ORDERED_BIT > 0
18
+ end
19
+
20
+ def entry_count
21
+ unpacked[:entry_count]
22
+ end
23
+
24
+ def child_element_ids
25
+ unpacked[:child_element_ids]
26
+ end
27
+
28
+ alias_method :content, :child_element_ids
29
+ alias_method :inspectable_content, :content
30
+
31
+ def subframes
32
+ unpacked[:subframes]
33
+ end
34
+
35
+ private
36
+
37
+ def unpacked
38
+ return @unpacked if defined?(@unpacked)
39
+ @unpacked = {}
40
+ raw_content_io.rewind
41
+ @unpacked[:element_id] = IOUtil.read_until_terminator(raw_content_io, 1)
42
+ @unpacked[:flags] = raw_content_io.read(1).unpack1("C")
43
+ @unpacked[:entry_count] = raw_content_io.read(1).unpack1("C")
44
+
45
+ @unpacked[:child_element_ids] = []
46
+ current_entry = 0
47
+ while current_entry < @unpacked[:entry_count]
48
+ @unpacked[:child_element_ids].push(IOUtil.read_until_terminator(raw_content_io, 1))
49
+ current_entry += 1
50
+ end
51
+
52
+ @unpacked[:subframes] = ID3V2FrameParser.new(raw_content_io.read, @major_version_number).frames
53
+
54
+ @unpacked
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,14 @@
1
+ module ID3Tag
2
+ module Frames
3
+ module V2
4
+ class UrlFrame < BasicFrame
5
+ def url
6
+ @url ||= StringUtil.cut_at_null_byte(usable_content)
7
+ end
8
+
9
+ alias_method :content, :url
10
+ alias_method :inspectable_content, :content
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+ module ID3Tag
2
+ module Frames
3
+ module V2
4
+ class UserUrlFrame < TextFrame
5
+ def description
6
+ @description ||= parts.first
7
+ end
8
+
9
+ def url
10
+ @url ||= parts.last
11
+ end
12
+
13
+ alias_method :content, :url
14
+ alias_method :inspectable_content, :content
15
+
16
+ private
17
+
18
+ def parts
19
+ @parts ||= encoded_content.split(StringUtil::NULL_BYTE, 2)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module ID3Tag
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/id3tag.rb CHANGED
@@ -23,6 +23,8 @@ require "id3tag/frames/v1/track_nr_frame"
23
23
  require "id3tag/frames/v2/basic_frame"
24
24
  require "id3tag/frames/v2/text_frame"
25
25
  require "id3tag/frames/v2/user_text_frame"
26
+ require "id3tag/frames/v2/url_frame"
27
+ require "id3tag/frames/v2/user_url_frame"
26
28
  require "id3tag/frames/v2/involved_people_list_frame"
27
29
  require "id3tag/frames/v2/unique_file_id_frame"
28
30
  require "id3tag/frames/v2/private_frame"
@@ -30,6 +32,8 @@ require "id3tag/frames/v2/comments_frame"
30
32
  require "id3tag/frames/v2/unsychronized_transcription_frame"
31
33
  require "id3tag/frames/v2/picture_frame"
32
34
  require "id3tag/frames/v2/genre_frame"
35
+ require "id3tag/frames/v2/chapter_frame"
36
+ require "id3tag/frames/v2/table_of_contents_frame"
33
37
  require "id3tag/frames/v2/genre_frame/genre_parser"
34
38
  require "id3tag/frames/v2/genre_frame/genre_parser_pre_24"
35
39
  require "id3tag/frames/v2/genre_frame/genre_parser_24"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: id3tag
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krists Ozols
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-23 00:00:00.000000000 Z
11
+ date: 2023-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -131,6 +131,7 @@ files:
131
131
  - lib/id3tag/frames/v1/text_frame.rb
132
132
  - lib/id3tag/frames/v1/track_nr_frame.rb
133
133
  - lib/id3tag/frames/v2/basic_frame.rb
134
+ - lib/id3tag/frames/v2/chapter_frame.rb
134
135
  - lib/id3tag/frames/v2/comments_frame.rb
135
136
  - lib/id3tag/frames/v2/frame_fabricator.rb
136
137
  - lib/id3tag/frames/v2/frame_flags.rb
@@ -141,10 +142,13 @@ files:
141
142
  - lib/id3tag/frames/v2/involved_people_list_frame.rb
142
143
  - lib/id3tag/frames/v2/picture_frame.rb
143
144
  - lib/id3tag/frames/v2/private_frame.rb
145
+ - lib/id3tag/frames/v2/table_of_contents_frame.rb
144
146
  - lib/id3tag/frames/v2/text_frame.rb
145
147
  - lib/id3tag/frames/v2/unique_file_id_frame.rb
146
148
  - lib/id3tag/frames/v2/unsychronized_transcription_frame.rb
149
+ - lib/id3tag/frames/v2/url_frame.rb
147
150
  - lib/id3tag/frames/v2/user_text_frame.rb
151
+ - lib/id3tag/frames/v2/user_url_frame.rb
148
152
  - lib/id3tag/id3_v1_frame_parser.rb
149
153
  - lib/id3tag/id3_v2_frame_parser.rb
150
154
  - lib/id3tag/id3_v2_tag_header.rb
@@ -175,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
179
  - !ruby/object:Gem::Version
176
180
  version: '0'
177
181
  requirements: []
178
- rubygems_version: 3.3.5
182
+ rubygems_version: 3.3.3
179
183
  signing_key:
180
184
  specification_version: 4
181
185
  summary: Native Ruby ID3 tag reader that aims for 100% coverage of ID3v2.x and ID3v1.x