friends.c
上传用户:tany51
上传日期:2013-06-12
资源大小:1397k
文件大小:7k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* 
  2.  * This program is free software; you can redistribute it and/or
  3.  * modify it under the terms of the GNU General Public License
  4.  * as published by the Free Software Foundation; either version 2
  5.  * of the License, or (at your option) any later version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful,
  8.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.  * GNU General Public License for more details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License
  13.  * along with this program; if not, write to the Free Software
  14.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  15.  */
  16. #include "common/setup_before.h"
  17. #include <stdio.h>
  18. #ifdef HAVE_STDDEF_H
  19. # include <stddef.h>
  20. #else
  21. # ifndef NULL
  22. #  define NULL ((void *)0)
  23. # endif
  24. #endif
  25. #ifdef STDC_HEADERS
  26. # include <stdlib.h>
  27. #else
  28. # ifdef HAVE_MALLOC_H
  29. #  include <malloc.h>
  30. # endif
  31. #endif
  32. #ifdef HAVE_STRING_H
  33. # include <string.h>
  34. #else
  35. # ifdef HAVE_STRINGS_H
  36. #  include <strings.h>
  37. # endif
  38. #endif
  39. #include "compat/strcasecmp.h"
  40. #include "common/eventlog.h"
  41. #include "common/list.h"
  42. #include "account.h"
  43. #include "prefs.h"
  44. #include "friends.h"
  45. #include "common/setup_after.h"
  46. extern t_account * friend_get_account(t_friend * fr)
  47. {
  48.     if (fr == NULL)
  49.     {
  50.         eventlog(eventlog_level_error, __FUNCTION__,"got NULL account");
  51.         return NULL;
  52.     }
  53.     return fr->friendacc;
  54. }
  55. extern int friend_set_account(t_friend * fr, t_account * acc)
  56. {
  57.     if (fr == NULL)
  58.     {
  59.         eventlog(eventlog_level_error, __FUNCTION__,"got NULL account");
  60.         return -1;
  61.     }
  62.     fr->friendacc=acc;
  63.     return 0;
  64. }
  65. extern char friend_get_mutual(t_friend * fr)
  66. {
  67.     if (fr == NULL)
  68.     {
  69.         eventlog(eventlog_level_error, __FUNCTION__,"got NULL account");
  70.         return 0;
  71.     }
  72.     return fr->mutual;
  73. }
  74. extern int friend_set_mutual(t_friend * fr, char mutual)
  75. {
  76.     if (fr == NULL)
  77.     {
  78.         eventlog(eventlog_level_error, __FUNCTION__,"got NULL account");
  79.         return -1;
  80.     }
  81.     fr->mutual=mutual;
  82.     return 0;
  83. }
  84. extern t_list * friendlist_init(void)
  85. {
  86.     t_list * new;
  87.     if((new = list_create())==NULL)
  88.     {
  89.         eventlog(eventlog_level_error,__FUNCTION__,"could not create friendlist");
  90.         return NULL;
  91.     }
  92.     return new;
  93. }
  94. extern int friendlist_unload(t_list * flist)
  95. {
  96.     t_elem  * curr;
  97.     t_friend * fr;
  98.     if(flist==NULL)
  99.         return -1;
  100.     LIST_TRAVERSE(flist,curr)
  101.     {
  102.         if (!(fr = elem_get_data(curr)))
  103.         {
  104.             eventlog(eventlog_level_error,__FUNCTION__,"found NULL entry in list");
  105.             continue;
  106.         }
  107.         fr->mutual=-1;
  108.     }
  109.     return 0;
  110. }
  111. extern int friendlist_close(t_list * flist)
  112. {
  113.     t_elem * curr;
  114.     t_friend * fr;
  115.     if(flist==NULL)
  116.         return -1;
  117.     LIST_TRAVERSE(flist,curr)
  118.     {
  119.         if (!(fr = elem_get_data(curr)))
  120.         {
  121.             eventlog(eventlog_level_error,__FUNCTION__,"found NULL entry in list");
  122.             continue;
  123.         }
  124. if (list_remove_elem(flist, curr) < 0) 
  125.     eventlog(eventlog_level_error, __FUNCTION__, "could not remove elem from flist");
  126.         free((void *) fr);
  127.     }
  128.     list_destroy(flist);
  129.     return 0;
  130. }
  131. extern int friendlist_purge(t_list * flist)
  132. {
  133.     t_elem  * curr;
  134.     t_friend * fr;
  135.     int doremove=0;
  136.     if(flist==NULL)
  137.         return -1;
  138.     LIST_TRAVERSE(flist,curr)
  139.     {
  140.         if (!(fr = elem_get_data(curr)))
  141.         {
  142.             eventlog(eventlog_level_error,__FUNCTION__,"found NULL entry in list");
  143.             continue;
  144.         }
  145.         if (fr->mutual<0)
  146.           {
  147.             if(list_remove_elem(flist, curr)<0)
  148.                 eventlog(eventlog_level_error,__FUNCTION__,"could not remove item from list");
  149.             else
  150.                 doremove=1;
  151.           }
  152.     }
  153.     if(doremove)
  154.         list_purge(flist);
  155.     return 0;
  156. }
  157. extern int friendlist_add_account(t_list * flist, t_account * acc, int mutual)
  158. {
  159.     t_friend * fr;
  160.     if(flist==NULL)
  161.         return -1;
  162.     if (!(fr = malloc(sizeof(t_friend))))
  163.     {
  164.         eventlog(eventlog_level_error,__FUNCTION__,"could not allocate memory for friend");
  165.         return -1;
  166.     }
  167.     fr->friendacc = acc;
  168.     fr->mutual = mutual;
  169.     list_append_data(flist, fr);
  170.     return 0;
  171. }
  172. extern int friendlist_remove_friend(t_list * flist, t_friend * fr)
  173. {
  174.     if(flist==NULL)
  175.         return -1;
  176.     if(fr!=NULL)
  177.     {
  178.         if(list_remove_data(flist, fr)<0)
  179.         {
  180.             eventlog(eventlog_level_error,__FUNCTION__,"could not remove item from list");
  181.             return -1;
  182.         }
  183. /* commented by dizzy
  184.         else
  185.             list_purge(flist); */
  186. free((void *)fr);
  187.         return 0;
  188.     }
  189.     return -1;
  190. }
  191. extern int friendlist_remove_account(t_list * flist, t_account * acc)
  192. {
  193.     t_friend * fr;
  194.     if(flist==NULL)
  195.         return -1;
  196.     fr=friendlist_find_account(flist, acc);
  197.     if(fr!=NULL)
  198.     {
  199.         if(list_remove_data(flist, fr)<0)
  200.         {
  201.             eventlog(eventlog_level_error,__FUNCTION__,"could not remove item from list");
  202.             return -1;
  203.         }
  204. /* commented by dizzy
  205.         else
  206.             list_purge(flist); */
  207. free((void *)fr);
  208.         return 0;
  209.     }
  210.     return -1;
  211. }
  212. extern int friendlist_remove_username(t_list * flist, const char * accname)
  213. {
  214.     t_friend * fr;
  215.     if(flist==NULL)
  216.         return -1;
  217.     fr=friendlist_find_username(flist, accname);
  218.     if(fr!=NULL)
  219.     {
  220.         if(list_remove_data(flist, fr)<0)
  221.         {
  222.             eventlog(eventlog_level_error,__FUNCTION__,"could not remove item from list");
  223.             return -1;
  224.         }
  225. /* commented by dizzy
  226.         else
  227.             list_purge(flist); */
  228. free((void *)fr);
  229.         return 0;
  230.     }
  231.     return -1;
  232. }
  233. extern t_friend * friendlist_find_account(t_list * flist, t_account * acc)
  234. {
  235.     t_elem  * curr;
  236.     t_friend * fr;
  237.     if(flist==NULL)
  238.         return NULL;
  239.     LIST_TRAVERSE(flist,curr)
  240.     {
  241.         if (!(fr = elem_get_data(curr)))
  242.         {
  243.             eventlog(eventlog_level_error,__FUNCTION__,"found NULL entry in list");
  244.             continue;
  245.         }
  246.         if (fr->friendacc == acc)
  247.             return fr;
  248.     }
  249.     return NULL;
  250. }
  251. extern t_friend * friendlist_find_username(t_list * flist, const char * accname)
  252. {
  253.     t_elem  * curr;
  254.     t_friend * fr;
  255.     if(flist==NULL)
  256.         return NULL;
  257.     LIST_TRAVERSE(flist,curr)
  258.     {
  259.         if (!(fr = elem_get_data(curr)))
  260.         {
  261.             eventlog(eventlog_level_error,__FUNCTION__,"found NULL entry in list");
  262.             continue;
  263.         }
  264.         if (strcasecmp(account_get_name(fr->friendacc),accname)==0) return fr;
  265.     }
  266.     return NULL;
  267. }
  268. extern t_friend * friendlist_find_uid(t_list * flist, int uid)
  269. {
  270.     t_elem  * curr;
  271.     t_friend * fr;
  272.     if(flist==NULL)
  273.         return NULL;
  274.     LIST_TRAVERSE(flist,curr)
  275.     {
  276.         if (!(fr = elem_get_data(curr)))
  277.         {
  278.             eventlog(eventlog_level_error,__FUNCTION__,"found NULL entry in list");
  279.             continue;
  280.         }
  281.         if (account_get_uid(fr->friendacc)==uid) return fr;
  282.     }
  283.     return NULL;
  284. }