From 6efa87ae15a30b5ae8bb3dafcc7fca5c13f28a7f Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Fri, 4 Jul 2014 21:24:50 -0400 Subject: [PATCH] Fix sizes affected by encoding --- v2/frame.go | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/v2/frame.go b/v2/frame.go index 3832e0e..cb6b9b4 100644 --- a/v2/frame.go +++ b/v2/frame.go @@ -299,7 +299,8 @@ type DescTextFrame struct { func NewDescTextFrame(ft FrameType, desc, text string) *DescTextFrame { f := NewTextFrame(ft, text) - f.size += uint32(len(desc)) + nullLength := encodedbytes.EncodingNullLengthForIndex(f.encoding) + f.size += uint32(len(desc) + nullLength) return &DescTextFrame{ TextFrame: *f, @@ -355,12 +356,16 @@ func (f *DescTextFrame) SetEncoding(encoding string) error { return err } + newNullLength := encodedbytes.EncodingNullLengthForIndex(i) + oldNullLength := encodedbytes.EncodingNullLengthForIndex(f.encoding) + nullDiff := newNullLength - oldNullLength + textDiff, err := encodedbytes.EncodedDiff(i, f.description, f.encoding, f.description) if err != nil { return err } - f.changeSize(descDiff + textDiff) + f.changeSize(descDiff + nullDiff + textDiff) f.encoding = i return nil } @@ -399,9 +404,6 @@ func NewUnsynchTextFrame(ft FrameType, desc, text string) *UnsynchTextFrame { f := NewDescTextFrame(ft, desc, text) f.size += uint32(3) - // add null length for this encoding - f.size += uint32(encodedbytes.EncodingNullLengthForIndex(f.encoding)) - return &UnsynchTextFrame{ DescTextFrame: *f, language: "eng", @@ -447,19 +449,6 @@ func (f *UnsynchTextFrame) SetLanguage(language string) error { return nil } -func (f *UnsynchTextFrame) SetEncoding(encoding string) error { - prevIndex := f.encoding - err := f.DescTextFrame.SetEncoding(encoding) - if err != nil { - return err - } - - n1 := encodedbytes.EncodingNullLengthForIndex(prevIndex) - n2 := encodedbytes.EncodingNullLengthForIndex(f.encoding) - f.changeSize(n2 - n1) - return nil -} - func (f UnsynchTextFrame) String() string { return fmt.Sprintf("%s\t%s:\n%s", f.language, f.description, f.text) }