git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@8232 67ed7778-7388-44ab-90cf-0a291f65f57c
354 lines
12 KiB
C#
354 lines
12 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace LibGPhoto2
|
|
{
|
|
public enum CameraFilePermissions
|
|
{
|
|
None = 0,
|
|
Read = 1 << 0,
|
|
Delete = 1 << 1,
|
|
All = 0xFF
|
|
}
|
|
|
|
public enum CameraFileStatus
|
|
{
|
|
NotDownloaded,
|
|
Downloaded
|
|
}
|
|
|
|
public enum CameraFileInfoFields
|
|
{
|
|
None = 0,
|
|
Type = 1 << 0,
|
|
Name = 1 << 1,
|
|
Size = 1 << 2,
|
|
Width = 1 << 3,
|
|
Height = 1 << 4,
|
|
Permissions = 1 << 5,
|
|
Status = 1 << 6,
|
|
MTime = 1 << 7,
|
|
All = 0xFF
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public unsafe struct CameraFileInfoAudio
|
|
{
|
|
public CameraFileInfoFields fields;
|
|
public CameraFileStatus status;
|
|
public ulong size;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] public char[] type;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public unsafe struct CameraFileInfoPreview
|
|
{
|
|
public CameraFileInfoFields fields;
|
|
public CameraFileStatus status;
|
|
public ulong size;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] public char[] type;
|
|
|
|
public uint width, height;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public unsafe struct CameraFileInfoFile
|
|
{
|
|
public CameraFileInfoFields fields;
|
|
public CameraFileStatus status;
|
|
public ulong size;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] public char[] type;
|
|
|
|
public uint width, height;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] public char[] name;
|
|
public CameraFilePermissions permissions;
|
|
public long time;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public unsafe struct CameraFileInfo
|
|
{
|
|
public CameraFileInfoPreview preview;
|
|
public CameraFileInfoFile file;
|
|
public CameraFileInfoAudio audio;
|
|
}
|
|
|
|
#if false
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal unsafe struct _CameraFilesystem
|
|
{
|
|
|
|
internal delegate ErrorCode _CameraFilesystemGetFileFunc (HandleRef fs, char *folder, char *filename, CameraFileType type, HandleRef file, void *data, HandleRef context);
|
|
|
|
internal delegate ErrorCode _CameraFilesystemDeleteFileFunc (HandleRef fs, char *folder, char *filename, void *data, HandleRef context);
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_set_file_funcs (HandleRef fs, _CameraFilesystemGetFileFunc get_file_func, _CameraFilesystemDeleteFileFunc del_file_func, void *data);
|
|
|
|
internal delegate ErrorCode _CameraFilesystemGetInfoFunc (HandleRef fs, char *folder, char *filename, CameraFileInfo *info, void *data, HandleRef context);
|
|
|
|
internal delegate ErrorCode _CameraFilesystemSetInfoFunc (HandleRef fs, char *folder, char *filename, CameraFileInfo info, void *data, HandleRef context);
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_set_info_funcs (HandleRef fs, _CameraFilesystemGetInfoFunc get_info_func, _CameraFilesystemSetInfoFunc set_info_func, void *data);
|
|
|
|
internal delegate ErrorCode _CameraFilesystemPutFileFunc (HandleRef fs, char *folder, HandleRef file, void *data, HandleRef context);
|
|
|
|
internal delegate ErrorCode _CameraFilesystemDeleteAllFunc (HandleRef fs, char *folder, void *data, HandleRef context);
|
|
|
|
internal delegate ErrorCode _CameraFilesystemDirFunc (HandleRef fs, char *folder, char *name, void *data, HandleRef context);
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_set_folder_funcs (HandleRef fs, _CameraFilesystemPutFileFunc put_file_func, _CameraFilesystemDeleteAllFunc delete_all_func, _CameraFilesystemDirFunc make_dir_func, _CameraFilesystemDirFunc remove_dir_func, void *data);
|
|
|
|
internal delegate ErrorCode _CameraFilesystemListFunc (HandleRef fs, char *folder, HandleRef list, void *data, HandleRef context);
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_set_list_funcs (HandleRef fs, _CameraFilesystemListFunc file_list_func, _CameraFilesystemListFunc folder_list_func, void *data);
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_append (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string filename, HandleRef context);
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_set_file_noop (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, HandleRef file, HandleRef context);
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_dump (HandleRef fs);
|
|
}
|
|
#endif
|
|
|
|
public class CameraFilesystem : Object
|
|
{
|
|
bool need_dispose;
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_new (out IntPtr fs);
|
|
|
|
public CameraFilesystem()
|
|
{
|
|
IntPtr native;
|
|
|
|
Error.CheckError (gp_filesystem_new(out native));
|
|
|
|
this.handle = new HandleRef (this, native);
|
|
need_dispose = true;
|
|
}
|
|
|
|
unsafe internal CameraFilesystem(IntPtr fs)
|
|
{
|
|
this.handle = new HandleRef (this, fs);
|
|
need_dispose = false;
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_free (HandleRef fs);
|
|
|
|
protected override void Cleanup ()
|
|
{
|
|
if (need_dispose)
|
|
Error.CheckError (gp_filesystem_free(this.Handle));
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_list_files (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, HandleRef list, HandleRef context);
|
|
|
|
public CameraList ListFiles (string folder, Context context)
|
|
{
|
|
ErrorCode result;
|
|
CameraList list = new CameraList();
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_list_files (this.Handle, folder, list.Handle, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
return list;
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_list_folders (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, HandleRef list, HandleRef context);
|
|
|
|
public CameraList ListFolders (string folder, Context context)
|
|
{
|
|
ErrorCode result;
|
|
CameraList list = new CameraList();
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_list_folders (this.Handle, folder, list.Handle, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
return list;
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_get_file (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string filename, CameraFileType type, HandleRef file, HandleRef context);
|
|
|
|
|
|
public CameraFile GetFile (string folder, string filename, CameraFileType type, Context context)
|
|
{
|
|
ErrorCode result;
|
|
CameraFile file = new CameraFile();
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_get_file (this.Handle, folder, filename, type, file.Handle, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
return file;
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_put_file (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, HandleRef file, HandleRef context);
|
|
|
|
public void PutFile (string folder, CameraFile file, Context context)
|
|
{
|
|
ErrorCode result;
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_put_file (this.Handle, folder, file.Handle, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_delete_file (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string filename, HandleRef context);
|
|
|
|
public void DeleteFile (string folder, string filename, Context context)
|
|
{
|
|
ErrorCode result;
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_delete_file (this.Handle, folder, filename, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_delete_all (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, HandleRef context);
|
|
|
|
public void DeleteAll (string folder, Context context)
|
|
{
|
|
ErrorCode result;
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_delete_all (this.Handle, folder, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_make_dir (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string name, HandleRef context);
|
|
|
|
public void MakeDirectory (string folder, string name, Context context)
|
|
{
|
|
ErrorCode result;
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_make_dir (this.Handle, folder, name, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_remove_dir (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string name, HandleRef context);
|
|
|
|
public void RemoveDirectory (string folder, string name, Context context)
|
|
{
|
|
ErrorCode result;
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_remove_dir (this.Handle, folder, name, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_get_info (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string filename, out CameraFileInfo info, HandleRef context);
|
|
|
|
public CameraFileInfo GetInfo (string folder, string filename, Context context)
|
|
{
|
|
ErrorCode result;
|
|
CameraFileInfo fileinfo = new CameraFileInfo();
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_get_info (this.Handle, folder, filename, out fileinfo, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
return fileinfo;
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_set_info (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string filename, CameraFileInfo info, HandleRef context);
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_set_info_noop (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, CameraFileInfo info, HandleRef context);
|
|
|
|
public void SetInfo (string folder, string filename, CameraFileInfo fileinfo, Context context)
|
|
{
|
|
ErrorCode result;
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_set_info (this.Handle, folder, filename, fileinfo, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_number (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string filename, HandleRef context);
|
|
|
|
public int GetNumber (string folder, string filename, Context context)
|
|
{
|
|
ErrorCode result;
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_number (this.Handle, folder, filename, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
return (int)result;
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_name (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, int filenumber, out string filename, HandleRef context);
|
|
|
|
public string GetName (string folder, int number, Context context)
|
|
{
|
|
ErrorCode result;
|
|
string name;
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_name (this.Handle, folder, number, out name, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
return name;
|
|
}
|
|
|
|
//[DllImport ("libgphoto2.so")]
|
|
//internal static extern ErrorCode gp_filesystem_get_folder (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string filename, IntPtr folder, HandleRef context);
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_count (HandleRef fs, [MarshalAs(UnmanagedType.LPTStr)] string folder, HandleRef context);
|
|
|
|
public int Count (string folder, Context context)
|
|
{
|
|
ErrorCode result;
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_count (this.Handle, folder, context.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
return (int)result;
|
|
}
|
|
|
|
[DllImport ("libgphoto2.so")]
|
|
internal static extern ErrorCode gp_filesystem_reset (HandleRef fs);
|
|
|
|
public void Reset ()
|
|
{
|
|
ErrorCode result;
|
|
unsafe
|
|
{
|
|
result = gp_filesystem_reset (this.Handle);
|
|
}
|
|
if (Error.IsError(result)) throw Error.ErrorException(result);
|
|
}
|
|
}
|
|
}
|