github.com/boki/go-xmp@v1.0.1/models/digikam/model.go (about)

     1  // from http://www.exiv2.org/tags-xmp-digiKam.html
     2  
     3  package digikam
     4  
     5  import (
     6  	"fmt"
     7  	"trimmer.io/go-xmp/xmp"
     8  )
     9  
    10  var (
    11  	NsDk = xmp.NewNamespace("digiKam", "http://www.digikam.org/ns/1.0/", NewModel)
    12  )
    13  
    14  func init() {
    15  	xmp.Register(NsDk, xmp.XmpMetadata)
    16  }
    17  
    18  func NewModel(name string) xmp.Model {
    19  	return &Digikam{}
    20  }
    21  
    22  func MakeModel(d *xmp.Document) (*Digikam, error) {
    23  	m, err := d.MakeModel(NsDk)
    24  	if err != nil {
    25  		return nil, err
    26  	}
    27  	x, _ := m.(*Digikam)
    28  	return x, nil
    29  }
    30  
    31  func FindModel(d *xmp.Document) *Digikam {
    32  	if m := d.FindModel(NsDk); m != nil {
    33  		return m.(*Digikam)
    34  	}
    35  	return nil
    36  }
    37  
    38  type Digikam struct {
    39  	TagsList               xmp.StringList `xmp:"digiKam:TagsList"`
    40  	CaptionsAutorNames     xmp.AltString  `xmp:"digiKam:CaptionsAutorNames"`
    41  	CaptionsDateTimeStamps xmp.AltString  `xmp:"digiKam:CaptionsDateTimeStamps"`
    42  	ImageHistory           string         `xmp:"digiKam:ImageHistory"`
    43  	ImageUniqueID          string         `xmp:"digiKam:ImageUniqueID"`
    44  	LensCorrectionSettings string         `xmp:"digiKam:LensCorrectionSettings"`
    45  	ColorLabel             ColorLabel     `xmp:"digiKam:ColorLabel"`
    46  	PickLabel              PickLabel      `xmp:"digiKam:PickLabel"`
    47  }
    48  
    49  func (x Digikam) Can(nsName string) bool {
    50  	return NsDk.GetName() == nsName
    51  }
    52  
    53  func (x Digikam) Namespaces() xmp.NamespaceList {
    54  	return xmp.NamespaceList{NsDk}
    55  }
    56  
    57  func (x *Digikam) SyncModel(d *xmp.Document) error {
    58  	return nil
    59  }
    60  
    61  func (x *Digikam) SyncFromXMP(d *xmp.Document) error {
    62  	return nil
    63  }
    64  
    65  func (x Digikam) SyncToXMP(d *xmp.Document) error {
    66  	return nil
    67  }
    68  
    69  func (x *Digikam) CanTag(tag string) bool {
    70  	_, err := xmp.GetNativeField(x, tag)
    71  	return err == nil
    72  }
    73  
    74  func (x *Digikam) GetTag(tag string) (string, error) {
    75  	if v, err := xmp.GetNativeField(x, tag); err != nil {
    76  		return "", fmt.Errorf("%s: %v", NsDk.GetName(), err)
    77  	} else {
    78  		return v, nil
    79  	}
    80  }
    81  
    82  func (x *Digikam) SetTag(tag, value string) error {
    83  	if err := xmp.SetNativeField(x, tag, value); err != nil {
    84  		return fmt.Errorf("%s: %v", NsDk.GetName(), err)
    85  	}
    86  	return nil
    87  }