summaryrefslogtreecommitdiff
path: root/mailnews/imap/src/nsIMAPNamespace.h
diff options
context:
space:
mode:
Diffstat (limited to 'mailnews/imap/src/nsIMAPNamespace.h')
-rw-r--r--mailnews/imap/src/nsIMAPNamespace.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/mailnews/imap/src/nsIMAPNamespace.h b/mailnews/imap/src/nsIMAPNamespace.h
new file mode 100644
index 0000000000..327f78416a
--- /dev/null
+++ b/mailnews/imap/src/nsIMAPNamespace.h
@@ -0,0 +1,87 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef _nsIMAPNamespace_H_
+#define _nsIMAPNamespace_H_
+
+#include "nsTArray.h"
+
+class nsIMAPNamespace
+{
+
+public:
+ nsIMAPNamespace(EIMAPNamespaceType type, const char *prefix, char delimiter, bool from_prefs);
+
+ ~nsIMAPNamespace();
+
+ EIMAPNamespaceType GetType() { return m_namespaceType; }
+ const char * GetPrefix() { return m_prefix; }
+ char GetDelimiter() { return m_delimiter; }
+ void SetDelimiter(char delimiter, bool delimiterFilledIn);
+ bool GetIsDelimiterFilledIn() { return m_delimiterFilledIn; }
+ bool GetIsNamespaceFromPrefs() { return m_fromPrefs; }
+
+ // returns -1 if this box is not part of this namespace,
+ // or the length of the prefix if it is part of this namespace
+ int MailboxMatchesNamespace(const char *boxname);
+
+protected:
+ EIMAPNamespaceType m_namespaceType;
+ char *m_prefix;
+ char m_delimiter;
+ bool m_fromPrefs;
+ bool m_delimiterFilledIn;
+
+};
+
+
+// represents an array of namespaces for a given host
+class nsIMAPNamespaceList
+{
+public:
+ ~nsIMAPNamespaceList();
+
+ static nsIMAPNamespaceList *CreatensIMAPNamespaceList();
+
+ nsresult InitFromString(const char *nameSpaceString, EIMAPNamespaceType nstype);
+ nsresult OutputToString(nsCString &OutputString);
+ int UnserializeNamespaces(const char *str, char **prefixes, int len);
+ nsresult SerializeNamespaces(char **prefixes, int len, nsCString &serializedNamespace);
+
+ void ClearNamespaces(bool deleteFromPrefsNamespaces, bool deleteServerAdvertisedNamespaces, bool reallyDelete);
+ int GetNumberOfNamespaces();
+ int GetNumberOfNamespaces(EIMAPNamespaceType);
+ nsIMAPNamespace *GetNamespaceNumber(int nodeIndex);
+ nsIMAPNamespace *GetNamespaceNumber(int nodeIndex, EIMAPNamespaceType);
+
+ nsIMAPNamespace *GetDefaultNamespaceOfType(EIMAPNamespaceType type);
+ int AddNewNamespace(nsIMAPNamespace *ns);
+ nsIMAPNamespace *GetNamespaceForMailbox(const char *boxname);
+ static nsIMAPNamespace* GetNamespaceForFolder(const char *hostName,
+ const char *canonicalFolderName,
+ char delimiter);
+ static bool GetFolderIsNamespace(const char *hostName,
+ const char *canonicalFolderName,
+ char delimiter,nsIMAPNamespace *namespaceForFolder);
+ static char* GetFolderNameWithoutNamespace(nsIMAPNamespace *namespaceForFolder, const char *canonicalFolderName);
+ static char *AllocateServerFolderName(const char *canonicalFolderName, char delimiter);
+ static char *GetFolderOwnerNameFromPath(nsIMAPNamespace *namespaceForFolder, const char *canonicalFolderName);
+ static char *AllocateCanonicalFolderName(const char *onlineFolderName, char delimiter);
+ static void SuggestHierarchySeparatorForNamespace(nsIMAPNamespace *namespaceForFolder, char delimiterFromFolder);
+ static char *GenerateFullFolderNameWithDefaultNamespace(const char *hostName,
+ const char *canonicalFolderName,
+ const char *owner,
+ EIMAPNamespaceType nsType,
+ nsIMAPNamespace **nsUsed);
+
+protected:
+ nsIMAPNamespaceList(); // use CreatensIMAPNamespaceList to create one
+
+ nsTArray<nsIMAPNamespace*> m_NamespaceList;
+
+};
+
+
+#endif