Python plugin: Folder: Add message counts as read-only properties
[claws.git] / src / plugins / python / foldertype.c
index 10a19b423bb3821835483aecad68e9bc0c30f169..2a8c2e4d580d36316fe3999ea1c4c9d8e511c257 100644 (file)
@@ -25,6 +25,7 @@
 #include "foldertype.h"
 #include "folderpropertiestype.h"
 #include "messageinfotype.h"
+#include "mailboxtype.h"
 
 #include <structmember.h>
 
@@ -145,12 +146,106 @@ static PyObject* get_mailbox_name(clawsmail_FolderObject *self, void *closure)
   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_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"
@@ -159,8 +254,10 @@ static PyMethodDef Folder_methods[] = {
     {"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}
+     "Get a tuple of MessageInfos for the folder.\n\n"
+     "DEPRECATED: Use identifier property instead."},
+
+     {NULL}
 };
 
 static PyGetSetDef Folder_getset[] = {
@@ -170,12 +267,49 @@ static PyGetSetDef Folder_getset[] = {
     {"path", (getter)get_path, (setter)NULL,
      "path - path of folder", NULL},
 
+    {"identifier", (getter)get_identifier, (setter)NULL,
+     "identifier - identifier of folder", NULL},
+
+    {"mailbox", (getter)get_mailbox, (setter)NULL,
+     "mailbox - corresponding mailbox", NULL},
+
     {"mailbox_name", (getter)get_mailbox_name, (setter)NULL,
-     "mailbox_name - name of the corresponding mailbox", NULL},
+     "mailbox_name - name of the corresponding mailbox\n\n"
+     "DEPRECATED: Use folder.mailbox.name instead", NULL},
 
     {"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}
 };
 
@@ -246,11 +380,14 @@ PyObject* clawsmail_folder_new(FolderItem *folderitem)
     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)