23 |
#include <Python.h> |
#include <Python.h> |
24 |
#include <stdlib.h> |
#include <stdlib.h> |
25 |
#include <string.h> |
#include <string.h> |
26 |
|
#include <sys/socket.h> |
27 |
|
#include <netinet/in.h> |
28 |
|
#include <arpa/inet.h> |
29 |
#undef _ |
#undef _ |
30 |
#include "../../weechat-plugin.h" |
#include "../../weechat-plugin.h" |
31 |
#include "../weechat-script.h" |
#include "../weechat-script.h" |
77 |
python_current_script = script; |
python_current_script = script; |
78 |
|
|
79 |
rc = PyObject_CallFunction(evFunc, "ss", server == NULL ? "" : server, arguments == NULL ? "" : arguments); |
rc = PyObject_CallFunction(evFunc, "ss", server == NULL ? "" : server, arguments == NULL ? "" : arguments); |
80 |
|
|
81 |
|
python_current_script = NULL; |
82 |
|
|
83 |
if (rc) |
if (rc) |
84 |
{ |
{ |
467 |
weechat_python_get_dcc_info (PyObject *self, PyObject *args) |
weechat_python_get_dcc_info (PyObject *self, PyObject *args) |
468 |
{ |
{ |
469 |
t_plugin_dcc_info *dcc_info, *ptr_dcc; |
t_plugin_dcc_info *dcc_info, *ptr_dcc; |
470 |
int dcc_count; |
PyObject *dcc_list; |
471 |
PyObject *list, *listvalue; |
PyObject *dcc_list_member; |
472 |
|
char timebuffer1[64]; |
473 |
|
char timebuffer2[64]; |
474 |
|
struct in_addr in; |
475 |
|
|
476 |
/* make gcc happy */ |
/* make gcc happy */ |
477 |
(void) self; |
(void) self; |
482 |
python_plugin->printf_server (python_plugin, |
python_plugin->printf_server (python_plugin, |
483 |
"Python error: unable to get DCC info, " |
"Python error: unable to get DCC info, " |
484 |
"script not initialized"); |
"script not initialized"); |
485 |
return Py_BuildValue ("i", 0); |
return Py_None; |
486 |
} |
} |
487 |
|
|
488 |
|
dcc_list = PyList_New (0); |
489 |
|
|
490 |
dcc_info = python_plugin->get_dcc_info (python_plugin); |
if (!dcc_list) |
491 |
dcc_count = 0; |
return Py_None; |
492 |
|
|
493 |
|
dcc_info = python_plugin->get_dcc_info (python_plugin); |
494 |
if (!dcc_info) |
if (!dcc_info) |
495 |
return Py_BuildValue ("i", 0); |
return dcc_list; |
|
|
|
|
for (ptr_dcc = dcc_info; ptr_dcc; ptr_dcc = ptr_dcc->next_dcc) |
|
|
{ |
|
|
dcc_count++; |
|
|
} |
|
|
|
|
|
list = PyList_New (dcc_count); |
|
|
|
|
|
if (!list) |
|
|
{ |
|
|
python_plugin->free_dcc_info (python_plugin, dcc_info); |
|
|
return Py_BuildValue ("i", 0); |
|
|
} |
|
496 |
|
|
|
dcc_count = 0; |
|
497 |
for(ptr_dcc = dcc_info; ptr_dcc; ptr_dcc = ptr_dcc->next_dcc) |
for(ptr_dcc = dcc_info; ptr_dcc; ptr_dcc = ptr_dcc->next_dcc) |
498 |
{ |
{ |
499 |
listvalue = Py_BuildValue ("{s:s,s:s,s:i,s:i,s:k,s:k,s:k,s:i,s:s,s:s," |
strftime(timebuffer1, sizeof(timebuffer1), "%F %T", |
500 |
"s:s,s:s,s:k,s:k,s:k,s:k}", |
localtime(&ptr_dcc->start_time)); |
501 |
"server", ptr_dcc->server, |
strftime(timebuffer2, sizeof(timebuffer2), "%F %T", |
502 |
"channel", ptr_dcc->channel, |
localtime(&ptr_dcc->start_transfer)); |
503 |
"type", ptr_dcc->type, |
in.s_addr = htonl(ptr_dcc->addr); |
504 |
"status", ptr_dcc->status, |
|
505 |
"start_time", ptr_dcc->start_time, |
dcc_list_member= PyDict_New(); |
506 |
"start_transfer", ptr_dcc->start_transfer, |
|
507 |
"address", ptr_dcc->addr, |
if (dcc_list_member) |
|
"port", ptr_dcc->port, |
|
|
"nick", ptr_dcc->nick, |
|
|
"remote_file", ptr_dcc->filename, |
|
|
"local_file", ptr_dcc->local_filename, |
|
|
"filename_suffix", ptr_dcc->filename_suffix, |
|
|
"size", ptr_dcc->size, |
|
|
"pos", ptr_dcc->pos, |
|
|
"start_resume", ptr_dcc->start_resume, |
|
|
"cps", ptr_dcc->bytes_per_sec); |
|
|
if (listvalue) |
|
508 |
{ |
{ |
509 |
if (PyList_SetItem (list, dcc_count, listvalue) != 0) |
|
510 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "server"), |
511 |
|
Py_BuildValue("s", ptr_dcc->server)); |
512 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "channel"), |
513 |
|
Py_BuildValue("s", ptr_dcc->channel)); |
514 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "type"), |
515 |
|
Py_BuildValue("i", ptr_dcc->type)); |
516 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "status"), |
517 |
|
Py_BuildValue("i", ptr_dcc->status)); |
518 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "start_time"), |
519 |
|
Py_BuildValue("s", timebuffer1)); |
520 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "start_transfer"), |
521 |
|
Py_BuildValue("s", timebuffer2)); |
522 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "address"), |
523 |
|
Py_BuildValue("s", inet_ntoa(in))); |
524 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "port"), |
525 |
|
Py_BuildValue("i", ptr_dcc->port)); |
526 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "nick"), |
527 |
|
Py_BuildValue("s", ptr_dcc->nick)); |
528 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "remote_file"), |
529 |
|
Py_BuildValue("s", ptr_dcc->filename)); |
530 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "local_file"), |
531 |
|
Py_BuildValue("s", ptr_dcc->local_filename)); |
532 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "filename_suffix"), |
533 |
|
Py_BuildValue("i", ptr_dcc->filename_suffix)); |
534 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "size"), |
535 |
|
Py_BuildValue("k", ptr_dcc->size)); |
536 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "pos"), |
537 |
|
Py_BuildValue("k", ptr_dcc->pos)); |
538 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "start_resume"), |
539 |
|
Py_BuildValue("k", ptr_dcc->start_resume)); |
540 |
|
PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "cps"), |
541 |
|
Py_BuildValue("k", ptr_dcc->bytes_per_sec)); |
542 |
|
|
543 |
|
|
544 |
|
if (PyList_Append(dcc_list, dcc_list_member) != 0) |
545 |
{ |
{ |
546 |
PyMem_Free (listvalue); |
Py_DECREF(dcc_list_member); |
547 |
PyMem_Free (list); |
Py_DECREF(dcc_list); |
548 |
python_plugin->free_dcc_info (python_plugin, dcc_info); |
python_plugin->free_dcc_info (python_plugin, dcc_info); |
549 |
return Py_BuildValue ("i", 0); |
return Py_None; |
550 |
} |
} |
|
PyMem_Free (listvalue); |
|
551 |
} |
} |
552 |
else |
else |
553 |
{ |
{ |
554 |
|
Py_DECREF(dcc_list); |
555 |
python_plugin->free_dcc_info (python_plugin, dcc_info); |
python_plugin->free_dcc_info (python_plugin, dcc_info); |
556 |
return Py_BuildValue ("i", 0); |
return Py_None; |
557 |
} |
} |
|
dcc_count++; |
|
558 |
} |
} |
559 |
|
|
560 |
python_plugin->free_dcc_info (python_plugin, dcc_info); |
python_plugin->free_dcc_info (python_plugin, dcc_info); |
561 |
|
|
562 |
return list; |
return dcc_list; |
563 |
} |
} |
564 |
|
|
565 |
/* |
/* |