//go:build !test package photos /* #cgo CFLAGS: -I${SRCDIR}/../../bridge #cgo LDFLAGS: -L${SRCDIR}/../../bridge -lphotokit_bridge -framework Photos -framework Foundation -framework AppKit #include "photokit_bridge.h" #include */ import "C" import "unsafe" type CgoBridge struct{} var DefaultBridge Bridge = &CgoBridge{} func (*CgoBridge) RequestAccess() error { rc := C.photos_request_access() if rc != 0 { return errAccessDenied } return nil } func (*CgoBridge) ListAlbums() ([]Album, error) { cs := C.photos_list_albums_json() if cs == nil { return nil, errBridgeNil } defer C.photos_free_string(cs) return ParseAlbumsJSON(C.GoString(cs)) } func (*CgoBridge) ListAssets(albumID string) ([]Asset, int, error) { cid := C.CString(albumID) defer C.free(unsafe.Pointer(cid)) cs := C.photos_list_assets_json(cid) if cs == nil { return nil, 0, errBridgeNil } defer C.photos_free_string(cs) return ParseAssetsJSON(C.GoString(cs)) } func (*CgoBridge) ListTree() ([]CollectionNode, error) { cs := C.photos_list_tree_json() if cs == nil { return nil, errBridgeNil } defer C.photos_free_string(cs) return ParseTreeJSON(C.GoString(cs)) } func (*CgoBridge) Cancel() { C.photos_request_cancel() } func (*CgoBridge) ExportPreview(assetID, outputDir string, targetSize, index int) (ExportResult, error) { cid := C.CString(assetID) defer C.free(unsafe.Pointer(cid)) cdir := C.CString(outputDir) defer C.free(unsafe.Pointer(cdir)) cs := C.photos_export_preview_json(cid, cdir, C.int(targetSize), C.int(index)) if cs == nil { return ExportResult{}, errBridgeNil } defer C.photos_free_string(cs) return ParseExportResultJSON(C.GoString(cs)) } func (*CgoBridge) ExportOriginal(assetID, outputDir string, index int) (ExportResult, error) { cid := C.CString(assetID) defer C.free(unsafe.Pointer(cid)) cdir := C.CString(outputDir) defer C.free(unsafe.Pointer(cdir)) cs := C.photos_export_original_json(cid, cdir, C.int(index)) if cs == nil { return ExportResult{}, errBridgeNil } defer C.photos_free_string(cs) return ParseExportResultJSON(C.GoString(cs)) }