static INT_PTR Service_NewChat(WPARAM wParam, LPARAM lParam)
{
	MODULEINFO* mi;
	GCSESSION *gcw =(GCSESSION *)lParam;
	if (gcw== NULL)
		return GC_NEWSESSION_ERROR;

	if (gcw->cbSize != SIZEOF_STRUCT_GCWINDOW_V1)
		return GC_NEWSESSION_WRONGVER;

	EnterCriticalSection(&cs);

	if (( mi = MM_FindModule( gcw->pszModule )) != NULL ) {
		TCHAR* ptszID = a2tf( gcw->ptszID, gcw->dwFlags );
		SESSION_INFO* si = SM_AddSession( ptszID, gcw->pszModule);

		if (mi->hOfflineIcon == NULL) {
			LoadModuleIcons(mi);
		}
		// create a new session and set the defaults
		if ( si != NULL ) {
			TCHAR szTemp[256];

			si->dwItemData = gcw->dwItemData;
			if ( gcw->iType != GCW_SERVER )
				si->wStatus = ID_STATUS_ONLINE;
			si->iType = gcw->iType;
			si->dwFlags = gcw->dwFlags;
			si->ptszName = a2tf( gcw->ptszName, gcw->dwFlags );
			si->ptszStatusbarText = a2tf( gcw->ptszStatusbarText, gcw->dwFlags );
			si->iSplitterX = g_Settings.iSplitterX;
			si->iSplitterY = g_Settings.iSplitterY;
			si->iLogFilterFlags = (int)DBGetContactSettingDword(NULL, "Chat", "FilterFlags", 0x03E0);
			si->bFilterEnabled = DBGetContactSettingByte(NULL, "Chat", "FilterEnabled", 0);
			si->bNicklistEnabled = DBGetContactSettingByte(NULL, "Chat", "ShowNicklist", 1);
			#if defined( _UNICODE )
				if ( !( gcw->dwFlags & GC_UNICODE )) {
					si->pszID = mir_strdup( gcw->pszID );
					si->pszName = mir_strdup( gcw->pszName );
				}
			#endif

			if ( mi->bColor ) {
				si->iFG = 4;
				si->bFGSet = TRUE;
			}
			if ( mi->bBkgColor ) {
				si->iBG = 2;
				si->bBGSet = TRUE;
			}
			if (si->iType == GCW_SERVER)
				mir_sntprintf(szTemp, SIZEOF(szTemp), _T("Server: %s"), si->ptszName);
			else
				mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%s"), si->ptszName);
			si->windowData.hContact = CList_AddRoom( gcw->pszModule, ptszID, szTemp, si->iType);
			si->windowData.codePage = DBGetContactSettingWord(si->windowData.hContact, si->pszModule, "CodePage", (WORD) CP_ACP);
			si->pszHeader = Log_CreateRtfHeader(mi, si);
			DBWriteContactSettingString(si->windowData.hContact, si->pszModule , "Topic", "");
			DBDeleteContactSetting(si->windowData.hContact, "CList", "StatusMsg");
			if (si->ptszStatusbarText)
				DBWriteContactSettingTString(si->windowData.hContact, si->pszModule, "StatusBar", si->ptszStatusbarText);
			else
				DBWriteContactSettingString(si->windowData.hContact, si->pszModule, "StatusBar", "");
		}
		else {
			SESSION_INFO* si2 = SM_FindSession( ptszID, gcw->pszModule );
			if ( si2 ) {

				UM_RemoveAll(&si2->pUsers);
				TM_RemoveAll(&si2->pStatuses);

				si2->iStatusCount = 0;
				si2->nUsersInNicklist = 0;

				if (si2->hWnd )
					RedrawWindow(GetDlgItem(si2->hWnd, IDC_CHAT_LIST), NULL, NULL, RDW_INVALIDATE);

			}
		}

		LeaveCriticalSection(&cs);
		mir_free( ptszID );
		return 0;
	}

	LeaveCriticalSection(&cs);
	return GC_NEWSESSION_ERROR;
}
Exemple #2
0
static void OnCreateModule(MODULEINFO *mi)
{
	LoadModuleIcons(mi);
	mi->hOnlineIconBig = Skin_LoadProtoIcon(mi->pszModule, ID_STATUS_ONLINE, true);
	mi->hOfflineIconBig = Skin_LoadProtoIcon(mi->pszModule, ID_STATUS_OFFLINE, true);
}