add support for deleting a single frame

master
joshua stein 2017-05-26 18:10:37 -05:00
rodzic 0456e6a0ea
commit db0dbebd68
3 zmienionych plików z 32 dodań i 6 usunięć

1
id3.go
Wyświetl plik

@ -30,6 +30,7 @@ type Tagger interface {
AllFrames() []v2.Framer
Frames(string) []v2.Framer
Frame(string) v2.Framer
DeleteFrame(v2.Framer) []v2.Framer
DeleteFrames(string) []v2.Framer
AddFrames(...v2.Framer)
Bytes() []byte

Wyświetl plik

@ -140,9 +140,10 @@ func (t Tag) Version() string {
}
// Dummy methods to satisfy Tagger interface
func (t Tag) Padding() uint { return 0 }
func (t Tag) AllFrames() []v2.Framer { return []v2.Framer{} }
func (t Tag) Frame(id string) v2.Framer { return nil }
func (t Tag) Frames(id string) []v2.Framer { return []v2.Framer{} }
func (t Tag) DeleteFrames(id string) []v2.Framer { return []v2.Framer{} }
func (t Tag) AddFrames(f ...v2.Framer) {}
func (t Tag) Padding() uint { return 0 }
func (t Tag) AllFrames() []v2.Framer { return []v2.Framer{} }
func (t Tag) Frame(id string) v2.Framer { return nil }
func (t Tag) Frames(id string) []v2.Framer { return []v2.Framer{} }
func (t Tag) DeleteFrames(id string) []v2.Framer { return []v2.Framer{} }
func (t Tag) DeleteFrame(f v2.Framer) []v2.Framer { return []v2.Framer{} }
func (t Tag) AddFrames(f ...v2.Framer) {}

Wyświetl plik

@ -189,6 +189,30 @@ func (t *Tag) DeleteFrames(id string) []Framer {
return frames
}
// Delete the specified frame
func (t *Tag) DeleteFrame(delFrame Framer) []Framer {
frames := t.AllFrames()
if frames == nil {
return nil
}
diff := 0
i := 0
for i < len(t.frames) {
frame := t.frames[i]
if frame == delFrame {
frame.setOwner(nil)
diff += t.frameHeaderSize + int(frame.Size())
t.frames = append(t.frames[:i], t.frames[i+1:]...)
} else {
i++
}
}
t.changeSize(-diff)
return frames
}
// Add frames
func (t *Tag) AddFrames(frames ...Framer) {
for _, frame := range frames {