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 PrefsAccount
*account
;
30 } clawsmail_AccountObject
;
32 static int Account_init(clawsmail_AccountObject
*self
, PyObject
*args
, PyObject
*kwds
)
39 static void Account_dealloc(clawsmail_AccountObject
* self
)
41 Py_TYPE(self
)->tp_free((PyObject
*)self
);
44 static PyObject
* Account_str(clawsmail_AccountObject
*self
)
46 if(self
->account
&& self
->account
->account_name
)
47 return PyUnicode_FromFormat("Account: %s", self
->account
->account_name
);
51 static PyObject
* get_account_name(clawsmail_AccountObject
*self
, void *closure
)
53 if(self
->account
&& self
->account
->account_name
)
54 return PyUnicode_FromString(self
->account
->account_name
);
58 static PyObject
* get_address(clawsmail_AccountObject
*self
, void *closure
)
60 if(self
->account
&& self
->account
->address
)
61 return PyUnicode_FromString(self
->account
->address
);
65 static PyObject
* get_is_default(clawsmail_AccountObject
*self
, void *closure
)
67 if(self
->account
->is_default
)
72 static PyGetSetDef Account_getset
[] = {
73 {"account_name", (getter
)get_account_name
, (setter
)NULL
,
74 "account_name - name of the account", NULL
},
76 {"address", (getter
)get_address
, (setter
)NULL
,
77 "address - address of the account", NULL
},
79 {"is_default", (getter
)get_is_default
, (setter
)NULL
,
80 "is_default - whether this account is the default account", NULL
},
85 static PyTypeObject clawsmail_AccountType
= {
86 PyVarObject_HEAD_INIT(NULL
, 0)
87 "clawsmail.Account", /* tp_name*/
88 sizeof(clawsmail_AccountObject
), /* tp_basicsize*/
90 (destructor
)Account_dealloc
, /* tp_dealloc*/
97 0, /* tp_as_sequence*/
101 (reprfunc
)Account_str
, /* tp_str*/
105 Py_TPFLAGS_DEFAULT
, /* tp_flags*/
106 "Account objects.\n\n" /* tp_doc */
107 "Do not construct objects of this type yourself.",
110 0, /* tp_richcompare */
111 0, /* tp_weaklistoffset */
116 Account_getset
, /* tp_getset */
119 0, /* tp_descr_get */
120 0, /* tp_descr_set */
121 0, /* tp_dictoffset */
122 (initproc
)Account_init
, /* tp_init */
130 0, /* tp_subclasses */
133 #if ((PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 6) || \
134 (PY_MAJOR_VERSION == 3))
135 0, /* tp_version_tag */
137 #if (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 4)
142 gboolean
cmpy_add_account(PyObject
*module
)
144 clawsmail_AccountType
.tp_new
= PyType_GenericNew
;
145 if(PyType_Ready(&clawsmail_AccountType
) < 0)
148 Py_INCREF(&clawsmail_AccountType
);
149 return (PyModule_AddObject(module
, "Account", (PyObject
*)&clawsmail_AccountType
) == 0);
152 PyObject
* clawsmail_account_new(PrefsAccount
*account
)
154 clawsmail_AccountObject
*ff
;
159 ff
= (clawsmail_AccountObject
*) PyObject_CallObject((PyObject
*) &clawsmail_AccountType
, NULL
);
163 ff
->account
= account
;
164 return (PyObject
*)ff
;
167 gboolean
clawsmail_account_check(PyObject
*self
)
169 return (PyObject_TypeCheck(self
, &clawsmail_AccountType
) != 0);
172 PrefsAccount
* clawsmail_account_get_account(PyObject
*self
)
174 g_return_val_if_fail(clawsmail_account_check(self
), NULL
);
176 return ((clawsmail_AccountObject
*)self
)->account
;