diff options
Diffstat (limited to 'src/core/imap/MCIMAPNamespace.cpp')
-rw-r--r-- | src/core/imap/MCIMAPNamespace.cpp | 144 |
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(); + } +} |