diff options
Diffstat (limited to 'meta2/proto.cpp')
-rw-r--r-- | meta2/proto.cpp | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/meta2/proto.cpp b/meta2/proto.cpp index e507ca5..e8c460e 100644 --- a/meta2/proto.cpp +++ b/meta2/proto.cpp @@ -153,14 +153,12 @@ int ProtoSendMessage(WPARAM wParam, LPARAM lParam) { CCSDATA *ccs = (CCSDATA *) lParam;
char *message = (char *)ccs->lParam;
int flags = ccs->wParam;
- char *buff = 0;
+ char *buff = 0, *proto = 0;
+ HANDLE hMeta = ccs->hContact;
- HANDLE most_online = Meta_GetMostOnline(ccs->hContact);
- char *proto = ContactProto(most_online);
- if(ContactStatus(most_online, proto) == ID_STATUS_OFFLINE) {
- most_online = Meta_GetMostOnlineSupporting(ccs->hContact, PFLAGNUM_4, PF4_IMSENDOFFLINE);
- proto = ContactProto(most_online);
- }
+ HANDLE hSendTo = (HANDLE)MetaAPI_GetActiveContact((WPARAM)hMeta, 0);
+ proto = ContactProto(hSendTo);
+ //DBWriteContactSettingDword(hMeta, MODULE, "TempDefault", (DWORD)hSendTo);
char szServiceName[256];
mir_snprintf(szServiceName, 256, "%s", PSS_MESSAGE);
@@ -171,7 +169,7 @@ int ProtoSendMessage(WPARAM wParam, LPARAM lParam) { strncpy(szServiceName, PSS_MESSAGE "W", sizeof(szServiceName));
}
// subcontact does not support utf - convert to old ascii/wide format
- if((flags & PREF_UTF) && !(CallContactService(most_online, PS_GETCAPS, PFLAGNUM_4, 0) & PF4_IMSENDUTF)) {
+ if((flags & PREF_UTF) && !(CallContactService(hSendTo, PS_GETCAPS, PFLAGNUM_4, 0) & PF4_IMSENDUTF)) {
ccs->wParam &= ~PREF_UTF;
ccs->wParam |= PREF_UNICODE;
wchar_t *unicode = mir_utf8decodeW(message);
@@ -185,8 +183,8 @@ int ProtoSendMessage(WPARAM wParam, LPARAM lParam) { ccs->lParam = (LPARAM)buff;
}
- int ret = (int)CallContactService(most_online, szServiceName, ccs->wParam, ccs->lParam);
- if(buff) {
+ int ret = (int)CallContactService(hSendTo, szServiceName, ccs->wParam, ccs->lParam);
+ if(buff) { // undo our utf8 conversion changes
ccs->lParam = (LPARAM)message;
delete[] buff;
}
@@ -383,13 +381,19 @@ int MetaChanged(WPARAM wParam, LPARAM lParam) { int WindowEvent(WPARAM wParam, LPARAM lParam) {
MessageWindowEventData *mwed = (MessageWindowEventData *)lParam;
- if(IsMetacontact(mwed->hContact) || IsSubcontact(mwed->hContact)) {
+ bool sub = IsSubcontact(mwed->hContact), meta = IsMetacontact(mwed->hContact);
+ if(sub || meta) {
if(mwed->uType == MSG_WINDOW_EVT_OPEN || mwed->uType == MSG_WINDOW_EVT_OPENING) {
DBWriteContactSettingByte(mwed->hContact, MODULE, "WindowOpen", 1);
- if(IsMetacontact(mwed->hContact))
+ if(meta)
CallService(MS_CLIST_REMOVEEVENT, (WPARAM)mwed->hContact, (LPARAM)EVENTTYPE_MESSAGE);
- } else if(mwed->uType == MSG_WINDOW_EVT_CLOSE || mwed->uType == MSG_WINDOW_EVT_CLOSING)
+ } else if(mwed->uType == MSG_WINDOW_EVT_CLOSE || mwed->uType == MSG_WINDOW_EVT_CLOSING) {
DBWriteContactSettingByte(mwed->hContact, MODULE, "WindowOpen", 0);
+ if(meta) {
+ DBWriteContactSettingDword(mwed->hContact, MODULE, "TempDefault", 0);
+ DBWriteContactSettingDword(mwed->hContact, MODULE, "ForceSend", 0);
+ }
+ }
}
return 0;
@@ -430,6 +434,8 @@ int EventFilterAdd(WPARAM wParam, LPARAM lParam) { && DBGetContactSettingByte(hMeta, MODULE, "WindowOpen", 0) == 0))
{
dbeiMeta.flags |= DBEF_READ;
+ } else {
+ DBWriteContactSettingDword(hMeta, MODULE, "TempDefault", (DWORD)hContact);
}
if(MetaEnabled() && DBGetContactSettingByte(hContact, MODULE, "WindowOpen", 0) == 0) {
dbei->flags |= DBEF_READ;
|