Files
libgphoto2/bindings/csharp/CameraFilesystem.cs
2005-08-31 21:24:59 +00:00

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);
}
}
}