/** * @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(); public: void assign(Depot *); Depot *get(const std::string &name) const; static DepotFactory &getInstance(); ~DepotFactory(); }; class Depot { public: class iterator { public: iterator(); iterator(const iterator ©); iterator(DIR *, struct dirent *); ~iterator(); iterator &operator=(const iterator ©); std::string operator*() const; void operator++(); bool operator!=(iterator) const; bool operator==(iterator) const; void deref(); 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() = default; virtual iterator begin(const std::string &) const; virtual const iterator &end() const; void setDelimiter(char); char getDelimiter() const; virtual void assign(Mailbox *); bool setDefaultType(const std::string &n); Mailbox *getDefault() const; virtual Mailbox *get(const std::string &path) const; virtual bool setSelected(Mailbox *); virtual Mailbox *getSelected() const; void resetSelected(); bool getStatus(const std::string &s_in, Status &dest) const; const std::string &getName() const; virtual const std::string &getPersonalNamespace() const; virtual const std::string &getOthersNamespace() const; virtual const std::string &getSharedNamespace() 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() const; void setLastError(const std::string &error) const; virtual std::vector getSubscriptions() const; virtual void subscribeTo(const std::string mailbox); virtual bool unsubscribeTo(const std::string mailbox); virtual void loadSubscribes(); virtual bool saveSubscribes() 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() 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