#include "config.h"
#include <gphoto2/gphoto2-filesys.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <gphoto2/gphoto2-result.h>
#include <gphoto2/gphoto2-port-log.h>
#include <gphoto2/gphoto2-setting.h>
#include <limits.h>
Data Structures | |
struct | _CameraFilesystemFile |
struct | _CameraFilesystemFolder |
struct | _CameraFilesystem |
The internal camera filesystem structure. More... | |
Defines | |
#define | _BSD_SOURCE |
#define | textdomain(String) (String) |
#define | gettext(String) (String) |
#define | dgettext(Domain, Message) (Message) |
#define | dcgettext(Domain, Message, Type) (Message) |
#define | bindtextdomain(Domain, Directory) (Domain) |
#define | _(String) (String) |
#define | N_(String) (String) |
#define | GP_MODULE "libgphoto2" |
#define | PATH_MAX 4096 |
#define | PICTURES_TO_KEEP 2 |
#define | MIN(a, b) (((a) < (b)) ? (a) : (b)) |
#define | CHECK_NULL(r) {if (!(r)) return (GP_ERROR_BAD_PARAMETERS);} |
#define | CR(result) {int r = (result); if (r < 0) return (r);} |
#define | CHECK_MEM(m) {if (!(m)) return (GP_ERROR_NO_MEMORY);} |
#define | CL(result, list) |
#define | CU(result, file) |
#define | CC(context) |
#define | CA(f, c) |
Typedefs | |
typedef struct _CameraFilesystemFile | CameraFilesystemFile |
typedef struct _CameraFilesystemFolder | CameraFilesystemFolder |
Functions | |
int | gp_filesystem_reset (CameraFilesystem *fs) |
Clear the filesystem. | |
int | gp_filesystem_new (CameraFilesystem **fs) |
Create a new filesystem struct. | |
int | gp_filesystem_free (CameraFilesystem *fs) |
Free filesystem struct. | |
int | gp_filesystem_append (CameraFilesystem *fs, const char *folder, const char *filename, GPContext *context) |
Append a file to a folder in a filesystem. | |
int | gp_filesystem_dump (CameraFilesystem *fs) |
Dump the current filesystem. | |
int | gp_filesystem_delete_all (CameraFilesystem *fs, const char *folder, GPContext *context) |
Delete all files in specified folder. | |
int | gp_filesystem_list_files (CameraFilesystem *fs, const char *folder, CameraList *list, GPContext *context) |
Get the list of files in a folder. | |
int | gp_filesystem_list_folders (CameraFilesystem *fs, const char *folder, CameraList *list, GPContext *context) |
List all subfolders within a filesystem folder. | |
int | gp_filesystem_count (CameraFilesystem *fs, const char *folder, GPContext *context) |
Count files a folder of a filesystem. | |
int | gp_filesystem_delete_file (CameraFilesystem *fs, const char *folder, const char *filename, GPContext *context) |
Delete a file from a folder. | |
int | gp_filesystem_delete_file_noop (CameraFilesystem *fs, const char *folder, const char *filename, GPContext *context) |
Delete a virtal file from a folder in the filesystem. | |
int | gp_filesystem_make_dir (CameraFilesystem *fs, const char *folder, const char *name, GPContext *context) |
Create a subfolder within a folder. | |
int | gp_filesystem_remove_dir (CameraFilesystem *fs, const char *folder, const char *name, GPContext *context) |
Remove a subfolder from within a folder. | |
int | gp_filesystem_put_file (CameraFilesystem *fs, const char *folder, CameraFile *file, GPContext *context) |
Upload a file to a folder on the device filesystem. | |
int | gp_filesystem_name (CameraFilesystem *fs, const char *folder, int filenumber, const char **filename, GPContext *context) |
Lookup the filename of an indexed file within a folder. | |
int | gp_filesystem_number (CameraFilesystem *fs, const char *folder, const char *filename, GPContext *context) |
Get the index of a file in specified folder. | |
int | gp_filesystem_get_folder (CameraFilesystem *fs, const char *filename, const char **folder, GPContext *context) |
Search a folder that contains a given filename. | |
int | gp_filesystem_set_list_funcs (CameraFilesystem *fs, CameraFilesystemListFunc file_list_func, CameraFilesystemListFunc folder_list_func, void *data) |
Set the functions to list folders and files. | |
int | gp_filesystem_set_file_funcs (CameraFilesystem *fs, CameraFilesystemGetFileFunc get_file_func, CameraFilesystemDeleteFileFunc del_file_func, void *data) |
Set camera filesystem file related functions. | |
int | gp_filesystem_set_folder_funcs (CameraFilesystem *fs, CameraFilesystemPutFileFunc put_file_func, CameraFilesystemDeleteAllFunc delete_all_func, CameraFilesystemDirFunc make_dir_func, CameraFilesystemDirFunc remove_dir_func, void *data) |
Set folder related functions of the filesystem. | |
int | gp_filesystem_get_file (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileType type, CameraFile *file, GPContext *context) |
Get file data from the filesystem. | |
int | gp_filesystem_set_info_funcs (CameraFilesystem *fs, CameraFilesystemGetInfoFunc get_info_func, CameraFilesystemSetInfoFunc set_info_func, void *data) |
Set file information functions. | |
int | gp_filesystem_set_funcs (CameraFilesystem *fs, CameraFilesystemFuncs *funcs, void *data) |
Set all filesystem related function pointers. | |
int | gp_filesystem_get_info (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileInfo *info, GPContext *context) |
Get information about the specified file. | |
int | gp_filesystem_set_file_noop (CameraFilesystem *fs, const char *folder, CameraFile *file, GPContext *context) |
Attach file content to a specified file. | |
int | gp_filesystem_set_info_noop (CameraFilesystem *fs, const char *folder, CameraFileInfo info, GPContext *context) |
Store the file information in the virtual fs. | |
int | gp_filesystem_set_info (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileInfo info, GPContext *context) |
Set information about a file. | |
int | gp_filesystem_get_storageinfo (CameraFilesystem *fs, CameraStorageInformation **storageinfo, int *nrofstorageinfos, GPContext *context) |
Get the storage information about this filesystem. |
#define CA | ( | f, | |||
c | ) |
Value:
{ \ if ((f)[0] != '/') { \ gp_context_error ((c), \ _("The path '%s' is not absolute."), (f)); \ return (GP_ERROR_PATH_NOT_ABSOLUTE); \ } \ }
#define CC | ( | context | ) |
Value:
{ \ if (gp_context_cancel (context) == GP_CONTEXT_FEEDBACK_CANCEL) \ return GP_ERROR_CANCEL; \ }
#define CL | ( | result, | |||
list | ) |
Value:
{ \ int r = (result); \ \ if (r < 0) { \ gp_list_free (list); \ return (r); \ } \ }
#define CU | ( | result, | |||
file | ) |
Value:
{ \ int r = (result); \ \ if (r < 0) { \ gp_file_unref (file); \ return (r); \ } \ }
#define PICTURES_TO_KEEP 2 |
The default number of pictures to keep in the internal cache, can be overriden by settings.
int gp_filesystem_append | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
const char * | filename, | |||
GPContext * | context | |||
) |
Append a file to a folder in a filesystem.
fs | a CameraFilesystem | |
folder | the folder where to put the file in | |
filename | filename of the file | |
context | a GPContext |
References GP_ERROR_FILE_EXISTS, GP_ERROR_NO_MEMORY, gp_log(), GP_LOG_DEBUG, and GP_OK.
Referenced by gp_filesystem_list_files().
int gp_filesystem_count | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
GPContext * | context | |||
) |
Count files a folder of a filesystem.
fs | a CameraFilesystem | |
folder | a folder in which to count the files | |
context | a GPContext |
References GP_ERROR_DIRECTORY_NOT_FOUND.
int gp_filesystem_delete_all | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
GPContext * | context | |||
) |
Delete all files in specified folder.
fs | a CameraFilesystem | |
folder | the folder in which to delete all files | |
context | a GPContext |
References GP_ERROR_DIRECTORY_NOT_FOUND, gp_log(), GP_LOG_DEBUG, GP_OK, and gp_result_as_string().
Referenced by gp_camera_folder_delete_all().
int gp_filesystem_delete_file | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
const char * | filename, | |||
GPContext * | context | |||
) |
Delete a file from a folder.
fs | a CameraFilesystem | |
folder | a folder in which to delete the file | |
filename | the name of the file to delete | |
context | a GPContext |
References GP_ERROR_NOT_SUPPORTED, and GP_OK.
Referenced by gp_camera_file_delete().
int gp_filesystem_delete_file_noop | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
const char * | filename, | |||
GPContext * | context | |||
) |
Delete a virtal file from a folder in the filesystem.
fs | a CameraFilesystem | |
folder | a folder in which to delete the file | |
filename | the name of the file to delete | |
context | a GPContext |
int gp_filesystem_dump | ( | CameraFilesystem * | fs | ) |
Dump the current filesystem.
fs | the CameraFilesystem |
References GP_OK.
int gp_filesystem_free | ( | CameraFilesystem * | fs | ) |
Free filesystem struct.
fs | a CameraFilesystem |
References gp_filesystem_reset(), and GP_OK.
Referenced by gp_camera_free().
int gp_filesystem_get_file | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
const char * | filename, | |||
CameraFileType | type, | |||
CameraFile * | file, | |||
GPContext * | context | |||
) |
Get file data from the filesystem.
fs | a CameraFilesystem | |
folder | the folder in which the file can be found | |
filename | the name of the file to download | |
type | the type of the file | |
file | the file that receives the data | |
context | a GPContext |
References GP_ERROR_CORRUPTED_DATA, GP_ERROR_NOT_SUPPORTED, gp_file_adjust_name_for_mime_type(), gp_file_get_data_and_size(), gp_file_new(), gp_file_set_data_and_size(), gp_file_set_mime_type(), gp_file_set_name(), gp_file_set_type(), GP_FILE_TYPE_EXIF, GP_FILE_TYPE_PREVIEW, gp_file_unref(), gp_filesystem_set_file_noop(), GP_OK, and gp_result_as_string().
Referenced by gp_camera_file_get().
int gp_filesystem_get_folder | ( | CameraFilesystem * | fs, | |
const char * | filename, | |||
const char ** | folder, | |||
GPContext * | context | |||
) |
Search a folder that contains a given filename.
fs | a CameraFilesystem | |
filename | the name of the file to search in the fs | |
folder | pointer to value where the string is stored in | |
context | a GPContext |
Note that you get a reference to the string stored in the filesystem structure, so do not free it yourself.
References GP_ERROR_FILE_NOT_FOUND, and GP_OK.
int gp_filesystem_get_info | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
const char * | filename, | |||
CameraFileInfo * | info, | |||
GPContext * | context | |||
) |
Get information about the specified file.
fs | a CameraFilesystem | |
folder | the folder that contains the file | |
filename | the filename | |
info | pointer to CameraFileInfo that receives the information | |
context | a GPContext |
References GP_ERROR_NOT_SUPPORTED, GP_FILE_INFO_MTIME, and GP_OK.
Referenced by gp_camera_file_get_info(), and gp_filesystem_set_file_noop().
int gp_filesystem_get_storageinfo | ( | CameraFilesystem * | fs, | |
CameraStorageInformation ** | storageinfo, | |||
int * | nrofstorageinfos, | |||
GPContext * | context | |||
) |
Get the storage information about this filesystem.
fs | the filesystem | |
storageinfo | Pointer to receive a pointer to/array of storage info items | |
nrofstorageinfos | Pointer to receive number of array entries | |
context | a GPContext |
Retrieves the storage information, like maximum and free space, for the specified filesystem, if supported by the device. The storage information is returned in an newly allocated array of CameraStorageInformation objects, to which the pointer pointed to by storageinfo will be set.
The variable pointed to by nrofstorageinfos will be set to the number of elements in that array.
It is the caller's responsibility to free the memory of the array.
References GP_ERROR_NOT_SUPPORTED.
Referenced by gp_camera_get_storageinfo().
int gp_filesystem_list_files | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
CameraList * | list, | |||
GPContext * | context | |||
) |
Get the list of files in a folder.
fs | a CameraFilesystem | |
folder | a folder of which a file list should be generated | |
list | a CameraList where to put the list of files into | |
context | a GPContext |
References GP_ERROR_DIRECTORY_NOT_FOUND, gp_filesystem_append(), gp_list_append(), gp_list_count(), gp_list_get_name(), gp_list_reset(), gp_log(), GP_LOG_DEBUG, and GP_OK.
Referenced by gp_camera_folder_list_files(), and gp_filesystem_number().
int gp_filesystem_list_folders | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
CameraList * | list, | |||
GPContext * | context | |||
) |
List all subfolders within a filesystem folder.
fs | a CameraFilesystem | |
folder | a folder | |
list | a CameraList where subfolders should be listed | |
context | a GPContext |
References GP_ERROR_DIRECTORY_NOT_FOUND, gp_list_append(), gp_list_count(), gp_list_get_name(), gp_list_reset(), gp_log(), GP_LOG_DEBUG, and GP_OK.
Referenced by gp_camera_folder_list_folders(), and gp_filesystem_remove_dir().
int gp_filesystem_make_dir | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
const char * | name, | |||
GPContext * | context | |||
) |
Create a subfolder within a folder.
fs | a CameraFilesystem | |
folder | the folder in which the directory should be created | |
name | the name of the directory to be created | |
context | a GPContext |
References GP_ERROR_DIRECTORY_NOT_FOUND, and GP_ERROR_NOT_SUPPORTED.
Referenced by gp_camera_folder_make_dir().
int gp_filesystem_name | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
int | filenumber, | |||
const char ** | filename, | |||
GPContext * | context | |||
) |
Lookup the filename of an indexed file within a folder.
fs | a CameraFilesystem | |
folder | the folder where to look up the file with the filenumber | |
filenumber | the number of the file | |
filename | pointer to a filename where the result is stored | |
context | a GPContext |
References GP_ERROR_DIRECTORY_NOT_FOUND, GP_ERROR_FILE_NOT_FOUND, and GP_OK.
int gp_filesystem_new | ( | CameraFilesystem ** | fs | ) |
Create a new filesystem struct.
fs | a pointer to a CameraFilesystem |
References GP_ERROR_NO_MEMORY, and GP_OK.
Referenced by gp_camera_new().
int gp_filesystem_number | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
const char * | filename, | |||
GPContext * | context | |||
) |
Get the index of a file in specified folder.
fs | a CameraFilesystem | |
folder | the folder where to look for file called filename | |
filename | the file to look for | |
context | a GPContext |
References GP_ERROR_DIRECTORY_NOT_FOUND, GP_ERROR_FILE_NOT_FOUND, gp_filesystem_list_files(), gp_filesystem_number(), gp_list_free(), and gp_list_new().
Referenced by gp_filesystem_number(), and gp_filesystem_set_info().
int gp_filesystem_put_file | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
CameraFile * | file, | |||
GPContext * | context | |||
) |
Upload a file to a folder on the device filesystem.
fs | a CameraFilesystem | |
folder | the folder where to put the file into | |
file | the file | |
context | a GPContext |
References GP_ERROR_DIRECTORY_NOT_FOUND, and GP_ERROR_NOT_SUPPORTED.
Referenced by gp_camera_folder_put_file().
int gp_filesystem_remove_dir | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
const char * | name, | |||
GPContext * | context | |||
) |
Remove a subfolder from within a folder.
fs | a CameraFilesystem | |
folder | the folder in which the directory should be created | |
name | the name of the directory to be created | |
context | a GPContext |
References GP_ERROR_DIRECTORY_EXISTS, GP_ERROR_DIRECTORY_NOT_FOUND, GP_ERROR_FILE_EXISTS, GP_ERROR_NOT_SUPPORTED, gp_filesystem_list_folders(), gp_list_free(), gp_list_new(), gp_log(), GP_LOG_DEBUG, and GP_OK.
Referenced by gp_camera_folder_remove_dir().
int gp_filesystem_reset | ( | CameraFilesystem * | fs | ) |
Clear the filesystem.
fs | the filesystem to be cleared |
References gp_log(), GP_LOG_DEBUG, GP_LOG_ERROR, and GP_OK.
Referenced by gp_camera_exit(), and gp_filesystem_free().
int gp_filesystem_set_file_funcs | ( | CameraFilesystem * | fs, | |
CameraFilesystemGetFileFunc | get_file_func, | |||
CameraFilesystemDeleteFileFunc | del_file_func, | |||
void * | data | |||
) |
Set camera filesystem file related functions.
fs | a CameraFilesystem | |
get_file_func | the function downloading files | |
del_file_func | the function deleting files | |
data | private data structure |
References GP_OK.
int gp_filesystem_set_file_noop | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
CameraFile * | file, | |||
GPContext * | context | |||
) |
Attach file content to a specified file.
fs | a CameraFilesystem | |
folder | a folder in the filesystem | |
file | a CameraFile | |
context,: | a GPContext |
References _CameraFileInfoFile::fields, GP_ERROR, gp_file_get_data_and_size(), gp_file_get_mtime(), gp_file_get_name(), gp_file_get_type(), GP_FILE_INFO_MTIME, gp_file_ref(), gp_file_set_mtime(), GP_FILE_TYPE_AUDIO, GP_FILE_TYPE_EXIF, GP_FILE_TYPE_METADATA, GP_FILE_TYPE_NORMAL, GP_FILE_TYPE_PREVIEW, GP_FILE_TYPE_RAW, gp_file_unref(), gp_filesystem_get_info(), GP_OK, and _CameraFileInfoFile::mtime.
Referenced by gp_filesystem_get_file().
int gp_filesystem_set_folder_funcs | ( | CameraFilesystem * | fs, | |
CameraFilesystemPutFileFunc | put_file_func, | |||
CameraFilesystemDeleteAllFunc | delete_all_func, | |||
CameraFilesystemDirFunc | make_dir_func, | |||
CameraFilesystemDirFunc | remove_dir_func, | |||
void * | data | |||
) |
Set folder related functions of the filesystem.
fs | a CameraFilesystem | |
put_file_func | function used to upload files | |
delete_all_func | function used to delete all files in a folder | |
make_dir_func | function used to create a new directory | |
remove_dir_func | function used to remove an existing directory | |
data | a data object that will passed to all called functions |
The fs will try to compensate missing delete_all_func functionality with the delete_file_func if such a function has been supplied.
References GP_OK.
int gp_filesystem_set_funcs | ( | CameraFilesystem * | fs, | |
CameraFilesystemFuncs * | funcs, | |||
void * | data | |||
) |
Set all filesystem related function pointers.
fs | a CameraFilesystem | |
funcs | pointer to a struct of filesystem functions | |
data | private data |
References GP_OK.
Referenced by camera_init().
int gp_filesystem_set_info | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
const char * | filename, | |||
CameraFileInfo | info, | |||
GPContext * | context | |||
) |
Set information about a file.
fs | a CameraFilesystem | |
folder | foldername where the file resides | |
filename | the files name | |
info | the CameraFileInfo to set | |
context | a GPContext |
References _CameraFileInfoAudio::fields, _CameraFileInfoPreview::fields, _CameraFileInfoFile::fields, GP_ERROR_BAD_PARAMETERS, GP_ERROR_FILE_NOT_FOUND, GP_ERROR_NOT_SUPPORTED, GP_FILE_INFO_HEIGHT, GP_FILE_INFO_NAME, GP_FILE_INFO_NONE, GP_FILE_INFO_PERMISSIONS, GP_FILE_INFO_SIZE, GP_FILE_INFO_STATUS, GP_FILE_INFO_TYPE, GP_FILE_INFO_WIDTH, gp_filesystem_number(), GP_OK, _CameraFileInfoFile::name, and _CameraFileInfoFile::permissions.
Referenced by gp_camera_file_set_info().
int gp_filesystem_set_info_funcs | ( | CameraFilesystem * | fs, | |
CameraFilesystemGetInfoFunc | get_info_func, | |||
CameraFilesystemSetInfoFunc | set_info_func, | |||
void * | data | |||
) |
Set file information functions.
fs | a CameraFilesystem | |
get_info_func | the function to retrieve file information | |
set_info_func | the function to set file information | |
data | private data |
References GP_OK.
int gp_filesystem_set_info_noop | ( | CameraFilesystem * | fs, | |
const char * | folder, | |||
CameraFileInfo | info, | |||
GPContext * | context | |||
) |
Store the file information in the virtual fs.
fs | a CameraFilesystem | |
folder | the foldername | |
info | the CameraFileInfo to store | |
context | a GPContext |
References GP_OK, and _CameraFileInfoFile::name.
int gp_filesystem_set_list_funcs | ( | CameraFilesystem * | fs, | |
CameraFilesystemListFunc | file_list_func, | |||
CameraFilesystemListFunc | folder_list_func, | |||
void * | data | |||
) |
Set the functions to list folders and files.
fs | a CameraFilesystem | |
file_list_func | the function that will return listings of files | |
folder_list_func | the function that will return listings of folders | |
data | private data structure |
References GP_OK.