From 15ff69e561cab8b16508eeaddf14588f670b5f42 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Thu, 10 Jul 2014 20:50:35 -0400 Subject: [PATCH] Fixes #14 Add tag to tagless file if dirtied --- id3.go | 7 ++++++- id3_test.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/id3.go b/id3.go index 4510bcf..9685e27 100644 --- a/id3.go +++ b/id3.go @@ -10,6 +10,10 @@ import ( "os" ) +const ( + LatestVersion = 3 +) + // Tagger represents the metadata of a tag type Tagger interface { Title() string @@ -57,7 +61,8 @@ func Open(name string) (*File, error) { } else if v1Tag := v1.ParseTag(fi); v1Tag != nil { file.Tagger = v1Tag } else { - return nil, errors.New("Open: unknown tag format") + // Add a new tag if none exists + file.Tagger = v2.NewTag(LatestVersion) } return file, nil diff --git a/id3_test.go b/id3_test.go index 7468f61..8dec856 100644 --- a/id3_test.go +++ b/id3_test.go @@ -125,6 +125,41 @@ func TestReadonly(t *testing.T) { } } +func TestAddTag(t *testing.T) { + tempFile, err := ioutil.TempFile("", "notag") + if err != nil { + t.Fatal(err) + } + + file, err := Open(tempFile.Name()) + if err != nil { + t.Errorf("AddTag: unable to open empty file") + } + + tag := file.Tagger + + if tag == nil { + t.Errorf("AddTag: no tag added to file") + } + + file.SetArtist("Michael") + + err = file.Close() + if err != nil { + t.Errorf("AddTag: error closing new file") + } + + reopenBytes, err := ioutil.ReadFile(tempFile.Name()) + if err != nil { + t.Errorf("AddTag: error reopening file") + } + + expectedBytes := tag.Bytes() + if !bytes.Equal(expectedBytes, reopenBytes) { + t.Errorf("AddTag: tag not written correctly: %v", reopenBytes) + } +} + func TestUnsynchTextFrame_RoundTrip(t *testing.T) { var ( err error