aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/imap/MCIMAPNamespace.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/imap/MCIMAPNamespace.cpp')
-rw-r--r--src/core/imap/MCIMAPNamespace.cpp144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/core/imap/MCIMAPNamespace.cpp b/src/core/imap/MCIMAPNamespace.cpp
new file mode 100644
index 00000000..09037877
--- /dev/null
+++ b/src/core/imap/MCIMAPNamespace.cpp
@@ -0,0 +1,144 @@
+#include "MCIMAPNamespace.h"
+
+#include "MCIMAPNamespaceItem.h"
+
+#include <libetpan/libetpan.h>
+
+using namespace mailcore;
+
+void IMAPNamespace::init()
+{
+ mItems = NULL;
+}
+
+IMAPNamespace::IMAPNamespace()
+{
+ init();
+ mItems = new Array();
+}
+
+IMAPNamespace::IMAPNamespace(IMAPNamespace * other)
+{
+ init();
+ mItems = (Array *) other->mItems->copy();
+}
+
+IMAPNamespace::~IMAPNamespace()
+{
+ MC_SAFE_RELEASE(mItems);
+}
+
+String * IMAPNamespace::description()
+{
+ String * result = String::string();
+ result->appendUTF8Format("<%s:%p %s>", MCUTF8(className()), this,
+ MCUTF8DESC(mItems));
+ return result;
+}
+
+Object * IMAPNamespace::copy()
+{
+ return new IMAPNamespace(this);
+}
+
+IMAPNamespaceItem * IMAPNamespace::mainItem()
+{
+ if (mItems->count() == 0)
+ return NULL;
+
+ return (IMAPNamespaceItem *) mItems->objectAtIndex(0);
+}
+
+IMAPNamespaceItem * IMAPNamespace::itemForPath(String * path)
+{
+ for(unsigned int i = 0 ; i < mItems->count() ; i ++) {
+ IMAPNamespaceItem * item = (IMAPNamespaceItem *) mItems->objectAtIndex(i);
+ if (item->containsFolder(path))
+ return item;
+ }
+
+ return NULL;
+}
+
+String * IMAPNamespace::mainPrefix()
+{
+ if (mItems->count() == 0)
+ return NULL;
+
+ return mainItem()->prefix();
+}
+
+char IMAPNamespace::mainDelimiter()
+{
+ if (mItems->count() == 0)
+ return 0;
+
+ return mainItem()->delimiter();
+}
+
+Array * IMAPNamespace::prefixes()
+{
+ Array * result = Array::array();
+ for(unsigned int i = 0 ; i < mItems->count() ; i ++) {
+ IMAPNamespaceItem * item = (IMAPNamespaceItem *) mItems->objectAtIndex(i);
+ result->addObject(item->prefix());
+ }
+ return result;
+}
+
+String * IMAPNamespace::pathForComponents(Array * components)
+{
+ return mainItem()->pathForComponents(components);
+}
+
+String * IMAPNamespace::pathForComponentsAndPrefix(Array * components, String * prefix)
+{
+ IMAPNamespaceItem * item = itemForPath(prefix);
+ if (item == NULL)
+ return NULL;
+ return item->pathForComponents(components);
+}
+
+Array * IMAPNamespace::componentsFromPath(String * path)
+{
+ IMAPNamespaceItem * item = itemForPath(path);
+ if (item == NULL)
+ return NULL;
+ return item->componentsForPath(path);
+}
+
+bool IMAPNamespace::containsFolderPath(String * path)
+{
+ return (itemForPath(path) != NULL);
+}
+
+IMAPNamespace * IMAPNamespace::namespaceWithPrefix(String * prefix, char delimiter)
+{
+ IMAPNamespace * ns;
+ IMAPNamespaceItem * item;
+
+ ns = new IMAPNamespace();
+ item = new IMAPNamespaceItem();
+ item->setDelimiter(delimiter);
+ item->setPrefix(prefix);
+ ns->mItems->addObject(item);
+ item->release();
+
+ return (IMAPNamespace *) ns->autorelease();
+}
+
+void IMAPNamespace::importIMAPNamespace(struct mailimap_namespace_item * item)
+{
+ clistiter * cur;
+
+ for(cur = clist_begin(item->ns_data_list) ; cur != NULL ; cur = clist_next(cur)) {
+ IMAPNamespaceItem * item;
+ struct mailimap_namespace_info * info;
+
+ info = (struct mailimap_namespace_info *) clist_content(cur);
+ item = new IMAPNamespaceItem();
+ item->importIMAPNamespaceInfo(info);
+ mItems->addObject(item);
+ item->release();
+ }
+}