/[weechat]/weechat/src/plugins/scripts/python/weechat-python.c
ViewVC logotype

Diff of /weechat/src/plugins/scripts/python/weechat-python.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.16 by kolter, Tue Nov 22 20:47:53 2005 UTC revision 1.17 by kolter, Fri Dec 2 22:27:17 2005 UTC
# Line 23  Line 23 
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"
# Line 74  weechat_python_exec (t_weechat_plugin *p Line 77  weechat_python_exec (t_weechat_plugin *p
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      {      {
# Line 462  static PyObject * Line 467  static PyObject *
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;
# Line 474  weechat_python_get_dcc_info (PyObject *s Line 482  weechat_python_get_dcc_info (PyObject *s
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  /*  /*

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26