Class: Id3Taginator::Frames::Id3v2FrameFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/id3taginator/frames/id3v2_frame_factory.rb

Constant Summary collapse

BUFFER_FRAMES =
[Buffer::RecommendedBufferSizeFrame].freeze
COMMENT_FRAMES =
[Comment::CommentFrame].freeze
COUNT_FRAMES =
[Count::PopularityFrame, Count::PlayCounterFrame].freeze
ENCRYPTION_FRAMES =
[Encryption::AudioEncryptionFrame, Encryption::EncryptionMethodFrame].freeze
GEO_FRAMES =
[Geo::GeneralEncapsulatedObjectFrame].freeze
GROUPING_FRAMES =
[Grouping::GroupIdentificationFrame, Grouping::GroupingFrame].freeze
IPL_FRAMES =
[Ipl::InvolvedPeopleFrame].freeze
LYRICS_FRAMES =
[Lyrics::UnsyncLyricsFrame].freeze
MCDI_FRAMES =
[Mcdi::MusicCDIdentifierFrame].freeze
PICTURE_FRAMES =
[Picture::PictureFrame].freeze
PRIVATE_FRAMES =
[Private::PrivateFrame].freeze
TEXT_FRAMES =
[Text::AlbumFrame, Text::BPMFrame, Text::ComposerFrame, Text::GenreFrame, Text::CopyrightFrame,
Text::DateFrame, Text::PlaylistDelayFrame, Text::EncodedByFrame, Text::WritersFrame,
Text::FileTypeFrame, Text::TimeFrame, Text::ContentGroupDescriptionFrame, Text::TitleFrame,
Text::SubtitleFrame, Text::InitialKeyFrame, Text::LanguageFrame, Text::LengthFrame,
Text::MediaTypeFrame, Text::OriginalAlbumFrame, Text::OriginalFilenameFrame,
Text::OriginalWritersFrame, Text::OriginalArtistsFrame, Text::OriginalReleaseYearFrame,
Text::FileOwnerFrame, Text::ArtistsFrame, Text::AlbumArtistFrame, Text::ConductorFrame,
Text::ModifiedByFrame, Text::PartOfSetFrame, Text::PublisherFrame, Text::TrackNumberFrame,
Text::RecordingDatesFrame, Text::InternetRadioStationFrame, Text::SizeFrame,
Text::AlbumSortOrderFrame, Text::PerformerSortOrderFrame, Text::TitleSortOrderFrame,
Text::ISRCFrame, Text::EncoderFrame, Text::UserTextInfoFrame, Text::YearFrame].freeze
TOS_FRAMES =
[Tos::OwnershipFrame, Tos::TermsOfUseFrame].freeze
UFID_FRAMES =
[Ufid::UniqueFileIdentifierFrame].freeze
URL_FRAMES =
[Url::CommercialUrlFrame, Url::CopyrightUrlFrame, Url::OfficialFileWebpageFrame,
Url::OfficialArtistWebpageFrame, Url::OfficialSourceWebpageFrame,
Url::OfficialAudioRadioStationHomepageFrame, Url::PaymentUrlFrame,
Url::OfficialPublisherWebpageFrame, Url::UserUrlLinkFrame].freeze

Instance Method Summary collapse

Constructor Details

#initialize(file, version, options) ⇒ Id3v2FrameFactory

Constructor

Parameters:

  • file (StringIO, IO, File)

    the data stream

  • version (Integer)

    the Id3tag major version - 2, 3 or 4

  • options (Options::Options)

    the options to use



55
56
57
58
59
# File 'lib/id3taginator/frames/id3v2_frame_factory.rb', line 55

def initialize(file, version, options)
  @file = file
  @version = version
  @options = options
end

Instance Method Details

#next_frameId3v2Frame?

reads the next frame in the data stream

only padding left)

Returns:

  • (Id3v2Frame, nil)

    returns the parsed Id3v2 frame or nil of no frame is found (end of Tag andor



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/id3taginator/frames/id3v2_frame_factory.rb', line 65

def next_frame
  frame_id = @version == 2 ? @file.read(3) : @file.read(4)
  return nil if frame_id.bytes.all?(&:zero?)

  frame = frame_for_id(frame_id)
  case @version
  when 2
    frame&.build_v2_frame(frame_id, @file, @options)
  when 3
    frame&.build_v3_frame(frame_id, @file, @options)
  when 4
    frame&.build_v4_frame(frame_id, @file, @options)
  else
    raise Errors::Id3TagError, "id3v2.#{@version} is not supported."
  end
end