//Hmm, this could be reduced to one func, and a lambda passed as an arg func (camera *Camera) findAllChildDirectories(basedirPath *string) ([]string, error) { var gpFileList *C.CameraList var err error returnedSlice := []string{} gpDirPath := C.CString(*basedirPath) defer C.free(unsafe.Pointer(gpDirPath)) if gpFileList, err = newGphotoList(); err != nil { return nil, err } defer C.gp_list_free(gpFileList) if retval := C.gp_camera_folder_list_folders(camera.gpCamera, gpDirPath, gpFileList, camera.gpContext); retval != gpOk { return nil, fmt.Errorf("Cannot get folder list from dir %s, error code %v", *basedirPath, retval) } listSize := int(C.gp_list_count(gpFileList)) for i := 0; i < listSize; i++ { var gpListElementName *C.char C.gp_list_get_name(gpFileList, (C.int)(i), (**C.char)(&gpListElementName)) returnedSlice = append(returnedSlice, C.GoString(gpListElementName)) } return returnedSlice, nil }
func (c *Camera) ListFolders(folder string) ([]string, int) { if folder == "" { folder = "/" } var cameraList *C.CameraList C.gp_list_new(&cameraList) defer C.free(unsafe.Pointer(cameraList)) cFolder := C.CString(folder) defer C.free(unsafe.Pointer(cFolder)) err := C.gp_camera_folder_list_folders(c.camera, cFolder, cameraList, c.context) folderMap, _ := cameraListToMap(cameraList) names := make([]string, len(folderMap)) i := 0 for key, _ := range folderMap { names[i] = key i += 1 } return names, int(err) }