/** * @filec depot.h * @file Declaration of the Depot class (the mail storage) * @author Andreas Aardal Hanssen * @date 2002-2005 */ #ifndef depot_h_included #define depot_h_included #include #include #include #include namespace Binc { class Mailbox; class Depot; class Status; class DepotFactory { private: std::vector depots; DepotFactory(void); public: void assign(Depot *); Depot *get(const std::string &name) const; static DepotFactory &getInstance(void); ~DepotFactory(void); }; class Depot { public: class iterator { public: iterator(void); iterator(const iterator ©); iterator(DIR *, struct dirent *); ~iterator(void); iterator &operator=(const iterator ©); std::string operator*(void) const; void operator++(void); bool operator!=(iterator) const; bool operator==(iterator) const; void deref(void); friend class Depot; private: DIR *dirp; struct dirent *direntp; int *ref; }; private: iterator enditerator; std::vector backends; Mailbox *defaultmailbox; Mailbox *selectedmailbox; std::vector subscribed; std::string personalNamespace; std::string othersNamespace; std::string sharedNamespace; protected: mutable std::string lastError; std::string name; char delimiter; mutable std::map mailboxstatuses; public: Depot(); Depot(const std::string &name); virtual ~Depot(void) = default; virtual iterator begin(const std::string &) const; virtual const iterator &end(void) const; void setDelimiter(char); char getDelimiter(void) const; virtual void assign(Mailbox *); bool setDefaultType(const std::string &n); Mailbox *getDefault(void) const; virtual Mailbox *get(const std::string &path) const; virtual bool setSelected(Mailbox *); virtual Mailbox *getSelected(void) const; void resetSelected(void); bool getStatus(const std::string &s_in, Status &dest) const; const std::string &getName(void) const; virtual const std::string &getPersonalNamespace(void) const; virtual const std::string &getOthersNamespace(void) const; virtual const std::string &getSharedNamespace(void) const; virtual std::string mailboxToFilename(const std::string &m) const = 0; virtual std::string filenameToMailbox(const std::string &m) const = 0; virtual bool createMailbox(const std::string &m) const; virtual bool deleteMailbox(const std::string &m) const; virtual bool renameMailbox(const std::string &m, const std::string &n) const; const std::string &getLastError(void) const; void setLastError(const std::string &error) const; virtual std::vector getSubscriptions(void) const; virtual void subscribeTo(const std::string mailbox); virtual bool unsubscribeTo(const std::string mailbox); virtual void loadSubscribes(void); virtual bool saveSubscribes(void) const; }; class MaildirPPDepot : public Depot { public: std::string mailboxToFilename(const std::string &m) const; std::string filenameToMailbox(const std::string &m) const; const std::string &getPersonalNamespace(void) const; MaildirPPDepot(); ~MaildirPPDepot(); private: std::string privateNamespace; }; class IMAPdirDepot : public Depot { public: std::string mailboxToFilename(const std::string &m) const; std::string filenameToMailbox(const std::string &m) const; IMAPdirDepot(); ~IMAPdirDepot(); }; } #endif