Add dirty flag to Tagger

develop
Michael Yang 2014-07-04 19:23:16 -04:00
rodzic f3d29e61e5
commit 2fa59701da
4 zmienionych plików z 26 dodań i 0 usunięć

5
id3.go
Wyświetl plik

@ -29,6 +29,7 @@ type Tagger interface {
DeleteFrames(string) []v2.Framer
AddFrames(...v2.Framer)
Bytes() []byte
Dirty() bool
Padding() uint
Size() int
Version() string
@ -66,6 +67,10 @@ func Open(name string) (*File, error) {
func (f *File) Close() error {
defer f.file.Close()
if !f.Dirty() {
return nil
}
switch f.Tagger.(type) {
case (*v1.Tag):
if _, err := f.file.Seek(-v1.TagSize, os.SEEK_END); err != nil {

Wyświetl plik

@ -42,6 +42,7 @@ var (
type Tag struct {
title, artist, album, year, comment string
genre byte
dirty bool
}
func ParseTag(readSeeker io.ReadSeeker) *Tag {
@ -60,9 +61,14 @@ func ParseTag(readSeeker io.ReadSeeker) *Tag {
year: string(data[93:97]),
comment: string(data[97:127]),
genre: data[127],
dirty: false,
}
}
func (t Tag) Dirty() bool {
return t.dirty
}
func (t Tag) Title() string { return t.title }
func (t Tag) Artist() string { return t.artist }
func (t Tag) Album() string { return t.album }
@ -82,18 +88,22 @@ func (t Tag) Comments() []string {
func (t *Tag) SetTitle(text string) {
t.title = text
t.dirty = true
}
func (t *Tag) SetArtist(text string) {
t.artist = text
t.dirty = true
}
func (t *Tag) SetAlbum(text string) {
t.album = text
t.dirty = true
}
func (t *Tag) SetYear(text string) {
t.year = text
t.dirty = true
}
func (t *Tag) SetGenre(text string) {
@ -104,6 +114,7 @@ func (t *Tag) SetGenre(text string) {
break
}
}
t.dirty = true
}
func (t Tag) Bytes() []byte {

Wyświetl plik

@ -443,6 +443,7 @@ func (f *UnsynchTextFrame) SetLanguage(language string) error {
}
f.language = language
f.changeSize(0)
return nil
}

Wyświetl plik

@ -23,6 +23,7 @@ type Tag struct {
frameHeaderSize int
frameConstructor func(io.Reader) Framer
frameBytesConstructor func(Framer) []byte
dirty bool
}
// Creates a new tag
@ -32,6 +33,7 @@ func NewTag(version byte) *Tag {
t := &Tag{
Header: header,
frames: make(map[string][]Framer),
dirty: false,
}
switch t.version {
@ -103,6 +105,13 @@ func (t *Tag) changeSize(diff int) {
} else {
t.padding = uint(d)
}
t.dirty = true
}
// Modified status of the tag
func (t Tag) Dirty() bool {
return t.dirty
}
func (t Tag) Bytes() []byte {