mirror of https://github.com/dsoprea/go-exif.git
ifd_enumerate: Implemented ChildWithIfdIdentity.
parent
dc6bb3e4b1
commit
b7368b1fb4
|
@ -1412,6 +1412,7 @@ func Test_IfdBuilder_CreateIfdBuilderFromExistingChain_RealData(t *testing.T) {
|
||||||
t.Fatalf("Tag-type not as expected: %d != %d ITE=%s", recoveredIte.TagType, originalIte.TagType, recoveredIte)
|
t.Fatalf("Tag-type not as expected: %d != %d ITE=%s", recoveredIte.TagType, originalIte.TagType, recoveredIte)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(dustin): We're always accessing the addressable-data using the root-IFD. It shouldn't matter, but we'd rather access it from our specific IFD.
|
||||||
originalValueBytes, err := originalIte.ValueBytes(originalIndex.RootIfd.addressableData, originalIndex.RootIfd.ByteOrder)
|
originalValueBytes, err := originalIte.ValueBytes(originalIndex.RootIfd.addressableData, originalIndex.RootIfd.ByteOrder)
|
||||||
log.PanicIf(err)
|
log.PanicIf(err)
|
||||||
|
|
||||||
|
@ -1460,7 +1461,6 @@ func Test_IfdBuilder_CreateIfdBuilderFromExistingChain_RealData_WithUpdate(t *te
|
||||||
ucBt, err := exifBt.value.Ib().FindTagWithName("UserComment")
|
ucBt, err := exifBt.value.Ib().FindTagWithName("UserComment")
|
||||||
log.PanicIf(err)
|
log.PanicIf(err)
|
||||||
|
|
||||||
// TODO(dustin): !! Create an example for this.
|
|
||||||
uc := TagUnknownType_9298_UserComment{
|
uc := TagUnknownType_9298_UserComment{
|
||||||
EncodingType: TagUnknownType_9298_UserComment_Encoding_ASCII,
|
EncodingType: TagUnknownType_9298_UserComment_Encoding_ASCII,
|
||||||
EncodingBytes: []byte("TEST COMMENT"),
|
EncodingBytes: []byte("TEST COMMENT"),
|
||||||
|
|
|
@ -355,6 +355,23 @@ type Ifd struct {
|
||||||
thumbnailData []byte
|
thumbnailData []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ifd *Ifd) ChildWithIfdIdentity(ii IfdIdentity) (childIfd *Ifd, err error) {
|
||||||
|
defer func() {
|
||||||
|
if state := recover(); state != nil {
|
||||||
|
err = log.Wrap(state.(error))
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
for _, childIfd := range ifd.Children {
|
||||||
|
if childIfd.Ii == ii {
|
||||||
|
return childIfd, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Panic(ErrTagNotFound)
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (ifd *Ifd) TagValue(ite *IfdTagEntry) (value interface{}, err error) {
|
func (ifd *Ifd) TagValue(ite *IfdTagEntry) (value interface{}, err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if state := recover(); state != nil {
|
if state := recover(); state != nil {
|
||||||
|
|
|
@ -24,6 +24,8 @@ type IfdTagEntry struct {
|
||||||
// ChildIfdName is a name if this tag represents a child IFD.
|
// ChildIfdName is a name if this tag represents a child IFD.
|
||||||
ChildIfdName string
|
ChildIfdName string
|
||||||
|
|
||||||
|
// TODO(dustin): !! IB's host the child-IBs directly in the tag, but that's not the case here. Refactor to accomodate it for a consistent experience.
|
||||||
|
|
||||||
// IfdName is the IFD that this tag belongs to.
|
// IfdName is the IFD that this tag belongs to.
|
||||||
Ii IfdIdentity
|
Ii IfdIdentity
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue