#include "claws-features.h"
#endif
-#include <glib/gi18n.h>
-
#include "foldertype.h"
#include "folderpropertiestype.h"
#include "messageinfotype.h"
+#include "mailboxtype.h"
+
+#include <glib/gi18n.h>
#include <structmember.h>
typedef struct {
PyObject_HEAD
- PyObject *name;
- PyObject *path;
- PyObject *mailbox_name;
PyObject *properties;
FolderItem *folderitem;
} clawsmail_FolderObject;
static void Folder_dealloc(clawsmail_FolderObject* self)
{
- Py_XDECREF(self->name);
- Py_XDECREF(self->path);
- Py_XDECREF(self->mailbox_name);
Py_XDECREF(self->properties);
self->ob_type->tp_free((PyObject*)self);
}
-#define FOLDERITEM_STRING_TO_PYTHON_FOLDER_MEMBER(self,fis, pms) \
- do { \
- if(fis) { \
- PyObject *str; \
- str = PyString_FromString(fis); \
- if(str) { \
- int retval; \
- retval = PyObject_SetAttrString((PyObject*)self, pms, str); \
- Py_DECREF(str); \
- if(retval == -1) \
- goto err; \
- } \
- } \
- } while(0)
-
static int Folder_init(clawsmail_FolderObject *self, PyObject *args, PyObject *kwds)
{
const char *ss = NULL;
if(!PyArg_ParseTuple(args, "|sb", &ss, &create))
return -1;
- Py_INCREF(Py_None);
- self->name = Py_None;
-
- Py_INCREF(Py_None);
- self->path = Py_None;
-
- Py_INCREF(Py_None);
- self->mailbox_name = Py_None;
-
if(ss) {
if(create == 0) {
folderitem = folder_find_item_from_identifier(ss);
}
}
- if(folderitem) {
- FOLDERITEM_STRING_TO_PYTHON_FOLDER_MEMBER(self, folderitem->name, "name");
- FOLDERITEM_STRING_TO_PYTHON_FOLDER_MEMBER(self, folderitem->path, "path");
- FOLDERITEM_STRING_TO_PYTHON_FOLDER_MEMBER(self, folderitem->folder->name, "mailbox_name");
- self->folderitem = folderitem;
+ self->folderitem = folderitem;
+ if(folderitem)
self->properties = clawsmail_folderproperties_new(folderitem->prefs);
- }
else {
Py_INCREF(Py_None);
self->properties = Py_None;
}
return 0;
-
- err:
- return -1;
}
-static PyObject* Folder_str(PyObject *self)
+static PyObject* Folder_str(clawsmail_FolderObject *self)
{
- PyObject *str;
- str = PyString_FromString("Folder: ");
- PyString_ConcatAndDel(&str, PyObject_GetAttrString(self, "name"));
- return str;
+ return PyString_FromFormat("Folder: %s", self->folderitem->name);
}
static PyObject* Folder_get_identifier(clawsmail_FolderObject *self, PyObject *args)
return retval;
}
+static PyObject* get_name(clawsmail_FolderObject *self, void *closure)
+{
+ if(self->folderitem && self->folderitem->name)
+ return PyString_FromString(self->folderitem->name);
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_mailbox_name(clawsmail_FolderObject *self, void *closure)
+{
+ if(self->folderitem && self->folderitem->folder && self->folderitem->folder->name)
+ return PyString_FromString(self->folderitem->folder->name);
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_mailbox(clawsmail_FolderObject *self, void *closure)
+{
+ if(self->folderitem && self->folderitem->folder)
+ return clawsmail_mailbox_new(self->folderitem->folder);
+ Py_RETURN_NONE;
+}
+
+
+static PyObject* get_identifier(clawsmail_FolderObject *self, void *closure)
+{
+ if(self->folderitem) {
+ gchar *id;
+ id = folder_item_get_identifier(self->folderitem);
+ if(id) {
+ PyObject *retval;
+ retval = PyString_FromString(id);
+ g_free(id);
+ return retval;
+ }
+ }
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_path(clawsmail_FolderObject *self, void *closure)
+{
+ if(self->folderitem) {
+ gchar *path;
+ path = folder_item_get_path(self->folderitem);
+ if(path) {
+ PyObject *retval;
+ retval = PyString_FromString(path);
+ g_free(path);
+ return retval;
+ }
+ }
+ Py_RETURN_NONE;
+}
+
+
static PyObject* get_properties(clawsmail_FolderObject *self, void *closure)
{
Py_INCREF(self->properties);
return self->properties;
}
+static PyObject* get_num_messages(clawsmail_FolderObject *self, void *closure)
+{
+ if(self && self->folderitem)
+ return PyInt_FromLong(self->folderitem->total_msgs);
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_num_new_messages(clawsmail_FolderObject *self, void *closure)
+{
+ if(self && self->folderitem)
+ return PyInt_FromLong(self->folderitem->new_msgs);
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_num_unread_messages(clawsmail_FolderObject *self, void *closure)
+{
+ if(self && self->folderitem)
+ return PyInt_FromLong(self->folderitem->unread_msgs);
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_num_marked_messages(clawsmail_FolderObject *self, void *closure)
+{
+ if(self && self->folderitem)
+ return PyInt_FromLong(self->folderitem->marked_msgs);
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_num_locked_messages(clawsmail_FolderObject *self, void *closure)
+{
+ if(self && self->folderitem)
+ return PyInt_FromLong(self->folderitem->locked_msgs);
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_num_unread_marked_messages(clawsmail_FolderObject *self, void *closure)
+{
+ if(self && self->folderitem)
+ return PyInt_FromLong(self->folderitem->unreadmarked_msgs);
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_num_ignored_messages(clawsmail_FolderObject *self, void *closure)
+{
+ if(self && self->folderitem)
+ return PyInt_FromLong(self->folderitem->ignored_msgs);
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_num_watched_messages(clawsmail_FolderObject *self, void *closure)
+{
+ if(self && self->folderitem)
+ return PyInt_FromLong(self->folderitem->watched_msgs);
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_num_replied_messages(clawsmail_FolderObject *self, void *closure)
+{
+ if(self && self->folderitem)
+ return PyInt_FromLong(self->folderitem->replied_msgs);
+ Py_RETURN_NONE;
+}
+
+static PyObject* get_num_forwarded_messages(clawsmail_FolderObject *self, void *closure)
+{
+ if(self && self->folderitem)
+ return PyInt_FromLong(self->folderitem->forwarded_msgs);
+ Py_RETURN_NONE;
+}
+
static PyMethodDef Folder_methods[] = {
{"get_identifier", (PyCFunction)Folder_get_identifier, METH_NOARGS,
"get_identifier() - get identifier\n"
"\n"
- "Get identifier for folder as a string (e.g. #mh/foo/bar)."},
+ "Get identifier for folder as a string (e.g. #mh/foo/bar).\n\n"
+ "DEPRECATED: Use identifier property instead."},
+
{"get_messages", (PyCFunction)Folder_get_messages, METH_NOARGS,
"get_messages() - get a tuple of messages in folder\n"
"\n"
"Get a tuple of MessageInfos for the folder."},
- {NULL}
+
+ {NULL}
};
-static PyMemberDef Folder_members[] = {
- {"name", T_OBJECT_EX, offsetof(clawsmail_FolderObject, name), 0,
- "name - name of folder"},
+static PyGetSetDef Folder_getset[] = {
+ {"name", (getter)get_name, (setter)NULL,
+ "name - name of folder", NULL},
+
+ {"path", (getter)get_path, (setter)NULL,
+ "path - path of folder", NULL},
- {"path", T_OBJECT_EX, offsetof(clawsmail_FolderObject, path), 0,
- "path - path of folder"},
+ {"identifier", (getter)get_identifier, (setter)NULL,
+ "identifier - identifier of folder", NULL},
- {"mailbox_name", T_OBJECT_EX, offsetof(clawsmail_FolderObject, mailbox_name), 0,
- "mailbox_name - name of the corresponding mailbox"},
+ {"mailbox", (getter)get_mailbox, (setter)NULL,
+ "mailbox - corresponding mailbox", NULL},
- {NULL}
-};
+ {"mailbox_name", (getter)get_mailbox_name, (setter)NULL,
+ "mailbox_name - name of the corresponding mailbox\n\n"
+ "DEPRECATED: Use folder.mailbox.name instead", NULL},
-static PyGetSetDef Folder_getset[] = {
{"properties", (getter)get_properties, (setter)NULL,
"properties - folder properties object", NULL},
+ {"num_messages", (getter)get_num_messages, (setter)NULL,
+ "num_messages - total number of messages in folder", NULL},
+
+ {"num_new_messages", (getter)get_num_new_messages, (setter)NULL,
+ "num_new_messages - number of new messages in folder", NULL},
+
+ {"num_unread_messages", (getter)get_num_unread_messages, (setter)NULL,
+ "num_unread_messages - number of unread messages in folder", NULL},
+
+ {"num_marked_messages", (getter)get_num_marked_messages, (setter)NULL,
+ "num_marked_messages - number of marked messages in folder", NULL},
+
+ {"num_locked_messages", (getter)get_num_locked_messages, (setter)NULL,
+ "num_locked_messages - number of locked messages in folder", NULL},
+
+ {"num_unread_marked_messages", (getter)get_num_unread_marked_messages, (setter)NULL,
+ "num_unread_marked_messages - number of unread marked messages in folder", NULL},
+
+ {"num_ignored_messages", (getter)get_num_ignored_messages, (setter)NULL,
+ "num_ignored_messages - number of ignored messages in folder", NULL},
+
+ {"num_watched_messages", (getter)get_num_watched_messages, (setter)NULL,
+ "num_watched_messages - number of watched messages in folder", NULL},
+
+ {"num_replied_messages", (getter)get_num_replied_messages, (setter)NULL,
+ "num_replied_messages - number of replied messages in folder", NULL},
+
+ {"num_forwarded_messages", (getter)get_num_forwarded_messages, (setter)NULL,
+ "num_forwarded_messages - number of forwarded messages in folder", NULL},
+
{NULL}
};
0, /* tp_as_mapping*/
0, /* tp_hash */
0, /* tp_call*/
- Folder_str, /* tp_str*/
+ (reprfunc)Folder_str, /* tp_str*/
0, /* tp_getattro*/
0, /* tp_setattro*/
0, /* tp_as_buffer*/
0, /* tp_iter */
0, /* tp_iternext */
Folder_methods, /* tp_methods */
- Folder_members, /* tp_members */
+ 0, /* tp_members */
Folder_getset, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
return NULL;
id = folder_item_get_identifier(folderitem);
- arglist = Py_BuildValue("(s)", id);
- g_free(id);
- ff = (clawsmail_FolderObject*) PyObject_CallObject((PyObject*) &clawsmail_FolderType, arglist);
- Py_DECREF(arglist);
- return (PyObject*)ff;
+ if(id) {
+ arglist = Py_BuildValue("(s)", id);
+ g_free(id);
+ ff = (clawsmail_FolderObject*) PyObject_CallObject((PyObject*) &clawsmail_FolderType, arglist);
+ Py_DECREF(arglist);
+ return (PyObject*)ff;
+ }
+ Py_RETURN_NONE;
}
FolderItem* clawsmail_folder_get_item(PyObject *self)