Remember tracker message when downloading a partial message and open it with Mail. This is needed to get the next/previous message after downloading the body.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40575 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -194,7 +194,7 @@ public:
|
|||||||
|
|
||||||
void SyncMessages();
|
void SyncMessages();
|
||||||
void FetchBody(const entry_ref& ref,
|
void FetchBody(const entry_ref& ref,
|
||||||
bool launch = false);
|
BMessage* launch = NULL);
|
||||||
void MarkMessageAsRead(const entry_ref& ref,
|
void MarkMessageAsRead(const entry_ref& ref,
|
||||||
bool read = true);
|
bool read = true);
|
||||||
void DeleteMessage(const entry_ref& ref);
|
void DeleteMessage(const entry_ref& ref);
|
||||||
|
|||||||
@@ -28,7 +28,8 @@ public:
|
|||||||
bool waitForFetchCompletion = false);
|
bool waitForFetchCompletion = false);
|
||||||
static status_t MarkAsRead(int32 account, const entry_ref& ref,
|
static status_t MarkAsRead(int32 account, const entry_ref& ref,
|
||||||
bool read = true);
|
bool read = true);
|
||||||
static status_t FetchBody(const entry_ref& ref);
|
static status_t FetchBody(const entry_ref& ref,
|
||||||
|
BMessage* launchMessage = NULL);
|
||||||
static status_t Quit();
|
static status_t Quit();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1511,7 +1511,7 @@ TMailWindow::MessageReceived(BMessage *msg)
|
|||||||
if (fAutoMarkRead)
|
if (fAutoMarkRead)
|
||||||
SetCurrentMessageRead();
|
SetCurrentMessageRead();
|
||||||
OpenMessage(&nextRef,
|
OpenMessage(&nextRef,
|
||||||
fHeaderView->fCharacterSetUserSees);
|
fHeaderView->fCharacterSetUserSees, msg);
|
||||||
} else {
|
} else {
|
||||||
window->Activate();
|
window->Activate();
|
||||||
|
|
||||||
@@ -2794,7 +2794,8 @@ TMailWindow::SetTitleForMessage()
|
|||||||
//
|
//
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
TMailWindow::OpenMessage(entry_ref *ref, uint32 characterSetForDecoding)
|
TMailWindow::OpenMessage(entry_ref *ref, uint32 characterSetForDecoding,
|
||||||
|
BMessage* trackerMsg)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Set some references to the email file
|
// Set some references to the email file
|
||||||
@@ -2822,7 +2823,7 @@ TMailWindow::OpenMessage(entry_ref *ref, uint32 characterSetForDecoding)
|
|||||||
fileInfo.GetType(mimeType);
|
fileInfo.GetType(mimeType);
|
||||||
|
|
||||||
if (strcmp(mimeType, B_PARTIAL_MAIL_TYPE) == 0) {
|
if (strcmp(mimeType, B_PARTIAL_MAIL_TYPE) == 0) {
|
||||||
BMailDaemon::FetchBody(*ref);
|
BMailDaemon::FetchBody(*ref, trackerMsg);
|
||||||
fileInfo.GetType(mimeType);
|
fileInfo.GetType(mimeType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,8 @@ class TMailWindow : public BWindow {
|
|||||||
status_t SaveAsDraft();
|
status_t SaveAsDraft();
|
||||||
status_t OpenMessage(entry_ref* ref,
|
status_t OpenMessage(entry_ref* ref,
|
||||||
uint32 characterSetForDecoding
|
uint32 characterSetForDecoding
|
||||||
= B_MAIL_NULL_CONVERSION);
|
= B_MAIL_NULL_CONVERSION,
|
||||||
|
BMessage* trackerMsg = NULL);
|
||||||
|
|
||||||
status_t GetMailNodeRef(node_ref &nodeRef) const;
|
status_t GetMailNodeRef(node_ref &nodeRef) const;
|
||||||
BEmailMessage* Mail() const { return fMail; }
|
BEmailMessage* Mail() const { return fMail; }
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ BMailDaemon::MarkAsRead(int32 account, const entry_ref& ref, bool read)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
BMailDaemon::FetchBody(const entry_ref& ref)
|
BMailDaemon::FetchBody(const entry_ref& ref, BMessage* launchMessage)
|
||||||
{
|
{
|
||||||
BMessenger daemon("application/x-vnd.Be-POST");
|
BMessenger daemon("application/x-vnd.Be-POST");
|
||||||
if (!daemon.IsValid())
|
if (!daemon.IsValid())
|
||||||
@@ -95,6 +95,7 @@ BMailDaemon::FetchBody(const entry_ref& ref)
|
|||||||
|
|
||||||
BMessage message(kMsgFetchBody);
|
BMessage message(kMsgFetchBody);
|
||||||
message.AddRef("refs", &ref);
|
message.AddRef("refs", &ref);
|
||||||
|
message.AddMessage("launch", launchMessage);
|
||||||
|
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
return daemon.SendMessage(&message, &reply);
|
return daemon.SendMessage(&message, &reply);
|
||||||
|
|||||||
@@ -582,11 +582,17 @@ InboundProtocolThread::MessageReceived(BMessage* message)
|
|||||||
entry_ref ref;
|
entry_ref ref;
|
||||||
message->FindRef("ref", &ref);
|
message->FindRef("ref", &ref);
|
||||||
status_t status = fProtocol->FetchBody(ref);
|
status_t status = fProtocol->FetchBody(ref);
|
||||||
if (status != B_OK || !message->FindBool("launch"))
|
if (status != B_OK)
|
||||||
break;
|
break;
|
||||||
BMessage argv(B_ARGV_RECEIVED);
|
|
||||||
BPath path(&ref);
|
BMessage argv;
|
||||||
|
if (message->FindMessage("launch", &argv) != B_OK)
|
||||||
|
break;
|
||||||
|
argv.RemoveName("argv");
|
||||||
|
argv.RemoveName("argc");
|
||||||
|
|
||||||
argv.AddString("argv", "E-mail");
|
argv.AddString("argv", "E-mail");
|
||||||
|
BPath path(&ref);
|
||||||
argv.AddString("argv", path.Path());
|
argv.AddString("argv", path.Path());
|
||||||
argv.AddInt32("argc", 2);
|
argv.AddInt32("argc", 2);
|
||||||
be_roster->Launch("text/x-email", &argv);
|
be_roster->Launch("text/x-email", &argv);
|
||||||
@@ -632,11 +638,11 @@ InboundProtocolThread::SyncMessages()
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
InboundProtocolThread::FetchBody(const entry_ref& ref, bool launch)
|
InboundProtocolThread::FetchBody(const entry_ref& ref, BMessage* launch)
|
||||||
{
|
{
|
||||||
BMessage message(kMsgFetchBody);
|
BMessage message(kMsgFetchBody);
|
||||||
message.AddRef("ref", &ref);
|
message.AddRef("ref", &ref);
|
||||||
message.AddBool("launch", launch);
|
message.AddMessage("launch", launch);
|
||||||
PostMessage(&message);
|
PostMessage(&message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -199,8 +199,12 @@ MailDaemonApp::RefsReceived(BMessage* message)
|
|||||||
InboundProtocolThread* protocol = _FindInboundProtocol(account);
|
InboundProtocolThread* protocol = _FindInboundProtocol(account);
|
||||||
if (!protocol)
|
if (!protocol)
|
||||||
continue;
|
continue;
|
||||||
bool launch = true;
|
|
||||||
protocol->FetchBody(ref, launch);
|
BMessage* launchMessage = message;
|
||||||
|
BMessage temp;
|
||||||
|
if (message->FindMessage("launch", &temp) == B_OK)
|
||||||
|
launchMessage = &temp;
|
||||||
|
protocol->FetchBody(ref, launchMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user