enlightenment/src/bin/e_fm_shared.h

207 lines
5.1 KiB
C

#ifdef E_FM_SHARED_DATATYPES
# define E_DEVICE_TYPE_STORAGE 1
# define E_DEVICE_TYPE_VOLUME 2
typedef struct _E_Storage E_Storage;
typedef struct _E_Volume E_Volume;
typedef struct _E_Fm2_Mount E_Fm2_Mount;
struct _E_Storage
{
int type;
char *udi, *bus;
char *drive_type;
char *model, *vendor, *serial;
char removable, media_available;
unsigned long long media_size;
char requires_eject, hotpluggable;
char media_check_enabled;
struct
{
char *drive, *volume;
} icon;
Eina_List *volumes;
unsigned char validated;
unsigned char trackable;
};
struct _E_Volume
{
int type;
char *udi, *uuid;
char *label, *icon, *fstype;
unsigned long long size;
char partition;
int partition_number;
char *partition_label;
char mounted;
char *mount_point;
char *parent;
E_Storage *storage;
void *prop_handler;
Eina_List *mounts;
unsigned char validated;
char auto_unmount; // unmount, when last associated fm window closed
char first_time; // volume discovery in init sequence
Ecore_Timer *guard; // operation guard timer
DBusPendingCall *op; // d-bus call handle
};
struct _E_Fm2_Mount
{
const char *udi;
const char *mount_point;
void (*mount_ok) (void *data);
void (*mount_fail) (void *data);
void (*unmount_ok) (void *data);
void (*unmount_fail) (void *data);
void *data;
E_Volume *volume;
unsigned char mounted : 1;
};
#endif
#ifdef E_FM_SHARED_CODEC
static Eet_Data_Descriptor *_e_volume_edd = NULL;
static Eet_Data_Descriptor *_e_storage_edd = NULL;
static void
_e_volume_free(E_Volume *v)
{
if (v->storage)
{
v->storage->volumes = eina_list_remove(v->storage->volumes, v);
v->storage = NULL;
}
if (v->udi) free(v->udi);
if (v->uuid) free(v->uuid);
if (v->label) free(v->label);
if (v->icon) free(v->icon);
if (v->fstype) free(v->fstype);
if (v->partition_label) free(v->partition_label);
if (v->mount_point) free(v->mount_point);
if (v->parent) free(v->parent);
free(v);
}
static void
_e_storage_free(E_Storage *s)
{
E_Volume *v;
EINA_LIST_FREE(s->volumes, v)
{
_e_volume_free(v);
}
if (s->udi) free(s->udi);
if (s->bus) free(s->bus);
if (s->drive_type) free(s->drive_type);
if (s->model) free(s->model);
if (s->vendor) free(s->vendor);
if (s->serial) free(s->serial);
if (s->icon.drive) free(s->icon.drive);
if (s->icon.volume) free(s->icon.volume);
free(s);
}
static Eet_Data_Descriptor *
_e_volume_edd_new(void)
{
Eet_Data_Descriptor *edd;
Eet_Data_Descriptor_Class eddc;
if (!eet_eina_stream_data_descriptor_class_set(&eddc, "e_volume", sizeof (E_Volume)))
return NULL;
eddc.func.str_alloc = (char *(*)(const char *)) strdup;
eddc.func.str_free = (void (*)(const char *)) free;
edd = eet_data_descriptor_stream_new(&eddc);
#define DAT(x, y, z) EET_DATA_DESCRIPTOR_ADD_BASIC(edd, E_Volume, x, y, z)
DAT("type", type, EET_T_INT);
DAT("udi", udi, EET_T_STRING);
DAT("uuid", uuid, EET_T_STRING);
DAT("label", label, EET_T_STRING);
DAT("fstype", fstype, EET_T_STRING);
DAT("size", size, EET_T_ULONG_LONG);
DAT("partition", partition, EET_T_CHAR);
DAT("partition_number", partition_number, EET_T_INT);
DAT("partition_label", partition_label, EET_T_STRING);
DAT("mounted", mounted, EET_T_CHAR);
DAT("mount_point", mount_point, EET_T_STRING);
DAT("parent", parent, EET_T_STRING);
DAT("first_time", first_time, EET_T_CHAR);
#undef DAT
return edd;
}
static Eet_Data_Descriptor *
_e_storage_edd_new(void)
{
Eet_Data_Descriptor *edd;
Eet_Data_Descriptor_Class eddc;
if (!eet_eina_stream_data_descriptor_class_set(&eddc, "e_storage", sizeof (E_Storage)))
return NULL;
eddc.func.str_alloc = (char *(*)(const char *)) strdup;
eddc.func.str_free = (void (*)(const char *)) free;
edd = eet_data_descriptor_stream_new(&eddc);
#define DAT(x, y, z) EET_DATA_DESCRIPTOR_ADD_BASIC(edd, E_Storage, x, y, z)
DAT("type", type, EET_T_INT);
DAT("udi", udi, EET_T_STRING);
DAT("bus", bus, EET_T_STRING);
DAT("drive_type", drive_type, EET_T_STRING);
DAT("model", model, EET_T_STRING);
DAT("vendor", vendor, EET_T_STRING);
DAT("serial", serial, EET_T_STRING);
DAT("removable", removable, EET_T_CHAR);
DAT("media_available", media_available, EET_T_CHAR);
DAT("media_size", media_size, EET_T_ULONG_LONG);
DAT("requires_eject", requires_eject, EET_T_CHAR);
DAT("hotpluggable", hotpluggable, EET_T_CHAR);
DAT("media_check_enabled", media_check_enabled, EET_T_CHAR);
DAT("icon.drive", icon.drive, EET_T_STRING);
DAT("icon.volume", icon.volume, EET_T_STRING);
#undef DAT
return edd;
}
static void
_e_storage_volume_edd_init(void)
{
_e_volume_edd = _e_volume_edd_new();
_e_storage_edd = _e_storage_edd_new();
}
static void
_e_storage_volume_edd_shutdown(void)
{
if (_e_volume_edd)
{
eet_data_descriptor_free(_e_volume_edd);
_e_volume_edd = NULL;
}
if (_e_storage_edd)
{
eet_data_descriptor_free(_e_storage_edd);
_e_storage_edd = NULL;
}
}
#endif