Ejemplo n.º 1
0
HANDLE add_contextmenu(MCONTACT) {
	CLISTMENUITEM mi = CallItem();
	hMenuCallItem = Menu_AddContactMenuItem(&mi);

	mi = HupItem();
	hMenuCallHangup = Menu_AddContactMenuItem(&mi);

	mi = SkypeOutCallItem();
	hMenuSkypeOutCallItem = Menu_AddContactMenuItem(&mi);

	mi = HoldCallItem();
	hMenuHoldCallItem = Menu_AddContactMenuItem(&mi);

	// We cannot use flag PF1_FILESEND for sending files, as Skype opens its own
	// sendfile-Dialog.
	mi = FileTransferItem();
	hMenuFileTransferItem = Menu_AddContactMenuItem(&mi);

	mi = ChatInitItem();
	hMenuChatInitItem = Menu_AddContactMenuItem(&mi);

	mi = BlockContactItem();
	hMenuBlockContactItem = Menu_AddContactMenuItem(&mi);

	memset(&mi, 0, sizeof(mi));
	mi.cbSize = sizeof(mi);
	mi.position = -2000005000;
	mi.flags = CMIF_TCHAR;
	mi.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_IMPORT));
	mi.pszContactOwner = SKYPE_PROTONAME;
	mi.ptszName = LPGENT("Import Skype history");
	mi.pszService = SKYPE_IMPORTHISTORY;
	return Menu_AddContactMenuItem(&mi);
}
Ejemplo n.º 2
0
int __cdecl  PrebuildContactMenu(WPARAM wParam, LPARAM) {
	MCONTACT hContact = (MCONTACT) wParam;
	char *szProto = GetContactProto(hContact);
	if (!szProto)
		return 0;

	// Clear hold-Item in case it exists
	CLISTMENUITEM mi = HoldCallItem();
	mi.flags |= CMIM_ALL;
	Menu_ModifyItem(hMenuHoldCallItem, &mi);

	DBVARIANT dbv;
	BOOL callAvailable = FALSE;
	BOOL hangupAvailable = FALSE;
	if (!strcmp(szProto, SKYPE_PROTONAME)) {
		if (!db_get(hContact, SKYPE_PROTONAME, "CallId", &dbv)) {
			if (db_get_b(hContact, SKYPE_PROTONAME, "OnHold", 0))
				mi = ResumeCallItem(); else mi = HoldCallItem();
			mi.flags = CMIM_ALL;
			Menu_ModifyItem(hMenuHoldCallItem, &mi);

			callAvailable = FALSE;
			hangupAvailable = TRUE;

			db_free(&dbv);
		}
		else { callAvailable = TRUE; hangupAvailable = FALSE; }

		if (db_get_b(hContact, SKYPE_PROTONAME, "ChatRoom", 0) != 0) {
			callAvailable = FALSE;
			hangupAvailable = FALSE;
		}

		mi = CallItem();
		mi.flags |= CMIM_ALL | (!callAvailable ? CMIF_HIDDEN : 0);
		Menu_ModifyItem(hMenuCallItem, &mi);

		mi = HupItem();
		mi.flags |= CMIM_ALL | (!hangupAvailable ? CMIF_HIDDEN : 0);
		Menu_ModifyItem(hMenuCallHangup, &mi);

		// Clear SkypeOut menu in case it exists
		mi = SkypeOutCallItem();
		mi.flags |= CMIM_ALL;
		Menu_ModifyItem(hMenuSkypeOutCallItem, &mi);

		// File sending and groupchat-creation works starting with protocol version 5
		if (protocol >= 5) {
			mi = FileTransferItem();
			if (db_get_b(hContact, SKYPE_PROTONAME, "ChatRoom", 0) == 0)
				mi.flags ^= CMIF_HIDDEN;
			mi.flags |= CMIM_FLAGS;
			Menu_ModifyItem(hMenuFileTransferItem, &mi);
		}

		if (protocol >= 5 || bIsImoproxy) {
			mi = ChatInitItem();
			if (db_get_b(NULL, SKYPE_PROTONAME, "UseGroupchat", 0) &&
				db_get_b(hContact, SKYPE_PROTONAME, "ChatRoom", 0) == 0)
				mi.flags ^= CMIF_HIDDEN;
			mi.flags |= CMIM_FLAGS;
			Menu_ModifyItem(hMenuChatInitItem, &mi);
			mi = BlockContactItem();
			mi.flags ^= CMIF_HIDDEN;
			mi.flags |= CMIM_FLAGS | CMIM_NAME;
			if (db_get_b(hContact, SKYPE_PROTONAME, "IsBlocked", 0) == 1)
				mi.ptszName = LPGENT("Unblock contact");
			Menu_ModifyItem(hMenuBlockContactItem, &mi);
		}

	}
	else if (bSkypeOut) {
		if (!db_get(hContact, SKYPE_PROTONAME, "CallId", &dbv)) {
			mi = SkypeOutHupItem();
			db_free(&dbv);
		}
		else {
			mi = SkypeOutCallItem();
			if (!db_get(hContact, "UserInfo", "MyPhone0", &dbv)) {
				db_free(&dbv);
				mi.flags = 0;
			}
		}
		mi.flags |= CMIM_ALL;
		Menu_ModifyItem(hMenuSkypeOutCallItem, &mi);
	}

	return 0;
}
Ejemplo n.º 3
0
int __cdecl  PrebuildContactMenu(WPARAM wParam, LPARAM lParam) {
	DBVARIANT dbv;
	CLISTMENUITEM mi;
	char *szProto;
	BOOL callAvailable = FALSE;
	BOOL hangupAvailable = FALSE;

	UNREFERENCED_PARAMETER(lParam);

	if (!(szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0))) return 0;

	if (!HasVoiceService())
	{
		// Clear hold-Item in case it exists
		mi = HoldCallItem();
		mi.flags |= CMIM_ALL;
		CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuHoldCallItem, (LPARAM)&mi);
	}

	if (!strcmp(szProto, SKYPE_PROTONAME)) {
		if (!HasVoiceService()) {
			if (!db_get((MCONTACT)wParam, SKYPE_PROTONAME, "CallId", &dbv)) {
				if (db_get_b((MCONTACT)wParam, SKYPE_PROTONAME, "OnHold", 0))
					mi = ResumeCallItem(); else mi = HoldCallItem();
				mi.flags = CMIM_ALL;
				CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuHoldCallItem, (LPARAM)&mi);

				callAvailable = FALSE;
				hangupAvailable = TRUE;

				db_free(&dbv);
			}
			else { callAvailable = TRUE; hangupAvailable = FALSE; }

			if (db_get_b((MCONTACT)wParam, SKYPE_PROTONAME, "ChatRoom", 0) != 0) {
				callAvailable = FALSE;
				hangupAvailable = FALSE;
			}

			mi = CallItem();
			mi.flags |= CMIM_ALL | (!callAvailable ? CMIF_HIDDEN : 0);
			CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuCallItem, (LPARAM)&mi);

			mi = HupItem();
			mi.flags |= CMIM_ALL | (!hangupAvailable ? CMIF_HIDDEN : 0);
			CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuCallHangup, (LPARAM)&mi);
		}

		// Clear SkypeOut menu in case it exists
		mi = SkypeOutCallItem();
		mi.flags |= CMIM_ALL;
		CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuSkypeOutCallItem, (LPARAM)&mi);

		// File sending and groupchat-creation works starting with protocol version 5
		if (protocol >= 5) {
			if (!bHasFileXfer) {
				mi = FileTransferItem();
				if (db_get_b((MCONTACT)wParam, SKYPE_PROTONAME, "ChatRoom", 0) == 0)
					mi.flags ^= CMIF_HIDDEN;
				mi.flags |= CMIM_FLAGS;
				CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuFileTransferItem, (LPARAM)&mi);
			}
			mi = BlockContactItem();
			mi.flags ^= CMIF_HIDDEN;
			mi.flags |= CMIM_FLAGS | CMIM_NAME;
			if (db_get_b((MCONTACT)wParam, SKYPE_PROTONAME, "IsBlocked", 0) == 1)
				mi.ptszName = LPGENT("Unblock contact");
			CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuBlockContactItem, (LPARAM)&mi);
		}

		if (protocol >= 5 || bIsImoproxy) {
			mi = ChatInitItem();
			if (db_get_b(NULL, SKYPE_PROTONAME, "UseGroupchat", 0) &&
				db_get_b((MCONTACT)wParam, SKYPE_PROTONAME, "ChatRoom", 0) == 0)
				mi.flags ^= CMIF_HIDDEN;
			mi.flags |= CMIM_FLAGS;
			CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuChatInitItem, (LPARAM)&mi);
		}

	}
	else if (bSkypeOut) {
		if (!db_get((MCONTACT)wParam, SKYPE_PROTONAME, "CallId", &dbv)) {
			mi = SkypeOutHupItem();
			db_free(&dbv);
		}
		else {
			mi = SkypeOutCallItem();
			if (!db_get((MCONTACT)wParam, "UserInfo", "MyPhone0", &dbv)) {
				db_free(&dbv);
				mi.flags = 0;
			}
		}
		mi.flags |= CMIM_ALL;
		CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuSkypeOutCallItem, (LPARAM)&mi);
	}

	return 0;
}