From cde7974892a809952ee7a2680bfbf816522ba7aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Canek=20Pel=C3=A1ez=20Vald=C3=A9s?= Date: Fri, 23 Nov 2018 22:43:14 -0600 Subject: [PATCH] FileTags: A lot of auxiliary functions. --- lib/mlm/file-tags.vala | 225 +++++++++++++++++++++++++++-------------- 1 file changed, 147 insertions(+), 78 deletions(-) diff --git a/lib/mlm/file-tags.vala b/lib/mlm/file-tags.vala index c6c58b1..fe23d6d 100644 --- a/lib/mlm/file-tags.vala +++ b/lib/mlm/file-tags.vala @@ -99,6 +99,8 @@ namespace MLM { private Gee.HashMap int_frames; /* Data frames. */ private Gee.HashMap data_frames; + /* Invalid frames. */ + private Gee.ArrayList invalid_frames; /** * The artist. @@ -273,87 +275,154 @@ namespace MLM { if (tag.frames.length == 0) return; - var invalid_frames = new Gee.ArrayList(); - for (int i = 0; i < tag.frames.length; i++) { - var frame = tag.frames[i]; - if (frame.id == FrameId.ARTIST) { - string_frames[FrameId.ARTIST] = _artist = frame.get_text(); - } else if (frame.id == FrameId.TITLE) { - string_frames[FrameId.TITLE] = _title = frame.get_text(); - } else if (frame.id == FrameId.ALBUM) { - string_frames[FrameId.ALBUM] = _album = frame.get_text(); - } else if (frame.id == FrameId.BAND) { - string_frames[FrameId.BAND] = _band = frame.get_text(); - } else if (frame.id == FrameId.YEAR) { - int_frames[FrameId.YEAR] = _year = - int.parse(frame.get_text()); - } else if (frame.id == FrameId.TRACK) { - string track = frame.get_text(); - if (track == null) - continue; - string_frames[FrameId.TRACK] = track; - if (track.index_of("/") != -1) { - string[] t = track.split("/"); - _track = int.parse(t[0]); - _total = int.parse(t[1]); - } else { - _track = int.parse(track); - _total = -1; - } - } else if (frame.id == FrameId.DISC) { - _disc = int.parse(frame.get_text()); - } else if (frame.id == FrameId.GENRE) { - var g = frame.get_text(); - if (g == null) - continue; - _genre = Genre.index_of(g); - if (_genre != -1) { - int_frames[FrameId.GENRE] = _genre; - continue; - } - int n = int.parse(g); - if (0 <= n && n < Genre.total()) { - _genre = n; - int_frames[FrameId.GENRE] = _genre; - } else { - invalid_frames.add(frame); - } - } else if (frame.id == FrameId.COMMENT) { - string_frames[FrameId.COMMENT] = _comment = - frame.get_comment_text(); - } else if (frame.id == FrameId.COMPOSER) { - string_frames[FrameId.COMPOSER] = _composer = - frame.get_text(); - } else if (frame.id == FrameId.ORIGINAL) { - string_frames[FrameId.ORIGINAL] = _original = - frame.get_text(); - } else if (frame.id == FrameId.PICTURE) { - var fc_data = - frame.get_picture(Id3Tag.PictureType.COVERFRONT); - if (fc_data != null) { - _cover_picture = fc_data; - data_frames[Id3Tag.PictureType.COVERFRONT] = - new GLib.Bytes(fc_data); - cover_description = - frame.get_picture_description(); - } - var a_data = frame.get_picture(Id3Tag.PictureType.ARTIST); - if (a_data != null) { - _artist_picture = a_data; - data_frames[Id3Tag.PictureType.ARTIST] = - new GLib.Bytes(a_data); - artist_description = - frame.get_picture_description(); - } - } else { - GLib.warning("Invalid frame ā€˜%s’ will be deleted.\n", - frame.id); - invalid_frames.add(frame); - } - } + invalid_frames = new Gee.ArrayList(); + for (int i = 0; i < tag.frames.length; i++) + set_frame(tag.frames[i]); foreach (Id3Tag.Frame frame in invalid_frames) { tag.detachframe(frame); } + invalid_frames = null; + } + + /* Sets a frame. */ + private void set_frame(Id3Tag.Frame frame) { + if (frame.id == FrameId.ARTIST) { + set_artist_frame(frame); + } else if (frame.id == FrameId.TITLE) { + set_title_frame(frame); + } else if (frame.id == FrameId.ALBUM) { + set_album_frame(frame); + } else if (frame.id == FrameId.BAND) { + set_band_frame(frame); + } else if (frame.id == FrameId.YEAR) { + set_year_frame(frame); + } else if (frame.id == FrameId.TRACK) { + set_track_frame(frame); + } else if (frame.id == FrameId.DISC) { + set_disc_frame(frame); + } else if (frame.id == FrameId.GENRE) { + set_genre_frame(frame); + } else if (frame.id == FrameId.COMMENT) { + set_comment_frame(frame); + } else if (frame.id == FrameId.COMPOSER) { + set_composer_frame(frame); + } else if (frame.id == FrameId.ORIGINAL) { + set_original_frame(frame); + } else if (frame.id == FrameId.PICTURE) { + set_picture_frame(frame); + } else { + set_invalid_frame(frame); + } + } + + /* Sets the artist frame. */ + private void set_artist_frame(Id3Tag.Frame frame) { + string_frames[FrameId.ARTIST] = _artist = frame.get_text(); + } + + /* Sets the artist frame. */ + private void set_title_frame(Id3Tag.Frame frame) { + string_frames[FrameId.TITLE] = _title = frame.get_text(); + } + + /* Sets the album frame. */ + private void set_album_frame(Id3Tag.Frame frame) { + string_frames[FrameId.ALBUM] = _album = frame.get_text(); + } + + /* Sets the band frame. */ + private void set_band_frame(Id3Tag.Frame frame) { + string_frames[FrameId.BAND] = _band = frame.get_text(); + } + + /* Sets the year frame. */ + private void set_year_frame(Id3Tag.Frame frame) { + int_frames[FrameId.YEAR] = _year = int.parse(frame.get_text()); + } + + /* Sets the track frame. */ + private void set_track_frame(Id3Tag.Frame frame) { + string track = frame.get_text(); + if (track == null) + return; + string_frames[FrameId.TRACK] = track; + if (track.index_of("/") != -1) { + string[] t = track.split("/"); + _track = int.parse(t[0]); + _total = int.parse(t[1]); + } else { + _track = int.parse(track); + _total = -1; + } + } + + /* Sets the disc frame. */ + private void set_disc_frame(Id3Tag.Frame frame) { + int_frames[FrameId.DISC] = _disc = int.parse(frame.get_text()); + } + + /* Sets the genre frame. */ + private void set_genre_frame(Id3Tag.Frame frame) { + var g = frame.get_text(); + if (g == null) + return; + _genre = Genre.index_of(g); + if (_genre != -1) { + int_frames[FrameId.GENRE] = _genre; + return; + } + int n = int.parse(g); + if (0 <= n && n < Genre.total()) { + _genre = n; + int_frames[FrameId.GENRE] = _genre; + } else { + invalid_frames.add(frame); + } + } + + /* Sets the comment frame. */ + private void set_comment_frame(Id3Tag.Frame frame) { + _comment = frame.get_comment_text(); + string_frames[FrameId.COMMENT] = _comment; + } + + /* Sets the composer frame. */ + private void set_composer_frame(Id3Tag.Frame frame) { + _composer = frame.get_text(); + string_frames[FrameId.COMPOSER] = _composer; + } + + /* Sets the original frame. */ + private void set_original_frame(Id3Tag.Frame frame) { + _original = frame.get_text(); + string_frames[FrameId.ORIGINAL] = _original; + } + + /* Sets the picture frame. */ + private void set_picture_frame(Id3Tag.Frame frame) { + var fc_data = + frame.get_picture(Id3Tag.PictureType.COVERFRONT); + if (fc_data != null) { + _cover_picture = fc_data; + data_frames[Id3Tag.PictureType.COVERFRONT] = + new GLib.Bytes(fc_data); + cover_description = + frame.get_picture_description(); + } + var a_data = frame.get_picture(Id3Tag.PictureType.ARTIST); + if (a_data != null) { + _artist_picture = a_data; + data_frames[Id3Tag.PictureType.ARTIST] = + new GLib.Bytes(a_data); + artist_description = + frame.get_picture_description(); + } + } + + /* Sets an invalid frame. */ + private void set_invalid_frame(Id3Tag.Frame frame) { + GLib.warning("Invalid frame ā€˜%s’ will be deleted.\n", frame.id); + invalid_frames.add(frame); } /** -- GitLab