Set progress after the body has been fetched. This fixes #7255.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40832 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Clemens Zeidler
2011-03-06 07:49:00 +00:00
parent 8c018efae7
commit f5a2f7b79d
6 changed files with 23 additions and 11 deletions
@@ -28,7 +28,8 @@ DispatcherIMAPListener::DispatcherIMAPListener(MailProtocol& protocol,
void void
DispatcherIMAPListener::HeaderFetched(int32 uid, BPositionIO* data) DispatcherIMAPListener::HeaderFetched(int32 uid, BPositionIO* data,
bool bodyIsComming)
{ {
BFile* file = dynamic_cast<BFile*>(data); BFile* file = dynamic_cast<BFile*>(data);
if (file == NULL) if (file == NULL)
@@ -38,6 +39,9 @@ DispatcherIMAPListener::HeaderFetched(int32 uid, BPositionIO* data)
return; return;
fProtocol.NotifyHeaderFetched(ref, file); fProtocol.NotifyHeaderFetched(ref, file);
if (!bodyIsComming)
fProtocol.ReportProgress(0, 1);
} }
@@ -51,6 +55,8 @@ DispatcherIMAPListener::BodyFetched(int32 uid, BPositionIO* data)
if (!fStorage.UIDToRef(uid, ref)) if (!fStorage.UIDToRef(uid, ref))
return; return;
fProtocol.NotifyBodyFetched(ref, file); fProtocol.NotifyBodyFetched(ref, file);
fProtocol.ReportProgress(0, 1);
} }
@@ -488,7 +494,6 @@ IMAPInboundProtocol::FetchBody(const entry_ref& ref)
status_t status = fIMAPMailbox.FetchBody(fIMAPMailbox.UIDToMessageNumber( status_t status = fIMAPMailbox.FetchBody(fIMAPMailbox.UIDToMessageNumber(
uid)); uid));
ReportProgress(0, 1);
ResetProgress(); ResetProgress();
fIMAPMailboxThread->SyncAndStartWatchingMailbox(); fIMAPMailboxThread->SyncAndStartWatchingMailbox();
@@ -27,7 +27,8 @@ public:
bool Lock(); bool Lock();
void Unlock(); void Unlock();
void HeaderFetched(int32 uid, BPositionIO* data); void HeaderFetched(int32 uid, BPositionIO* data,
bool bodyIsComming);
void BodyFetched(int32 uid, BPositionIO* data); void BodyFetched(int32 uid, BPositionIO* data);
void NewMessagesToFetch(int32 nMessages); void NewMessagesToFetch(int32 nMessages);
@@ -306,7 +306,7 @@ FetchMessageCommand::FetchMessageCommand(IMAPMailbox& mailbox, int32 message,
fOutData(data), fOutData(data),
fFetchBodyLimit(fetchBodyLimit) fFetchBodyLimit(fetchBodyLimit)
{ {
fIMAPMailbox.Listener().NewMessagesToFetch(fEndMessage - fMessage + 1);
} }
@@ -320,13 +320,13 @@ FetchMessageCommand::FetchMessageCommand(IMAPMailbox& mailbox,
fOutData(NULL), fOutData(NULL),
fFetchBodyLimit(fetchBodyLimit) fFetchBodyLimit(fetchBodyLimit)
{ {
fIMAPMailbox.Listener().NewMessagesToFetch(fEndMessage - fMessage + 1);
} }
FetchMessageCommand::~FetchMessageCommand() FetchMessageCommand::~FetchMessageCommand()
{ {
fIMAPMailbox.Listener().FetchEnd();
} }
@@ -407,11 +407,15 @@ FetchMessageCommand::Handle(const BString& response)
BString lastLine; BString lastLine;
fConnectionReader.GetNextLine(lastLine); fConnectionReader.GetNextLine(lastLine);
bool bodyIsComming = true;
if (fFetchBodyLimit >= 0 && fFetchBodyLimit <= messageSize)
bodyIsComming = false;
int32 uid = fIMAPMailbox.MessageNumberToUID(message); int32 uid = fIMAPMailbox.MessageNumberToUID(message);
if (uid >= 0) if (uid >= 0)
fIMAPMailbox.Listener().HeaderFetched(uid, data); fIMAPMailbox.Listener().HeaderFetched(uid, data, bodyIsComming);
if (fFetchBodyLimit >= 0 && fFetchBodyLimit <= messageSize) if (!bodyIsComming)
return true; return true;
deleter.Detach(); deleter.Detach();
@@ -623,6 +627,8 @@ ExistsHandler::Handle(const BString& response)
nMessages + 1, exists, &list, NULL); nMessages + 1, exists, &list, NULL);
fIMAPMailbox.AddAfterQuakeCommand(command); fIMAPMailbox.AddAfterQuakeCommand(command);
fIMAPMailbox.Listener().NewMessagesToFetch(exists - nMessages);
command = new FetchMessageCommand(fIMAPMailbox, nMessages + 1, exists, command = new FetchMessageCommand(fIMAPMailbox, nMessages + 1, exists,
fIMAPMailbox.FetchBodyLimit()); fIMAPMailbox.FetchBodyLimit());
fIMAPMailbox.AddAfterQuakeCommand(command); fIMAPMailbox.AddAfterQuakeCommand(command);
@@ -18,7 +18,8 @@ class IMAPMailboxListener {
public: public:
virtual ~IMAPMailboxListener() {} virtual ~IMAPMailboxListener() {}
virtual void HeaderFetched(int32 uid, BPositionIO* data) {} virtual void HeaderFetched(int32 uid, BPositionIO* data,
bool bodyIsComming) {}
virtual void BodyFetched(int32 uid, BPositionIO* data) {} virtual void BodyFetched(int32 uid, BPositionIO* data) {}
virtual void NewMessagesToFetch(int32 nMessages) {} virtual void NewMessagesToFetch(int32 nMessages) {}
@@ -203,6 +203,7 @@ POP3Protocol::SyncMessages()
break; break;
NotifyHeaderFetched(ref, &file); NotifyHeaderFetched(ref, &file);
} }
ReportProgress(0, 1);
if (file.WriteAttr("MAIL:unique_id", B_STRING_TYPE, 0, uid, if (file.WriteAttr("MAIL:unique_id", B_STRING_TYPE, 0, uid,
strlen(uid)) < 0) { strlen(uid)) < 0) {
-2
View File
@@ -281,8 +281,6 @@ MailProtocol::NotifyHeaderFetched(const entry_ref& ref, BFile* data)
{ {
for (int i = 0; i < fFilterList.CountItems(); i++) for (int i = 0; i < fFilterList.CountItems(); i++)
fFilterList.ItemAt(i)->HeaderFetched(ref, data); fFilterList.ItemAt(i)->HeaderFetched(ref, data);
ReportProgress(0, 1);
} }