forked from enlightenment/enlightenment
parent
de934e4c55
commit
5111448060
|
@ -4,7 +4,6 @@
|
|||
#define _FILE_OFFSET_BITS 64
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __linux__
|
||||
#include <features.h>
|
||||
#endif
|
||||
|
@ -41,7 +40,6 @@
|
|||
//#include "e_fm_shared_c.h"
|
||||
#include "e_fm_op.h"
|
||||
|
||||
|
||||
#define DEF_SYNC_NUM 8
|
||||
#define DEF_ROUND_TRIP 0.05
|
||||
#define DEF_ROUND_TRIP_TOLERANCE 0.01
|
||||
|
@ -110,10 +108,9 @@ struct _E_Fm_Task
|
|||
const char *dst;
|
||||
const char *rel;
|
||||
int rel_to;
|
||||
int x,y;
|
||||
int x, y;
|
||||
};
|
||||
|
||||
|
||||
/* local subsystem globals */
|
||||
Ecore_Ipc_Server *_e_fm_ipc_server = NULL;
|
||||
|
||||
|
@ -121,7 +118,6 @@ static Eina_List *_e_dirs = NULL;
|
|||
static Eina_List *_e_fops = NULL;
|
||||
static int _e_sync_num = 0;
|
||||
|
||||
|
||||
static Eina_List *_e_fm_ipc_slaves = NULL;
|
||||
static Eina_List *_e_fm_tasks = NULL;
|
||||
|
||||
|
@ -164,7 +160,6 @@ static void _e_fm_ipc_dir_del(E_Dir *ed);
|
|||
|
||||
static const char *_e_fm_ipc_prepare_command(E_Fm_Op_Type type, const char *args);
|
||||
|
||||
|
||||
/* local subsystem functions */
|
||||
int
|
||||
_e_fm_ipc_init(void)
|
||||
|
@ -201,7 +196,7 @@ _e_fm_ipc_cb_server_add(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|||
|
||||
e = event;
|
||||
ecore_ipc_server_send(e->server,
|
||||
6/*E_IPC_DOMAIN_FM*/,
|
||||
6 /*E_IPC_DOMAIN_FM*/,
|
||||
E_FM_OP_HELLO,
|
||||
0, 0, 0, NULL, 0); /* send hello */
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
|
@ -449,7 +444,7 @@ _e_fm_ipc_task_remove(E_Fm_Task *task)
|
|||
{
|
||||
Eina_List *l = _e_fm_ipc_task_node_get(task->id);
|
||||
|
||||
switch(task->type)
|
||||
switch (task->type)
|
||||
{
|
||||
case E_FM_OP_MONITOR_START:
|
||||
{
|
||||
|
@ -462,6 +457,7 @@ _e_fm_ipc_task_remove(E_Fm_Task *task)
|
|||
_e_fm_ipc_file_mon_dir_del(&ted, task->src);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -532,7 +528,7 @@ _e_fm_ipc_handle_error_response(int id, E_Fm_Op_Type type)
|
|||
}
|
||||
else if (type == E_FM_OP_ERROR_RESPONSE_RETRY)
|
||||
{
|
||||
switch(task->type)
|
||||
switch (task->type)
|
||||
{
|
||||
case E_FM_OP_MKDIR:
|
||||
_e_fm_ipc_mkdir_try(task);
|
||||
|
@ -540,20 +536,20 @@ _e_fm_ipc_handle_error_response(int id, E_Fm_Op_Type type)
|
|||
|
||||
case E_FM_OP_MONITOR_START:
|
||||
_e_fm_ipc_monitor_start_try(task);
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static Eina_Bool
|
||||
_e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event)
|
||||
{
|
||||
Ecore_Ipc_Event_Server_Data *e;
|
||||
|
||||
e = event;
|
||||
if (e->major != 6/*E_IPC_DOMAIN_FM*/) return ECORE_CALLBACK_PASS_ON;
|
||||
if (e->major != 6 /*E_IPC_DOMAIN_FM*/) return ECORE_CALLBACK_PASS_ON;
|
||||
switch (e->minor)
|
||||
{
|
||||
case E_FM_OP_MONITOR_START: /* monitor dir (and implicitly list) */
|
||||
|
@ -561,17 +557,20 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
_e_fm_ipc_monitor_start(e->ref, e->data);
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_MONITOR_END: /* monitor dir end */
|
||||
{
|
||||
// printf("End listing directory: %s\n", e->data);
|
||||
_e_fm_ipc_monitor_end(e->ref, e->data);
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_REMOVE: /* fop delete file/dir */
|
||||
{
|
||||
_e_fm_ipc_slave_run(E_FM_OP_REMOVE, (const char *)e->data, e->ref);
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_TRASH: /* fop trash file/dir */
|
||||
{
|
||||
E_Fop *fop;
|
||||
|
@ -586,21 +585,25 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_MOVE: /* fop mv file/dir */
|
||||
{
|
||||
_e_fm_ipc_slave_run(E_FM_OP_MOVE, (const char *)e->data, e->ref);
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_COPY: /* fop cp file/dir */
|
||||
{
|
||||
_e_fm_ipc_slave_run(E_FM_OP_COPY, (const char *)e->data, e->ref);
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_SYMLINK: /* fop ln -s */
|
||||
{
|
||||
_e_fm_ipc_slave_run(E_FM_OP_SYMLINK, (const char *)e->data, e->ref);
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_MKDIR: /* fop mkdir */
|
||||
{
|
||||
const char *src, *rel;
|
||||
|
@ -615,6 +618,7 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
_e_fm_ipc_mkdir(e->ref, src, rel, rel_to, x, y);
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_MOUNT: /* mount udi mountpoint */
|
||||
{
|
||||
E_Volume *v;
|
||||
|
@ -635,7 +639,8 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
}
|
||||
}
|
||||
break;
|
||||
case E_FM_OP_UNMOUNT:/* unmount udi */
|
||||
|
||||
case E_FM_OP_UNMOUNT: /* unmount udi */
|
||||
{
|
||||
E_Volume *v;
|
||||
const char *udi;
|
||||
|
@ -649,7 +654,8 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
}
|
||||
}
|
||||
break;
|
||||
case E_FM_OP_EJECT:/* eject udi */
|
||||
|
||||
case E_FM_OP_EJECT: /* eject udi */
|
||||
{
|
||||
E_Volume *v;
|
||||
const char *udi;
|
||||
|
@ -660,9 +666,11 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
e_volume_eject(v);
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_QUIT: /* quit */
|
||||
ecore_main_loop_quit();
|
||||
break;
|
||||
|
||||
case E_FM_OP_MONITOR_SYNC: /* mon list sync */
|
||||
{
|
||||
Eina_List *l;
|
||||
|
@ -692,6 +700,7 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_ABORT: // abort copy/move/delete operation by user
|
||||
{
|
||||
E_Fm_Slave *slave = _e_fm_ipc_slave_get(e->ref);
|
||||
|
@ -699,6 +708,7 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
_e_fm_ipc_slave_send(slave, e->minor, NULL, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_ERROR_RESPONSE_IGNORE_THIS:
|
||||
case E_FM_OP_ERROR_RESPONSE_IGNORE_ALL:
|
||||
case E_FM_OP_ERROR_RESPONSE_ABORT:
|
||||
|
@ -707,6 +717,7 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
_e_fm_ipc_handle_error_response(e->ref, e->minor);
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_OVERWRITE_RESPONSE_NO:
|
||||
case E_FM_OP_OVERWRITE_RESPONSE_NO_ALL:
|
||||
case E_FM_OP_OVERWRITE_RESPONSE_YES:
|
||||
|
@ -715,6 +726,7 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
_e_fm_ipc_slave_send(_e_fm_ipc_slave_get(e->ref), e->minor, NULL, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FM_OP_REORDER:
|
||||
{
|
||||
const char *file, *dst, *relative;
|
||||
|
@ -735,6 +747,7 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
_e_fm_ipc_reorder(file, dst, relative, after);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -743,21 +756,23 @@ _e_fm_ipc_cb_server_data(void *data __UNUSED__, int type __UNUSED__, void *event
|
|||
* slaves later. ref_to is set to the the ref id in the request to
|
||||
* allow for async handling later */
|
||||
ecore_ipc_server_send(_e_fm_ipc_server,
|
||||
6/*E_IPC_DOMAIN_FM*/,
|
||||
6 /*E_IPC_DOMAIN_FM*/,
|
||||
E_FM_OP_OK,
|
||||
0, e->ref, 0, NULL, 0);
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static int _e_fm_ipc_client_send(int id, E_Fm_Op_Type type, void *data, int size)
|
||||
static int
|
||||
_e_fm_ipc_client_send(int id, E_Fm_Op_Type type, void *data, int size)
|
||||
{
|
||||
return ecore_ipc_server_send(_e_fm_ipc_server,
|
||||
6/*E_IPC_DOMAIN_FM*/,
|
||||
6 /*E_IPC_DOMAIN_FM*/,
|
||||
type,
|
||||
id, 0, 0, data, size);
|
||||
}
|
||||
|
||||
static int _e_fm_ipc_slave_run(E_Fm_Op_Type type, const char *args, int id)
|
||||
static int
|
||||
_e_fm_ipc_slave_run(E_Fm_Op_Type type, const char *args, int id)
|
||||
{
|
||||
E_Fm_Slave *slave;
|
||||
const char *command;
|
||||
|
@ -769,17 +784,18 @@ static int _e_fm_ipc_slave_run(E_Fm_Op_Type type, const char *args, int id)
|
|||
command = eina_stringshare_add(_e_fm_ipc_prepare_command(type, args));
|
||||
|
||||
slave->id = id;
|
||||
slave->exe = ecore_exe_pipe_run(command, ECORE_EXE_PIPE_WRITE | ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_ERROR, slave );
|
||||
slave->exe = ecore_exe_pipe_run(command, ECORE_EXE_PIPE_WRITE | ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_ERROR, slave);
|
||||
// printf("EFM command: %s\n", command);
|
||||
|
||||
eina_stringshare_del(command);
|
||||
|
||||
_e_fm_ipc_slaves = eina_list_append(_e_fm_ipc_slaves, slave);
|
||||
|
||||
return (!!slave->exe);
|
||||
return !!slave->exe;
|
||||
}
|
||||
|
||||
static E_Fm_Slave *_e_fm_ipc_slave_get(int id)
|
||||
static E_Fm_Slave *
|
||||
_e_fm_ipc_slave_get(int id)
|
||||
{
|
||||
Eina_List *l;
|
||||
E_Fm_Slave *slave;
|
||||
|
@ -793,7 +809,8 @@ static E_Fm_Slave *_e_fm_ipc_slave_get(int id)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static int _e_fm_ipc_slave_send(E_Fm_Slave *slave, E_Fm_Op_Type type, void *data, int size)
|
||||
static int
|
||||
_e_fm_ipc_slave_send(E_Fm_Slave *slave, E_Fm_Op_Type type, void *data, int size)
|
||||
{
|
||||
char *sdata;
|
||||
int ssize;
|
||||
|
@ -990,7 +1007,7 @@ _e_fm_ipc_cb_recent_clean(void *data)
|
|||
ed = data;
|
||||
ed->cleaning = 1;
|
||||
t_now = ecore_time_unix_get();
|
||||
EINA_LIST_FOREACH_SAFE(ed->recent_mods, pl, l, m)
|
||||
EINA_LIST_FOREACH_SAFE (ed->recent_mods, pl, l, m)
|
||||
if ((m->mod) && ((t_now - m->timestamp) >= DEF_MOD_BACKOFF))
|
||||
{
|
||||
ed->recent_mods = eina_list_remove_list(ed->recent_mods, pl);
|
||||
|
@ -1004,7 +1021,6 @@ _e_fm_ipc_cb_recent_clean(void *data)
|
|||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_e_fm_ipc_file_add_mod(E_Dir *ed, const char *path, E_Fm_Op_Type op, int listing)
|
||||
{
|
||||
|
@ -1064,7 +1080,8 @@ _e_fm_ipc_file_add_mod(E_Dir *ed, const char *path, E_Fm_Op_Type op, int listing
|
|||
else return;
|
||||
}
|
||||
if ((lnk) && (lnk[0] != '/')) rlnk = ecore_file_realpath(path);
|
||||
else if (lnk) rlnk = strdup(lnk);
|
||||
else if (lnk)
|
||||
rlnk = strdup(lnk);
|
||||
if (!lnk) lnk = strdup("");
|
||||
if (!rlnk) rlnk = strdup("");
|
||||
|
||||
|
@ -1089,7 +1106,7 @@ _e_fm_ipc_file_add_mod(E_Dir *ed, const char *path, E_Fm_Op_Type op, int listing
|
|||
p += strlen(rlnk) + 1;
|
||||
|
||||
bsz = p - buf;
|
||||
ecore_ipc_server_send(_e_fm_ipc_server, 6/*E_IPC_DOMAIN_FM*/, op, 0, ed->id,
|
||||
ecore_ipc_server_send(_e_fm_ipc_server, 6 /*E_IPC_DOMAIN_FM*/, op, 0, ed->id,
|
||||
listing, buf, bsz);
|
||||
if (lnk) free(lnk);
|
||||
if (rlnk) free(rlnk);
|
||||
|
@ -1102,7 +1119,7 @@ _e_fm_ipc_file_add(E_Dir *ed, const char *path, int listing)
|
|||
{
|
||||
/* FIXME: handle BACKOFF */
|
||||
}
|
||||
_e_fm_ipc_file_add_mod(ed, path, E_FM_OP_FILE_ADD, listing);/*file add*/
|
||||
_e_fm_ipc_file_add_mod(ed, path, E_FM_OP_FILE_ADD, listing); /*file add*/
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1112,7 +1129,7 @@ _e_fm_ipc_file_del(E_Dir *ed, const char *path)
|
|||
/* FIXME: handle BACKOFF */
|
||||
}
|
||||
ecore_ipc_server_send(_e_fm_ipc_server,
|
||||
6/*E_IPC_DOMAIN_FM*/,
|
||||
6 /*E_IPC_DOMAIN_FM*/,
|
||||
E_FM_OP_FILE_DEL,
|
||||
0, ed->id, 0, (void *)path, strlen(path) + 1);
|
||||
}
|
||||
|
@ -1123,14 +1140,14 @@ _e_fm_ipc_file_mod(E_Dir *ed, const char *path)
|
|||
{
|
||||
/* FIXME: handle BACKOFF */
|
||||
}
|
||||
_e_fm_ipc_file_add_mod(ed, path, E_FM_OP_FILE_CHANGE, 0);/*file change*/
|
||||
_e_fm_ipc_file_add_mod(ed, path, E_FM_OP_FILE_CHANGE, 0); /*file change*/
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm_ipc_file_mon_dir_del(E_Dir *ed, const char *path)
|
||||
{
|
||||
ecore_ipc_server_send(_e_fm_ipc_server,
|
||||
6/*E_IPC_DOMAIN_FM*/,
|
||||
6 /*E_IPC_DOMAIN_FM*/,
|
||||
E_FM_OP_MONITOR_END,
|
||||
0, ed->id, 0, (void *)path, strlen(path) + 1);
|
||||
}
|
||||
|
@ -1143,7 +1160,7 @@ _e_fm_ipc_file_mon_list_sync(E_Dir *ed)
|
|||
ed->sync = _e_sync_num;
|
||||
ed->sync_time = ecore_time_get();
|
||||
ecore_ipc_server_send(_e_fm_ipc_server,
|
||||
6/*E_IPC_DOMAIN_FM*/,
|
||||
6 /*E_IPC_DOMAIN_FM*/,
|
||||
E_FM_OP_MONITOR_SYNC,
|
||||
0, ed->id, ed->sync, NULL, 0);
|
||||
}
|
||||
|
@ -1253,7 +1270,7 @@ _e_fm_ipc_cb_fop_trash_idler(void *data)
|
|||
/* Insert info for trashed file */
|
||||
fprintf(info,
|
||||
"[Trash Info]\nPath=%s\nDeletionDate=%04u%02u%02uT%02u:%02u:%02u",
|
||||
fop->src, lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday,
|
||||
fop->src, lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday,
|
||||
lt->tm_hour, lt->tm_min, lt->tm_sec);
|
||||
fclose(info);
|
||||
}
|
||||
|
@ -1407,3 +1424,4 @@ _e_fm_ipc_prepare_command(E_Fm_Op_Type type, const char *args)
|
|||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue