1 /* Python plugin for Claws-Mail
2 * Copyright (C) 2013 Holger Berndt <hb@claws-mail.org>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 # include "claws-features.h"
23 #include "accounttype.h"
25 #include <structmember.h>
29 PyObject *account_name;
31 PrefsAccount *account;
32 } clawsmail_AccountObject;
34 static int Account_init(clawsmail_AccountObject *self, PyObject *args, PyObject *kwds)
37 self->account_name = Py_None;
40 self->address = Py_None;
47 static void Account_dealloc(clawsmail_AccountObject* self)
49 Py_XDECREF(self->account_name);
50 Py_XDECREF(self->address);
52 self->ob_type->tp_free((PyObject*)self);
55 static int Account_compare(clawsmail_AccountObject *obj1, clawsmail_AccountObject *obj2)
57 if(obj1->account->account_id < obj2->account->account_id)
59 else if(obj1->account->account_id > obj2->account->account_id)
65 static PyObject* Account_str(PyObject *self)
68 str = PyString_FromString("Account: ");
71 PyString_ConcatAndDel(&str, PyObject_GetAttrString(self, "account_name"));
76 static PyObject* get_account_name(clawsmail_AccountObject *self, void *closure)
78 Py_INCREF(self->account_name);
79 return self->account_name;
82 static PyObject* get_address(clawsmail_AccountObject *self, void *closure)
84 Py_INCREF(self->address);
88 static PyObject* get_is_default(clawsmail_AccountObject *self, void *closure)
90 if(self->account->is_default)
96 static PyGetSetDef Account_getset[] = {
97 {"account_name", (getter)get_account_name, (setter)NULL,
98 "account_name - name of the account", NULL},
100 {"address", (getter)get_address, (setter)NULL,
101 "address - address of the account", NULL},
103 {"is_default", (getter)get_is_default, (setter)NULL,
104 "is_default - whether this account is the default account", NULL},
109 static PyTypeObject clawsmail_AccountType = {
110 PyObject_HEAD_INIT(NULL)
112 "clawsmail.Account", /* tp_name*/
113 sizeof(clawsmail_AccountObject), /* tp_basicsize*/
115 (destructor)Account_dealloc, /* tp_dealloc*/
119 (cmpfunc)Account_compare, /* tp_compare*/
122 0, /* tp_as_sequence*/
123 0, /* tp_as_mapping*/
126 Account_str, /* tp_str*/
130 Py_TPFLAGS_DEFAULT, /* tp_flags*/
131 "Account objects.\n\n" /* tp_doc */
132 "Do not construct objects of this type yourself.",
135 0, /* tp_richcompare */
136 0, /* tp_weaklistoffset */
141 Account_getset, /* tp_getset */
144 0, /* tp_descr_get */
145 0, /* tp_descr_set */
146 0, /* tp_dictoffset */
147 (initproc)Account_init, /* tp_init */
153 gboolean cmpy_add_account(PyObject *module)
155 clawsmail_AccountType.tp_new = PyType_GenericNew;
156 if(PyType_Ready(&clawsmail_AccountType) < 0)
159 Py_INCREF(&clawsmail_AccountType);
160 return (PyModule_AddObject(module, "Account", (PyObject*)&clawsmail_AccountType) == 0);
163 static gboolean update_members(clawsmail_AccountObject *self, PrefsAccount *account)
165 if(account->account_name) {
166 Py_XDECREF(self->account_name);
167 self->account_name = PyString_FromString(account->account_name);
168 if(!self->account_name)
172 if(account->address) {
173 Py_XDECREF(self->address);
174 self->address = PyString_FromString(account->address);
179 self->account = account;
183 Py_XDECREF(self->account_name);
184 Py_XDECREF(self->address);
188 PyObject* clawsmail_account_new(PrefsAccount *account)
190 clawsmail_AccountObject *ff;
195 ff = (clawsmail_AccountObject*) PyObject_CallObject((PyObject*) &clawsmail_AccountType, NULL);
199 if(update_members(ff, account))
200 return (PyObject*)ff;