static int MoveGroupBefore(WPARAM wParam,LPARAM lParam)
{
	int i,shuffleFrom,shuffleTo,shuffleDir;
	char str[33];
	TCHAR *szMoveName;
	DBVARIANT dbv;

	if (wParam == 0 || (LPARAM) wParam == lParam)
		return 0;
	itoa(wParam-1,str,10);
	if (DBGetContactSettingTString(NULL, "CListGroups", str, &dbv))
		return 0;
	szMoveName = dbv.ptszVal;
	//shuffle list of groups up to fill gap
	if (lParam == 0) {
		shuffleFrom = wParam - 1;
		shuffleTo = -1;
		shuffleDir = -1;
	}
	else {
		if ((LPARAM) wParam < lParam) {
			shuffleFrom = wParam - 1;
			shuffleTo = lParam - 2;
			shuffleDir = -1;
		}
	else {
			shuffleFrom = wParam - 1;
			shuffleTo = lParam - 1;
			shuffleDir = 1;
		}
	}
	if(shuffleDir==-1) {
		for(i=shuffleFrom;i!=shuffleTo;i++) {
			itoa(i+1,str,10);
			if (DBGetContactSettingStringUtf(NULL, "CListGroups", str, &dbv)) {
				shuffleTo = i;
				break;
			}
			itoa(i,str,10);
			DBWriteContactSettingStringUtf(NULL, "CListGroups", str, dbv.pszVal);
			DBFreeVariant(&dbv);
		}
	}
	else {
		for(i=shuffleFrom;i!=shuffleTo;i--) {
			itoa(i-1,str,10);
			if (DBGetContactSettingStringUtf(NULL, "CListGroups", str, &dbv)) {
				mir_free(szMoveName);
				return 1;
			}                   //never happens
			itoa(i,str,10);
			DBWriteContactSettingStringUtf(NULL, "CListGroups", str, dbv.pszVal);
			DBFreeVariant(&dbv);
		}
	}
	itoa(shuffleTo,str,10);
	DBWriteContactSettingTString(NULL, "CListGroups", str, szMoveName);
	mir_free(szMoveName);
	return shuffleTo+1;
}
Esempio n. 2
0
/** Convert the contact chosen into a MetaContact.
*
* Create a new MetaContact, remove the selected contact from the \c CList
* and attach it to the MetaContact.
*
* @param wParam :	\c HANDLE to the contact that has been chosen.
* @param lParam :	Allways set to 0.
*/
INT_PTR Meta_Convert(WPARAM wParam,LPARAM lParam)
{
	HANDLE hMetaContact;
	DBVARIANT dbv;
	char *group = 0;//, *proto;
		
	// Get some information about the selected contact.
//	proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO,wParam,0);
	if(!DBGetContactSettingStringUtf((HANDLE)wParam,"CList","Group",&dbv)) {
		group = _strdup(dbv.pszVal);
		DBFreeVariant(&dbv);
	}

	// Create a new metacontact
	hMetaContact = (HANDLE)CallService(MS_DB_CONTACT_ADD,0,0);
			
	// Add the info for the metacontact
	if(hMetaContact)
	{

		DBWriteContactSettingDword(hMetaContact,META_PROTO,META_ID,nextMetaID);
		DBWriteContactSettingDword(hMetaContact,META_PROTO,"NumContacts",0);
		DBWriteContactSettingDword(NULL,META_PROTO,"NextMetaID",++nextMetaID);

		// Add the MetaContact protocol to the new meta contact
		CallService( MS_PROTO_ADDTOCONTACT, ( WPARAM )hMetaContact, ( LPARAM )META_PROTO );

		if(group) {
			if(ServiceExists(MS_DB_CONTACT_GETSETTING_STR))
				DBWriteContactSettingStringUtf(hMetaContact,"CList","Group",group);
			else
				DBWriteContactSettingString(hMetaContact,"CList","Group",group);
		}
		
		// Assign the contact to the MetaContact just created (and make default).
		if(!Meta_Assign((HANDLE)wParam,hMetaContact,TRUE)) {
			MessageBox(0,Translate("There was a problem in assigning the contact to the MetaContact"),Translate("Error"),MB_ICONEXCLAMATION);
			CallService(MS_DB_CONTACT_DELETE, (WPARAM)hMetaContact, 0);
			return 0;
		}

		// hide the contact if clist groups disabled (shouldn't create one anyway since menus disabled)
		if(!Meta_IsEnabled())
			DBWriteContactSettingByte(hMetaContact, "CList", "Hidden", 1);

	}

	//	Update the graphics
	CallService(MS_CLUI_SORTLIST,0,0);

	free(group);
	return (int)hMetaContact;
}
Esempio n. 3
0
int CAimProto::OnDbSettingChanged(WPARAM wParam,LPARAM lParam)
{
	DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING*)lParam;

	if (strcmp(cws->szModule, MOD_KEY_CL) == 0 && state == 1 && wParam)
	{
		HANDLE hContact = (HANDLE)wParam;
		if (strcmp(cws->szSetting, AIM_KEY_NL) == 0)
		{
			if (cws->value.type == DBVT_DELETED)
			{
				DBVARIANT dbv;
				if(!DBGetContactSettingStringUtf(hContact, MOD_KEY_CL, OTH_KEY_GP, &dbv) && dbv.pszVal[0])
				{
					add_contact_to_group(hContact, dbv.pszVal);
					DBFreeVariant(&dbv);
				}
				else
					add_contact_to_group(hContact, AIM_DEFAULT_GROUP);
			}
		}
		else if (strcmp(cws->szSetting, "MyHandle") == 0)
		{
			char* name;
			switch (cws->value.type)
			{
			case DBVT_DELETED:
				set_local_nick(hContact, NULL, NULL);
				break;

			case DBVT_ASCIIZ:
				name = mir_utf8encode(cws->value.pszVal);
				set_local_nick(hContact, name, NULL);
				mir_free(name);
				break;

			case DBVT_UTF8:
				set_local_nick(hContact, cws->value.pszVal, NULL);
				break;

			case DBVT_WCHAR:
				name = mir_utf8encodeW(cws->value.pwszVal);
				set_local_nick(hContact, name, NULL);
				mir_free(name);
				break;
			}
		}
	}

	return 0;
}
Esempio n. 4
0
INT_PTR CAimProto::AddToServerList(WPARAM wParam, LPARAM /*lParam*/)
{
	if (state != 1) return 0;

	HANDLE hContact = (HANDLE)wParam;
	DBVARIANT dbv;
	if (!DBGetContactSettingStringUtf(hContact, MOD_KEY_CL, OTH_KEY_GP, &dbv) && dbv.pszVal[0])
	{
		add_contact_to_group(hContact, dbv.pszVal);
		DBFreeVariant(&dbv);
	}
	else 
		add_contact_to_group(hContact, AIM_DEFAULT_GROUP);
	return 0;
}
static int SetGroupExpandedState(WPARAM wParam,LPARAM lParam)
{
	char idstr[33];
	DBVARIANT dbv;

	itoa(wParam-1,idstr,10);
	if (DBGetContactSettingStringUtf(NULL, "CListGroups", idstr, &dbv))
		return 1;
	if (lParam)
		dbv.pszVal[0] |= GROUPF_EXPANDED;
	else
		dbv.pszVal[0] = dbv.pszVal[0] & ~GROUPF_EXPANDED;
	DBWriteContactSettingStringUtf(NULL, "CListGroups", idstr, dbv.pszVal);
	DBFreeVariant(&dbv);
	return 0;
}
static int SetGroupFlags(WPARAM wParam,LPARAM lParam)
{
	char idstr[33];
	DBVARIANT dbv;
	int flags,oldval,newval;

	itoa(wParam-1,idstr,10);
	if (DBGetContactSettingStringUtf(NULL, "CListGroups", idstr, &dbv))
		return 1;
	flags=LOWORD(lParam)&HIWORD(lParam);
	oldval=dbv.pszVal[0];
	newval=dbv.pszVal[0]=(dbv.pszVal[0]&~HIWORD(lParam))|flags;
	DBWriteContactSettingStringUtf(NULL, "CListGroups", idstr, dbv.pszVal);
	DBFreeVariant(&dbv);
	if ((oldval & GROUPF_HIDEOFFLINE) != (newval & GROUPF_HIDEOFFLINE))
		LoadContactTree();
	return 0;
}
static int BuildGroupMenu(WPARAM wParam,LPARAM lParam)
{
	char idstr[33];
	DBVARIANT dbv;
	int groupId;
	HMENU hRootMenu,hThisMenu;
	int nextMenuId=100;
	TCHAR *pBackslash,*pNextField,szThisField[128],szThisMenuItem[128];
	int menuId,compareResult,menuItemCount;
	MENUITEMINFO mii={0};

	if (DBGetContactSettingStringUtf(NULL, "CListGroups", "0", &dbv))
		return (int) (HMENU) NULL;
	DBFreeVariant(&dbv);
	hRootMenu=CreateMenu();
	for(groupId=0;;groupId++) {
		itoa(groupId,idstr,10);
		if (DBGetContactSettingTString(NULL, "CListGroups", idstr, &dbv))
			break;

		pNextField = (TCHAR*)dbv.ptszVal + 1;
		hThisMenu=hRootMenu;
		mii.cbSize=MENUITEMINFO_V4_SIZE;
		do {
			pBackslash = _tcschr(pNextField, '\\');
			if(pBackslash==NULL) {
				lstrcpyn(szThisField, pNextField, SIZEOF(szThisField));
				pNextField=NULL;
			}
			else {
				lstrcpyn(szThisField, pNextField, min( SIZEOF(szThisField), pBackslash - pNextField + 1));
				pNextField=pBackslash+1;
			}
			compareResult=1;
			menuItemCount=GetMenuItemCount(hThisMenu);
			for(menuId=0;menuId<menuItemCount;menuId++) {
				mii.fMask=MIIM_TYPE|MIIM_SUBMENU|MIIM_DATA;
				mii.cch = SIZEOF(szThisMenuItem);
				mii.dwTypeData=szThisMenuItem;
				GetMenuItemInfo(hThisMenu,menuId,TRUE,&mii);
				compareResult = lstrcmp(szThisField, szThisMenuItem);
				if(compareResult==0) {
					if(pNextField==NULL) {
						mii.fMask=MIIM_DATA;
						mii.dwItemData=groupId+1;
						SetMenuItemInfo(hThisMenu,menuId,TRUE,&mii);
					}
					else {
						if(mii.hSubMenu==NULL) {
							mii.fMask=MIIM_SUBMENU;
							mii.hSubMenu=CreateMenu();
							SetMenuItemInfo(hThisMenu,menuId,TRUE,&mii);
							mii.fMask=MIIM_DATA|MIIM_TYPE|MIIM_ID;
							//dwItemData doesn't change
							mii.fType=MFT_STRING;
							mii.dwTypeData=TranslateT("This group");
							mii.wID=nextMenuId++;
							InsertMenuItem(mii.hSubMenu,0,TRUE,&mii);
							mii.fMask=MIIM_TYPE;
							mii.fType=MFT_SEPARATOR;
							InsertMenuItem(mii.hSubMenu,1,TRUE,&mii);
						}
						hThisMenu=mii.hSubMenu;
					}
					break;
				}
				if ((int) mii.dwItemData - 1 > groupId)
					break;
			}
			if(compareResult) {
				mii.fMask=MIIM_TYPE|MIIM_ID;
				mii.wID=nextMenuId++;
				mii.dwTypeData=szThisField;
				mii.fType=MFT_STRING;
				if(pNextField) {
					mii.fMask|=MIIM_SUBMENU;
					mii.hSubMenu=CreateMenu();
				}
				else {
					mii.fMask|=MIIM_DATA;
					mii.dwItemData=groupId+1;
				}
				InsertMenuItem(hThisMenu,menuId,TRUE,&mii);
				if(pNextField) {
					hThisMenu=mii.hSubMenu;
				}
			}
		} while(pNextField);

		DBFreeVariant(&dbv);
	}
	return (int)hRootMenu;
}
static int DeleteGroup(WPARAM wParam,LPARAM lParam)
{
	int i;
	char str[33];
	DBVARIANT dbv;
	HANDLE hContact;
	TCHAR name[256], szNewParent[256], *pszLastBackslash;

	//get the name
	itoa(wParam-1,str,10);
	if (DBGetContactSettingTString(NULL, "CListGroups", str, &dbv))
		return 1;
	if (DBGetContactSettingByte(NULL, "CList", "ConfirmDelete", SETTING_CONFIRMDELETE_DEFAULT))
		if (MessageBox((HWND)CallService(MS_CLUI_GETHWND, 0, 0), TranslateT("Are you sure you want to delete this group?  This operation can not be undone."), TranslateT("Delete Group"), MB_YESNO|MB_ICONQUESTION)==IDNO)
			return 1;
	lstrcpyn(name, (TCHAR*)dbv.ptszVal + 1, SIZEOF(name));
	DBFreeVariant(&dbv);
	SetCursor(LoadCursor(NULL,IDC_WAIT));
	//must remove setting from all child contacts too
	//children are demoted to the next group up, not deleted.
	lstrcpy(szNewParent, name);
	pszLastBackslash = _tcsrchr(szNewParent, '\\');
	if (pszLastBackslash)
		pszLastBackslash[0] = '\0';
	else
		szNewParent[0] = '\0';
	hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0);
	do {
		if (DBGetContactSettingTString(hContact, "CList", "Group", &dbv))
			continue;
		if (_tcscmp(dbv.ptszVal, name)) {
		DBFreeVariant(&dbv);
			continue;
		}
		DBFreeVariant(&dbv);
		if (szNewParent[0])
			DBWriteContactSettingTString(hContact, "CList", "Group", szNewParent);
		else
			DBDeleteContactSetting(hContact, "CList", "Group");
	} while((hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0))!=NULL);
	//shuffle list of groups up to fill gap
	for(i=wParam-1;;i++) {
		itoa(i+1,str,10);
		if (DBGetContactSettingStringUtf(NULL, "CListGroups", str, &dbv))
			break;
		itoa(i,str,10);
		DBWriteContactSettingStringUtf(NULL, "CListGroups", str, dbv.pszVal);
		DBFreeVariant(&dbv);
	}
	itoa(i,str,10);
	DBDeleteContactSetting(NULL,"CListGroups",str);
	//rename subgroups
	{
		TCHAR szNewName[256];
		int len;

		len = lstrlen(name);
		for(i=0;;i++) {
			itoa(i,str,10);
			if (DBGetContactSettingTString(NULL, "CListGroups", str, &dbv))
				break;
			if (!_tcsncmp((TCHAR*)dbv.ptszVal + 1, name, len) && dbv.ptszVal[len + 1] == '\\' && _tcschr(dbv.ptszVal + len + 2, '\\') == NULL) {
				if (szNewParent[0])
					mir_sntprintf(szNewName, SIZEOF(szNewName), _T("%s\\%s"), szNewParent, dbv.ptszVal + len + 2);
				else
					lstrcpyn(szNewName, dbv.ptszVal + len + 2, SIZEOF(szNewName));
				RenameGroupT((WPARAM)(i + 1), (LPARAM)szNewName);
			}
			DBFreeVariant(&dbv);
		}
	}
	SetCursor(LoadCursor(NULL,IDC_ARROW));
	LoadContactTree();
	return 0;
}
Esempio n. 9
0
int CMsnProto::getStringUtf(const char* name, DBVARIANT* result)
{	return DBGetContactSettingStringUtf(NULL, m_szModuleName, name, result);
}
Esempio n. 10
0
int CJabberProto::JGetStringUtf( HANDLE hContact, char* valueName, DBVARIANT* dbv )
{
	return DBGetContactSettingStringUtf( hContact, m_szModuleName, valueName, dbv );
}