//go:build test package photos /* #cgo CFLAGS: -I${SRCDIR}/../../bridge #cgo LDFLAGS: -L${SRCDIR}/../../bridge -lphotokit_bridge_stub #include "photokit_bridge.h" #include void photos_test_set_access(int rc); void photos_test_set_albums(const char *json); void photos_test_set_assets(const char *json); void photos_test_set_tree(const char *json); void photos_test_set_export_rc(int rc); void photos_test_set_export_originals_rc(int rc); void photos_test_set_backup_all_rc(int rc); void photos_test_set_albums_null(void); void photos_test_set_assets_null(void); void photos_test_set_tree_null(void); void photos_request_cancel(void); void photos_test_set_export_preview_json(const char *json); void photos_test_set_export_original_json(const char *json); */ import "C" import "unsafe" type CgoBridge struct{} var DefaultBridge Bridge = &CgoBridge{} func SetTestAccessRC(rc int) { C.photos_test_set_access(C.int(rc)) } func SetTestAlbumsJSON(json string) { C.photos_test_set_albums(C.CString(json)) } func SetTestAssetsJSON(json string) { C.photos_test_set_assets(C.CString(json)) } func SetTestTreeJSON(json string) { C.photos_test_set_tree(C.CString(json)) } func SetTestExportRC(rc int) { C.photos_test_set_export_rc(C.int(rc)) } func SetTestExportOriginalsRC(rc int) { C.photos_test_set_export_originals_rc(C.int(rc)) } func SetTestBackupAllRC(rc int) { C.photos_test_set_backup_all_rc(C.int(rc)) } func SetTestAlbumsNull() { C.photos_test_set_albums_null() } func SetTestAssetsNull() { C.photos_test_set_assets_null() } func SetTestTreeNull() { C.photos_test_set_tree_null() } func SetTestExportPreviewJSON(json string) { C.photos_test_set_export_preview_json(C.CString(json)) } func SetTestExportOriginalJSON(json string) { C.photos_test_set_export_original_json(C.CString(json)) } 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) ExportAlbumPreviews(albumID, outputDir string, targetSize int) (int, error) { cid := C.CString(albumID) defer C.free(unsafe.Pointer(cid)) cdir := C.CString(outputDir) defer C.free(unsafe.Pointer(cdir)) rc := C.photos_export_album_previews(cid, cdir, C.int(targetSize)) return InterpretExportResult(int(rc)) } func (*CgoBridge) ExportAlbumOriginals(albumID, outputDir string) (int, error) { cid := C.CString(albumID) defer C.free(unsafe.Pointer(cid)) cdir := C.CString(outputDir) defer C.free(unsafe.Pointer(cdir)) rc := C.photos_export_album_originals(cid, cdir) return InterpretExportResult(int(rc)) } func (*CgoBridge) BackupAll(outputDir string, targetSize int, originals bool) (int, error) { cdir := C.CString(outputDir) defer C.free(unsafe.Pointer(cdir)) coriginals := 0 if originals { coriginals = 1 } rc := C.photos_backup_all(cdir, C.int(targetSize), C.int(coriginals)) return InterpretExportResult(int(rc)) } 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)) }