diff options
-rw-r--r-- | include/m_protosvc.h | 4 | ||||
-rw-r--r-- | include/m_srmm_int.h | 3 | ||||
-rw-r--r-- | plugins/Scriver/src/globals.cpp | 10 | ||||
-rw-r--r-- | plugins/Scriver/src/msgdialog.cpp | 8 | ||||
-rw-r--r-- | plugins/Scriver/src/msgs.h | 6 | ||||
-rw-r--r-- | plugins/Scriver/src/msgtimedout.cpp | 12 | ||||
-rw-r--r-- | plugins/Scriver/src/msgutils.cpp | 6 | ||||
-rw-r--r-- | plugins/Scriver/src/sendqueue.cpp | 28 | ||||
-rw-r--r-- | plugins/Scriver/src/sendqueue.h | 57 | ||||
-rw-r--r-- | plugins/Scriver/src/tabs.cpp | 2 | ||||
-rw-r--r-- | plugins/Scriver/src/tabs.h | 2 | ||||
-rw-r--r-- | plugins/TabSRMM/src/generic_msghandlers.cpp | 2 | ||||
-rw-r--r-- | plugins/TabSRMM/src/sendlater.cpp | 11 | ||||
-rw-r--r-- | plugins/TabSRMM/src/sendlater.h | 2 | ||||
-rw-r--r-- | plugins/TabSRMM/src/sendqueue.cpp | 9 | ||||
-rw-r--r-- | plugins/TabSRMM/src/sendqueue.h | 1 | ||||
-rw-r--r-- | src/core/stdmsg/src/cmdlist.cpp | 3 | ||||
-rw-r--r-- | src/core/stdmsg/src/cmdlist.h | 3 | ||||
-rw-r--r-- | src/core/stdmsg/src/msgdialog.cpp | 2 | ||||
-rw-r--r-- | src/core/stdmsg/src/msgs.cpp | 6 | ||||
-rw-r--r-- | src/core/stdmsg/src/msgs.h | 2 | ||||
-rw-r--r-- | src/core/stdmsg/src/msgtimedout.cpp | 2 |
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;
}
|