Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
		}
	}
}