1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402
|
/* $Id: sync.H,v 1.7 2004/06/14 00:18:43 mrsam Exp $
**
** Copyright 2002-2003, Double Precision Inc.
**
** See COPYING for distribution information.
*/
#ifndef libmail_sync_H
#define libmail_sync_H
#include "libmail_config.h"
#include <string>
#include <vector>
#include <list>
#include <set>
#include <iostream>
////////////////////////////////////////////////////////////////////////
//
// A synchronous libmail.a interface.
//
// USAGE:
//
// bool ok=mail->login(string url, string password);
//
// mail->logout();
//
// mail::ACCOUNT::FolderList folderList;
//
// bool ok=mail->getTopLevelFolders(folderList);
//
// size_t folderCnt=folderList.size();
//
// const mail::folder *folder=folderList[n];
//
// bool ok=mail->getSubFolders(folder, folderList);
//
// bool ok=mail->getParentFolder(folder, folderList);
//
// string folderStr=folder->toString();
//
// string folderPath=folder->getPath();
//
// mail::folder *f=mail->getFolderFromString(folderStr);
//
// mail::folder *p=mail->getFolderFromPath(folderPath);
//
// std::string path=mail->translatePath(std::string pathName);
//
// bool ok=mail->createFolder(const mail::folder *, bool createDirectory);
//
// mail::folder *f=mail->createFolder(const mail::folder *parent,
// string Name, bool createDirectory);
//
// mail::folder *f=mail->renameFolder(mail::folder *oldFolder,
// mail::folder *newParent,
// string newName);
//
// bool ok=mail->deleteFolder(f, bool deleteDirectory);
//
// mail::ACCOUNT::FolderInfo folderInfo;
//
// bool ok=readFolderInfo(f, folderInfo);
//
// bool ok=mail->openFolder(f, snapshot);
//
// size_t nMsgs=mail->getFolderIndexSize();
//
// mail::messageInfo getFolderIndexInfo(size_t msgNum);
//
// void getFolderKeywordInfo(size_t msgNum, set<string> &keywords);
//
// mail::messageInfo msgInfo=mail->readFolderInfo(size_t msgNum);
//
// vector<mail::xenvelope> envelopeList;
// vector<mail::mimestruct> structureList;
// vector<size_t> msgNumVector;
//
// bool ok=getMessageEnvelope(msgNumVector, envelopeList);
//
// bool ok=getMessageStructure(msgNumVector, structureList);
//
// mail::xenvelope env=getMessageEnvelope(size_t messageNum);
// mail::mimestruct str=getMessageStructure(size_t messageNum);
//
// bool ok=mail->saveFolderIndexInfo(msgNum, msgInfo);
//
// bool updateKeywords(const std::vector<size_t> &messages,
// const std::set<std::string> &keywords,
// bool setOrChange,
// // false: set, true: see changeTo
// bool changeTo);
// bool updateKeywords(const std::vector<size_t> &messages,
// const std::vector<std::string> &keywords,
// bool setOrChange,
// // false: set, true: see changeTo
// bool changeTo);
// bool updateKeywords(const std::vector<size_t> &messages,
// const std::list<std::string> &keywords,
// bool setOrChange,
// // false: set, true: see changeTo
// bool changeTo);
// bool ok=mail->updateFolderIndexInfo();
//
// bool ok=mail->checkNewMail();
//
// bool flag=mail->folderModified();
//
// bool ok=mail->removeMessages(msgNumVector);
//
// bool ok=mail->updateFolderIndexFlags(msgNumVector, bool doFlip,
// bool enableDisable,
// mail::messageInfo &flags);
//
// bool ok=mail->copyMessagesTo(msgNumVector, mail::folder *copyTo);
// bool ok=mail->moveMessagesTo(msgNumVector, mail::folder *copyTo);
//
// bool ok=mail->searchMessages(const mail::searchParams &searchInfo,
// msgNumVector);
//
// class myStore : public mail::ACCOUNT::Store {
//
// ....
//
// }
//
// myStore myStoreCallback;
//
// bool ok=mail->getMessageContent(msgNumVector, bool peek,
// bool getHeaders,
// bool getContent, myStoreCallback);
//
// bool ok=mail->getMessageContent(msgNum, bool peek,
// mail::mimestruct &part,
// bool getHeaders,
// bool getContent, myStoreCallback);
//
// bool ok=mail->getMessageContentDecoded(msgNum, bool peek,
// mail::mimestruct &part,
// myStoreCallback);
//
// class getMyMessageContents : public mail::addMessagePull {
//
// ....
//
// }
//
// getMyMessageContents contents;
//
// bool ok=mail->addMessage(f, contents);
//
// mail::smtpInfo sendMessageInfo;
//
// bool sent=mail->send(sendMessageInfo, folder, contents);
//
// string errmsg=mail->errmsg;
//
// bool disconnected=mail->disconnected();
LIBMAIL_START
class account;
class xenvelope;
class mimestruct;
class addMessagePull;
class ACCOUNT {
public:
class callback;
class disconnectCallback;
class readFoldersCallback;
class readMessageCallback;
class SearchCallback;
class Progress {
bool reportingProgress;
ACCOUNT *myAccount;
public:
friend class ACCOUNT;
friend class ACCOUNT::callback;
Progress(ACCOUNT *);
virtual void operator()(size_t bytesCompleted,
size_t bytesEstimatedTotal,
size_t messagesCompleted,
size_t messagesEstimatedTotal)=0;
virtual ~Progress();
};
friend class Progress;
private:
account *ptr;
Progress *currentProgressReporter;
class disconnectCallback *imap_disconnect;
bool eventloop(callback &);
class FolderCallback : public mail::callback::folder {
public:
ACCOUNT *account;
FolderCallback();
~FolderCallback();
private:
void newMessages();
void messagesRemoved(std::vector< std::pair<size_t,
size_t> > &);
void messageChanged(size_t n);
} folderCallback;
bool folderModifiedFlag;
public:
class FolderList {
std::vector<class mail::folder *> folders;
public:
FolderList();
~FolderList();
FolderList(const FolderList &);
FolderList &operator=(const FolderList &);
void append(const mail::folder *);
typedef std::vector<class mail::folder *>::iterator iterator;
iterator begin()
{
return iterator(folders.begin());
}
iterator end()
{
return iterator(folders.end());
}
size_t size() const
{
return folders.size();
}
const mail::folder *operator[](size_t n) const
{
return n < 0 || n >= folders.size()
? NULL:folders[n];
}
};
class Store {
public:
Store();
virtual ~Store();
virtual void store(size_t, std::string)=0;
};
class FolderInfo {
public:
FolderInfo();
~FolderInfo();
size_t messageCount;
size_t unreadCount;
bool fastInfo;
};
std::string errmsg;
ACCOUNT();
virtual ~ACCOUNT();
std::string getErrmsg() { return errmsg; }
bool login( mail::account::openInfo openInfoArg);
void logout();
bool getTopLevelFolders(FolderList &list);
bool getSubFolders(const mail::folder *folder, FolderList &list);
bool getParentFolder(const mail::folder *folder, FolderList &list);
mail::folder *getFolderFromString(std::string);
mail::folder *getFolderFromPath(std::string);
std::string translatePath(std::string);
bool createFolder(const mail::folder *, bool);
mail::folder *createFolder(const mail::folder *, std::string, bool);
mail::folder *renameFolder(const mail::folder *,
const mail::folder *, std::string);
bool deleteFolder(const mail::folder *, bool);
bool openFolder(const mail::folder *folder,
mail::snapshot *restoreSnapshot);
bool readFolderInfo(const mail::folder *folder, FolderInfo &info);
size_t getFolderIndexSize();
class mail::messageInfo getFolderIndexInfo(size_t);
void getFolderKeywordInfo(size_t msgNum,
std::set<std::string> &keywords);
bool saveFolderIndexInfo(size_t messageNum,
const mail::messageInfo &newInfo);
bool updateKeywords(const std::vector<size_t> &messages,
const std::set<std::string> &keywords,
bool setOrChange,
// false: set, true: see changeTo
bool changeTo);
bool updateKeywords(const std::vector<size_t> &messages,
const std::vector<std::string> &keywords,
bool setOrChange,
// false: set, true: see changeTo
bool changeTo);
bool updateKeywords(const std::vector<size_t> &messages,
const std::list<std::string> &keywords,
bool setOrChange,
// false: set, true: see changeTo
bool changeTo);
bool updateFolderIndexInfo();
bool removeMessages(const std::vector<size_t> &messages);
bool updateFolderIndexFlags(const std::vector<size_t> &messages,
bool doFlip,
bool enableDisable,
const mail::messageInfo &flags);
bool copyMessagesTo(const std::vector<size_t> &messages,
mail::folder *copyTo);
bool moveMessagesTo(const std::vector<size_t> &messages,
mail::folder *copyTo);
bool checkNewMail();
bool getMessageEnvelope(const std::vector<size_t> &messages,
std::vector<xenvelope> &envelopes);
bool getMessageStructure(const std::vector<size_t> &messages,
std::vector<mimestruct> &structures);
xenvelope getMessageEnvelope(size_t messageNum);
mimestruct getMessageStructure(size_t messageNum);
bool searchMessages(const searchParams &searchInfo,
std::vector<size_t> &messageList);
bool getMessageContent(const std::vector<size_t> &messages,
bool peek,
enum mail::readMode getType,
Store &contentCallback);
bool getMessageContent(size_t messageNum,
bool peek,
const mimestruct &messagePart,
enum mail::readMode getType,
Store &contentCallback);
bool getMessageContentDecoded(size_t messageNum,
bool peek,
const mimestruct &messagePart,
Store &callback);
bool addMessage(const mail::folder *folder,
addMessagePull &message);
bool send(const class mail::smtpInfo &messageInfo,
const mail::folder *saveFolder,
addMessagePull &message);
bool getMyRights(const mail::folder *folder, std::string &rights);
bool getRights(const mail::folder *folder,
std::list<std::pair<std::string, std::string> >
&rights);
bool setRights(const mail::folder *folder,
std::string &errorIdentifier,
std::vector<std::string> &errorRights,
std::string identifier,
std::string rights);
bool delRights(const mail::folder *folder,
std::string &errorIdentifier,
std::vector<std::string> &errorRights,
std::string identifier);
bool folderModified();
bool disconnected();
void disconnected(std::string errmsg);
};
LIBMAIL_END
#endif
|