Removed concept of ITEVRs

This was from a time long past, from the beginning of the project, and
was just an ineffective bandaid that made things complicated.
for/master
Dustin Oprea 2020-01-05 17:12:39 -05:00
parent 9441507683
commit 82afccee6b
4 changed files with 12 additions and 101 deletions

View File

@ -318,9 +318,7 @@ func NewIfdBuilderWithExistingIfd(ifd *Ifd) (ib *IfdBuilder) {
// NewIfdBuilderFromExistingChain creates a chain of IB instances from an
// IFD chain generated from real data.
func NewIfdBuilderFromExistingChain(rootIfd *Ifd, itevr *IfdTagEntryValueResolver) (firstIb *IfdBuilder) {
// OBSOLETE(dustin): Support for `itevr` is now obsolete. This parameter will be removed in the future.
func NewIfdBuilderFromExistingChain(rootIfd *Ifd) (firstIb *IfdBuilder) {
var lastIb *IfdBuilder
i := 0
for thisExistingIfd := rootIfd; thisExistingIfd != nil; thisExistingIfd = thisExistingIfd.NextIfd {
@ -331,7 +329,7 @@ func NewIfdBuilderFromExistingChain(rootIfd *Ifd, itevr *IfdTagEntryValueResolve
lastIb.SetNextIb(newIb)
}
err := newIb.AddTagsFromExisting(thisExistingIfd, nil, nil, nil)
err := newIb.AddTagsFromExisting(thisExistingIfd, nil, nil)
log.PanicIf(err)
lastIb = newIb
@ -1028,15 +1026,13 @@ func (ib *IfdBuilder) NewBuilderTagFromBuilder(childIb *IfdBuilder) (bt *Builder
// AddTagsFromExisting does a verbatim copy of the entries in `ifd` to this
// builder. It excludes child IFDs. These must be added explicitly via
// `AddChildIb()`.
func (ib *IfdBuilder) AddTagsFromExisting(ifd *Ifd, itevr *IfdTagEntryValueResolver, includeTagIds []uint16, excludeTagIds []uint16) (err error) {
func (ib *IfdBuilder) AddTagsFromExisting(ifd *Ifd, includeTagIds []uint16, excludeTagIds []uint16) (err error) {
defer func() {
if state := recover(); state != nil {
err = log.Wrap(state.(error))
}
}()
// OBSOLETE(dustin): Support for `itevr` is now obsolete. This parameter will be removed in the future.
thumbnailData, err := ifd.Thumbnail()
if err == nil {
err = ib.SetThumbnail(thumbnailData)
@ -1111,7 +1107,7 @@ func (ib *IfdBuilder) AddTagsFromExisting(ifd *Ifd, itevr *IfdTagEntryValueResol
log.Panicf("could not find child IFD for child ITE: IFD-PATH=[%s] TAG-ID=(0x%04x) CURRENT-TAG-POSITION=(%d) CHILDREN=%v", ite.IfdPath, ite.TagId, i, childTagIds)
}
childIb := NewIfdBuilderFromExistingChain(childIfd, nil)
childIb := NewIfdBuilderFromExistingChain(childIfd)
bt = ib.NewBuilderTagFromBuilder(childIb)
} else {
// Non-IFD tag.

View File

@ -197,7 +197,7 @@ func TestIfdBuilder_AddTagsFromExisting(t *testing.T) {
ib := NewIfdBuilder(im, ti, exifcommon.IfdPathStandard, exifcommon.TestDefaultByteOrder)
err = ib.AddTagsFromExisting(index.RootIfd, nil, nil, nil)
err = ib.AddTagsFromExisting(index.RootIfd, nil, nil)
log.PanicIf(err)
expected := []uint16{
@ -233,7 +233,7 @@ func TestIfdBuilder_AddTagsFromExisting__Includes(t *testing.T) {
ib := NewIfdBuilder(im, ti, exifcommon.IfdPathStandard, exifcommon.TestDefaultByteOrder)
err = ib.AddTagsFromExisting(index.RootIfd, nil, []uint16{0x00ff}, nil)
err = ib.AddTagsFromExisting(index.RootIfd, []uint16{0x00ff}, nil)
log.PanicIf(err)
expected := []uint16{
@ -266,7 +266,7 @@ func TestIfdBuilder_AddTagsFromExisting__Excludes(t *testing.T) {
ib := NewIfdBuilder(im, ti, exifcommon.IfdPathStandard, exifcommon.TestDefaultByteOrder)
err = ib.AddTagsFromExisting(index.RootIfd, nil, nil, []uint16{0xff})
err = ib.AddTagsFromExisting(index.RootIfd, nil, []uint16{0xff})
log.PanicIf(err)
expected := []uint16{
@ -1306,7 +1306,7 @@ func TestIfdBuilder_CreateIfdBuilderFromExistingChain(t *testing.T) {
_, index, err := Collect(im, ti, rawExif)
log.PanicIf(err)
ib := NewIfdBuilderFromExistingChain(index.RootIfd, nil)
ib := NewIfdBuilderFromExistingChain(index.RootIfd)
actual := ib.DumpToStrings()
@ -1410,7 +1410,7 @@ func TestIfdBuilder_CreateIfdBuilderFromExistingChain_RealData(t *testing.T) {
ibe := NewIfdByteEncoder()
rootIb := NewIfdBuilderFromExistingChain(originalIndex.RootIfd, nil)
rootIb := NewIfdBuilderFromExistingChain(originalIndex.RootIfd)
updatedExif, err := ibe.EncodeToExif(rootIb)
log.PanicIf(err)
@ -1575,7 +1575,7 @@ func TestIfdBuilder_CreateIfdBuilderFromExistingChain_RealData(t *testing.T) {
// ibe := NewIfdByteEncoder()
// rootIb := NewIfdBuilderFromExistingChain(originalIndex.RootIfd, nil)
// rootIb := NewIfdBuilderFromExistingChain(originalIndex.RootIfd)
// // Update a tag,.
@ -1729,7 +1729,7 @@ func ExampleBuilderTag_SetValue() {
// Create builder.
rootIb := NewIfdBuilderFromExistingChain(index.RootIfd, nil)
rootIb := NewIfdBuilderFromExistingChain(index.RootIfd)
// Find tag to update.
@ -1784,7 +1784,7 @@ func ExampleIfdBuilder_SetStandardWithName() {
_, index, err := Collect(im, ti, rawExif)
log.PanicIf(err)
ib := NewIfdBuilderFromExistingChain(index.RootIfd, nil)
ib := NewIfdBuilderFromExistingChain(index.RootIfd)
// Read the IFD whose tag we want to change.

View File

@ -159,58 +159,3 @@ func (ite *IfdTagEntry) Value(addressableData []byte, byteOrder binary.ByteOrder
return value, nil
}
// IfdTagEntryValueResolver instances know how to resolve the values for any
// tag for a particular EXIF block.
type IfdTagEntryValueResolver struct {
addressableData []byte
byteOrder binary.ByteOrder
}
func NewIfdTagEntryValueResolver(exifData []byte, byteOrder binary.ByteOrder) (itevr *IfdTagEntryValueResolver) {
return &IfdTagEntryValueResolver{
addressableData: exifData[ExifAddressableAreaStart:],
byteOrder: byteOrder,
}
}
// ValueBytes will resolve embedded or allocated data from the tag and return the raw bytes.
func (itevr *IfdTagEntryValueResolver) ValueBytes(ite *IfdTagEntry) (value []byte, err error) {
defer func() {
if state := recover(); state != nil {
err = log.Wrap(state.(error))
}
}()
// OBSOLETE(dustin): This is now redundant. Use `(*ValueContext).readRawEncoded()` instead of this method.
valueContext := newValueContextFromTag(
ite,
itevr.addressableData,
itevr.byteOrder)
rawBytes, err := valueContext.ReadRawEncoded()
log.PanicIf(err)
return rawBytes, nil
}
func (itevr *IfdTagEntryValueResolver) Value(ite *IfdTagEntry) (value interface{}, err error) {
defer func() {
if state := recover(); state != nil {
err = log.Wrap(state.(error))
}
}()
// OBSOLETE(dustin): This is now redundant. Use `(*ValueContext).Values()` instead of this method.
valueContext := newValueContextFromTag(
ite,
itevr.addressableData,
itevr.byteOrder)
values, err := valueContext.Values()
log.PanicIf(err)
return values, nil
}

View File

@ -188,33 +188,3 @@ func TestIfdTagEntry_String(t *testing.T) {
t.Fatalf("string representation not expected: [%s] != [%s]", ite.String(), expected)
}
}
func TestIfdTagEntryValueResolver_ValueBytes(t *testing.T) {
allocatedData := []byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}
ite := IfdTagEntry{
TagId: 0x1,
TagIndex: 0,
TagType: exifcommon.TypeByte,
UnitCount: uint32(len(allocatedData)),
ValueOffset: 0x8,
RawValueOffset: []byte{0x0, 0x0, 0x0, 0x0},
IfdPath: exifcommon.IfdPathStandard,
}
headerBytes, err := BuildExifHeader(exifcommon.TestDefaultByteOrder, uint32(0))
log.PanicIf(err)
exifData := make([]byte, len(headerBytes)+len(allocatedData))
copy(exifData[0:], headerBytes)
copy(exifData[len(headerBytes):], allocatedData)
itevr := NewIfdTagEntryValueResolver(exifData, exifcommon.TestDefaultByteOrder)
value, err := itevr.ValueBytes(&ite)
log.PanicIf(err)
if bytes.Compare(value, allocatedData) != 0 {
t.Fatalf("bytes not expected: %v != %v", value, allocatedData)
}
}