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 PyObject* Account_str(PyObject *self)
58 str = PyString_FromString("Account: ");
61 PyString_ConcatAndDel(&str, PyObject_GetAttrString(self, "account_name"));
66 static PyMethodDef Account_methods[] = {
70 static PyMemberDef Account_members[] = {
71 {"account_name", T_OBJECT_EX, offsetof(clawsmail_AccountObject, account_name), 0,
72 "account name - name of the account"},
74 {"address", T_OBJECT_EX, offsetof(clawsmail_AccountObject, address), 0,
75 "address - address of the account"},
80 static PyTypeObject clawsmail_AccountType = {
81 PyObject_HEAD_INIT(NULL)
83 "clawsmail.Account", /* tp_name*/
84 sizeof(clawsmail_AccountObject), /* tp_basicsize*/
86 (destructor)Account_dealloc, /* tp_dealloc*/
93 0, /* tp_as_sequence*/
97 Account_str, /* tp_str*/
101 Py_TPFLAGS_DEFAULT, /* tp_flags*/
102 "Account objects.\n\n" /* tp_doc */
103 "Do not construct objects of this type yourself.",
106 0, /* tp_richcompare */
107 0, /* tp_weaklistoffset */
110 Account_methods, /* tp_methods */
111 Account_members, /* tp_members */
115 0, /* tp_descr_get */
116 0, /* tp_descr_set */
117 0, /* tp_dictoffset */
118 (initproc)Account_init, /* tp_init */
124 gboolean cmpy_add_account(PyObject *module)
126 clawsmail_AccountType.tp_new = PyType_GenericNew;
127 if(PyType_Ready(&clawsmail_AccountType) < 0)
130 Py_INCREF(&clawsmail_AccountType);
131 return (PyModule_AddObject(module, "Account", (PyObject*)&clawsmail_AccountType) == 0);
134 static gboolean update_members(clawsmail_AccountObject *self, PrefsAccount *account)
136 if(account->account_name) {
137 Py_XDECREF(self->account_name);
138 self->account_name = PyString_FromString(account->account_name);
139 if(!self->account_name)
143 if(account->address) {
144 Py_XDECREF(self->address);
145 self->address = PyString_FromString(account->address);
150 self->account = account;
154 Py_XDECREF(self->account_name);
155 Py_XDECREF(self->address);
159 PyObject* clawsmail_account_new(PrefsAccount *account)
161 clawsmail_AccountObject *ff;
166 ff = (clawsmail_AccountObject*) PyObject_CallObject((PyObject*) &clawsmail_AccountType, NULL);
170 if(update_members(ff, account))
171 return (PyObject*)ff;