void LogToMessageWindow(XSTATUSCHANGE *xsc, BOOL opening) { // cut message if needed if (opt.LTruncateMsg && (opt.LMsgLen > 0) && xsc->stzText && (_tcslen(xsc->stzText) > opt.LMsgLen)) { TCHAR buff[MAX_TEXT_LEN + 3]; _tcsncpy(buff, xsc->stzText, opt.LMsgLen); buff[opt.LMsgLen] = 0; _tcscat(buff, _T("...")); mir_free(xsc->stzText); xsc->stzText = mir_tstrdup(buff); } TCHAR *Template = _T(""); switch (xsc->action) { case NOTIFY_NEW_XSTATUS: Template = templates.LogNewXstatus; break; case NOTIFY_NEW_MESSAGE: Template = templates.LogNewMsg; break; case NOTIFY_REMOVE: Template = templates.LogRemove; break; case NOTIFY_OPENING_ML: Template = templates.LogOpening; break; } TCHAR stzLogText[2*MAX_TEXT_LEN]; TCHAR stzLastLog[2*MAX_TEXT_LEN]; ReplaceVars(xsc, Template, templates.LogDelimiter, stzLogText); DBGetStringDefault(xsc->hContact, MODULE, DB_LASTLOG, stzLastLog, SIZEOF(stzLastLog), _T("")); if (!opt.KeepInHistory || !(opt.PreventIdentical && _tcscmp(stzLastLog, stzLogText) == 0)) db_set_ws(xsc->hContact, MODULE, DB_LASTLOG, stzLogText); }
void LogToMessageWindow(XSTATUSCHANGE *xsc, BOOL opening) { // cut message if needed if (opt.LTruncateMsg && (opt.LMsgLen > 0) && xsc->stzText && (_tcslen(xsc->stzText) > opt.LMsgLen)) { TCHAR buff[MAX_TEXT_LEN + 3]; _tcsncpy(buff, xsc->stzText, opt.LMsgLen); buff[opt.LMsgLen] = 0; _tcscat(buff, _T("...")); mir_free(xsc->stzText); xsc->stzText = mir_tstrdup(buff); } TCHAR *Template; switch (xsc->action) { case NOTIFY_NEW_XSTATUS: Template = templates.LogNewXstatus; break; case NOTIFY_NEW_MESSAGE: Template = templates.LogNewMsg; break; case NOTIFY_REMOVE: Template = templates.LogRemove; break; case NOTIFY_OPENING_ML: Template = templates.LogOpening; break; } TCHAR stzLogText[2*MAX_TEXT_LEN]; TCHAR stzLastLog[2*MAX_TEXT_LEN]; ReplaceVars(xsc, Template, templates.LogDelimiter, stzLogText); DBGetStringDefault(xsc->hContact, MODULE, DB_LASTLOG, stzLastLog, SIZEOF(stzLastLog), _T("")); if (!opt.KeepInHistory || !(opt.PreventIdentical && _tcscmp(stzLastLog, stzLogText) == 0)) { DBWriteContactSettingTString(xsc->hContact, MODULE, DB_LASTLOG, stzLogText); char *blob; #ifdef _UNICODE blob = mir_utf8encodeT(stzLogText); #else blob = mir_strdup(stzLogText); #endif DBEVENTINFO dbei = {0}; dbei.cbSize = sizeof(dbei); dbei.cbBlob = (DWORD)strlen(blob) + 1; dbei.pBlob = (PBYTE) blob; dbei.eventType = EVENTTYPE_STATUSCHANGE; dbei.flags = DBEF_READ; #ifdef _UNICODE dbei.flags |= DBEF_UTF; #endif dbei.timestamp = (DWORD)time(NULL); dbei.szModule = xsc->szProto; HANDLE hDBEvent = (HANDLE)CallService(MS_DB_EVENT_ADD, (WPARAM)xsc->hContact, (LPARAM)&dbei); mir_free(blob); if (!opt.KeepInHistory) { DBEVENT *dbevent = (DBEVENT *)mir_alloc(sizeof(DBEVENT)); dbevent->hContact = xsc->hContact; dbevent->hDBEvent = hDBEvent; li.List_Insert(eventList, dbevent, eventList->realCount); } } }