You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
713 lines
29 KiB
713 lines
29 KiB
#include "precomp.h"
|
|
|
|
#define MSGR_MAX_URL MAX_PATH
|
|
#define MSGR_MAX_BRAND 65
|
|
#define MSGR_MAX_SHORTBRAND 33
|
|
|
|
extern PROPSHEETPAGE g_psp[NUM_PAGES];
|
|
extern TCHAR g_szBuildRoot[MAX_PATH];
|
|
extern TCHAR g_szLanguage[];
|
|
extern TCHAR g_szCustIns[MAX_PATH];
|
|
extern TCHAR g_szTempSign[];
|
|
extern int g_iCurPage;
|
|
|
|
TCHAR g_szMsgrIns[MAX_PATH] = TEXT("");
|
|
static TCHAR g_szMsgrPath[MAX_PATH] = TEXT("");
|
|
|
|
static const TCHAR c_szEmpty[] = TEXT("");
|
|
|
|
const TCHAR szHttpPrefix[] = TEXT("http://");
|
|
|
|
const TCHAR g_szMSNBrand[] = TEXT("MSN Messenger Service");
|
|
const TCHAR g_szHotmailDomain[] = TEXT("hotmail.com");
|
|
const TCHAR g_szPassportDomain[] = TEXT("passport.com");
|
|
|
|
BOOL RewriteMsgrInfWithBrand(LPTSTR lpszINF);
|
|
|
|
INT_PTR CALLBACK MessengerDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
TCHAR szBrand[MSGR_MAX_SHORTBRAND];
|
|
TCHAR szDownload[MSGR_MAX_URL];
|
|
TCHAR szProvider[MSGR_MAX_SHORTBRAND];
|
|
|
|
UNREFERENCED_PARAMETER(wParam);
|
|
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
//----- Set up the global goo -----
|
|
g_hWizard = hDlg;
|
|
|
|
//----- Set up dialog controls -----
|
|
EnableDBCSChars(hDlg, IDE_MSGRBRAND);
|
|
EnableDBCSChars(hDlg, IDE_MSGRDOWNLOAD);
|
|
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_MSGRBRAND), MSGR_MAX_SHORTBRAND - 1);
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_MSGRBRAND2), MSGR_MAX_SHORTBRAND - 1);
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_MSGRDOWNLOAD), countof(szDownload)-1);
|
|
|
|
// Simulate click on first radio button to gray out appropriate controls
|
|
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_BRAND1, BN_CLICKED), NULL);
|
|
CheckRadioButton(hDlg, IDC_BRAND1, IDC_BRAND2, IDC_BRAND1);
|
|
|
|
if (TEXT('\0') == g_szMsgrIns[0])
|
|
{
|
|
// Set up MSGR path and IN_ file
|
|
StrCpy(g_szMsgrPath, g_szCustIns);
|
|
PathRemoveFileSpec(g_szMsgrPath);
|
|
PathCreatePath(g_szMsgrPath);
|
|
|
|
PathCombine(g_szMsgrIns, g_szMsgrPath, TEXT("MSMSGS.IN_"));
|
|
|
|
// First 7 chars of customization key written to this IN_ later.
|
|
}
|
|
|
|
break;
|
|
|
|
case WM_HELP:
|
|
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
switch (((NMHDR FAR *)lParam)->code)
|
|
{
|
|
case PSN_SETACTIVE:
|
|
//----- Standard prolog -----
|
|
// Note. Another case of the global goo.
|
|
SetBannerText(hDlg);
|
|
|
|
//----- Initialization of fields -----
|
|
|
|
SHGetIniString(IS_MESSENGER, IK_PROVIDERNAME, szProvider, countof(szProvider), g_szMsgrIns);
|
|
SHGetIniString(IS_MESSENGER, IK_SHORTNAME, szBrand, countof(szBrand), g_szMsgrIns);
|
|
|
|
StrRemoveWhitespace(szBrand);
|
|
StrRemoveWhitespace(szProvider);
|
|
|
|
if (*szProvider)
|
|
{
|
|
// Use Option 1--set the provider name
|
|
SetDlgItemText(hDlg, IDE_MSGRBRAND, szProvider);
|
|
}
|
|
else if (*szBrand)
|
|
{
|
|
// Use Option 2--set the brand name
|
|
SetDlgItemText(hDlg, IDE_MSGRBRAND2, szBrand);
|
|
|
|
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_BRAND2, BN_CLICKED), NULL);
|
|
CheckRadioButton(hDlg, IDC_BRAND1, IDC_BRAND2, IDC_BRAND2);
|
|
}
|
|
|
|
GetPrivateProfileString(IS_MESSENGER, IK_DOWNLOAD, c_szEmpty, szDownload, countof(szDownload), g_szMsgrIns);
|
|
|
|
StrRemoveWhitespace(szDownload);
|
|
|
|
SetDlgItemText(hDlg, IDE_MSGRDOWNLOAD, szDownload);
|
|
|
|
CheckBatchAdvance(hDlg); // standard line
|
|
break;
|
|
|
|
case PSN_WIZBACK:
|
|
case PSN_WIZNEXT:
|
|
case PSN_WIZFINISH:
|
|
if (!CheckField(hDlg, IDE_MSGRDOWNLOAD, FC_URL))
|
|
{
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
|
|
break;
|
|
}
|
|
|
|
//----- Read data from controls into internal variables -----
|
|
|
|
// The brand name is written via SHSetIniString to UTF7 encode Unicode. This is the only
|
|
// parameter for which Unicode characters can be used.
|
|
|
|
if (IsDlgButtonChecked(hDlg, IDC_BRAND1))
|
|
{
|
|
TCHAR szProvider[MSGR_MAX_SHORTBRAND];
|
|
// In this case, short name is just "MSN Messenger Service"
|
|
SHSetIniString(IS_MESSENGER, IK_SHORTNAME, g_szMSNBrand, g_szMsgrIns);
|
|
|
|
GetDlgItemText(hDlg, IDE_MSGRBRAND, szProvider, countof(szProvider));
|
|
StrRemoveWhitespace(szProvider);
|
|
SHSetIniString(IS_MESSENGER, IK_PROVIDERNAME, szProvider, g_szMsgrIns);
|
|
SHSetIniString(IS_MESSENGER, IK_SHORTNAME, c_szEmpty, g_szMsgrIns);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItemText(hDlg, IDE_MSGRBRAND2, szBrand, countof(szBrand));
|
|
StrRemoveWhitespace(szBrand);
|
|
SHSetIniString(IS_MESSENGER, IK_SHORTNAME, szBrand, g_szMsgrIns);
|
|
SHSetIniString(IS_MESSENGER, IK_PROVIDERNAME, c_szEmpty, g_szMsgrIns);
|
|
}
|
|
|
|
GetDlgItemText(hDlg, IDE_MSGRDOWNLOAD, szDownload, countof(szDownload));
|
|
|
|
StrRemoveWhitespace(szDownload);
|
|
|
|
|
|
//----- Serialize data to the *.ins file -----
|
|
WritePrivateProfileString(IS_MESSENGER, IK_DOWNLOAD, szDownload, g_szMsgrIns);
|
|
|
|
|
|
//----- Standard epilog -----
|
|
// Note. Last and classical at that example of the global goo.
|
|
g_iCurPage = PPAGE_MESSENGER;
|
|
EnablePages();
|
|
|
|
if (((LPNMHDR)lParam)->code == PSN_WIZNEXT)
|
|
PageNext(hDlg);
|
|
else if (((LPNMHDR)lParam)->code == PSN_WIZBACK)
|
|
PagePrev(hDlg);
|
|
break;
|
|
|
|
case PSN_HELP:
|
|
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
|
|
break;
|
|
|
|
case PSN_QUERYCANCEL:
|
|
return !QueryCancel(hDlg);
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED)
|
|
return FALSE;
|
|
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam))
|
|
{
|
|
case IDC_BRAND1:
|
|
DisableDlgItem(hDlg, IDE_MSGRBRAND2);
|
|
DisableDlgItem(hDlg, IDC_NAME2_STATIC);
|
|
DisableDlgItem(hDlg, IDC_BRAND2_STATIC);
|
|
EnableDlgItem(hDlg, IDC_NAME1_STATIC);
|
|
EnableDlgItem(hDlg, IDE_MSGRBRAND);
|
|
EnableDlgItem(hDlg, IDC_BRAND1_STATIC);
|
|
break;
|
|
case IDC_BRAND2:
|
|
DisableDlgItem(hDlg, IDC_NAME1_STATIC);
|
|
DisableDlgItem(hDlg, IDE_MSGRBRAND);
|
|
DisableDlgItem(hDlg, IDC_BRAND1_STATIC);
|
|
EnableDlgItem(hDlg, IDE_MSGRBRAND2);
|
|
EnableDlgItem(hDlg, IDC_NAME2_STATIC);
|
|
EnableDlgItem(hDlg, IDC_BRAND2_STATIC);
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
INT_PTR CALLBACK MessengerLogoSoundDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
TCHAR szLogo[MAX_PATH];
|
|
TCHAR szLogoLink[MSGR_MAX_URL];
|
|
TCHAR szContactOnlineSound[MAX_PATH];
|
|
TCHAR szNewEmailSound[MAX_PATH];
|
|
TCHAR szNewMessageSound[MAX_PATH];
|
|
TCHAR szXML[MSGR_MAX_URL];
|
|
|
|
UNREFERENCED_PARAMETER(wParam);
|
|
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
//----- Set up the global goo -----
|
|
g_hWizard = hDlg;
|
|
|
|
EnableDBCSChars(hDlg, IDE_LOGO);
|
|
EnableDBCSChars(hDlg, IDE_MSGRWEBLINK);
|
|
EnableDBCSChars(hDlg, IDE_CONTACTONLINE);
|
|
EnableDBCSChars(hDlg, IDE_NEWEMAIL);
|
|
EnableDBCSChars(hDlg, IDE_NEWMESSAGE );
|
|
EnableDBCSChars(hDlg, IDE_XMLURL );
|
|
|
|
//----- Set up dialog controls -----
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_LOGO), countof(szLogo)-1);
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_MSGRWEBLINK), countof(szLogoLink)-1);
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_CONTACTONLINE), countof(szContactOnlineSound)-1);
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_NEWEMAIL), countof(szNewEmailSound)-1);
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_NEWMESSAGE), countof(szNewMessageSound)-1);
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_XMLURL), countof(szXML)-1);
|
|
|
|
break;
|
|
|
|
case WM_HELP:
|
|
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
switch (((NMHDR FAR *)lParam)->code)
|
|
{
|
|
case PSN_SETACTIVE:
|
|
//----- Standard prolog -----
|
|
// Note. Another case of the global goo.
|
|
SetBannerText(hDlg);
|
|
|
|
//----- Initialization of fields -----
|
|
|
|
// BUGBUG: sounds path storage?
|
|
|
|
GetPrivateProfileString(IS_MESSENGER, IK_PRODUCTLINK, c_szEmpty, szLogoLink, countof(szLogoLink), g_szMsgrIns);
|
|
GetPrivateProfileString(IS_MESSENGER, IK_PARTNERLOGO, c_szEmpty, szLogo, countof(szLogo), g_szMsgrIns);
|
|
GetPrivateProfileString(IS_MESSENGER, IK_CONTACTONLINE, c_szEmpty, szContactOnlineSound, countof(szContactOnlineSound), g_szMsgrIns);
|
|
GetPrivateProfileString(IS_MESSENGER, IK_NEWEMAIL, c_szEmpty, szNewEmailSound, countof(szNewEmailSound), g_szMsgrIns);
|
|
GetPrivateProfileString(IS_MESSENGER, IK_INCOMINGIM, c_szEmpty, szNewMessageSound, countof(szNewMessageSound), g_szMsgrIns);
|
|
GetPrivateProfileString(IS_MESSENGER, IK_XMLLINK, c_szEmpty, szXML, countof(szXML), g_szMsgrIns);
|
|
|
|
StrRemoveWhitespace(szLogoLink);
|
|
StrRemoveWhitespace(szLogo);
|
|
StrRemoveWhitespace(szContactOnlineSound);
|
|
StrRemoveWhitespace(szNewEmailSound);
|
|
StrRemoveWhitespace(szNewMessageSound);
|
|
StrRemoveWhitespace(szXML);
|
|
|
|
SetDlgItemText(hDlg, IDE_MSGRWEBLINK, szLogoLink);
|
|
SetDlgItemText(hDlg, IDE_LOGO, szLogo);
|
|
SetDlgItemText(hDlg, IDE_CONTACTONLINE, szContactOnlineSound);
|
|
SetDlgItemText(hDlg, IDE_NEWEMAIL, szNewEmailSound);
|
|
SetDlgItemText(hDlg, IDE_NEWMESSAGE, szNewMessageSound);
|
|
SetDlgItemText(hDlg, IDE_XMLURL, szXML);
|
|
|
|
CheckBatchAdvance(hDlg); // standard line
|
|
break;
|
|
|
|
case PSN_WIZBACK:
|
|
case PSN_WIZNEXT:
|
|
case PSN_WIZFINISH:
|
|
if (!CheckField(hDlg, IDE_MSGRWEBLINK, FC_URL) ||
|
|
!CheckField(hDlg, IDE_LOGO, FC_FILE | FC_EXISTS) ||
|
|
!CheckField(hDlg, IDE_CONTACTONLINE, FC_FILE | FC_EXISTS) ||
|
|
!CheckField(hDlg, IDE_NEWEMAIL, FC_FILE | FC_EXISTS) ||
|
|
!CheckField(hDlg, IDE_NEWMESSAGE, FC_FILE | FC_EXISTS) ||
|
|
!CheckField(hDlg, IDE_XMLURL, FC_URL))
|
|
{
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
|
|
break;
|
|
}
|
|
|
|
//----- Read data from controls into internal variables -----
|
|
|
|
GetDlgItemText(hDlg, IDE_LOGO, szLogo, countof(szLogo));
|
|
GetDlgItemText(hDlg, IDE_MSGRWEBLINK, szLogoLink, countof(szLogoLink));
|
|
GetDlgItemText(hDlg, IDE_CONTACTONLINE, szContactOnlineSound, countof(szContactOnlineSound));
|
|
GetDlgItemText(hDlg, IDE_NEWEMAIL, szNewEmailSound, countof(szNewEmailSound));
|
|
GetDlgItemText(hDlg, IDE_NEWMESSAGE, szNewMessageSound, countof(szNewMessageSound));
|
|
GetDlgItemText(hDlg, IDE_XMLURL, szXML, countof(szXML));
|
|
|
|
StrRemoveWhitespace(szLogo);
|
|
StrRemoveWhitespace(szLogoLink);
|
|
StrRemoveWhitespace(szContactOnlineSound);
|
|
StrRemoveWhitespace(szNewEmailSound);
|
|
StrRemoveWhitespace(szNewMessageSound);
|
|
StrRemoveWhitespace(szXML);
|
|
|
|
//----- Serialize data to the *.ins file -----
|
|
WritePrivateProfileString(IS_MESSENGER, IK_PRODUCTLINK, szLogoLink, g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_PARTNERLOGO, szLogo, g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_CONTACTONLINE, szContactOnlineSound, g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_NEWEMAIL, szNewEmailSound, g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_INCOMINGIM, szNewMessageSound, g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_XMLLINK, szXML, g_szMsgrIns);
|
|
|
|
//----- Standard epilog -----
|
|
// Note. Last and classical at that example of the global goo.
|
|
g_iCurPage = PPAGE_LOGOSOUND;
|
|
EnablePages();
|
|
|
|
if (((LPNMHDR)lParam)->code == PSN_WIZNEXT)
|
|
PageNext(hDlg);
|
|
else if (((LPNMHDR)lParam)->code == PSN_WIZBACK)
|
|
PagePrev(hDlg);
|
|
break;
|
|
|
|
case PSN_HELP:
|
|
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
|
|
break;
|
|
|
|
case PSN_QUERYCANCEL:
|
|
return !QueryCancel(hDlg);
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED)
|
|
return FALSE;
|
|
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam))
|
|
{
|
|
case IDC_BROWSELOGO:
|
|
GetDlgItemText(hDlg, IDE_LOGO, szLogo, countof(szLogo));
|
|
if (BrowseForFile(hDlg, szLogo, countof(szLogo), GFN_GIF))
|
|
SetDlgItemText(hDlg, IDE_LOGO, szLogo);
|
|
break;
|
|
case IDC_BROWSEONLINE:
|
|
GetDlgItemText(hDlg, IDE_CONTACTONLINE, szContactOnlineSound, countof(szContactOnlineSound));
|
|
if (BrowseForFile(hDlg, szContactOnlineSound, countof(szContactOnlineSound), GFN_WAV))
|
|
SetDlgItemText(hDlg, IDE_CONTACTONLINE, szContactOnlineSound);
|
|
break;
|
|
case IDC_BROWSENEWEMAIL:
|
|
GetDlgItemText(hDlg, IDE_NEWEMAIL, szNewEmailSound, countof(szNewEmailSound));
|
|
if (BrowseForFile(hDlg, szNewEmailSound, countof(szNewEmailSound), GFN_WAV))
|
|
SetDlgItemText(hDlg, IDE_NEWEMAIL, szNewEmailSound);
|
|
break;
|
|
case IDC_BROWSENEWMESSAGE:
|
|
GetDlgItemText(hDlg, IDE_NEWMESSAGE, szNewMessageSound, countof(szNewMessageSound));
|
|
if (BrowseForFile(hDlg, szNewMessageSound, countof(szNewMessageSound), GFN_WAV))
|
|
SetDlgItemText(hDlg, IDE_NEWMESSAGE, szNewMessageSound);
|
|
break;
|
|
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
INT_PTR CALLBACK MessengerAccountsDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
TCHAR szSignup[MSGR_MAX_URL];
|
|
TCHAR szMailServer[MAX_PATH];
|
|
TCHAR szDefaultDomain[MAX_PATH];
|
|
|
|
UNREFERENCED_PARAMETER(wParam);
|
|
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
//----- Set up the global goo -----
|
|
g_hWizard = hDlg;
|
|
|
|
//----- Set up dialog controls -----
|
|
EnableDBCSChars(hDlg, IDE_SIGNUP);
|
|
EnableDBCSChars(hDlg, IDE_POPSERVER);
|
|
EnableDBCSChars(hDlg, IDE_MAILURL);
|
|
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_SIGNUP), countof(szSignup)-1);
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_POPSERVER), countof(szMailServer)-1);
|
|
Edit_LimitText(GetDlgItem(hDlg, IDC_DOMAINCOMBO), countof(szDefaultDomain)-1);
|
|
Edit_LimitText(GetDlgItem(hDlg, IDE_MAILURL), countof(szMailServer)-1);
|
|
|
|
SendDlgItemMessage(hDlg, IDC_DOMAINCOMBO, CB_ADDSTRING, 0, (LPARAM) g_szHotmailDomain);
|
|
SendDlgItemMessage(hDlg, IDC_DOMAINCOMBO, CB_ADDSTRING, 0, (LPARAM) g_szPassportDomain);
|
|
SendDlgItemMessage(hDlg, IDC_DOMAINCOMBO, CB_SETCURSEL, 0, 0);
|
|
|
|
break;
|
|
|
|
case WM_HELP:
|
|
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
switch (((NMHDR FAR *)lParam)->code)
|
|
{
|
|
case PSN_SETACTIVE:
|
|
{
|
|
//----- Standard prolog -----
|
|
// Note. Another case of the global goo.
|
|
SetBannerText(hDlg);
|
|
|
|
//----- Initialization of fields -----
|
|
GetPrivateProfileString(IS_MESSENGER, IK_PPSIGNUP, c_szEmpty, szSignup, countof(szSignup), g_szMsgrIns);
|
|
GetPrivateProfileString(IS_MESSENGER, IK_PPDOMAIN, c_szEmpty, szDefaultDomain, countof(szDefaultDomain), g_szMsgrIns);
|
|
|
|
StrRemoveWhitespace(szSignup);
|
|
StrRemoveWhitespace(szDefaultDomain);
|
|
|
|
SetDlgItemText(hDlg, IDE_SIGNUP, szSignup);
|
|
|
|
TCHAR szMailFunction[2];
|
|
GetPrivateProfileString(IS_MESSENGER, IK_MAILFUNCTION, c_szEmpty, szMailFunction, countof(szMailFunction), g_szMsgrIns);
|
|
|
|
if (TEXT('1') == *szMailFunction) // 1 == POP mail
|
|
{
|
|
GetPrivateProfileString(IS_MESSENGER, IK_MAILSERVER, c_szEmpty, szMailServer, countof(szMailServer), g_szMsgrIns);
|
|
StrRemoveWhitespace(szMailServer);
|
|
SetDlgItemText(hDlg, IDE_POPSERVER, szMailServer);
|
|
|
|
TCHAR szSPA[2];
|
|
GetPrivateProfileString(IS_MESSENGER, IK_MAILSPA, c_szEmpty, szSPA, countof(szSPA), g_szMsgrIns);
|
|
if (TEXT('1') == *szSPA)
|
|
{
|
|
CheckDlgButton(hDlg, IDC_MSGRSPA, BST_CHECKED);
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(hDlg, IDC_MSGRSPA, BST_UNCHECKED);
|
|
}
|
|
|
|
// Simulate click on radio button to gray out appropriate controls
|
|
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_RADIO_MAILSERVER, BN_CLICKED), NULL);
|
|
CheckRadioButton(hDlg, IDC_RADIO_HOTMAIL, IDC_RADIO_MAILSERVER, IDC_RADIO_MAILSERVER);
|
|
}
|
|
else if (TEXT('2') == *szMailFunction) // 2 = URL mail
|
|
{
|
|
GetPrivateProfileString(IS_MESSENGER, IK_MAILURL, c_szEmpty, szMailServer, countof(szMailServer), g_szMsgrIns);
|
|
StrRemoveWhitespace(szMailServer);
|
|
SetDlgItemText(hDlg, IDE_MAILURL, szMailServer);
|
|
|
|
// Simulate click on radio button to gray out appropriate controls
|
|
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_RADIO_URL, BN_CLICKED), NULL);
|
|
CheckRadioButton(hDlg, IDC_RADIO_HOTMAIL, IDC_RADIO_MAILSERVER, IDC_RADIO_URL);
|
|
}
|
|
else
|
|
{
|
|
// Simulate click on first radio button to gray out appropriate controls
|
|
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_RADIO_HOTMAIL, BN_CLICKED), NULL);
|
|
CheckRadioButton(hDlg, IDC_RADIO_HOTMAIL, IDC_RADIO_MAILSERVER, IDC_RADIO_HOTMAIL);
|
|
}
|
|
|
|
if (*szDefaultDomain)
|
|
{
|
|
SetDlgItemText(hDlg, IDC_DOMAINCOMBO, szDefaultDomain);
|
|
}
|
|
|
|
CheckBatchAdvance(hDlg); // standard line
|
|
break;
|
|
}
|
|
case PSN_WIZBACK:
|
|
case PSN_WIZNEXT:
|
|
case PSN_WIZFINISH:
|
|
if (!CheckField(hDlg, IDE_SIGNUP, FC_URL) ||
|
|
!CheckField(hDlg, IDC_DOMAINCOMBO, FC_NOSPACE))
|
|
{
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
|
|
break;
|
|
}
|
|
|
|
//----- Read data from controls into internal variables -----
|
|
|
|
if (IsDlgButtonChecked(hDlg, IDC_RADIO_URL))
|
|
{
|
|
if (!CheckField(hDlg, IDE_MAILURL, FC_URL | FC_NONNULL))
|
|
{
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
|
|
break;
|
|
}
|
|
|
|
GetDlgItemText(hDlg, IDE_MAILURL, szMailServer, countof(szMailServer));
|
|
StrRemoveWhitespace(szMailServer);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_MAILURL, szMailServer, g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_MAILSERVER, c_szEmpty, g_szMsgrIns);
|
|
// 2 signifies URL Mail integration
|
|
WritePrivateProfileString(IS_MESSENGER, IK_MAILFUNCTION, TEXT("2"), g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_MAILSPA, TEXT("0"), g_szMsgrIns);
|
|
}
|
|
else if (IsDlgButtonChecked(hDlg, IDC_RADIO_MAILSERVER))
|
|
{
|
|
if (!CheckField(hDlg, IDE_POPSERVER, FC_NOSPACE))
|
|
{
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
|
|
break;
|
|
}
|
|
|
|
GetDlgItemText(hDlg, IDE_POPSERVER, szMailServer, countof(szMailServer));
|
|
StrRemoveWhitespace(szMailServer);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_MAILSERVER, szMailServer, g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_MAILURL, c_szEmpty, g_szMsgrIns);
|
|
// 1 signifies POP Mail integration
|
|
WritePrivateProfileString(IS_MESSENGER, IK_MAILFUNCTION, TEXT("1"), g_szMsgrIns);
|
|
|
|
WritePrivateProfileString( IS_MESSENGER,
|
|
IK_MAILSPA,
|
|
IsDlgButtonChecked(hDlg, IDC_MSGRSPA) ? TEXT("1") : TEXT("0"),
|
|
g_szMsgrIns);
|
|
}
|
|
else
|
|
{
|
|
WritePrivateProfileString(IS_MESSENGER, IK_MAILSERVER, c_szEmpty, g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_MAILURL, c_szEmpty, g_szMsgrIns);
|
|
// 0 signifies Hotmail Mail integration
|
|
WritePrivateProfileString(IS_MESSENGER, IK_MAILFUNCTION, TEXT("0"), g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_MAILSPA, TEXT("0"), g_szMsgrIns);
|
|
}
|
|
|
|
GetDlgItemText(hDlg, IDE_SIGNUP, szSignup, countof(szSignup));
|
|
GetDlgItemText(hDlg, IDC_DOMAINCOMBO, szDefaultDomain, countof(szDefaultDomain));
|
|
|
|
StrRemoveWhitespace(szSignup);
|
|
StrRemoveWhitespace(szDefaultDomain);
|
|
|
|
//----- Serialize data to the *.ins file -----
|
|
WritePrivateProfileString(IS_MESSENGER, IK_PPSIGNUP, szSignup, g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_PPDOMAIN, szDefaultDomain, g_szMsgrIns);
|
|
WritePrivateProfileString(IS_MESSENGER, IK_PPSUFFIX, szDefaultDomain, g_szMsgrIns);
|
|
|
|
//----- Standard epilog -----
|
|
// Note. Last and classical at that example of the global goo.
|
|
g_iCurPage = PPAGE_MSGRACCOUNTS;
|
|
EnablePages();
|
|
|
|
if (((LPNMHDR)lParam)->code == PSN_WIZNEXT)
|
|
PageNext(hDlg);
|
|
else if (((LPNMHDR)lParam)->code == PSN_WIZBACK)
|
|
PagePrev(hDlg);
|
|
break;
|
|
|
|
case PSN_HELP:
|
|
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
|
|
break;
|
|
|
|
case PSN_QUERYCANCEL:
|
|
return !QueryCancel(hDlg);
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED)
|
|
return FALSE;
|
|
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam))
|
|
{
|
|
case IDC_RADIO_HOTMAIL:
|
|
DisableDlgItem(hDlg, IDC_MAILURL_STATIC);
|
|
DisableDlgItem(hDlg, IDE_MAILURL);
|
|
DisableDlgItem(hDlg, IDE_POPSERVER);
|
|
DisableDlgItem(hDlg, IDC_MAILSERVER_STATIC);
|
|
DisableDlgItem(hDlg, IDC_MSGRSPA);
|
|
break;
|
|
case IDC_RADIO_MAILSERVER:
|
|
DisableDlgItem(hDlg, IDC_MAILURL_STATIC);
|
|
DisableDlgItem(hDlg, IDE_MAILURL);
|
|
EnableDlgItem(hDlg, IDE_POPSERVER);
|
|
EnableDlgItem(hDlg, IDC_MAILSERVER_STATIC);
|
|
EnableDlgItem(hDlg, IDC_MSGRSPA);
|
|
break;
|
|
case IDC_RADIO_URL:
|
|
EnableDlgItem(hDlg, IDC_MAILURL_STATIC);
|
|
EnableDlgItem(hDlg, IDE_MAILURL);
|
|
DisableDlgItem(hDlg, IDE_POPSERVER);
|
|
DisableDlgItem(hDlg, IDC_MAILSERVER_STATIC);
|
|
DisableDlgItem(hDlg, IDC_MSGRSPA);
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
const CHAR g_szEmbeddedStrings[] = "[Strings.Embedded]";
|
|
|
|
BOOL RewriteMsgrInfWithBrand(LPTSTR lpszINF)
|
|
{
|
|
BOOL bRet = FALSE;
|
|
|
|
TCHAR szBrand[MSGR_MAX_SHORTBRAND];
|
|
GetPrivateProfileString(IS_MESSENGER, IK_SHORTNAME, c_szEmpty, szBrand, countof(szBrand), g_szMsgrIns);
|
|
|
|
CHAR szaBrand[MSGR_MAX_SHORTBRAND];
|
|
T2Abux(szBrand, szaBrand);
|
|
|
|
// Replace the brand in the INF, as specified by the PGMITEM_MSMSGS field
|
|
TCHAR szOldBrand[MSGR_MAX_SHORTBRAND];
|
|
GetPrivateProfileString(TEXT("Strings"), TEXT("PGMITEM_MSMSGS"), c_szEmpty, szOldBrand, countof(szOldBrand), lpszINF);
|
|
|
|
// because we're mixing ini string functions with binary file operations
|
|
WritePrivateProfileString(NULL, NULL, NULL, lpszINF);
|
|
|
|
CHAR szaOldBrand[MSGR_MAX_SHORTBRAND];
|
|
T2Abux(szOldBrand, szaOldBrand);
|
|
|
|
ASSERT(*szaOldBrand && *szaBrand && "Both of these parameters should be valid when RewriteMsgrInfWithBrand is called");
|
|
|
|
if (*szaOldBrand && *szaBrand)
|
|
{
|
|
CHAR szaINFBrand[MSGR_MAX_SHORTBRAND*4];
|
|
StrCpyA(szaINFBrand, szaBrand);
|
|
HANDLE hFile = ::CreateFile(lpszINF, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
if (INVALID_HANDLE_VALUE != hFile)
|
|
{
|
|
DWORD dwSize = ::GetFileSize(hFile, NULL);
|
|
if (dwSize)
|
|
{
|
|
LPSTR lpszData = new CHAR[dwSize + 1];
|
|
if (lpszData)
|
|
{
|
|
ULONG nRead;
|
|
if (ReadFile(hFile, lpszData, dwSize, &nRead, NULL))
|
|
{
|
|
// Null terminate the data
|
|
lpszData[nRead] = '\0';
|
|
|
|
// Reset the file pointer so we can write the branded INF data
|
|
// over the old data.
|
|
SetFilePointer(hFile, 0, 0, FILE_BEGIN);
|
|
|
|
LPSTR pszEmbeddedStrings = StrStrA(lpszData, g_szEmbeddedStrings);
|
|
|
|
// Write data up until an occurrence of the old brand name, replace the old brand name with the new
|
|
// brand name, and loop.
|
|
|
|
LPSTR lpszDataStart = lpszData, lpszDataEnd;
|
|
DWORD dwBytesWritten;
|
|
BOOL fPassedEmbedded = FALSE;
|
|
while (NULL != (lpszDataEnd = StrStrA(lpszDataStart, szaOldBrand)))
|
|
{
|
|
// If we pass the [Strings.Embedded] section header,
|
|
// that means all occurrences of the brand from here on are
|
|
// embedded, so we need to quadruple the quotes.
|
|
if (!fPassedEmbedded && pszEmbeddedStrings &&
|
|
lpszDataEnd > pszEmbeddedStrings)
|
|
{
|
|
LPSTR pszTemp = szaINFBrand, pszSrc = szaBrand;
|
|
|
|
fPassedEmbedded = TRUE;
|
|
// Need to write FOUR of either kind of quote to make it show up correctly in the INF
|
|
// in the embedded strings
|
|
while (*pszSrc)
|
|
{
|
|
if ('\'' == *pszSrc || '\"' == *pszSrc)
|
|
{
|
|
*pszTemp++ = *pszSrc;
|
|
*pszTemp++ = *pszSrc;
|
|
*pszTemp++ = *pszSrc;
|
|
}
|
|
*pszTemp++ = *pszSrc++;
|
|
}
|
|
*pszTemp = '\0';
|
|
}
|
|
|
|
WriteFile(hFile, lpszDataStart, (DWORD)(lpszDataEnd - lpszDataStart), &dwBytesWritten, NULL);
|
|
WriteFile(hFile, szaINFBrand, lstrlenA(szaINFBrand), &dwBytesWritten, NULL);
|
|
lpszDataStart = lpszDataEnd + lstrlenA(szaOldBrand);
|
|
}
|
|
|
|
// Write the rest of the data after the last occurrence of the old brand name.
|
|
|
|
WriteFile(hFile, lpszDataStart, dwSize - (DWORD)(lpszDataStart - lpszData), &dwBytesWritten, NULL);
|
|
bRet = SetEndOfFile(hFile);
|
|
}
|
|
}
|
|
}
|
|
|
|
// because we're mixing ini string functions with binary file operations
|
|
FlushFileBuffers(hFile);
|
|
CloseHandle(hFile);
|
|
}
|
|
}
|
|
return bRet;
|
|
}
|