summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/m_protosvc.h4
-rw-r--r--include/m_srmm_int.h3
-rw-r--r--plugins/Scriver/src/globals.cpp10
-rw-r--r--plugins/Scriver/src/msgdialog.cpp8
-rw-r--r--plugins/Scriver/src/msgs.h6
-rw-r--r--plugins/Scriver/src/msgtimedout.cpp12
-rw-r--r--plugins/Scriver/src/msgutils.cpp6
-rw-r--r--plugins/Scriver/src/sendqueue.cpp28
-rw-r--r--plugins/Scriver/src/sendqueue.h57
-rw-r--r--plugins/Scriver/src/tabs.cpp2
-rw-r--r--plugins/Scriver/src/tabs.h2
-rw-r--r--plugins/TabSRMM/src/generic_msghandlers.cpp2
-rw-r--r--plugins/TabSRMM/src/sendlater.cpp11
-rw-r--r--plugins/TabSRMM/src/sendlater.h2
-rw-r--r--plugins/TabSRMM/src/sendqueue.cpp9
-rw-r--r--plugins/TabSRMM/src/sendqueue.h1
-rw-r--r--src/core/stdmsg/src/cmdlist.cpp3
-rw-r--r--src/core/stdmsg/src/cmdlist.h3
-rw-r--r--src/core/stdmsg/src/msgdialog.cpp2
-rw-r--r--src/core/stdmsg/src/msgs.cpp6
-rw-r--r--src/core/stdmsg/src/msgs.h2
-rw-r--r--src/core/stdmsg/src/msgtimedout.cpp2
22 files changed, 95 insertions, 86 deletions
diff --git a/include/m_protosvc.h b/include/m_protosvc.h
index 67b3952cd3..b6fdc4f315 100644
--- a/include/m_protosvc.h
+++ b/include/m_protosvc.h
@@ -590,8 +590,8 @@ struct PROTOFILERESUME
///////////////////////////////////////////////////////////////////////////////
// Send an instant message
-// wParam = flags
-// lParam = (LPARAM)(const char*)szMessage
+// wParam = (MEVENT)id of reply to message
+// lParam = (const char*)szMessage
// returns a hProcess corresponding to the one in the ack event.
// Will send an ack when the message actually gets sent
// type = ACKTYPE_MESSAGE, result = success/failure, (char*)lParam = error message or NULL.
diff --git a/include/m_srmm_int.h b/include/m_srmm_int.h
index 58ecb1ed7d..78f0da728c 100644
--- a/include/m_srmm_int.h
+++ b/include/m_srmm_int.h
@@ -311,7 +311,6 @@ protected:
CCtrlRichEdit m_message;
SESSION_INFO *m_si;
COLORREF m_clrInputBG, m_clrInputFG;
- MEVENT m_hQuoteEvent = 0;
// user typing support;
uint32_t m_nLastTyping = 0;
@@ -342,7 +341,7 @@ protected:
public:
MCONTACT m_hContact;
- MEVENT m_hDbEventFirst;
+ MEVENT m_hDbEventFirst, m_hQuoteEvent = 0;
int m_iLogFilterFlags;
bool m_bFilterEnabled, m_bNicklistEnabled, m_bReadOnly = false;
bool m_bFGSet, m_bBGSet;
diff --git a/plugins/Scriver/src/globals.cpp b/plugins/Scriver/src/globals.cpp
index d3b03fb516..a9b36e00e5 100644
--- a/plugins/Scriver/src/globals.cpp
+++ b/plugins/Scriver/src/globals.cpp
@@ -102,23 +102,23 @@ static int ackevent(WPARAM, LPARAM lParam)
return 0;
MCONTACT hContact = pAck->hContact;
- MessageSendQueueItem *item = FindSendQueueItem(hContact, pAck->hProcess);
+ auto *item = SendQueue::FindItem(hContact, pAck->hProcess);
if (item == nullptr)
- item = FindSendQueueItem(hContact = db_mc_getMeta(pAck->hContact), pAck->hProcess);
+ item = SendQueue::FindItem(hContact = db_mc_getMeta(pAck->hContact), pAck->hProcess);
if (item == nullptr)
return 0;
auto *pSender = item->pDlg;
if (pAck->result == ACKRESULT_FAILED) {
if (item->hwndErrorDlg != nullptr)
- item = FindOldestPendingSendQueueItem(pSender, hContact);
+ item = SendQueue::FindOldestPendingItem(pSender, hContact);
if (item != nullptr && item->hwndErrorDlg == nullptr) {
if (pSender != nullptr) {
pSender->StopMessageSending();
pSender->ShowError((wchar_t *)pAck->lParam, item);
}
- else RemoveSendQueueItem(item);
+ else SendQueue::RemoveItem(item);
}
return 0;
}
@@ -143,7 +143,7 @@ static int ackevent(WPARAM, LPARAM lParam)
if (item->hwndErrorDlg != nullptr)
DestroyWindow(item->hwndErrorDlg);
- if (RemoveSendQueueItem(item) && g_plugin.bAutoClose) {
+ if (SendQueue::RemoveItem(item) && g_plugin.bAutoClose) {
if (pSender != nullptr)
pSender->Close();
}
diff --git a/plugins/Scriver/src/msgdialog.cpp b/plugins/Scriver/src/msgdialog.cpp
index 8821644dcd..5ef1d370be 100644
--- a/plugins/Scriver/src/msgdialog.cpp
+++ b/plugins/Scriver/src/msgdialog.cpp
@@ -218,7 +218,7 @@ bool CMsgDialog::OnInitDialog()
StartFlashing();
}
- m_iMessagesInProgress = ReattachSendQueueItems(this, m_hContact);
+ m_iMessagesInProgress = SendQueue::ReattachItems(this, m_hContact);
if (m_iMessagesInProgress > 0)
ShowMessageSending();
}
@@ -247,7 +247,7 @@ void CMsgDialog::OnDestroy()
m_hStatusIconOverlay = nullptr;
}
- ReleaseSendQueueItems(this);
+ SendQueue::ReleaseItems(this);
if (g_dat.flags.bSaveDrafts) {
ptrA szText(m_message.GetRichTextRtf(true));
if (szText)
@@ -296,7 +296,7 @@ void CMsgDialog::onClick_Ok(CCtrlButton *pButton)
pf2.dwMask = PFM_RTLPARA;
m_message.SendMsg(EM_GETPARAFORMAT, 0, (LPARAM)&pf2);
- MessageSendQueueItem msi = {};
+ SendQueue::Item msi = {};
if (pf2.wEffects & PFE_RTLPARA)
msi.flags |= PREF_RTL;
@@ -1001,7 +1001,7 @@ INT_PTR CMsgDialog::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
case WM_TIMER:
if (wParam == TIMERID_MSGSEND)
- ReportSendQueueTimeouts(this);
+ SendQueue::ReportTimeouts(this);
else if (wParam == TIMERID_UNREAD) {
TabControlData tcd;
tcd.iFlags = TCDF_ICON;
diff --git a/plugins/Scriver/src/msgs.h b/plugins/Scriver/src/msgs.h
index 7c9fd6c3c5..78f75add4f 100644
--- a/plugins/Scriver/src/msgs.h
+++ b/plugins/Scriver/src/msgs.h
@@ -54,7 +54,7 @@ class CMsgDialog : public CSrmmBaseDialog
void Init(void);
int InputAreaShortcuts(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
void MessageDialogResize(int w, int h);
- void MessageSend(const MessageSendQueueItem &msg);
+ void MessageSend(const SendQueue::Item &msg);
void ShowAvatar(void);
void SetDialogToType(void);
void SetStatusIcon(void);
@@ -141,8 +141,8 @@ public:
void UpdateStatusBar() override;
void UpdateTitle() override;
- void HandleError(bool bRetry, MessageSendQueueItem *pItem);
- void ShowError(const wchar_t *pwszMsg, MessageSendQueueItem *pItem);
+ void HandleError(bool bRetry, SendQueue::Item *pItem);
+ void ShowError(const wchar_t *pwszMsg, SendQueue::Item *pItem);
void FixTabIcons();
void GetAvatar();
diff --git a/plugins/Scriver/src/msgtimedout.cpp b/plugins/Scriver/src/msgtimedout.cpp
index 2ea8412755..f65e9a2c29 100644
--- a/plugins/Scriver/src/msgtimedout.cpp
+++ b/plugins/Scriver/src/msgtimedout.cpp
@@ -28,12 +28,12 @@ class CErrorDlg : public CDlgBase
ptrW m_wszText;
CMStringW m_wszName, m_wszDescr;
CMsgDialog *m_pOwner;
- MessageSendQueueItem *m_queueItem;
+ SendQueue::Item *m_queueItem;
CCtrlBase m_errorText, m_msgText;
public:
- CErrorDlg(CMsgDialog *pOwner, const wchar_t *pwszDescr, MessageSendQueueItem *pItem) :
+ CErrorDlg(CMsgDialog *pOwner, const wchar_t *pwszDescr, SendQueue::Item *pItem) :
CDlgBase(g_plugin, IDD_MSGSENDERROR),
m_pOwner(pOwner),
m_wszText(mir_utf8decodeW(pItem->sendBuffer)),
@@ -75,21 +75,21 @@ public:
}
};
-void CMsgDialog::ShowError(const wchar_t *pwszMsg, MessageSendQueueItem *pItem)
+void CMsgDialog::ShowError(const wchar_t *pwszMsg, SendQueue::Item *pItem)
{
auto *pDlg = new CErrorDlg(this, pwszMsg, pItem);
pDlg->SetParent(m_hwnd);
pDlg->Show();
}
-void CMsgDialog::HandleError(bool bRetry, MessageSendQueueItem *pItem)
+void CMsgDialog::HandleError(bool bRetry, SendQueue::Item *pItem)
{
if (bRetry) {
StartMessageSending();
- SendSendQueueItem(pItem);
+ SendQueue::SendItem(pItem);
}
else {
- RemoveSendQueueItem(pItem);
+ SendQueue::RemoveItem(pItem);
SetFocus(m_message.GetHwnd());
}
}
diff --git a/plugins/Scriver/src/msgutils.cpp b/plugins/Scriver/src/msgutils.cpp
index fdbeb7a117..62429f8c9c 100644
--- a/plugins/Scriver/src/msgutils.cpp
+++ b/plugins/Scriver/src/msgutils.cpp
@@ -259,17 +259,17 @@ void CMsgDialog::LoadSettings()
LoadMsgDlgFont(MSGFONTID_MESSAGEAREA, nullptr, &m_clrInputFG);
}
-void CMsgDialog::MessageSend(const MessageSendQueueItem &msi)
+void CMsgDialog::MessageSend(const SendQueue::Item &msi)
{
StartMessageSending();
- MessageSendQueueItem *item = CreateSendQueueItem(this);
+ SendQueue::Item *item = SendQueue::CreateItem(this);
item->hContact = m_hContact;
item->proto = mir_strdup(m_szProto);
item->flags = msi.flags;
item->sendBufferSize = msi.sendBufferSize;
item->sendBuffer = mir_strndup(msi.sendBuffer, msi.sendBufferSize);
- SendSendQueueItem(item);
+ SendQueue::SendItem(item);
}
// Don't send to protocols who don't support typing
diff --git a/plugins/Scriver/src/sendqueue.cpp b/plugins/Scriver/src/sendqueue.cpp
index 2447759f57..a450e2f280 100644
--- a/plugins/Scriver/src/sendqueue.cpp
+++ b/plugins/Scriver/src/sendqueue.cpp
@@ -23,12 +23,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "stdafx.h"
-static OBJLIST<MessageSendQueueItem> arQueue(1, PtrKeySortT);
+using namespace SendQueue;
+
+static OBJLIST<Item> arQueue(1, PtrKeySortT);
static mir_cs queueMutex;
-MessageSendQueueItem* CreateSendQueueItem(CMsgDialog *pDlg)
+Item* SendQueue::CreateItem(CMsgDialog *pDlg)
{
- MessageSendQueueItem *item = new MessageSendQueueItem();
+ Item *item = new Item();
item->pDlg = pDlg;
mir_cslock lck(queueMutex);
@@ -36,7 +38,7 @@ MessageSendQueueItem* CreateSendQueueItem(CMsgDialog *pDlg)
return item;
}
-MessageSendQueueItem* FindOldestPendingSendQueueItem(CMsgDialog *pDlg, MCONTACT hContact)
+Item* SendQueue::FindOldestPendingItem(CMsgDialog *pDlg, MCONTACT hContact)
{
mir_cslock lck(queueMutex);
for (auto &it : arQueue)
@@ -46,7 +48,7 @@ MessageSendQueueItem* FindOldestPendingSendQueueItem(CMsgDialog *pDlg, MCONTACT
return nullptr;
}
-MessageSendQueueItem* FindSendQueueItem(MCONTACT hContact, HANDLE hSendId)
+Item* SendQueue::FindItem(MCONTACT hContact, HANDLE hSendId)
{
mir_cslock lock(queueMutex);
for (auto &it : arQueue)
@@ -56,7 +58,7 @@ MessageSendQueueItem* FindSendQueueItem(MCONTACT hContact, HANDLE hSendId)
return nullptr;
}
-bool RemoveSendQueueItem(MessageSendQueueItem *item)
+bool SendQueue::RemoveItem(Item *item)
{
auto *pDlg = item->pDlg;
{
@@ -71,7 +73,7 @@ bool RemoveSendQueueItem(MessageSendQueueItem *item)
return true;
}
-void ReportSendQueueTimeouts(CMsgDialog *pDlg)
+void SendQueue::ReportTimeouts(CMsgDialog *pDlg)
{
int timeout = g_plugin.iMsgTimeout * 1000;
@@ -80,7 +82,7 @@ void ReportSendQueueTimeouts(CMsgDialog *pDlg)
for (auto &it : arQueue.rev_iter()) {
if (it->timeout >= timeout)
continue;
-
+
it->timeout += 1000;
if (it->timeout < timeout || it->pDlg != pDlg || it->hwndErrorDlg != nullptr)
continue;
@@ -93,7 +95,7 @@ void ReportSendQueueTimeouts(CMsgDialog *pDlg)
}
}
-void ReleaseSendQueueItems(CMsgDialog *pDlg)
+void SendQueue::ReleaseItems(CMsgDialog *pDlg)
{
mir_cslock lock(queueMutex);
@@ -109,7 +111,7 @@ void ReleaseSendQueueItems(CMsgDialog *pDlg)
}
}
-int ReattachSendQueueItems(CMsgDialog *pDlg, MCONTACT hContact)
+int SendQueue::ReattachItems(CMsgDialog *pDlg, MCONTACT hContact)
{
int count = 0;
@@ -125,14 +127,14 @@ int ReattachSendQueueItems(CMsgDialog *pDlg, MCONTACT hContact)
return count;
}
-void RemoveAllSendQueueItems()
+void SendQueue::RemoveAllItems()
{
mir_cslock lock(queueMutex);
arQueue.destroy();
}
-void SendSendQueueItem(MessageSendQueueItem* item)
+void SendQueue::SendItem(Item *item)
{
item->timeout = 0;
- item->hSendId = ProtoChainSend(item->hContact, PSS_MESSAGE, item->flags, (LPARAM)item->sendBuffer);
+ item->hSendId = ProtoChainSend(item->hContact, PSS_MESSAGE, item->pDlg->m_hQuoteEvent, (LPARAM)item->sendBuffer);
}
diff --git a/plugins/Scriver/src/sendqueue.h b/plugins/Scriver/src/sendqueue.h
index ea4e7599a4..0fc3658678 100644
--- a/plugins/Scriver/src/sendqueue.h
+++ b/plugins/Scriver/src/sendqueue.h
@@ -24,35 +24,38 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef SRMM_SENDQUEUE_H
#define SRMM_SENDQUEUE_H
-struct MessageSendQueueItem : public MZeroedObject
+namespace SendQueue
{
- ~MessageSendQueueItem()
+ struct Item : public MZeroedObject
{
- mir_free(proto);
- mir_free(sendBuffer);
- }
-
- CMsgDialog *pDlg;
- MCONTACT hContact;
- char *proto;
- int hSendId;
- int timeout;
- char *sendBuffer;
- int sendBufferSize;
- int codepage;
- int flags;
- HWND hwndErrorDlg;
+ ~Item()
+ {
+ mir_free(proto);
+ mir_free(sendBuffer);
+ }
+
+ CMsgDialog *pDlg;
+ MCONTACT hContact;
+ char *proto;
+ int hSendId;
+ int timeout;
+ char *sendBuffer;
+ int sendBufferSize;
+ int codepage;
+ int flags;
+ HWND hwndErrorDlg;
+ };
+
+ Item* CreateItem(CMsgDialog *pDlg);
+ Item* FindItem(MCONTACT hContact, HANDLE hSendId);
+ Item* FindOldestPendingItem(CMsgDialog *pDlg, MCONTACT hContact);
+
+ bool RemoveItem(Item *item);
+ void ReportTimeouts(CMsgDialog *pDlg);
+ void ReleaseItems(CMsgDialog *pDlg);
+ int ReattachItems(CMsgDialog *pDlg, MCONTACT hContact);
+ void RemoveAllItems();
+ void SendItem(Item *item);
};
-MessageSendQueueItem* CreateSendQueueItem(CMsgDialog *pDlg);
-MessageSendQueueItem* FindOldestPendingSendQueueItem(CMsgDialog *pDlg, MCONTACT hContact);
-MessageSendQueueItem* FindSendQueueItem(MCONTACT hContact, HANDLE hSendId);
-
-bool RemoveSendQueueItem(MessageSendQueueItem* item);
-void ReportSendQueueTimeouts(CMsgDialog *pDlg);
-void ReleaseSendQueueItems(CMsgDialog *pDlg);
-int ReattachSendQueueItems(CMsgDialog *pDlg, MCONTACT hContact);
-void RemoveAllSendQueueItems();
-void SendSendQueueItem(MessageSendQueueItem* item);
-
#endif
diff --git a/plugins/Scriver/src/tabs.cpp b/plugins/Scriver/src/tabs.cpp
index 8af0659443..ae5955063c 100644
--- a/plugins/Scriver/src/tabs.cpp
+++ b/plugins/Scriver/src/tabs.cpp
@@ -267,7 +267,7 @@ void ParentWindowData::CloseOtherChilden(CMsgDialog *pChildDlg)
ActivateChild(pChildDlg);
}
-void ParentWindowData::MessageSend(const MessageSendQueueItem &msg)
+void ParentWindowData::MessageSend(const SendQueue::Item &msg)
{
for (int i = 0; i < m_iChildrenCount; i++) {
CMsgDialog *pDlg = GetChildFromTab(m_hwndTabs, i);
diff --git a/plugins/Scriver/src/tabs.h b/plugins/Scriver/src/tabs.h
index 41a0de8cb1..9f9d714a29 100644
--- a/plugins/Scriver/src/tabs.h
+++ b/plugins/Scriver/src/tabs.h
@@ -108,7 +108,7 @@ struct ParentWindowData
CMsgDialog *GetChildFromHWND(HWND hwnd);
void PopupWindow(CMsgDialog *pDlg, bool bIncoming);
void RemoveChild(HWND child);
- void MessageSend(const MessageSendQueueItem &msg);
+ void MessageSend(const SendQueue::Item &msg);
void SetContainerWindowStyle();
void StartFlashing();
void ToggleInfoBar();
diff --git a/plugins/TabSRMM/src/generic_msghandlers.cpp b/plugins/TabSRMM/src/generic_msghandlers.cpp
index f1182724f8..1fd5be9ee4 100644
--- a/plugins/TabSRMM/src/generic_msghandlers.cpp
+++ b/plugins/TabSRMM/src/generic_msghandlers.cpp
@@ -1187,7 +1187,7 @@ void CMsgDialog::DM_ErrorDetected(int type, int flag)
if (job->iSendId == 0 && job->hContact == 0)
break;
- job->iSendId = ProtoChainSend(job->hContact, PSS_MESSAGE, job->dwFlags, (LPARAM)job->szSendBuffer);
+ job->iSendId = ProtoChainSend(job->hContact, PSS_MESSAGE, job->hEvent, (LPARAM)job->szSendBuffer);
resent++;
}
diff --git a/plugins/TabSRMM/src/sendlater.cpp b/plugins/TabSRMM/src/sendlater.cpp
index 1e8614d1fd..110ec8ed24 100644
--- a/plugins/TabSRMM/src/sendlater.cpp
+++ b/plugins/TabSRMM/src/sendlater.cpp
@@ -54,6 +54,7 @@ struct CSendLaterJob : public MZeroedObject
char szId[20]; // database key name (time stamp of original send)
MCONTACT hContact; // original contact where the message has been assigned
MCONTACT hTargetContact; // *real* contact (can be different for metacontacts, e.g).
+ MEVENT hEvent;
HANDLE hProcess; // returned from the protocols sending service. needed to find it in the ACK handler
time_t created; // job was created at this time (important to kill jobs, that are too old)
time_t lastSent; // time at which the delivery was initiated. used to handle timeouts
@@ -125,7 +126,7 @@ struct CSendLaterJob : public MZeroedObject
iSendCount++;
hTargetContact = cc;
bCode = JOB_WAITACK;
- hProcess = (HANDLE)ProtoChainSend(cc, PSS_MESSAGE, 0, (LPARAM)sendBuffer);
+ hProcess = (HANDLE)ProtoChainSend(cc, PSS_MESSAGE, hEvent, (LPARAM)sendBuffer);
return 0;
}
@@ -649,10 +650,10 @@ bool SendLater::processCurrentJob()
static int _cdecl addStub(const char *szSetting, void *lParam)
{
- return(SendLater::addJob(szSetting, lParam));
+ return(SendLater::addJob(szSetting, INT_PTR(lParam), 0));
}
-static void processSingleContact(const MCONTACT hContact)
+static void processSingleContact(MCONTACT hContact)
{
int iCount = db_get_dw(hContact, "SendLater", "count", 0);
if (iCount)
@@ -680,9 +681,8 @@ void SendLater::processContacts()
// @param lParam: a contact handle for which the job should be scheduled
// @return 0 on failure, 1 otherwise
-int SendLater::addJob(const char *szSetting, void *lParam)
+int SendLater::addJob(const char *szSetting, MCONTACT hContact, MEVENT hEvent)
{
- MCONTACT hContact = (UINT_PTR)lParam;
DBVARIANT dbv = { 0 };
char *szOrig_Utf = nullptr;
@@ -716,6 +716,7 @@ int SendLater::addJob(const char *szSetting, void *lParam)
strncpy_s(job->szId, szSetting, _TRUNCATE);
job->szId[19] = 0;
job->hContact = hContact;
+ job->hEvent = hEvent;
job->created = atol(&szSetting[1]);
size_t iLen = mir_strlen(szOrig_Utf);
diff --git a/plugins/TabSRMM/src/sendlater.h b/plugins/TabSRMM/src/sendlater.h
index 5dc2a58df3..7374907bc5 100644
--- a/plugins/TabSRMM/src/sendlater.h
+++ b/plugins/TabSRMM/src/sendlater.h
@@ -55,7 +55,7 @@ namespace SendLater
bool processCurrentJob();
void processContacts();
void startJobListProcess();
- int addJob(const char *szSetting, void *lParam);
+ int addJob(const char *szSetting, MCONTACT, MEVENT);
void addContact(const MCONTACT hContact);
HANDLE processAck(const ACKDATA *ack);
diff --git a/plugins/TabSRMM/src/sendqueue.cpp b/plugins/TabSRMM/src/sendqueue.cpp
index 4f6c35a3cd..6028357c3c 100644
--- a/plugins/TabSRMM/src/sendqueue.cpp
+++ b/plugins/TabSRMM/src/sendqueue.cpp
@@ -151,7 +151,7 @@ static void DoSplitSendA(LPVOID param)
char savedChar = *szSaved;
*szSaved = 0;
- int id = ProtoChainSend(job->hContact, PSS_MESSAGE, job->dwFlags, (LPARAM)szTemp);
+ int id = ProtoChainSend(job->hContact, PSS_MESSAGE, job->hEvent, (LPARAM)szTemp);
if (!fFirstSend) {
job->iSendId = id;
fFirstSend = TRUE;
@@ -165,7 +165,7 @@ static void DoSplitSendA(LPVOID param)
}
}
else {
- int id = ProtoChainSend(job->hContact, PSS_MESSAGE, job->dwFlags, (LPARAM)szTemp);
+ int id = ProtoChainSend(job->hContact, PSS_MESSAGE, job->hEvent, (LPARAM)szTemp);
if (!fFirstSend) {
job->iSendId = id;
fFirstSend = TRUE;
@@ -244,6 +244,7 @@ int SendQueue::sendQueued(CMsgDialog *dat, const int iEntry)
goto send_unsplitted;
m_jobs[iEntry].hContact = ccActive->getActiveContact();
+ m_jobs[iEntry].hEvent = dat->m_hQuoteEvent;
m_jobs[iEntry].hOwnerWnd = hwndDlg;
m_jobs[iEntry].iStatus = SQ_INPROGRESS;
m_jobs[iEntry].iAcksNeeded = 1;
@@ -273,7 +274,7 @@ int SendQueue::sendQueued(CMsgDialog *dat, const int iEntry)
clearJob(iEntry);
return 0;
}
- m_jobs[iEntry].iSendId = ProtoChainSend(dat->m_hContact, PSS_MESSAGE, m_jobs[iEntry].dwFlags, (LPARAM)m_jobs[iEntry].szSendBuffer);
+ m_jobs[iEntry].iSendId = ProtoChainSend(dat->m_hContact, PSS_MESSAGE, m_jobs[iEntry].hEvent, (LPARAM)m_jobs[iEntry].szSendBuffer);
if (dat->m_sendMode & SMODE_NOACK) { // fake the ack if we are not interested in receiving real acks
ACKDATA ack = {};
@@ -590,7 +591,7 @@ int SendQueue::doSendLater(int iJobIndex, CMsgDialog *dat, MCONTACT hContact, bo
}
else {
mir_snprintf(tszMsg, required, "%s%s", utf_header.get(), job->szSendBuffer);
- SendLater::addJob(tszMsg, (void*)hContact);
+ SendLater::addJob(tszMsg, hContact, dat->m_hQuoteEvent);
}
mir_free(tszMsg);
diff --git a/plugins/TabSRMM/src/sendqueue.h b/plugins/TabSRMM/src/sendqueue.h
index b4dd4c5d11..ceba6c9f70 100644
--- a/plugins/TabSRMM/src/sendqueue.h
+++ b/plugins/TabSRMM/src/sendqueue.h
@@ -45,6 +45,7 @@ struct SendJob
size_t iSendLength; // length of message in utf-8 octets (used to check maxlen)
int sendCount;
MCONTACT hContact;
+ MEVENT hEvent;
HWND hOwnerWnd;
unsigned iStatus;
wchar_t* pwszErrorMsg;
diff --git a/src/core/stdmsg/src/cmdlist.cpp b/src/core/stdmsg/src/cmdlist.cpp
index 1ace5b0545..356d7ad6f0 100644
--- a/src/core/stdmsg/src/cmdlist.cpp
+++ b/src/core/stdmsg/src/cmdlist.cpp
@@ -44,10 +44,11 @@ static VOID CALLBACK MsgTimer(HWND, UINT, UINT_PTR, DWORD dwTime)
MessageFailureProcess(it, TranslateT("The message send timed out."));
}
-void msgQueue_add(MCONTACT hContact, int id, char *szMsg, int flags)
+void msgQueue_add(MCONTACT hContact, MEVENT hEvent, int id, char *szMsg, int flags)
{
TMsgQueue *item = (TMsgQueue*)mir_alloc(sizeof(TMsgQueue));
item->hContact = hContact;
+ item->hEvent = hEvent;
item->id = id;
item->szMsg = szMsg;
item->flags = flags;
diff --git a/src/core/stdmsg/src/cmdlist.h b/src/core/stdmsg/src/cmdlist.h
index fda5562689..63b29a72f4 100644
--- a/src/core/stdmsg/src/cmdlist.h
+++ b/src/core/stdmsg/src/cmdlist.h
@@ -26,12 +26,13 @@ struct TMsgQueue
{
int id;
MCONTACT hContact;
+ MEVENT hEvent;
char *szMsg;
int flags;
unsigned ts;
};
-void msgQueue_add(MCONTACT hContact, int id, char *szMsg, int flags);
+void msgQueue_add(MCONTACT hContact, MEVENT hEvent, int id, char *szMsg, int flags);
void msgQueue_processack(MCONTACT hContact, int id, BOOL success, LPARAM szErr);
void msgQueue_destroy(void);
diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp
index c9caf7fe33..64436c9045 100644
--- a/src/core/stdmsg/src/msgdialog.cpp
+++ b/src/core/stdmsg/src/msgdialog.cpp
@@ -338,7 +338,7 @@ void CMsgDialog::onClick_Ok(CCtrlButton *pButton)
if (!temp[0])
return;
- int sendId = SendMessageDirect(rtrimw(temp), m_hContact);
+ int sendId = SendMessageDirect(m_hContact, m_hQuoteEvent, rtrimw(temp));
if (sendId) {
m_cmdList.insert(temp.detach());
m_cmdListInd = -1;
diff --git a/src/core/stdmsg/src/msgs.cpp b/src/core/stdmsg/src/msgs.cpp
index fcf23c51d8..74cf050431 100644
--- a/src/core/stdmsg/src/msgs.cpp
+++ b/src/core/stdmsg/src/msgs.cpp
@@ -29,7 +29,7 @@ int OnCheckPlugins(WPARAM, LPARAM);
/////////////////////////////////////////////////////////////////////////////////////////
-int SendMessageDirect(const wchar_t *szMsg, MCONTACT hContact)
+int SendMessageDirect(MCONTACT hContact, MEVENT hEvent, const wchar_t *szMsg)
{
if (hContact == 0)
return 0;
@@ -45,8 +45,8 @@ int SendMessageDirect(const wchar_t *szMsg, MCONTACT hContact)
if (db_mc_isMeta(hContact))
hContact = db_mc_getSrmmSub(hContact);
- int sendId = ProtoChainSend(hContact, PSS_MESSAGE, flags, (LPARAM)sendBuffer);
- msgQueue_add(hContact, sendId, sendBuffer.detach(), flags);
+ int sendId = ProtoChainSend(hContact, PSS_MESSAGE, hEvent, (LPARAM)sendBuffer);
+ msgQueue_add(hContact, hEvent, sendId, sendBuffer.detach(), flags);
return sendId;
}
diff --git a/src/core/stdmsg/src/msgs.h b/src/core/stdmsg/src/msgs.h
index 5e40d57e0a..180bd49917 100644
--- a/src/core/stdmsg/src/msgs.h
+++ b/src/core/stdmsg/src/msgs.h
@@ -157,7 +157,7 @@ extern LIST<CMsgDialog> g_arDialogs;
/////////////////////////////////////////////////////////////////////////////////////////
bool DbEventIsShown(const DB::EventInfo &dbei);
-int SendMessageDirect(const wchar_t *szMsg, MCONTACT hContact);
+int SendMessageDirect(MCONTACT hContact, MEVENT hEvent, const wchar_t *szMsg);
INT_PTR SendMessageCmd(MCONTACT hContact, wchar_t *msg);
void LoadMsgLogIcons(void);
diff --git a/src/core/stdmsg/src/msgtimedout.cpp b/src/core/stdmsg/src/msgtimedout.cpp
index 828924580e..74167bf0cb 100644
--- a/src/core/stdmsg/src/msgtimedout.cpp
+++ b/src/core/stdmsg/src/msgtimedout.cpp
@@ -61,7 +61,7 @@ public:
bool OnApply() override
{
- SendMessageDirect(ptrW(mir_utf8decodeW(m_item->szMsg)), m_item->hContact);
+ SendMessageDirect(m_item->hContact, m_item->hEvent, ptrW(mir_utf8decodeW(m_item->szMsg)));
return true;
}