1 /* 2 ** Copyright 2003-2004, Double Precision Inc. 3 ** 4 ** See COPYING for distribution information. 5 */ 6 #ifndef libmail_tmpaccount_H 7 #define libmail_tmpaccount_H 8 9 #include "libmail_config.h" 10 #include "mail.H" 11 #include "generic.H" 12 #include "addmessage.H" 13 14 #include "rfc2045/rfc2045.h" 15 #include <stdio.h> 16 17 LIBMAIL_START 18 19 // 20 // The tmp: driver - a driver that uses a temporary file that holds exactly 21 // one message. 22 // The driver provides a single folder, INBOX. Adding a message to the 23 // folder automatically expunges the previous message. 24 // 25 26 class tmpaccount : public account, public generic { 27 28 void resumed(); 29 void handler(std::vector<pollfd> &fds, int &timeout); 30 31 callback::disconnect *disconnect_callback; 32 callback::folder *folder_callback; 33 FILE *f; 34 struct rfc2045 *rfc2045p; 35 messageInfo fInfo; 36 37 void disconnect(const char *); 38 39 class folder : public mail::folder { 40 41 tmpaccount *account; 42 43 static void na(callback &); 44 public: 45 folder(tmpaccount *); 46 ~folder(); 47 48 bool isParentOf(std::string path) const; 49 50 void hasMessages(bool); 51 void hasSubFolders(bool); 52 void readFolderInfo( callback::folderInfo 53 &callback1, 54 callback &callback2) const; 55 void getParentFolder(callback::folderList &callback1, 56 callback &callback2) const; 57 void readSubFolders( callback::folderList &callback1, 58 callback &callback2) const; 59 60 mail::addMessage *addMessage(callback &callback) const; 61 62 void createSubFolder(std::string name, bool isDirectory, 63 callback::folderList 64 &callback1, 65 callback &callback2) const; 66 void create(bool isDirectory, 67 callback &callback) const; 68 69 void destroy(callback &callback, bool destroyDir) const; 70 71 void renameFolder(const mail::folder *newParent, 72 std::string newName, 73 callback::folderList &callback1, 74 callback &callback2) const; 75 76 folder *clone() const; 77 78 std::string toString() const; 79 80 void open(callback &openCallback, 81 snapshot *restoreSnapshot, 82 callback::folder &folderCallback) const; 83 84 void sameServerAsHelperFunc() const; 85 86 std::string getName() const; 87 std::string getPath() const; 88 bool hasMessages() const; 89 bool hasSubFolders() const; 90 }; 91 92 class add : public addMessage { 93 94 FILE *newFile; 95 struct rfc2045 *rfc2045p; 96 97 tmpaccount *account; 98 mail::callback &cb; 99 public: 100 add(tmpaccount *accountArg, mail::callback &cbArg); 101 ~add(); 102 virtual void saveMessageContents(std::string); 103 virtual void go(); 104 virtual void fail(std::string errmsg); 105 }; 106 107 public: 108 109 friend class mail::tmpaccount::folder; 110 friend class mail::tmpaccount::add; 111 112 tmpaccount(callback::disconnect &disconnect_callbackArg); 113 virtual ~tmpaccount(); 114 115 void logout(callback &callback); 116 void checkNewMail(callback &callback); 117 118 bool hasCapability(std::string capability); 119 std::string getCapability(std::string capability); 120 mail::folder *folderFromString(std::string); 121 void readTopLevelFolders(callback::folderList &callback1, 122 callback &callback2); 123 void findFolder(std::string path, 124 callback::folderList &callback1, 125 callback &callback2); 126 std::string translatePath(std::string path); 127 128 129 void readMessageAttributes(const std::vector<size_t> &messages, 130 MessageAttributes attributes, 131 callback::message &callback); 132 void readMessageContent(const std::vector<size_t> &messages, 133 bool peek, 134 enum mail::readMode readType, 135 callback::message &callback); 136 137 void readMessageContent(size_t messageNum, 138 bool peek, 139 const class mimestruct &msginfo, 140 enum mail::readMode readType, 141 callback::message &callback); 142 143 void readMessageContentDecoded(size_t messageNum, 144 bool peek, 145 const class mimestruct 146 &msginfo, 147 callback::message &callback); 148 size_t getFolderIndexSize(); 149 150 messageInfo getFolderIndexInfo(size_t); 151 void saveFolderIndexInfo(size_t messageNum, 152 const messageInfo &msgInfo, 153 callback &callback); 154 void updateFolderIndexFlags(const std::vector<size_t> &messages, 155 bool doFlip, 156 bool enableDisable, 157 const messageInfo &flags, 158 callback &callback); 159 160 void updateFolderIndexInfo(callback &); 161 void removeMessages(const std::vector<size_t> &messages, 162 callback &cb); 163 void copyMessagesTo(const std::vector<size_t> &messages, 164 mail::folder *copyTo, 165 callback &callback); 166 void searchMessages(const searchParams &searchInfo, 167 searchCallback &callback); 168 169 170 171 172 void genericMessageRead(std::string uid, 173 size_t messageNumber, 174 bool peek, 175 mail::readMode readType, 176 mail::callback::message &callback); 177 178 void genericMessageSize(std::string uid, 179 size_t messageNumber, 180 mail::callback::message &callback); 181 182 void genericGetMessageFd(std::string uid, 183 size_t messageNumber, 184 bool peek, 185 int &fdRet, 186 mail::callback &callback); 187 188 void genericGetMessageStruct(std::string uid, 189 size_t messageNumber, 190 struct rfc2045 *&structRet, 191 mail::callback &callback); 192 193 void genericGetMessageFdStruct(std::string uid, 194 size_t messageNumber, 195 bool peek, 196 int &fdRet, 197 struct rfc2045 *&structret, 198 199 mail::callback &callback); 200 201 bool genericCachedUid(std::string uid); 202 203 void genericMarkRead(size_t messageNumber); 204 }; 205 206 LIBMAIL_END 207 208 #endif 209