From a5643533744babb8928990bdba7372c81794c31c Mon Sep 17 00:00:00 2001 From: Unbewohnte Date: Mon, 12 Jul 2021 20:06:14 +0300 Subject: [PATCH] =?UTF-8?q?Improved=20getters=20=E1=97=9C=CB=AC=E1=97=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- v2/read_test.go | 5 +++++ v2/v2tag.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/v2/read_test.go b/v2/read_test.go index 3a4e415..56951ea 100644 --- a/v2/read_test.go +++ b/v2/read_test.go @@ -29,4 +29,9 @@ func TestReadV2Tag(t *testing.T) { t.Errorf("ReadV2Tag failed: expected contents of the album frame to be %s; got %s", "album", album) } + + picture := tag.Picture() + if picture != nil { + t.Errorf("ReadV2Tag failed: expected it not to have a picture") + } } diff --git a/v2/v2tag.go b/v2/v2tag.go index 9b02dac..56396da 100644 --- a/v2/v2tag.go +++ b/v2/v2tag.go @@ -1,5 +1,7 @@ package v2 +import "strings" + type ID3v2Tag struct { Header Header Frames []Frame @@ -9,19 +11,35 @@ type ID3v2Tag struct { // returns &it if found func (tag *ID3v2Tag) GetFrame(id string) *Frame { for _, frame := range tag.Frames { - if frame.Header.ID == id { + if strings.EqualFold(frame.Header.ID, id) { return &frame } } return nil } +// Checks if a frame with given id exists +func (tag *ID3v2Tag) FrameExists(id string) bool { + for _, frame := range tag.Frames { + if strings.EqualFold(frame.Header.ID, id) { + return true + } + } + return false +} + // Returns the contents for the title frame func (tag *ID3v2Tag) Title() string { switch tag.Header.Version { case V2_2: + if !tag.FrameExists("TT2") { + return "" + } return tag.GetFrame("TT2").Text() default: + if !tag.FrameExists("TIT2") { + return "" + } return tag.GetFrame("TIT2").Text() } } @@ -30,8 +48,14 @@ func (tag *ID3v2Tag) Title() string { func (tag *ID3v2Tag) Album() string { switch tag.Header.Version { case V2_2: + if !tag.FrameExists("TAL") { + return "" + } return tag.GetFrame("TAL").Text() default: + if !tag.FrameExists("TALB") { + return "" + } return tag.GetFrame("TALB").Text() } } @@ -40,8 +64,14 @@ func (tag *ID3v2Tag) Album() string { func (tag *ID3v2Tag) Artist() string { switch tag.Header.Version { case V2_2: + if !tag.FrameExists("TP1") { + return "" + } return tag.GetFrame("TP1").Text() default: + if !tag.FrameExists("TPE1") { + return "" + } return tag.GetFrame("TPE1").Text() } } @@ -50,8 +80,14 @@ func (tag *ID3v2Tag) Artist() string { func (tag *ID3v2Tag) Year() string { switch tag.Header.Version { case V2_2: + if !tag.FrameExists("TYE") { + return "" + } return tag.GetFrame("TYE").Text() default: + if !tag.FrameExists("TYER") { + return "" + } return tag.GetFrame("TYER").Text() } } @@ -60,8 +96,30 @@ func (tag *ID3v2Tag) Year() string { func (tag *ID3v2Tag) Comment() string { switch tag.Header.Version { case V2_2: + if !tag.FrameExists("COM") { + return "" + } return tag.GetFrame("COM").Text() default: + if !tag.FrameExists("COMM") { + return "" + } return tag.GetFrame("COMM").Text() } } + +// Returns raw bytes of embed picture +func (tag *ID3v2Tag) Picture() []byte { + switch tag.Header.Version { + case V2_2: + if !tag.FrameExists("PIC") { + return nil + } + return tag.GetFrame("PIC").Contents + default: + if !tag.FrameExists("APIC") { + return nil + } + return tag.GetFrame("APIC").Contents + } +}