Пример #1
0
void CJabberProto::ResolveTransportNicks(const TCHAR *jid)
{
	// Set all contacts to offline
	MCONTACT hContact = m_ThreadInfo->resolveContact;
	if (hContact == NULL)
		hContact = db_find_first(m_szModuleName);

	for (; hContact != NULL; hContact = db_find_next(hContact, m_szModuleName)) {
		if (!getByte(hContact, "IsTransported", 0))
			continue;

		ptrT dbJid( getTStringA(hContact, "jid")); if (dbJid == NULL) continue;
		ptrT dbNick( getTStringA(hContact, "Nick")); if (dbNick == NULL) continue;

		TCHAR *p = _tcschr(dbJid, '@');
		if (p == NULL)
			continue;

		*p = 0;
		if (!lstrcmp(jid, p+1) && !lstrcmp(dbJid, dbNick)) {
			*p = '@';
			m_ThreadInfo->resolveID = SendGetVcard(dbJid);
			m_ThreadInfo->resolveContact = hContact;
			return;
		}
	}

	m_ThreadInfo->resolveID = -1;
	m_ThreadInfo->resolveContact = NULL;
}
Пример #2
0
INT_PTR CALLBACK UpdateNotifyOptsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
	HWND hwndList = GetDlgItem(hwndDlg, IDC_FEEDLIST);
	switch (msg) {
	case WM_INITDIALOG:
		TranslateDialogDefault(hwndDlg);
		SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 0);
		CreateList(hwndList);
		UpdateList(hwndList);
		CheckDlgButton(hwndDlg, IDC_STARTUPRETRIEVE, db_get_b(NULL, MODULE, "StartupRetrieve", 1));
		return TRUE;

	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDC_ADD:
			CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_ADDFEED), hwndDlg, DlgProcAddFeedOpts, (LPARAM)hwndList);
			return FALSE;

		case IDC_CHANGE:
			{
				ItemInfo SelItem = {0};
				int sel = ListView_GetSelectionMark(hwndList);
				ListView_GetItemText(hwndList, sel, 0, SelItem.nick, MAX_PATH);
				ListView_GetItemText(hwndList, sel, 1, SelItem.url, MAX_PATH);
				SelItem.hwndList = hwndList;
				SelItem.SelNumber = sel;
				CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_ADDFEED), hwndDlg, DlgProcChangeFeedOpts, (LPARAM)&SelItem);
			}
			return FALSE;

		case IDC_REMOVE:
			if (MessageBox(hwndDlg, TranslateT("Are you sure?"), TranslateT("Contact deleting"), MB_YESNO | MB_ICONWARNING) == IDYES) {
				TCHAR nick[MAX_PATH], url[MAX_PATH];
				int sel = ListView_GetSelectionMark(hwndList);
				ListView_GetItemText(hwndList, sel, 0, nick, MAX_PATH);
				ListView_GetItemText(hwndList, sel, 1, url, MAX_PATH);

				for (HANDLE hContact = db_find_first(MODULE); hContact; hContact = db_find_next(hContact, MODULE)) {
					ptrT dbNick( db_get_tsa(hContact, MODULE, "Nick"));
					if (dbNick == NULL)
						break;
					if ( lstrcmp(dbNick, nick))
						continue;
						
					ptrT dbURL( db_get_tsa(hContact, MODULE, "URL"));
					if (dbURL == NULL)
						break;
					if ( lstrcmp(dbURL, url))
						continue;

					CallService(MS_DB_CONTACT_DELETE, (WPARAM)hContact, 0);
					ListView_DeleteItem(hwndList, sel);
					break;
				}
			}
			return FALSE;

		case IDC_IMPORT:
			CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_FEEDIMPORT), hwndDlg, DlgProcImportOpts, (LPARAM)hwndList);
			return FALSE;

		case IDC_EXPORT:
			CreateDialog(hInst, MAKEINTRESOURCE(IDD_FEEDEXPORT), hwndDlg, DlgProcExportOpts);
			return FALSE;

		case IDC_STARTUPRETRIEVE:
			SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
			break;
		}
		break;

	case WM_NOTIFY:
		{
			NMHDR *hdr = (NMHDR *)lParam;
			switch (hdr->code) {
			case PSN_APPLY:
				{
					db_set_b(NULL, MODULE, "StartupRetrieve", IsDlgButtonChecked(hwndDlg, IDC_STARTUPRETRIEVE));
					int i = 0;
					for (HANDLE hContact = db_find_first(MODULE); hContact; hContact = db_find_next(hContact, MODULE)) {
						db_set_b(hContact, MODULE, "CheckState", ListView_GetCheckState(hwndList, i));
						if (!ListView_GetCheckState(hwndList, i))
							db_set_b(hContact, "CList", "Hidden", 1);
						else
							db_unset(hContact,"CList","Hidden");
						i += 1;
					}
				}
				break;

			case NM_DBLCLK:
				{
					ItemInfo SelItem = {0};
					int sel = ListView_GetHotItem(hwndList);
					if (sel != -1) {
						ListView_GetItemText(hwndList, sel, 0, SelItem.nick, MAX_PATH);
						ListView_GetItemText(hwndList, sel, 1, SelItem.url, MAX_PATH);
						SelItem.hwndList = hwndList;
						SelItem.SelNumber = sel;
						CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_ADDFEED), hwndDlg, DlgProcChangeFeedOpts, (LPARAM)&SelItem);
					}
					break;
				}

			case LVN_ITEMCHANGED:
				{
					NMLISTVIEW *nmlv = (NMLISTVIEW *)lParam;
					if (((nmlv->uNewState ^ nmlv->uOldState) & LVIS_STATEIMAGEMASK) && !UpdateListFlag)
						SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
					break;
				}
			}
		}
	}//end* switch (msg)
	return FALSE;
}
Пример #3
0
INT_PTR CALLBACK DlgProcChangeFeedOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg) {
	case WM_INITDIALOG:
		TranslateDialogDefault(hwndDlg);
		{
			ItemInfo &SelItem = *(ItemInfo*)lParam;
			ItemInfo *nSelItem = new ItemInfo(SelItem);
			SetWindowText(hwndDlg, TranslateT("Change Feed"));
			SendDlgItemMessage(hwndDlg, IDC_CHECKTIME, EM_LIMITTEXT, 3, 0);
			SendDlgItemMessage(hwndDlg, IDC_TIMEOUT_VALUE_SPIN, UDM_SETRANGE32, 0, 999);

			HANDLE hContact;
			for (hContact = db_find_first(MODULE); hContact; hContact = db_find_next(hContact, MODULE)) {
				ptrT dbNick( db_get_tsa(hContact, MODULE, "Nick"));
				if (dbNick == NULL)
					continue;

				if (lstrcmp(dbNick, SelItem.nick) != 0)
					continue;

				ptrT dbURL( db_get_tsa(hContact, MODULE, "URL"));
				if (dbURL == NULL)
					continue;

				if (lstrcmp(dbURL, SelItem.url) != 0)
					continue;

				nSelItem->hContact = hContact;
				SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG)nSelItem);
				SetDlgItemText(hwndDlg, IDC_FEEDURL, SelItem.url);
				SetDlgItemText(hwndDlg, IDC_FEEDTITLE, SelItem.nick);
				SetDlgItemInt(hwndDlg, IDC_CHECKTIME, db_get_dw(hContact, MODULE, "UpdateTime", DEFAULT_UPDATE_TIME), TRUE);
				
				DBVARIANT dbMsg = {0};
				if (!db_get_ts(hContact, MODULE, "MsgFormat", &dbMsg)) {
					SetDlgItemText(hwndDlg, IDC_TAGSEDIT, dbMsg.ptszVal);
					db_free(&dbMsg);
				}
				if (db_get_b(hContact, MODULE, "UseAuth", 0)) {
					CheckDlgButton(hwndDlg, IDC_USEAUTH, BST_CHECKED);
					EnableWindow(GetDlgItem(hwndDlg, IDC_LOGIN), TRUE);
					EnableWindow(GetDlgItem(hwndDlg, IDC_PASSWORD), TRUE);
					DBVARIANT dbLogin = {0};
					if (!db_get_ts(hContact, MODULE, "Login", &dbLogin)) {
						SetDlgItemText(hwndDlg, IDC_LOGIN, dbLogin.ptszVal);
						db_free(&dbLogin);
					}
					ptrA pwd(db_get_sa(hContact, MODULE, "Password"));
					SetDlgItemTextA(hwndDlg, IDC_PASSWORD, pwd);
				}
				break;
			}
			WindowList_Add(hChangeFeedDlgList, hwndDlg, hContact);
			Utils_RestoreWindowPositionNoSize(hwndDlg, hContact, MODULE, "ChangeDlg");
		}
		return TRUE;

	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDOK:
			{
				ItemInfo *SelItem = (ItemInfo*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
				TCHAR str[MAX_PATH];
				char passw[MAX_PATH];
				if (!GetDlgItemText(hwndDlg, IDC_FEEDTITLE, str, SIZEOF(str))) {
					MessageBox(hwndDlg, TranslateT("Enter Feed name"), TranslateT("Error"), MB_OK);
					break;
				}
				if (!GetDlgItemText(hwndDlg, IDC_FEEDURL, str, SIZEOF(str)) || lstrcmp(str, _T("http://")) == 0) {
					MessageBox(hwndDlg, TranslateT("Enter Feed URL"), TranslateT("Error"), MB_OK);
					break;
				}
				if (GetDlgItemInt(hwndDlg, IDC_CHECKTIME, false, false) < 0) {
					MessageBox(hwndDlg, TranslateT("Enter checking interval"), TranslateT("Error"), MB_OK);
					break;
				}
				if (!GetDlgItemText(hwndDlg, IDC_TAGSEDIT, str, SIZEOF(str))) {
					MessageBox(hwndDlg, TranslateT("Enter message format"), TranslateT("Error"), MB_OK);
					break;
				}

				GetDlgItemText(hwndDlg, IDC_FEEDURL, str, SIZEOF(str));
				db_set_ts(SelItem->hContact, MODULE, "URL", str);
				GetDlgItemText(hwndDlg, IDC_FEEDTITLE, str, SIZEOF(str));
				db_set_ts(SelItem->hContact, MODULE, "Nick", str);
				db_set_dw(SelItem->hContact, MODULE, "UpdateTime", GetDlgItemInt(hwndDlg, IDC_CHECKTIME, false, false));
				GetDlgItemText(hwndDlg, IDC_TAGSEDIT, str, SIZEOF(str));
				db_set_ts(SelItem->hContact, MODULE, "MsgFormat", str);
				if (IsDlgButtonChecked(hwndDlg, IDC_USEAUTH)) {
					db_set_b(SelItem->hContact, MODULE, "UseAuth", 1);

					GetDlgItemText(hwndDlg, IDC_LOGIN, str, SIZEOF(str));
					db_set_ts(SelItem->hContact, MODULE, "Login", str);

					GetDlgItemTextA(hwndDlg, IDC_PASSWORD, passw, SIZEOF(passw));
					db_set_s(SelItem->hContact, MODULE, "Password", passw);
				}
				else
				{
					db_unset(SelItem->hContact, MODULE, "UseAuth");
					db_unset(SelItem->hContact, MODULE, "Login");
					db_unset(SelItem->hContact, MODULE, "Password");
				}
				DeleteAllItems(SelItem->hwndList);
				UpdateList(SelItem->hwndList);
			}

		case IDCANCEL:
			DestroyWindow(hwndDlg);
			break;

		case IDC_USEAUTH:
			if (IsDlgButtonChecked(hwndDlg, IDC_USEAUTH)) {
				EnableWindow(GetDlgItem(hwndDlg, IDC_LOGIN), TRUE);
				EnableWindow(GetDlgItem(hwndDlg, IDC_PASSWORD), TRUE);
			}
			else {
				EnableWindow(GetDlgItem(hwndDlg, IDC_LOGIN), FALSE);
				EnableWindow(GetDlgItem(hwndDlg, IDC_PASSWORD), FALSE);
			}
			break;

		case IDC_TAGHELP:
			{
				TCHAR tszTagHelp[1024];
				mir_sntprintf(tszTagHelp, SIZEOF(tszTagHelp), _T("%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s"),
					_T("#<title>#"),		TranslateT("The title of the item."),
					_T("#<description>#"),	TranslateT("The item synopsis."),
					_T("#<link>#"),			TranslateT("The URL of the item."),
					_T("#<author>#"),		TranslateT("Email address of the author of the item."),
					_T("#<comments>#"),		TranslateT("URL of a page for comments relating to the item."),
					_T("#<guid>#"),			TranslateT("A string that uniquely identifies the item."),
					_T("#<category>#"),		TranslateT("Specify one or more categories that the item belongs to.")
					);
				MessageBox(hwndDlg, tszTagHelp, TranslateT("Feed Tag Help"), MB_OK);
			}
			break;

		case IDC_RESET:
			if (MessageBox(hwndDlg, TranslateT("Are you sure?"), TranslateT("Tags Mask Reset"), MB_YESNO | MB_ICONWARNING) == IDYES)
				SetDlgItemText(hwndDlg, IDC_TAGSEDIT, _T(TAGSDEFAULT));
			break;

		case IDC_DISCOVERY:
			TCHAR tszURL[MAX_PATH] = {0};
			if (GetDlgItemText(hwndDlg, IDC_FEEDURL, tszURL, SIZEOF(tszURL)) || lstrcmp(tszURL, _T("http://")) != 0) {
				EnableWindow(GetDlgItem(hwndDlg, IDC_DISCOVERY), FALSE);
				SetDlgItemText(hwndDlg, IDC_DISCOVERY, TranslateT("Wait..."));
				TCHAR *tszTitle = CheckFeed(tszURL, hwndDlg);
				SetDlgItemText(hwndDlg, IDC_FEEDTITLE, tszTitle);
				EnableWindow(GetDlgItem(hwndDlg, IDC_DISCOVERY), TRUE);
				SetDlgItemText(hwndDlg, IDC_DISCOVERY, TranslateT("Check Feed"));
			}
			else MessageBox(hwndDlg, TranslateT("Enter Feed URL"), TranslateT("Error"), MB_OK);
		}
		break;

	case WM_CLOSE:
		DestroyWindow(hwndDlg);
		break;

	case WM_DESTROY:
		HANDLE hContact = (HANDLE)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
		Utils_SaveWindowPosition(hwndDlg, hContact, MODULE, "ChangeDlg");
		WindowList_Remove(hChangeFeedDlgList, hwndDlg);
		ItemInfo *SelItem = (ItemInfo *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
		delete SelItem;
		break;
	}

	return FALSE;
}