All pastes #551810 Raw Edit

the whole thing

public c v1 · immutable
·published 2007-06-08 23:13 UTC
rendered paste body
#include <e.h>#include "e_mod_main.h"#include <E_Hal.h>#include <stdlib.h>#include <stdio.h>// forward declarationstypedef struct Block Block;/** Prototype **/static void _mount_down(void *data, Evas *e, Evas_Object *obj, void *event_info);static void cb_signal_device_added(void *data, DBusMessage *msg);static void cb_is_block_device(void *user_data, void *reply_data, DBusError *error);static void cb_block_device_properties(void *data, void *reply_data, DBusError *error);void mount_block_device(Block *b);/////////////////////////////////////////struct Block {  char *device;  char is_volume;          };Block *block_new(void){  Block *b;  b = calloc(1, sizeof(Block));      return b;}//////////////////////////////////////////static E_DBus_Connection *conn = NULL;/**//* gadcon requirements */static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);static void _gc_shutdown(E_Gadcon_Client *gcc);static void _gc_orient(E_Gadcon_Client *gcc);static char *_gc_label(void);static Evas_Object *_gc_icon(Evas *evas);static E_Module *mount_module = NULL;/* and actually define the gadcon class that this module provides (just 1) */static const E_Gadcon_Client_Class _gadcon_class ={   GADCON_CLIENT_CLASS_VERSION,     "Mount",     {	_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon     },   E_GADCON_CLIENT_STYLE_PLAIN};EAPI E_Module_Api e_modapi = {  E_MODULE_API_VERSION,  "Mount"};/**//* actual module specifics */typedef struct _Mount Mount;typedef struct _Instance Instance;struct _Instance{   E_Gadcon_Client *gcc;   Evas_Object     *o_mount;   Mount           *mount;   Evas_Object     *o_box;   }; struct _Mount {	Instance     *inst;	Evas_Object  *o_mount;	Evas_Object  *o_box;	};Instance *mod_inst = NULL;static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style){   Evas_Object *o;   E_Gadcon_Client *gcc;   Instance *inst;      char buf[4096];      inst = E_NEW(Instance, 1);      o = edje_object_add(gc->evas);      snprintf (buf, sizeof (buf), "%s/mount.edj",	    e_module_dir_get (mount_module));      edje_object_file_set (o, buf, "modules/mount/main");      evas_object_show(o);      evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _mount_down, o);   gcc = e_gadcon_client_new(gc, name, id, style, o);   gcc->data = inst;      inst->gcc = gcc;   inst->o_mount = o;      e_gadcon_client_util_menu_attach(gcc);      mod_inst = inst;      return gcc;}static void_gc_shutdown(E_Gadcon_Client *gcc){   Instance *inst;      inst = gcc->data;   evas_object_del(inst->o_mount);   free(inst);}static void_gc_orient(E_Gadcon_Client *gcc){   Instance *inst;      inst = gcc->data;   e_gadcon_client_aspect_set(gcc, 16, 16);   e_gadcon_client_min_size_set(gcc, 16, 16);}static char *_gc_label(void){   return _("Mount");}static Evas_Object *_gc_icon(Evas *evas){   Evas_Object *o;   char buf[4096];      o = edje_object_add(evas);   snprintf(buf, sizeof(buf), "%s/e-module-mount.edj",	    e_module_dir_get(mount_module));   edje_object_file_set(o, buf, "icon");   return o;}EAPI void *e_modapi_init (E_Module * m){  bindtextdomain (PACKAGE, LOCALEDIR);  bind_textdomain_codeset (PACKAGE, "UTF-8");//  e_module_dialog_show (m, D_ ("Enlightenment Mount Module"),//			D_ ("Init was called!. 12345"));    mount_module = m;  e_dbus_init();  conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);   if(!conn)   {        e_module_dialog_show (m, D_ ("Enlightenment Mount Module"),			D_ ("Error connecting to dbus!."));      	    }      e_dbus_signal_handler_add(conn, "org.freedesktop.Hal", "/org/freedesktop/Hal/Manager", "org.freedesktop.Hal.Manager", "DeviceAdded", cb_signal_device_added, NULL);  //e_dbus_signal_handler_add(conn, "org.freedesktop.Hal", "/org/freedesktop/Hal/Manager", "org.freedesktop.Hal.Manager", "DeviceRemoved", cb_signal_device_removed, NULL);  //e_dbus_signal_handler_add(conn, "org.freedesktop.Hal", "/org/freedesktop/Hal/Manager", "org.freedesktop.Hal.Manager", "NewCapability", cb_signal_new_capability, NULL);  printf("*********************************** e_modapi_init() ");    e_gadcon_provider_register(&_gadcon_class);  return m;}EAPI inte_modapi_shutdown (E_Module * m){   mount_module = NULL;      e_gadcon_provider_unregister(&_gadcon_class);   return 1;}EAPI inte_modapi_save (E_Module * m){  return 1;}EAPI inte_modapi_about (E_Module * m){  e_module_dialog_show (m, D_ ("Enlightenment Mount Module"),			D_ ("This module is used to mount removable devices."));  return 1;}static void_mount_down(void *data, Evas *e, Evas_Object *obj, void *event_info) {          e_module_dialog_show (mount_module, D_ ("Enlightenment Mount Module"),			D_ ("Mouse down!!!")); 	 }/** * Dbus/hal callback functions  */static void cb_signal_device_added(void *data, DBusMessage *msg){		DBusError err;	char *udi;	int ret;	printf("********************* cb_signal_device_added()");//	 e_module_dialog_show (mount_module, D_ ("Enlightenment Mount Module"),//			D_ ("cb_signal_device_added."));	    dbus_error_init(&err);    dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &udi, DBUS_TYPE_INVALID);    	udi = strdup(udi);	ret = e_hal_device_query_capability(conn, udi, "block", cb_is_block_device, strdup(udi));		      }static voidcb_is_block_device(void *user_data, void *reply_data, DBusError *error){  char *udi = user_data;  E_Hal_Device_Query_Capability_Return *ret = reply_data;     printf("cb_is_block_device()");    if (dbus_error_is_set(error))   {    printf("Error encountered during block_device check.");        dbus_error_free(error);    goto error;  }    printf("Is block device ? %d", ret->boolean);    if (ret && ret->boolean) {    int err =0;    E_Hal_Properties *ret;        Block *b = block_new();    e_hal_device_get_all_properties(conn, udi, cb_block_device_properties, b);      e_module_dialog_show (mount_module, D_ ("Enlightenment Mount Module"),			D_ ("Block device was detected and added."));	  } else {	  printf("Block device not found, ignoring.");  }error:  free(udi);}        static voidcb_block_device_properties(void *data, void *reply_data, DBusError *error){  Block *b = data;    E_Hal_Device_Get_All_Properties_Return *ret = reply_data;  int err = 0;  char *str = NULL;    printf("\ncb_block_device_properties() : invoked\n");    if (dbus_error_is_set(error))   {    printf("\n\nError found cb_block_device_properties\n\n");    dbus_error_free(error);    goto error;  }  b->device = e_hal_property_string_get(ret, "block.device", &err);  b->is_volume = e_hal_property_bool_get(ret, "block.is_volume", &err);    if(err) {    printf("\n\nError encountered while getting property block.device\n\n");                   } else {                    printf("\n\nblock device found at: %s\n\n",b->device);                    if(b->is_volume) {              printf("[*] Device is volume, attempting to mount.");    			  			  mount_block_device(b);          }            }  error:  if(str) free(str);  str = NULL;  }/** * Mount unmount functions */ voidmount_block_device(Block *b) {    //Evas_List *l;   char buf[4096];   Evas_Object *icon = NULL ;   char buf2[4096];   // Ecore_Exe *ex;   printf("\n\n[*]Mounting device...\n\n");   snprintf(buf, sizeof(buf),	   "pmount  %s", b->device);	  	  icon = edje_object_add( evas_object_evas_get(mod_inst->o_mount));	  	  if(!icon) {				  printf("Failed to create edje_object, not displaying icon.");		  	  }	  else {		  printf("[*] Created icon, displaying icon\n");	  snprintf (buf2, sizeof (buf2), "%s/mount.edj",	    e_module_dir_get (mount_module));      	  edje_object_file_set (icon, buf2, "modules/mount/usb");	        evas_object_show(icon);	  }        }