Added {add,remove}_buddy and get_buddies_online.
[python-purple] / buddy.pyx
1 #
2 #  Copyright (c) 2008 INdT - Instituto Nokia de Tecnologia
3 #
4 #  This file is part of python-purple.
5 #
6 #  python-purple is free software: you can redistribute it and/or modify
7 #  it under the terms of the GNU General Public License as published by
8 #  the Free Software Foundation, either version 3 of the License, or
9 #  (at your option) any later version.
10 #
11 #  python-purple is distributed in the hope that it will be useful,
12 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #  GNU General Public License for more details.
15 #
16 #  You should have received a copy of the GNU General Public License
17 #  along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 #
19
20 cimport purple
21
22 cdef class Buddy:
23     """
24     Buddy class
25     @param name
26     @param account
27     """
28
29     cdef object __account
30     cdef object __name
31     cdef object __exists
32
33     def __init__(self, name, account):
34         self.__name = name
35         self.__account = account
36
37         if self._get_structure() != NULL:
38             self.__exists = True
39         else:
40             self.__exists = False
41
42     cdef blist.PurpleBuddy *_get_structure(self):
43         return blist.purple_find_buddy(account.purple_accounts_find( \
44                 self.__account.username, self.__account.protocol.id), \
45                 self.__name)
46
47     def __get_exists(self):
48         return self.__exists
49     exists = property(__get_exists)
50
51     def __get_name(self):
52         if self.__exists:
53             return <char *> blist.purple_buddy_get_name(self._get_structure())
54         else:
55             return self.__name
56     name = property(__get_name)
57
58     def __get_account(self):
59         if self.__exists:
60             return self.__account
61         else:
62             return None
63     account = property(__get_account)
64
65     def __get_alias(self):
66         cdef char *c_alias = NULL
67         c_alias = <char *> blist.purple_buddy_get_alias_only( \
68                 self._get_structure())
69         if c_alias:
70             return c_alias
71         else:
72             return None
73     alias = property(__get_alias)
74
75     def __get_server_alias(self):
76         cdef char *c_server_alias = NULL
77         c_server_alias = <char *> blist.purple_buddy_get_server_alias( \
78                 self._get_structure())
79         if c_server_alias:
80             return c_server_alias
81         else:
82             return None
83     server_alias = property(__get_server_alias)
84
85     def __get_contact_alias(self):
86         cdef char *c_contact_alias = NULL
87         c_contact_alias = <char *> blist.purple_buddy_get_contact_alias( \
88                 self._get_structure())
89         if c_contact_alias:
90             return c_contact_alias
91         else:
92             return None
93     contact_alias = property(__get_contact_alias)
94
95     def __get_local_alias(self):
96         cdef char *c_local_alias = NULL
97         c_local_alias = <char *> blist.purple_buddy_get_local_alias( \
98                 self._get_structure())
99         if c_local_alias:
100             return c_local_alias
101         else:
102             return None
103     local_alias = property(__get_local_alias)
104
105     def __get_available(self):
106         if self.__exists:
107             return status.purple_presence_is_available( \
108                     blist.purple_buddy_get_presence(self._get_structure()))
109         else:
110             return None
111     available = property(__get_available)
112
113     def __get_online(self):
114         if self.__exists:
115             return status.purple_presence_is_online( \
116                     blist.purple_buddy_get_presence(self._get_structure()))
117         else:
118             return None
119     online = property(__get_online)
120
121     def __get_idle(self):
122         if self.__exists:
123             return status.purple_presence_is_idle( \
124                     blist.purple_buddy_get_presence(self._get_structure()))
125         else:
126             return None
127     idle = property(__get_idle)