2012 lines
60 KiB
C++
2012 lines
60 KiB
C++
#include "private.h"
|
|
#include "offl_cpp.h"
|
|
#include "propshts.h"
|
|
#include "subsmgrp.h"
|
|
#include <iehelpid.h>
|
|
|
|
#include <mluisupp.h>
|
|
|
|
#define INITGUID
|
|
#include <initguid.h>
|
|
#include "imnact.h"
|
|
#include "helper.h"
|
|
|
|
void WriteDefaultEmail(LPTSTR szBuf);
|
|
void WriteDefaultSMTPServer(LPTSTR szBuf);
|
|
|
|
const TCHAR c_szDefEmail[] = TEXT("DefaultEmail");
|
|
const TCHAR c_szDefServer[] = TEXT("DefaultSMTPServer");
|
|
TCHAR c_szHelpFile[] = TEXT("iexplore.hlp");
|
|
|
|
struct NEWSCHED_DATA
|
|
{
|
|
SYNCSCHEDULECOOKIE SchedCookie;
|
|
TCHAR szSchedName[MAX_PATH];
|
|
};
|
|
|
|
#define MIN_DOWNLOAD_K 50
|
|
#define MAX_DOWNLOAD_K UD_MAXVAL
|
|
#define DEF_DOWNLOAD_K 500
|
|
|
|
DWORD aHelpIDs[] = {
|
|
|
|
// Schedule page
|
|
IDC_SCHEDULE_TEXT, IDH_GROUPBOX,
|
|
IDC_MANUAL_SYNC, IDH_SUBPROPS_SCHEDTAB_MANUAL_SCHEDULE,
|
|
IDC_SCHEDULED_SYNC, IDH_SUBPROPS_SCHEDTAB_CUSTOM_SCHEDULE,
|
|
IDC_SCHEDULE_LIST, IDH_SUBPROPS_SCHEDTAB_SCHEDDESC,
|
|
IDC_SCHEDULE_NEW, IDH_NEW_OFFLINE_SCHED,
|
|
IDC_SCHEDULE_EDIT, IDH_EDIT_OFFLINE_SCHED,
|
|
IDC_SCHEDULE_REMOVE, IDH_REMOVE_OFFLINE_SCHED,
|
|
// IDC_IDLE_ONLY, IDH_SUBPROPS_SCHED_DONTUPDATE,
|
|
|
|
// Download page
|
|
IDC_CONTENT_GROUPBOX, IDH_GROUPBOX,
|
|
IDC_DOWNLOAD_PAGES_LABEL1, IDH_SUBPROPS_RECTAB_ADVOPTS_DOWNLOAD_PAGES_DEEP,
|
|
IDC_LEVELS, IDH_SUBPROPS_RECTAB_ADVOPTS_DOWNLOAD_PAGES_DEEP,
|
|
IDC_LEVELS_SPIN, IDH_SUBPROPS_RECTAB_ADVOPTS_DOWNLOAD_PAGES_DEEP,
|
|
IDC_DOWNLOAD_PAGES_LABEL2, IDH_SUBPROPS_RECTAB_ADVOPTS_DOWNLOAD_PAGES_DEEP,
|
|
IDC_FOLLOW_LINKS, IDH_SUBPROPS_RECTAB_ADVOPTS_FOLLOW_LINKS,
|
|
IDC_LIMIT_SPACE_CHECK, IDH_SUBPROPS_RECTAB_ADVOPTS_MAX_DOWNLOAD,
|
|
IDC_LIMIT_SPACE_EDIT, IDH_SUBPROPS_RECTAB_ADVOPTS_MAX_DOWNLOAD,
|
|
IDC_LIMIT_SPACE_SPIN, IDH_SUBPROPS_RECTAB_ADVOPTS_MAX_DOWNLOAD,
|
|
IDC_LIMIT_SPACE_TEXT, IDH_SUBPROPS_RECTAB_ADVOPTS_MAX_DOWNLOAD,
|
|
IDC_ADVANCED, IDH_SUBPROPS_RECTAB_ADVANCED,
|
|
IDC_EMAIL_GROUPBOX, IDH_SUBPROPS_RECTAB_EMAIL_NOTIFICATION,
|
|
IDC_EMAIL_NOTIFY, IDH_SUBPROPS_RECTAB_EMAIL_NOTIFICATION,
|
|
IDC_EMAIL_ADDRESS_TEXT, IDH_SUBPROPS_RECTAB_MAILOPTS_EMAIL_ADDRESS,
|
|
IDC_EMAIL_ADDRESS, IDH_SUBPROPS_RECTAB_MAILOPTS_EMAIL_ADDRESS,
|
|
IDC_EMAIL_SERVER_TEXT, IDH_SUBPROPS_RECTAB_MAILOPTS_EMAIL_SERVER,
|
|
IDC_EMAIL_SERVER, IDH_SUBPROPS_RECTAB_MAILOPTS_EMAIL_SERVER,
|
|
IDC_LOGIN_LABEL, IDH_SUBPROPS_RECTAB_CHANNEL_LOGIN,
|
|
IDC_LOGIN, IDH_SUBPROPS_RECTAB_CHANNEL_LOGIN,
|
|
IDC_DOWNLOAD_ALL, IDH_CHANNEL_DOWNLOAD_ALL,
|
|
IDC_DOWNLOAD_MIN, IDH_CHANNEL_DOWNLOAD_COVER_N_TOC,
|
|
|
|
// Advanced popup
|
|
IDC_ADVANCED_GROUPBOX, IDH_GROUPBOX,
|
|
IDC_DOWNLOAD_IMAGES, IDH_SUBPROPS_RECTAB_ADVOPTS_DOWNLOAD_IMAGES,
|
|
IDC_DOWNLOAD_MEDIA, IDH_SUBPROPS_RECTAB_ADVOPTS_DOWNLOAD_SOUND,
|
|
IDC_DOWNLOAD_APPLETS, IDH_SUBPROPS_RECTAB_ADVOPTS_DOWNLOAD_ACTIVEX,
|
|
IDC_DOWNLOAD_ONLY_HTML_LINKS, IDH_SUBPROPS_RECTAB_ADVOPTS_ONLY_HTML_LINKS,
|
|
|
|
// Login popup
|
|
IDC_USERNAME_LABEL, IDH_SUBPROPS_RECTAB_LOGINOPTS_USER_ID,
|
|
IDC_USERNAME, IDH_SUBPROPS_RECTAB_LOGINOPTS_USER_ID,
|
|
IDC_PASSWORD_LABEL, IDH_SUBPROPS_RECTAB_LOGINOPTS_PASSWORD,
|
|
IDC_PASSWORD, IDH_SUBPROPS_RECTAB_LOGINOPTS_PASSWORD,
|
|
IDC_PASSWORDCONFIRM_LABEL, IDH_SUBPROPS_RECTAB_LOGINOPTS_PASSWORD_CONFIRM,
|
|
IDC_PASSWORDCONFIRM, IDH_SUBPROPS_RECTAB_LOGINOPTS_PASSWORD_CONFIRM,
|
|
|
|
// New schedule popup
|
|
IDC_SCHEDULE_LABEL1, IDH_NEWSCHED_EVERY_AT_TIME,
|
|
IDC_SCHEDULE_DAYS, IDH_NEWSCHED_EVERY_AT_TIME,
|
|
IDC_SCHEDULE_DAYS_SPIN, IDH_NEWSCHED_EVERY_AT_TIME,
|
|
IDC_SCHEDULE_LABEL2, IDH_NEWSCHED_EVERY_AT_TIME,
|
|
IDC_SCHEDULE_TIME, IDH_NEWSCHED_EVERY_AT_TIME,
|
|
IDC_SCHEDULE_NAME_TEXT, IDH_NEWSCHED_NAME,
|
|
IDC_SCHEDULE_NAME, IDH_NEWSCHED_NAME,
|
|
IDC_SCHEDULE_LABEL3, IDH_NEWSCHED_EVERY_AT_TIME,
|
|
IDC_WIZ_SCHEDULE_AUTOCONNECT, IDH_SUBPROPS_NEW_SCHEDULE_AUTOCONNECT,
|
|
|
|
// Summary page
|
|
IDC_NAME, IDH_SUBPROPS_SUBTAB_SUBSCRIBED_NAME,
|
|
IDC_URL_TEXT, IDH_SUBPROPS_SUBTAB_SUBSCRIBED_URL,
|
|
IDC_URL, IDH_SUBPROPS_SUBTAB_SUBSCRIBED_URL,
|
|
IDC_VISITS_TEXT, IDH_WEBDOC_VISITS,
|
|
IDC_VISITS, IDH_WEBDOC_VISITS,
|
|
IDC_MAKE_OFFLINE, IDH_MAKE_AVAIL_OFFLINE,
|
|
IDC_SUMMARY, IDH_GROUPBOX,
|
|
IDC_LAST_SYNC_TEXT, IDH_SUBPROPS_SUBTAB_LAST,
|
|
IDC_LAST_SYNC, IDH_SUBPROPS_SUBTAB_LAST,
|
|
IDC_DOWNLOAD_SIZE_TEXT, IDH_SUBPROPS_DLSIZE,
|
|
IDC_DOWNLOAD_SIZE, IDH_SUBPROPS_DLSIZE,
|
|
IDC_DOWNLOAD_RESULT_TEXT, IDH_SUBPROPS_SUBTAB_RESULT,
|
|
IDC_DOWNLOAD_RESULT, IDH_SUBPROPS_SUBTAB_RESULT,
|
|
|
|
// dah end
|
|
0, 0
|
|
};
|
|
|
|
|
|
|
|
/********************************************************************************
|
|
Property sheet helpers
|
|
*********************************************************************************/
|
|
|
|
inline POOEBuf GetBuf(HWND hdlg)
|
|
{
|
|
POOEBuf pBuf = (POOEBuf) GetWindowLongPtr(hdlg, DWLP_USER);
|
|
|
|
return pBuf;
|
|
}
|
|
|
|
void EnableControls(HWND hdlg, const int *pIDs, int nIDs, BOOL bEnable)
|
|
{
|
|
for (int i = 0; i < nIDs; i++)
|
|
{
|
|
EnableWindow(GetDlgItem(hdlg, *pIDs++), bEnable);
|
|
}
|
|
}
|
|
|
|
/********************************************************************************
|
|
Summary property sheet code
|
|
*********************************************************************************/
|
|
inline POOEBuf Summary_GetBuf(HWND hdlg)
|
|
{
|
|
CSubscriptionMgr *pSubsMgr = (CSubscriptionMgr*) GetWindowLongPtr(hdlg, DWLP_USER);
|
|
|
|
ASSERT(NULL != pSubsMgr);
|
|
|
|
return (NULL != pSubsMgr) ? pSubsMgr->m_pBuf : NULL;
|
|
}
|
|
|
|
void Summary_ShowOfflineSummary(HWND hdlg, POOEBuf pBuf, BOOL bShow)
|
|
{
|
|
static const int offSumIDs[] =
|
|
{
|
|
IDC_SUMMARY,
|
|
IDC_LAST_SYNC_TEXT,
|
|
IDC_LAST_SYNC,
|
|
IDC_DOWNLOAD_SIZE_TEXT,
|
|
IDC_DOWNLOAD_SIZE,
|
|
IDC_DOWNLOAD_RESULT,
|
|
IDC_DOWNLOAD_RESULT_TEXT,
|
|
IDC_FREESPACE_TEXT
|
|
};
|
|
|
|
if (bShow)
|
|
{
|
|
TCHAR szLastSync[128];
|
|
TCHAR szDownloadSize[128];
|
|
TCHAR szDownloadResult[128];
|
|
|
|
MLLoadString(IDS_VALUE_UNKNOWN, szLastSync, ARRAYSIZE(szLastSync));
|
|
StrCpyN(szDownloadSize, szLastSync, ARRAYSIZE(szDownloadSize));
|
|
StrCpyN(szDownloadResult, szLastSync, ARRAYSIZE(szDownloadResult));
|
|
|
|
ISubscriptionItem *psi;
|
|
|
|
if (SUCCEEDED(SubscriptionItemFromCookie(FALSE, &pBuf->m_Cookie, &psi)))
|
|
{
|
|
enum { spLastSync, spDownloadSize, spDownloadResult };
|
|
|
|
static const LPCWSTR pProps[] =
|
|
{
|
|
c_szPropCompletionTime,
|
|
c_szPropCrawlActualSize,
|
|
c_szPropStatusString
|
|
};
|
|
VARIANT vars[ARRAYSIZE(pProps)];
|
|
|
|
if (SUCCEEDED(psi->ReadProperties(ARRAYSIZE(pProps), pProps, vars)))
|
|
{
|
|
if (VT_DATE == vars[spLastSync].vt)
|
|
{
|
|
FILETIME ft, ft2;
|
|
DWORD dwFlags = FDTF_DEFAULT;
|
|
|
|
VariantTimeToFileTime(vars[spLastSync].date, ft);
|
|
LocalFileTimeToFileTime(&ft, &ft2);
|
|
SHFormatDateTime(&ft2, &dwFlags, szLastSync, ARRAYSIZE(szLastSync));
|
|
}
|
|
|
|
if (VT_I4 == vars[spDownloadSize].vt)
|
|
{
|
|
StrFormatByteSize(vars[spDownloadSize].lVal * 1024,
|
|
szDownloadSize, ARRAYSIZE(szDownloadSize));
|
|
}
|
|
|
|
if (VT_BSTR == vars[spDownloadResult].vt)
|
|
{
|
|
#ifdef UNICODE
|
|
wnsprintf(szDownloadResult, ARRAYSIZE(szDownloadResult),
|
|
TEXT("%s"), vars[spDownloadResult].bstrVal);
|
|
#else
|
|
wnsprintf(szDownloadResult, ARRAYSIZE(szDownloadResult),
|
|
TEXT("%S"), vars[spDownloadResult].bstrVal);
|
|
#endif
|
|
}
|
|
|
|
for (int i = 0; i < ARRAYSIZE(pProps); i++)
|
|
{
|
|
VariantClear(&vars[i]);
|
|
}
|
|
}
|
|
psi->Release();
|
|
}
|
|
|
|
SetDlgItemText(hdlg, IDC_LAST_SYNC, szLastSync);
|
|
SetDlgItemText(hdlg, IDC_DOWNLOAD_SIZE, szDownloadSize);
|
|
SetDlgItemText(hdlg, IDC_DOWNLOAD_RESULT, szDownloadResult);
|
|
}
|
|
|
|
for (int i = 0; i < ARRAYSIZE(offSumIDs); i++)
|
|
{
|
|
ShowWindow(GetDlgItem(hdlg, offSumIDs[i]), bShow ? SW_SHOW : SW_HIDE);
|
|
}
|
|
}
|
|
|
|
BOOL Summary_AddPageCallback(HPROPSHEETPAGE hpage, LPARAM lParam)
|
|
{
|
|
return PropSheet_AddPage((HWND)lParam, hpage) ? TRUE : FALSE;
|
|
}
|
|
|
|
|
|
BOOL Summary_OnCommand(HWND hdlg, WORD wNotifyCode, WORD wID, HWND hwndCtl)
|
|
{
|
|
BOOL bResult = FALSE;
|
|
BOOL bChanged = FALSE;
|
|
POOEBuf pBuf = Summary_GetBuf(hdlg);
|
|
|
|
switch (wID)
|
|
{
|
|
case IDC_MAKE_OFFLINE:
|
|
if (BN_CLICKED == wNotifyCode)
|
|
{
|
|
CSubscriptionMgr *pSubsMgr = (CSubscriptionMgr*) GetWindowLongPtr(hdlg, DWLP_USER);
|
|
|
|
BOOL bShow = IsDlgButtonChecked(hdlg, IDC_MAKE_OFFLINE);
|
|
|
|
Summary_ShowOfflineSummary(hdlg, pBuf, bShow);
|
|
|
|
if (NULL != pSubsMgr)
|
|
{
|
|
if (bShow)
|
|
{
|
|
pSubsMgr->AddPages(Summary_AddPageCallback, (LPARAM)GetParent(hdlg));
|
|
}
|
|
else
|
|
{
|
|
pSubsMgr->RemovePages(GetParent(hdlg));
|
|
}
|
|
}
|
|
bChanged = TRUE;
|
|
}
|
|
bResult = TRUE;
|
|
break;
|
|
}
|
|
|
|
if (bChanged)
|
|
{
|
|
PropSheet_Changed(GetParent(hdlg), hdlg);
|
|
}
|
|
|
|
return bResult;
|
|
}
|
|
|
|
BOOL Summary_OnNotify(HWND hdlg, int idCtrl, LPNMHDR pnmh)
|
|
{
|
|
BOOL bResult = TRUE;
|
|
|
|
switch (pnmh->code)
|
|
{
|
|
case PSN_APPLY:
|
|
{
|
|
CSubscriptionMgr *pSubsMgr = (CSubscriptionMgr*) GetWindowLongPtr(hdlg, DWLP_USER);
|
|
POOEBuf pBuf = Summary_GetBuf(hdlg);
|
|
|
|
ASSERT(NULL != pSubsMgr);
|
|
ASSERT(NULL != pBuf);
|
|
|
|
if ((NULL != pSubsMgr) && (NULL != pBuf))
|
|
{
|
|
if (IsDlgButtonChecked(hdlg, IDC_MAKE_OFFLINE))
|
|
{
|
|
pBuf->dwFlags = PROP_WEBCRAWL_ALL;
|
|
SaveBufferChange(pBuf, TRUE);
|
|
}
|
|
else
|
|
{
|
|
WCHAR wszURL[INTERNET_MAX_URL_LENGTH];
|
|
|
|
MyStrToOleStrN(wszURL, ARRAYSIZE(wszURL), pBuf->m_URL);
|
|
pSubsMgr->DeleteSubscription(wszURL, NULL);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
default:
|
|
bResult = FALSE;
|
|
break;
|
|
}
|
|
return bResult;
|
|
}
|
|
|
|
BOOL Summary_OnInitDialog(HWND hdlg, HWND hwndFocus, LPARAM lParam)
|
|
{
|
|
ASSERT(NULL != ((LPPROPSHEETPAGE)lParam));
|
|
ASSERT(NULL != ((LPPROPSHEETPAGE)lParam)->lParam);
|
|
|
|
SetWindowLongPtr(hdlg, DWLP_USER, ((LPPROPSHEETPAGE)lParam)->lParam);
|
|
|
|
// Now read in values and populate the dialog
|
|
POOEBuf pBuf = Summary_GetBuf(hdlg);
|
|
ISubscriptionItem *psi;
|
|
HICON hicon;
|
|
BOOL bSubscribed;
|
|
|
|
HRESULT hr = SubscriptionItemFromCookie(FALSE, &pBuf->m_Cookie, &psi);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
bSubscribed = TRUE;
|
|
hicon = LoadItemIcon(psi, TRUE);
|
|
psi->Release();
|
|
}
|
|
else
|
|
{
|
|
bSubscribed = FALSE;
|
|
hicon = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_WEBDOC));
|
|
}
|
|
|
|
SendDlgItemMessage(hdlg, IDC_ICONEX2, STM_SETICON, (WPARAM)hicon, 0);
|
|
|
|
if ((!IsHTTPPrefixed(pBuf->m_URL)) ||
|
|
(bSubscribed && SHRestricted2(REST_NoRemovingSubscriptions, pBuf->m_URL, 0)) ||
|
|
(!bSubscribed && SHRestricted2(REST_NoAddingSubscriptions, pBuf->m_URL, 0)))
|
|
{
|
|
EnableWindow(GetDlgItem(hdlg, IDC_MAKE_OFFLINE), FALSE);
|
|
}
|
|
|
|
SetDlgItemText(hdlg, IDC_NAME, pBuf->m_Name);
|
|
SetDlgItemText(hdlg, IDC_URL, pBuf->m_URL);
|
|
|
|
CheckDlgButton(hdlg, IDC_MAKE_OFFLINE, bSubscribed);
|
|
|
|
TCHAR szVisits[256];
|
|
|
|
BYTE cei[MY_MAX_CACHE_ENTRY_INFO];
|
|
LPINTERNET_CACHE_ENTRY_INFO pcei = (LPINTERNET_CACHE_ENTRY_INFO)cei;
|
|
DWORD cbcei = sizeof(cei);
|
|
|
|
if (GetUrlCacheEntryInfo(pBuf->m_URL, pcei, &cbcei))
|
|
{
|
|
wnsprintf(szVisits, ARRAYSIZE(szVisits), TEXT("%d"),
|
|
pcei->dwHitRate);
|
|
}
|
|
else
|
|
{
|
|
MLLoadString(IDS_VALUE_UNKNOWN, szVisits,
|
|
ARRAYSIZE(szVisits));
|
|
}
|
|
SetDlgItemText(hdlg, IDC_VISITS, szVisits);
|
|
|
|
|
|
Summary_ShowOfflineSummary(hdlg, pBuf, bSubscribed);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void Summary_OnDestroy(HWND hdlg)
|
|
{
|
|
POOEBuf pBuf = Summary_GetBuf(hdlg);
|
|
|
|
if (NULL != pBuf && !(pBuf->m_dwPropSheetFlags & PSF_IS_ALREADY_SUBSCRIBED) &&
|
|
IsDlgButtonChecked(hdlg, IDC_MAKE_OFFLINE))
|
|
{
|
|
SendUpdateRequests(NULL, &pBuf->m_Cookie, 1);
|
|
}
|
|
}
|
|
|
|
INT_PTR CALLBACK SummaryPropDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
BOOL bHandled = FALSE;
|
|
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
bHandled = Summary_OnInitDialog(hdlg, (HWND)wParam, lParam);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
bHandled = Summary_OnCommand(hdlg, HIWORD(wParam), LOWORD(wParam), (HWND)lParam);
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
Summary_OnDestroy(hdlg);
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
bHandled = Summary_OnNotify(hdlg, (int)wParam, (LPNMHDR)lParam);
|
|
break;
|
|
|
|
case WM_HELP:
|
|
SHWinHelpOnDemandWrap((HWND)((LPHELPINFO) lParam)->hItemHandle, c_szHelpFile,
|
|
HELP_WM_HELP, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
SHWinHelpOnDemandWrap((HWND)wParam, c_szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
|
|
/********************************************************************************
|
|
Schedule property sheet code
|
|
*********************************************************************************/
|
|
|
|
void Sched_EnableScheduleButtons(HWND hdlg)
|
|
{
|
|
POOEBuf pBuf = GetBuf(hdlg);
|
|
ASSERT(pBuf);
|
|
|
|
BOOL bEditAllowed = !(pBuf->m_dwPropSheetFlags &
|
|
(PSF_NO_EDITING_SCHEDULES | PSF_NO_SCHEDULED_UPDATES));
|
|
BOOL bEnable = (bEditAllowed) &&
|
|
ListView_GetSelectedCount(GetDlgItem(hdlg, IDC_SCHEDULE_LIST));
|
|
|
|
EnableWindow(GetDlgItem(hdlg, IDC_SCHEDULE_NEW), bEditAllowed);
|
|
EnableWindow(GetDlgItem(hdlg, IDC_SCHEDULE_EDIT), bEnable);
|
|
|
|
// TODO: Don't enable remove for publisher's schedule
|
|
EnableWindow(GetDlgItem(hdlg, IDC_SCHEDULE_REMOVE), bEnable);
|
|
}
|
|
|
|
struct SCHED_ENUM_DATA
|
|
{
|
|
HWND hwndSchedList;
|
|
POOEBuf pBuf;
|
|
SYNCSCHEDULECOOKIE customSchedule;
|
|
BOOL bHasAtLeastOneSchedule;
|
|
};
|
|
|
|
struct SCHED_LIST_DATA
|
|
{
|
|
SYNCSCHEDULECOOKIE SchedCookie;
|
|
BOOL bChecked;
|
|
BOOL bStartChecked;
|
|
};
|
|
|
|
inline int SchedList_GetIndex(HWND hwndSchedList, int index)
|
|
{
|
|
return (index != -1) ? index :
|
|
ListView_GetNextItem(hwndSchedList, -1, LVNI_ALL | LVNI_SELECTED);
|
|
}
|
|
|
|
void SchedList_GetName(HWND hwndSchedList, int index, TCHAR *pszSchedName, int cchSchedName)
|
|
{
|
|
LV_ITEM lvi = {0};
|
|
|
|
lvi.iItem = SchedList_GetIndex(hwndSchedList, index);
|
|
|
|
if (lvi.iItem != -1)
|
|
{
|
|
lvi.mask = LVIF_TEXT;
|
|
lvi.pszText = pszSchedName;
|
|
lvi.cchTextMax = cchSchedName;
|
|
ListView_GetItem(hwndSchedList, &lvi);
|
|
}
|
|
}
|
|
|
|
void SchedList_SetName(HWND hwndSchedList, int index, LPTSTR pszSchedName)
|
|
{
|
|
LV_ITEM lvi = {0};
|
|
|
|
lvi.iItem = SchedList_GetIndex(hwndSchedList, index);
|
|
|
|
if (lvi.iItem != -1)
|
|
{
|
|
lvi.mask = LVIF_TEXT;
|
|
lvi.pszText = pszSchedName;
|
|
ListView_SetItem(hwndSchedList, &lvi);
|
|
}
|
|
}
|
|
|
|
SCHED_LIST_DATA *SchedList_GetData(HWND hwndSchedList, int index)
|
|
{
|
|
SCHED_LIST_DATA *psld = NULL;
|
|
LV_ITEM lvi = {0};
|
|
|
|
lvi.iItem = SchedList_GetIndex(hwndSchedList, index);
|
|
|
|
if (lvi.iItem != -1)
|
|
{
|
|
lvi.mask = LVIF_PARAM;
|
|
if (ListView_GetItem(hwndSchedList, &lvi))
|
|
{
|
|
psld = (SCHED_LIST_DATA *)lvi.lParam;
|
|
}
|
|
}
|
|
|
|
return psld;
|
|
}
|
|
|
|
void SchedList_UncheckAll(HWND hwndSchedList)
|
|
{
|
|
int count = ListView_GetItemCount(hwndSchedList);
|
|
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
SCHED_LIST_DATA *psld = SchedList_GetData(hwndSchedList, i);
|
|
|
|
if (NULL != psld)
|
|
{
|
|
psld->bChecked = 0;
|
|
ListView_SetItemState(hwndSchedList, i, COMP_UNCHECKED, LVIS_STATEIMAGEMASK);
|
|
}
|
|
}
|
|
}
|
|
|
|
void SchedList_Select(HWND hwndSchedList, int index)
|
|
{
|
|
int curIndex = ListView_GetNextItem(hwndSchedList, -1, LVNI_ALL | LVNI_SELECTED);
|
|
|
|
if (curIndex != index)
|
|
{
|
|
ListView_SetItemState(hwndSchedList, curIndex, 0, LVIS_SELECTED | LVIS_FOCUSED);
|
|
ListView_SetItemState(hwndSchedList, index, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
|
|
}
|
|
}
|
|
|
|
void SchedList_DeleteData(HWND hwndSchedList, int index, BOOL bDeleteItem)
|
|
{
|
|
LV_ITEM lvi = {0};
|
|
|
|
lvi.iItem = SchedList_GetIndex(hwndSchedList, index);
|
|
|
|
if (lvi.iItem != -1)
|
|
{
|
|
|
|
SCHED_LIST_DATA *psld = SchedList_GetData(hwndSchedList, lvi.iItem);
|
|
|
|
lvi.mask = LVIF_PARAM;
|
|
lvi.lParam = NULL;
|
|
|
|
if ((NULL != psld) && ListView_SetItem(hwndSchedList, &lvi))
|
|
{
|
|
delete psld;
|
|
}
|
|
|
|
if (bDeleteItem)
|
|
{
|
|
ListView_DeleteItem(hwndSchedList, lvi.iItem);
|
|
}
|
|
}
|
|
}
|
|
|
|
void SchedList_DeleteAllData(HWND hwndSchedList)
|
|
{
|
|
int count = ListView_GetItemCount(hwndSchedList);
|
|
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
SchedList_DeleteData(hwndSchedList, i, FALSE);
|
|
}
|
|
}
|
|
|
|
BOOL Sched_EnumCallback(ISyncSchedule *pSyncSchedule,
|
|
SYNCSCHEDULECOOKIE *pSchedCookie,
|
|
LPARAM lParam)
|
|
{
|
|
BOOL bAdded = FALSE;
|
|
SCHED_ENUM_DATA *psed = (SCHED_ENUM_DATA *)lParam;
|
|
DWORD dwSyncScheduleFlags;
|
|
SCHED_LIST_DATA *psld = NULL;
|
|
|
|
if (SUCCEEDED(pSyncSchedule->GetFlags(&dwSyncScheduleFlags)))
|
|
{
|
|
// This checks to make sure we only add a publisher's schedule to the
|
|
// list if it belongs to this item.
|
|
if ((!(dwSyncScheduleFlags & SYNCSCHEDINFO_FLAGS_READONLY)) ||
|
|
(*pSchedCookie == psed->customSchedule))
|
|
{
|
|
psld = new SCHED_LIST_DATA;
|
|
|
|
if (NULL != psld)
|
|
{
|
|
WCHAR wszName[MAX_PATH];
|
|
DWORD cchName = ARRAYSIZE(wszName);
|
|
|
|
if (SUCCEEDED(pSyncSchedule->GetScheduleName(&cchName, wszName)))
|
|
{
|
|
TCHAR szName[MAX_PATH];
|
|
|
|
MyOleStrToStrN(szName, ARRAYSIZE(szName), wszName);
|
|
|
|
psld->SchedCookie = *pSchedCookie;
|
|
psld->bStartChecked = IsCookieOnSchedule(pSyncSchedule, &psed->pBuf->m_Cookie);
|
|
psld->bChecked = psld->bStartChecked;
|
|
|
|
if (psld->bStartChecked)
|
|
{
|
|
psed->bHasAtLeastOneSchedule = TRUE;
|
|
}
|
|
|
|
LV_ITEM lvItem = { 0 };
|
|
|
|
lvItem.mask = LVIF_TEXT | LVIF_PARAM;
|
|
lvItem.iItem = (*pSchedCookie == psed->customSchedule) ? 0 : 0x7FFFFFFF;
|
|
lvItem.lParam = (LPARAM)psld;
|
|
lvItem.pszText = szName;
|
|
|
|
int index = ListView_InsertItem(psed->hwndSchedList, &lvItem);
|
|
|
|
if (index != -1)
|
|
{
|
|
|
|
ListView_SetItemState(psed->hwndSchedList, index,
|
|
psld->bStartChecked ? COMP_CHECKED : COMP_UNCHECKED,
|
|
LVIS_STATEIMAGEMASK);
|
|
ListView_SetColumnWidth(psed->hwndSchedList, 0, LVSCW_AUTOSIZE);
|
|
bAdded = TRUE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!bAdded)
|
|
{
|
|
SAFEDELETE(psld);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL Sched_FillScheduleList(HWND hdlg, POOEBuf pBuf)
|
|
{
|
|
SCHED_ENUM_DATA sed;
|
|
|
|
sed.hwndSchedList = GetDlgItem(hdlg, IDC_SCHEDULE_LIST);
|
|
sed.pBuf = pBuf;
|
|
|
|
sed.customSchedule = GUID_NULL;
|
|
|
|
ISubscriptionItem *psi;
|
|
if (SUCCEEDED(SubscriptionItemFromCookie(FALSE, &pBuf->m_Cookie, &psi)))
|
|
{
|
|
SUBSCRIPTIONITEMINFO sii;
|
|
|
|
sii.cbSize = sizeof(SUBSCRIPTIONITEMINFO);
|
|
|
|
if (SUCCEEDED(psi->GetSubscriptionItemInfo(&sii)))
|
|
{
|
|
sed.customSchedule = sii.ScheduleGroup;
|
|
}
|
|
psi->Release();
|
|
}
|
|
sed.bHasAtLeastOneSchedule = FALSE;
|
|
|
|
EnumSchedules(Sched_EnumCallback, (LPARAM)&sed);
|
|
|
|
return sed.bHasAtLeastOneSchedule;
|
|
}
|
|
|
|
BOOL Sched_NewSchedule(HWND hdlg)
|
|
{
|
|
NEWSCHED_DATA nsd;
|
|
|
|
INT_PTR nResult = DialogBoxParam(MLGetHinst(), MAKEINTRESOURCE(IDD_NEW_SCHEDULE),
|
|
hdlg, NewScheduleDlgProc, (LPARAM)&nsd);
|
|
|
|
if (IDOK == nResult)
|
|
{
|
|
SCHED_LIST_DATA *psld;
|
|
LV_FINDINFO lvfi = { 0 };
|
|
HWND hwndSchedList = GetDlgItem(hdlg, IDC_SCHEDULE_LIST);
|
|
|
|
lvfi.flags = LVFI_STRING;
|
|
lvfi.psz = nsd.szSchedName;
|
|
|
|
int index = ListView_FindItem(hwndSchedList, -1, &lvfi);
|
|
|
|
if (index == -1)
|
|
{
|
|
|
|
psld = new SCHED_LIST_DATA;
|
|
|
|
if (NULL != psld)
|
|
{
|
|
psld->SchedCookie = nsd.SchedCookie;
|
|
psld->bChecked = TRUE;
|
|
psld->bStartChecked = FALSE;
|
|
|
|
LV_ITEM lvItem = { 0 };
|
|
|
|
lvItem.mask = LVIF_TEXT | LVIF_PARAM;
|
|
lvItem.iItem = 0;
|
|
lvItem.lParam = (LPARAM)psld;
|
|
lvItem.pszText = nsd.szSchedName;
|
|
|
|
index = ListView_InsertItem(hwndSchedList, &lvItem);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
psld = SchedList_GetData(hwndSchedList, index);
|
|
if (NULL != psld)
|
|
{
|
|
psld->bChecked = TRUE;
|
|
}
|
|
}
|
|
|
|
if (index != -1)
|
|
{
|
|
ListView_SetItemState(hwndSchedList, index, COMP_CHECKED, LVIS_STATEIMAGEMASK);
|
|
ListView_SetColumnWidth(hwndSchedList, 0, LVSCW_AUTOSIZE);
|
|
CheckRadioButton(hdlg, IDC_MANUAL_SYNC, IDC_SCHEDULED_SYNC,
|
|
IDC_SCHEDULED_SYNC);
|
|
SchedList_Select(hwndSchedList, index);
|
|
Sched_EnableScheduleButtons(hdlg);
|
|
}
|
|
|
|
}
|
|
|
|
SendMessage(hdlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hdlg, IDC_SCHEDULE_LIST), TRUE);
|
|
|
|
return nResult == IDOK;
|
|
}
|
|
|
|
BOOL Sched_EditSchedule(HWND hdlg, POOEBuf pBuf)
|
|
{
|
|
HRESULT hr;
|
|
ISyncScheduleMgr *pSyncScheduleMgr;
|
|
|
|
ASSERT(NULL != pBuf);
|
|
|
|
hr = CoInitialize(NULL);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
|
|
hr = CoCreateInstance(CLSID_SyncMgr, NULL, CLSCTX_ALL,
|
|
IID_ISyncScheduleMgr, (void **)&pSyncScheduleMgr);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
HWND hwndSchedList = GetDlgItem(hdlg, IDC_SCHEDULE_LIST);
|
|
int index = ListView_GetNextItem(hwndSchedList, -1, LVNI_ALL | LVNI_SELECTED);
|
|
SCHED_LIST_DATA *psld = SchedList_GetData(hwndSchedList, index);
|
|
|
|
if (NULL != psld)
|
|
{
|
|
ISyncSchedule *pSyncSchedule;
|
|
|
|
hr = pSyncScheduleMgr->OpenSchedule(&psld->SchedCookie, 0, &pSyncSchedule);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
if (psld->bChecked)
|
|
{
|
|
hr = pSyncSchedule->SetItemCheck(CLSID_WebCheckOfflineSync,
|
|
&pBuf->m_Cookie,
|
|
SYNCMGRITEMSTATE_CHECKED);
|
|
}
|
|
|
|
hr = pSyncSchedule->EditSyncSchedule(hdlg, 0);
|
|
|
|
if (S_OK == hr)
|
|
{
|
|
psld->bChecked = IsCookieOnSchedule(pSyncSchedule, &pBuf->m_Cookie);
|
|
|
|
if (psld->bChecked)
|
|
{
|
|
CheckRadioButton(hdlg, IDC_MANUAL_SYNC, IDC_SCHEDULED_SYNC,
|
|
IDC_SCHEDULED_SYNC);
|
|
}
|
|
|
|
ListView_SetItemState(hwndSchedList, index,
|
|
psld->bChecked ? COMP_CHECKED : COMP_UNCHECKED,
|
|
LVIS_STATEIMAGEMASK);
|
|
}
|
|
|
|
WCHAR wszScheduleName[MAX_PATH];
|
|
DWORD cchScheduleName = ARRAYSIZE(wszScheduleName);
|
|
|
|
if (SUCCEEDED(pSyncSchedule->GetScheduleName(&cchScheduleName, wszScheduleName)))
|
|
{
|
|
|
|
#ifdef UNICODE
|
|
SchedList_SetName(hwndSchedList, index, wszScheduleName);
|
|
#else
|
|
char szScheduleName[MAX_PATH];
|
|
|
|
SHUnicodeToAnsi(wszScheduleName, szScheduleName, ARRAYSIZE(szScheduleName));
|
|
SchedList_SetName(hwndSchedList, index, wszScheduleName);
|
|
#endif
|
|
|
|
ListView_SetColumnWidth(hwndSchedList, 0, LVSCW_AUTOSIZE);
|
|
}
|
|
|
|
|
|
SendMessage(hdlg, WM_NEXTDLGCTL, (WPARAM)hwndSchedList, TRUE);
|
|
|
|
pSyncSchedule->Release();
|
|
}
|
|
pSyncScheduleMgr->Release();
|
|
}
|
|
}
|
|
CoUninitialize();
|
|
}
|
|
|
|
// This is not undoable by hitting cancel so don't say we changed.
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL Sched_RemoveSchedule(HWND hdlg)
|
|
{
|
|
HWND hwndSchedList = GetDlgItem(hdlg, IDC_SCHEDULE_LIST);
|
|
int index = ListView_GetNextItem(hwndSchedList, -1, LVNI_ALL | LVNI_SELECTED);
|
|
|
|
if (index >= 0)
|
|
{
|
|
SCHED_LIST_DATA *psld = SchedList_GetData(GetDlgItem(hdlg, IDC_SCHEDULE_LIST), index);
|
|
|
|
if (NULL != psld)
|
|
{
|
|
TCHAR szSchedName[MAX_PATH];
|
|
|
|
SchedList_GetName(hwndSchedList, index, szSchedName, ARRAYSIZE(szSchedName));
|
|
|
|
if (WCMessageBox(hdlg, IDS_CONFIRM_SCHEDULE_DELETE,
|
|
IDS_SCHEDULE_DELETE_CAPTION, MB_YESNO | MB_ICONQUESTION,
|
|
szSchedName) == IDYES)
|
|
{
|
|
HRESULT hr = CoInitialize(NULL);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
ISyncScheduleMgr *pSyncScheduleMgr;
|
|
hr = CoCreateInstance(CLSID_SyncMgr, NULL, CLSCTX_ALL,
|
|
IID_ISyncScheduleMgr, (void **)&pSyncScheduleMgr);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = pSyncScheduleMgr->RemoveSchedule(&psld->SchedCookie);
|
|
|
|
ASSERT(SUCCEEDED(hr));
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
SchedList_DeleteData(hwndSchedList, -1, TRUE);
|
|
SchedList_Select(hwndSchedList, 0);
|
|
}
|
|
|
|
pSyncScheduleMgr->Release();
|
|
}
|
|
CoUninitialize();
|
|
}
|
|
}
|
|
|
|
SendMessage(hdlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hdlg, IDC_SCHEDULE_LIST), TRUE);
|
|
}
|
|
}
|
|
// This is not undoable by hitting cancel so don't say we changed.
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL Sched_OnCommand(HWND hdlg, WORD wNotifyCode, WORD wID, HWND hwndCtl)
|
|
{
|
|
BOOL bHandled = TRUE;
|
|
BOOL bChanged = FALSE;
|
|
POOEBuf pBuf = GetBuf(hdlg);
|
|
|
|
if (NULL != pBuf)
|
|
{
|
|
|
|
switch (wID)
|
|
{
|
|
case IDC_MANUAL_SYNC:
|
|
case IDC_SCHEDULED_SYNC:
|
|
// case IDC_IDLE_ONLY:
|
|
if (wNotifyCode == BN_CLICKED)
|
|
{
|
|
bChanged = TRUE;
|
|
}
|
|
break;
|
|
|
|
case IDC_SCHEDULE_NEW:
|
|
if (wNotifyCode == BN_CLICKED)
|
|
{
|
|
bChanged = Sched_NewSchedule(hdlg);
|
|
}
|
|
break;
|
|
|
|
case IDC_SCHEDULE_EDIT:
|
|
if (wNotifyCode == BN_CLICKED)
|
|
{
|
|
bChanged = Sched_EditSchedule(hdlg, pBuf);
|
|
}
|
|
break;
|
|
|
|
case IDC_SCHEDULE_REMOVE:
|
|
if (wNotifyCode == BN_CLICKED)
|
|
{
|
|
bChanged = Sched_RemoveSchedule(hdlg);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
bHandled = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (bChanged)
|
|
{
|
|
PropSheet_Changed(GetParent(hdlg), hdlg);
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
BOOL Sched_Validate(HWND hdlg, POOEBuf pBuf)
|
|
{
|
|
/*
|
|
if (IsDlgButtonChecked(hdlg, IDC_IDLE_ONLY))
|
|
{
|
|
pBuf->grfTaskTrigger |= TASK_FLAG_START_ONLY_IF_IDLE;
|
|
}
|
|
else
|
|
{
|
|
pBuf->grfTaskTrigger &= ~TASK_FLAG_START_ONLY_IF_IDLE;
|
|
}
|
|
*/
|
|
|
|
if (IsDlgButtonChecked(hdlg, IDC_SCHEDULED_SYNC))
|
|
{
|
|
HWND hwndSchedList = GetDlgItem(hdlg, IDC_SCHEDULE_LIST);
|
|
int count = ListView_GetItemCount(hwndSchedList);
|
|
|
|
BOOL bHaveASchedule = FALSE;
|
|
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
SCHED_LIST_DATA *psld = SchedList_GetData(hwndSchedList, i);
|
|
|
|
if (NULL != psld && psld->bChecked)
|
|
{
|
|
bHaveASchedule = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!bHaveASchedule)
|
|
{
|
|
CheckRadioButton(hdlg, IDC_MANUAL_SYNC, IDC_SCHEDULED_SYNC,
|
|
IDC_MANUAL_SYNC);
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL Sched_ApplyProps(HWND hdlg, POOEBuf pBuf)
|
|
{
|
|
BOOL bResult;
|
|
HRESULT hr;
|
|
|
|
pBuf->dwFlags = PROP_WEBCRAWL_ALL;
|
|
|
|
bResult = SUCCEEDED(SaveBufferChange(pBuf, TRUE));
|
|
|
|
if (bResult)
|
|
{
|
|
|
|
if (IsDlgButtonChecked(hdlg, IDC_MANUAL_SYNC))
|
|
{
|
|
SchedList_UncheckAll(GetDlgItem(hdlg, IDC_SCHEDULE_LIST));
|
|
hr = RemoveItemFromAllSchedules(&pBuf->m_Cookie);
|
|
|
|
ASSERT(SUCCEEDED(hr));
|
|
}
|
|
else
|
|
{
|
|
HWND hwndSchedList = GetDlgItem(hdlg, IDC_SCHEDULE_LIST);
|
|
int count = ListView_GetItemCount(hwndSchedList);
|
|
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
SCHED_LIST_DATA *psld = SchedList_GetData(hwndSchedList, i);
|
|
|
|
ASSERT(NULL != psld);
|
|
|
|
if (NULL != psld)
|
|
{
|
|
if (psld->bChecked != psld->bStartChecked)
|
|
{
|
|
if (psld->bChecked)
|
|
{
|
|
ISubscriptionItem *psi;
|
|
|
|
if (SUCCEEDED(SubscriptionItemFromCookie(FALSE,
|
|
&pBuf->m_Cookie,
|
|
&psi)))
|
|
{
|
|
SYNC_HANDLER_ITEM_INFO shii;
|
|
|
|
shii.handlerID = CLSID_WebCheckOfflineSync;
|
|
shii.itemID = pBuf->m_Cookie;
|
|
shii.hIcon = NULL;
|
|
MyStrToOleStrN(shii.wszItemName,
|
|
ARRAYSIZE(shii.wszItemName),
|
|
pBuf->m_Name);
|
|
shii.dwCheckState = SYNCMGRITEMSTATE_CHECKED;
|
|
|
|
AddScheduledItem(&shii, &psld->SchedCookie);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
RemoveScheduledItem(&pBuf->m_Cookie, &psld->SchedCookie);
|
|
}
|
|
psld->bStartChecked = psld->bChecked;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return bResult;
|
|
}
|
|
|
|
BOOL Sched_OnNotify(HWND hdlg, int idCtrl, LPNMHDR pnmh)
|
|
{
|
|
BOOL bHandled = TRUE;
|
|
POOEBuf pBuf = GetBuf(hdlg);
|
|
ASSERT(pBuf);
|
|
|
|
switch (pnmh->code)
|
|
{
|
|
case PSN_KILLACTIVE:
|
|
if (!Sched_Validate(hdlg, pBuf))
|
|
{
|
|
SetWindowLongPtr(hdlg, DWLP_MSGRESULT, TRUE);
|
|
}
|
|
break;
|
|
|
|
case PSN_APPLY:
|
|
Sched_ApplyProps(hdlg, pBuf);
|
|
break;
|
|
|
|
case NM_DBLCLK:
|
|
if (IDC_SCHEDULE_LIST == pnmh->idFrom)
|
|
{
|
|
Sched_EditSchedule(hdlg, pBuf);
|
|
}
|
|
break;
|
|
|
|
case LVN_ITEMCHANGED:
|
|
{
|
|
NM_LISTVIEW *pnmlv = (NM_LISTVIEW *)pnmh;
|
|
if ((pnmlv->iItem != -1) &&
|
|
(pnmlv->uChanged & LVIF_STATE) &&
|
|
((pnmlv->uNewState ^ pnmlv->uOldState) & COMP_CHECKED))
|
|
|
|
{
|
|
SCHED_LIST_DATA *psld = SchedList_GetData(pnmh->hwndFrom, pnmlv->iItem);
|
|
|
|
if (NULL != psld)
|
|
{
|
|
psld->bChecked = (pnmlv->uNewState & COMP_CHECKED) ? TRUE : FALSE;
|
|
|
|
if (psld->bChecked)
|
|
{
|
|
CheckRadioButton(hdlg, IDC_MANUAL_SYNC, IDC_SCHEDULED_SYNC,
|
|
IDC_SCHEDULED_SYNC);
|
|
}
|
|
PropSheet_Changed(GetParent(hdlg), hdlg);
|
|
}
|
|
}
|
|
|
|
if ((pnmlv->uChanged & LVIF_STATE) &&
|
|
((pnmlv->uNewState ^ pnmlv->uOldState) & LVIS_SELECTED))
|
|
{
|
|
Sched_EnableScheduleButtons(hdlg);
|
|
}
|
|
break;
|
|
}
|
|
|
|
default:
|
|
bHandled = FALSE;
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
void Sched_OnDestroy(HWND hdlg)
|
|
{
|
|
HWND hwndSchedList = GetDlgItem(hdlg, IDC_SCHEDULE_LIST);
|
|
|
|
SchedList_DeleteAllData(hwndSchedList);
|
|
}
|
|
|
|
BOOL Sched_OnInitDialog(HWND hdlg, HWND hwndFocus, LPARAM lParam)
|
|
{
|
|
ASSERT(NULL != ((LPPROPSHEETPAGE)lParam));
|
|
ASSERT(NULL != ((LPPROPSHEETPAGE)lParam)->lParam);
|
|
|
|
SetWindowLongPtr(hdlg, DWLP_USER, ((LPPROPSHEETPAGE)lParam)->lParam);
|
|
|
|
// Now read in values and populate the dialog
|
|
POOEBuf pBuf = (POOEBuf)((LPPROPSHEETPAGE)lParam)->lParam;
|
|
|
|
/* CheckDlgButton(hdlg, IDC_IDLE_ONLY,
|
|
pBuf->grfTaskTrigger & TASK_FLAG_START_ONLY_IF_IDLE ?
|
|
1 : 0);
|
|
*/
|
|
|
|
HWND hwndSchedList = GetDlgItem(hdlg, IDC_SCHEDULE_LIST);
|
|
ListView_SetExtendedListViewStyle(hwndSchedList, LVS_EX_CHECKBOXES);
|
|
|
|
LV_COLUMN lvc;
|
|
lvc.mask = LVCF_FMT | LVCF_SUBITEM;
|
|
lvc.fmt = LVCFMT_LEFT;
|
|
lvc.iSubItem = 0;
|
|
ListView_InsertColumn(hwndSchedList, 0, &lvc);
|
|
|
|
// Now handle restrictions
|
|
SetPropSheetFlags(pBuf, SHRestricted2W(REST_NoScheduledUpdates, NULL, 0), PSF_NO_SCHEDULED_UPDATES);
|
|
SetPropSheetFlags(pBuf, SHRestricted2W(REST_NoEditingScheduleGroups, NULL, 0), PSF_NO_EDITING_SCHEDULES);
|
|
|
|
BOOL bHasSchedules = Sched_FillScheduleList(hdlg, pBuf);
|
|
|
|
if (pBuf->m_dwPropSheetFlags & PSF_NO_SCHEDULED_UPDATES)
|
|
{
|
|
EnableWindow(GetDlgItem(hdlg, IDC_SCHEDULE_LIST), FALSE);
|
|
EnableWindow(GetDlgItem(hdlg, IDC_SCHEDULED_SYNC), FALSE);
|
|
CheckRadioButton(hdlg, IDC_MANUAL_SYNC, IDC_SCHEDULED_SYNC, IDC_MANUAL_SYNC);
|
|
}
|
|
else
|
|
{
|
|
CheckRadioButton(hdlg, IDC_MANUAL_SYNC, IDC_SCHEDULED_SYNC,
|
|
bHasSchedules ? IDC_SCHEDULED_SYNC : IDC_MANUAL_SYNC);
|
|
}
|
|
|
|
SchedList_Select(hwndSchedList, 0);
|
|
|
|
// Finally, do the enable/disable controls thing...
|
|
Sched_EnableScheduleButtons(hdlg);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
INT_PTR CALLBACK SchedulePropDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
BOOL bHandled = FALSE;
|
|
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
bHandled = Sched_OnInitDialog(hdlg, (HWND)wParam, lParam);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
bHandled = Sched_OnCommand(hdlg, HIWORD(wParam), LOWORD(wParam), (HWND)lParam);
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
bHandled = Sched_OnNotify(hdlg, (int)wParam, (LPNMHDR)lParam);
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
Sched_OnDestroy(hdlg);
|
|
// return 0
|
|
break;
|
|
|
|
case WM_HELP:
|
|
SHWinHelpOnDemandWrap((HWND)((LPHELPINFO) lParam)->hItemHandle, c_szHelpFile,
|
|
HELP_WM_HELP, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
SHWinHelpOnDemandWrap((HWND)wParam, c_szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
/********************************************************************************
|
|
Download property sheet code
|
|
*********************************************************************************/
|
|
|
|
void Download_EnableFollowLinks(HWND hdlg)
|
|
{
|
|
BOOL bTranslate;
|
|
int i = GetDlgItemInt(hdlg, IDC_LEVELS, &bTranslate, FALSE);
|
|
|
|
EnableWindow(GetDlgItem(hdlg, IDC_FOLLOW_LINKS), (bTranslate && i));
|
|
}
|
|
|
|
void Download_EnableLimitSpaceControls(HWND hdlg)
|
|
{
|
|
static const int IDs[] = { IDC_LIMIT_SPACE_EDIT, IDC_LIMIT_SPACE_SPIN, IDC_LIMIT_SPACE_TEXT };
|
|
EnableControls(hdlg, IDs, ARRAYSIZE(IDs), IsDlgButtonChecked(hdlg, IDC_LIMIT_SPACE_CHECK));
|
|
}
|
|
|
|
void Download_EnableEmailControls(HWND hdlg)
|
|
{
|
|
static const int IDs[] = { IDC_EMAIL_ADDRESS_TEXT, IDC_EMAIL_ADDRESS,
|
|
IDC_EMAIL_SERVER_TEXT, IDC_EMAIL_SERVER };
|
|
EnableControls(hdlg, IDs, ARRAYSIZE(IDs), IsDlgButtonChecked(hdlg, IDC_EMAIL_NOTIFY));
|
|
}
|
|
|
|
BOOL Download_OnInitDialog(HWND hdlg, HWND hwndFocus, LPARAM lParam)
|
|
{
|
|
POOEBuf pBuf;
|
|
|
|
ASSERT(NULL != ((LPPROPSHEETPAGE)lParam));
|
|
ASSERT(NULL != ((LPPROPSHEETPAGE)lParam)->lParam);
|
|
|
|
SetWindowLongPtr(hdlg, DWLP_USER, ((LPPROPSHEETPAGE)lParam)->lParam);
|
|
|
|
// First do basic control setup
|
|
HWND hwndLimitSpin = GetDlgItem(hdlg, IDC_LIMIT_SPACE_SPIN);
|
|
SendMessage(hwndLimitSpin, UDM_SETRANGE, 0,
|
|
MAKELONG(MAX_DOWNLOAD_K, MIN_DOWNLOAD_K));
|
|
|
|
UDACCEL ua[] = { {0, 1}, {1, 10}, {2, 100}, {3, 1000} };
|
|
SendMessage(hwndLimitSpin, UDM_SETACCEL, ARRAYSIZE(ua), (LPARAM)ua);
|
|
|
|
Edit_LimitText(GetDlgItem(hdlg, IDC_LIMIT_SPACE_EDIT), 5);
|
|
|
|
// Now read in values and populate the dialog
|
|
pBuf = (POOEBuf)((LPPROPSHEETPAGE)lParam)->lParam;
|
|
|
|
SUBSCRIPTIONTYPE subType = GetItemCategory(pBuf);
|
|
switch (subType)
|
|
{
|
|
case SUBSTYPE_CHANNEL:
|
|
case SUBSTYPE_DESKTOPCHANNEL:
|
|
CheckRadioButton(hdlg, IDC_DOWNLOAD_ALL, IDC_DOWNLOAD_MIN,
|
|
pBuf->fChannelFlags & CHANNEL_AGENT_PRECACHE_ALL ?
|
|
IDC_DOWNLOAD_ALL : IDC_DOWNLOAD_MIN);
|
|
break;
|
|
|
|
case SUBSTYPE_URL:
|
|
case SUBSTYPE_DESKTOPURL:
|
|
case SUBSTYPE_EXTERNAL:
|
|
{
|
|
HWND hwndLevelsSpin = GetDlgItem(hdlg, IDC_LEVELS_SPIN);
|
|
SendMessage(hwndLevelsSpin, UDM_SETRANGE, 0, MAKELONG(MAX_WEBCRAWL_LEVELS, 0));
|
|
SendMessage(hwndLevelsSpin, UDM_SETPOS, 0, pBuf->m_RecurseLevels);
|
|
CheckDlgButton(hdlg, IDC_FOLLOW_LINKS,
|
|
(pBuf->m_RecurseFlags & WEBCRAWL_LINKS_ELSEWHERE) || (0 == pBuf->m_RecurseLevels)
|
|
? 1 : 0);
|
|
Download_EnableFollowLinks(hdlg);
|
|
break;
|
|
}
|
|
}
|
|
|
|
SendMessage(hwndLimitSpin, UDM_SETPOS, 0, pBuf->m_SizeLimit ? pBuf->m_SizeLimit : DEF_DOWNLOAD_K);
|
|
CheckDlgButton(hdlg, IDC_LIMIT_SPACE_CHECK, pBuf->m_SizeLimit ? 1 : 0);
|
|
|
|
CheckDlgButton(hdlg, IDC_EMAIL_NOTIFY, pBuf->bMail ? 1 : 0);
|
|
|
|
TCHAR szText[MAX_PATH];
|
|
|
|
ReadDefaultEmail(szText, ARRAYSIZE(szText));
|
|
Edit_LimitText(GetDlgItem(hdlg, IDC_EMAIL_ADDRESS), MAX_PATH - 1);
|
|
SetDlgItemText(hdlg, IDC_EMAIL_ADDRESS, szText);
|
|
|
|
ReadDefaultSMTPServer(szText, ARRAYSIZE(szText));
|
|
Edit_LimitText(GetDlgItem(hdlg, IDC_EMAIL_SERVER), MAX_PATH - 1);
|
|
SetDlgItemText(hdlg, IDC_EMAIL_SERVER, szText);
|
|
|
|
// Now handle restrictions
|
|
if (SHRestricted2W(REST_NoSubscriptionPasswords, NULL, 0))
|
|
{
|
|
EnableWindow(GetDlgItem(hdlg, IDC_LOGIN), FALSE);
|
|
}
|
|
|
|
// Finally, do the enable/disable controls thing...
|
|
Download_EnableLimitSpaceControls(hdlg);
|
|
Download_EnableEmailControls(hdlg);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL Download_OnCommand(HWND hdlg, WORD wNotifyCode, WORD wID, HWND hwndCtl)
|
|
{
|
|
BOOL bHandled = TRUE;
|
|
BOOL bChanged = FALSE;
|
|
POOEBuf pBuf = GetBuf(hdlg);
|
|
|
|
if (NULL != pBuf)
|
|
{
|
|
switch (wID)
|
|
{
|
|
case IDC_LIMIT_SPACE_EDIT:
|
|
if (wNotifyCode == EN_CHANGE)
|
|
{
|
|
if (pBuf->m_SizeLimit !=
|
|
LOWORD(SendDlgItemMessage(hdlg, IDC_LIMIT_SPACE_SPIN, UDM_GETPOS, 0, 0)))
|
|
{
|
|
bChanged = TRUE;
|
|
}
|
|
}
|
|
else if (wNotifyCode == EN_KILLFOCUS)
|
|
{
|
|
KeepSpinNumberInRange(hdlg, IDC_LIMIT_SPACE_EDIT,
|
|
IDC_LIMIT_SPACE_SPIN,
|
|
MIN_DOWNLOAD_K, MAX_DOWNLOAD_K);
|
|
}
|
|
break;
|
|
|
|
case IDC_LEVELS:
|
|
if (wNotifyCode == EN_UPDATE)
|
|
{
|
|
int levels = KeepSpinNumberInRange(hdlg, IDC_LEVELS,
|
|
IDC_LEVELS_SPIN, 0, MAX_WEBCRAWL_LEVELS);
|
|
|
|
if (pBuf->m_RecurseLevels != levels)
|
|
{
|
|
bChanged = TRUE;
|
|
}
|
|
Download_EnableFollowLinks(hdlg);
|
|
}
|
|
break;
|
|
|
|
case IDC_LIMIT_SPACE_CHECK:
|
|
if (wNotifyCode == BN_CLICKED)
|
|
{
|
|
Download_EnableLimitSpaceControls(hdlg);
|
|
bChanged = TRUE;
|
|
}
|
|
break;
|
|
|
|
case IDC_FOLLOW_LINKS:
|
|
if (wNotifyCode == BN_CLICKED)
|
|
{
|
|
bChanged = TRUE;
|
|
}
|
|
break;
|
|
|
|
case IDC_EMAIL_NOTIFY:
|
|
if (wNotifyCode == BN_CLICKED)
|
|
{
|
|
Download_EnableEmailControls(hdlg);
|
|
bChanged = TRUE;
|
|
}
|
|
break;
|
|
|
|
case IDC_EMAIL_ADDRESS:
|
|
case IDC_EMAIL_SERVER:
|
|
if (wNotifyCode == EN_CHANGE)
|
|
{
|
|
bChanged = TRUE;
|
|
}
|
|
break;
|
|
|
|
case IDC_LOGIN:
|
|
if ((wNotifyCode == BN_CLICKED) &&
|
|
(DialogBoxParam(MLGetHinst(), MAKEINTRESOURCE(IDD_SUBSPROPS_LOGIN),
|
|
hdlg, LoginOptionDlgProc, (LPARAM)pBuf) == IDOK))
|
|
{
|
|
bChanged = TRUE;
|
|
}
|
|
break;
|
|
|
|
case IDC_ADVANCED:
|
|
if ((wNotifyCode == BN_CLICKED) &&
|
|
(DialogBoxParam(MLGetHinst(), MAKEINTRESOURCE(IDD_SUBSPROPS_ADVANCED),
|
|
hdlg, AdvancedDownloadDlgProc, (LPARAM)pBuf) == IDOK))
|
|
{
|
|
bChanged = TRUE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
bHandled = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (bChanged)
|
|
{
|
|
PropSheet_Changed(GetParent(hdlg), hdlg);
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
BOOL Download_Validate(HWND hdlg, POOEBuf pBuf)
|
|
{
|
|
pBuf->bMail = IsDlgButtonChecked(hdlg, IDC_EMAIL_NOTIFY);
|
|
|
|
if (pBuf->bMail)
|
|
{
|
|
TCHAR szEmail[MAX_PATH];
|
|
TCHAR szServer[MAX_PATH];
|
|
|
|
GetDlgItemText(hdlg, IDC_EMAIL_ADDRESS, szEmail, ARRAYSIZE(szEmail));
|
|
GetDlgItemText(hdlg, IDC_EMAIL_SERVER, szServer, ARRAYSIZE(szServer));
|
|
|
|
if (!szEmail[0] || !szServer[0])
|
|
{
|
|
SGMessageBox(hdlg, IDS_EMAIL_INCOMPLETE, MB_ICONWARNING);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
SUBSCRIPTIONTYPE subType = GetItemCategory(pBuf);
|
|
switch (subType)
|
|
{
|
|
case SUBSTYPE_CHANNEL:
|
|
case SUBSTYPE_DESKTOPCHANNEL:
|
|
pBuf->fChannelFlags &= ~(CHANNEL_AGENT_PRECACHE_SOME | CHANNEL_AGENT_PRECACHE_ALL);
|
|
if (IsDlgButtonChecked(hdlg, IDC_DOWNLOAD_ALL))
|
|
{
|
|
pBuf->fChannelFlags |= CHANNEL_AGENT_PRECACHE_ALL;
|
|
}
|
|
else
|
|
{
|
|
pBuf->fChannelFlags |= CHANNEL_AGENT_PRECACHE_SOME;
|
|
}
|
|
break;
|
|
|
|
case SUBSTYPE_URL:
|
|
case SUBSTYPE_DESKTOPURL:
|
|
case SUBSTYPE_EXTERNAL:
|
|
{
|
|
if (IsDlgButtonChecked(hdlg, IDC_FOLLOW_LINKS))
|
|
{
|
|
pBuf->m_RecurseFlags |= WEBCRAWL_LINKS_ELSEWHERE;
|
|
}
|
|
else
|
|
{
|
|
pBuf->m_RecurseFlags &= ~WEBCRAWL_LINKS_ELSEWHERE;
|
|
}
|
|
|
|
pBuf->m_RecurseLevels = LOWORD(SendDlgItemMessage(hdlg,
|
|
IDC_LEVELS_SPIN, UDM_GETPOS, 0, 0));
|
|
|
|
ASSERT((pBuf->m_RecurseLevels >= 0) &&
|
|
(pBuf->m_RecurseLevels <= MAX_WEBCRAWL_LEVELS));
|
|
}
|
|
}
|
|
|
|
pBuf->m_SizeLimit = IsDlgButtonChecked(hdlg, IDC_LIMIT_SPACE_CHECK) ?
|
|
(LONG)SendDlgItemMessage(hdlg, IDC_LIMIT_SPACE_SPIN,
|
|
UDM_GETPOS, 0, 0) :
|
|
0;
|
|
ASSERT((0 == pBuf->m_SizeLimit) ||
|
|
((pBuf->m_SizeLimit >= MIN_DOWNLOAD_K) &&
|
|
(pBuf->m_SizeLimit <= MAX_DOWNLOAD_K)));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL Download_ApplyProps(HWND hdlg, POOEBuf pBuf)
|
|
{
|
|
pBuf->dwFlags = PROP_WEBCRAWL_ALL;
|
|
|
|
if (IsDlgButtonChecked(hdlg, IDC_EMAIL_NOTIFY))
|
|
{
|
|
TCHAR szText[MAX_PATH];
|
|
|
|
GetDlgItemText(hdlg, IDC_EMAIL_ADDRESS, szText, ARRAYSIZE(szText));
|
|
WriteDefaultEmail(szText);
|
|
GetDlgItemText(hdlg, IDC_EMAIL_SERVER, szText, ARRAYSIZE(szText));
|
|
WriteDefaultSMTPServer(szText);
|
|
}
|
|
|
|
if (pBuf->bChannel)
|
|
{
|
|
pBuf->dwFlags |= PROP_WEBCRAWL_CHANNELFLAGS;
|
|
}
|
|
|
|
return SUCCEEDED(SaveBufferChange(pBuf, TRUE));
|
|
}
|
|
|
|
BOOL Download_OnNotify(HWND hdlg, int idCtrl, LPNMHDR pnmh)
|
|
{
|
|
BOOL bHandled = TRUE;
|
|
POOEBuf pBuf = GetBuf(hdlg);
|
|
ASSERT(pBuf);
|
|
|
|
switch (pnmh->code)
|
|
{
|
|
case PSN_KILLACTIVE:
|
|
if (!Download_Validate(hdlg, pBuf))
|
|
{
|
|
SetWindowLongPtr(hdlg, DWLP_MSGRESULT, TRUE);
|
|
}
|
|
break;
|
|
|
|
case PSN_APPLY:
|
|
Download_ApplyProps(hdlg, pBuf);
|
|
break;
|
|
|
|
default:
|
|
bHandled = FALSE;
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
INT_PTR CALLBACK DownloadPropDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
BOOL bHandled = FALSE;
|
|
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
bHandled = Download_OnInitDialog(hdlg, (HWND)wParam, lParam);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
bHandled = Download_OnCommand(hdlg, HIWORD(wParam), LOWORD(wParam), (HWND)lParam);
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
bHandled = Download_OnNotify(hdlg, (int)wParam, (LPNMHDR)lParam);
|
|
break;
|
|
|
|
case WM_HELP:
|
|
SHWinHelpOnDemandWrap((HWND)((LPHELPINFO) lParam)->hItemHandle, c_szHelpFile,
|
|
HELP_WM_HELP, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
SHWinHelpOnDemandWrap((HWND)wParam, c_szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
/********************************************************************************
|
|
New schedule popup code
|
|
*********************************************************************************/
|
|
|
|
BOOL NewSched_OnCommand(HWND hdlg, WORD wNotifyCode, WORD wID, HWND hwndCtl)
|
|
{
|
|
BOOL bHandled = FALSE;
|
|
|
|
switch (wID)
|
|
{
|
|
case IDC_SCHEDULE_DAYS:
|
|
if (wNotifyCode == EN_UPDATE)
|
|
{
|
|
KeepSpinNumberInRange(hdlg, IDC_SCHEDULE_DAYS,
|
|
IDC_SCHEDULE_DAYS_SPIN, 1, 99);
|
|
}
|
|
#ifdef NEWSCHED_AUTONAME
|
|
else if (wNotifyCode == EN_CHANGE)
|
|
{
|
|
NewSched_AutoNameHelper(hdlg);
|
|
}
|
|
#endif
|
|
bHandled = TRUE;
|
|
break;
|
|
|
|
case IDOK:
|
|
{
|
|
TASK_TRIGGER trig;
|
|
NEWSCHED_DATA *pnsd = (NEWSCHED_DATA*) GetWindowLongPtr(hdlg, DWLP_USER);
|
|
|
|
ASSERT(NULL != pnsd);
|
|
|
|
if (NewSched_ResolveNameConflictHelper(hdlg, &trig, &pnsd->SchedCookie))
|
|
{
|
|
NewSched_CreateScheduleHelper(hdlg, &trig, &pnsd->SchedCookie);
|
|
|
|
GetDlgItemText(hdlg, IDC_SCHEDULE_NAME,
|
|
pnsd->szSchedName, ARRAYSIZE(pnsd->szSchedName));
|
|
EndDialog(hdlg, IDOK);
|
|
}
|
|
break;
|
|
}
|
|
|
|
|
|
case IDCANCEL:
|
|
EndDialog(hdlg, IDCANCEL);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
#ifdef NEWSCHED_AUTONAME
|
|
BOOL NewSched_OnNotify(HWND hdlg, int idCtrl, LPNMHDR pnmh)
|
|
{
|
|
BOOL bHandled = TRUE;
|
|
|
|
switch (pnmh->code)
|
|
{
|
|
case DTN_DATETIMECHANGE:
|
|
NewSched_AutoNameHelper(hdlg);
|
|
break;
|
|
|
|
default:
|
|
bHandled = FALSE;
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
#endif
|
|
|
|
INT_PTR CALLBACK NewScheduleDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
BOOL bHandled = FALSE;
|
|
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
SetWindowLongPtr(hdlg, DWLP_USER, lParam);
|
|
NewSched_OnInitDialogHelper(hdlg);
|
|
bHandled = TRUE;
|
|
break;
|
|
}
|
|
|
|
case WM_COMMAND:
|
|
bHandled = NewSched_OnCommand(hdlg, HIWORD(wParam), LOWORD(wParam), (HWND)lParam);
|
|
break;
|
|
|
|
#ifdef NEWSCHED_AUTONAME
|
|
case WM_NOTIFY:
|
|
bHandled = NewSched_OnNotify(hdlg, wParam, (LPNMHDR)lParam);
|
|
break;
|
|
#endif
|
|
|
|
case WM_HELP:
|
|
SHWinHelpOnDemandWrap((HWND)((LPHELPINFO) lParam)->hItemHandle, c_szHelpFile,
|
|
HELP_WM_HELP, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
SHWinHelpOnDemandWrap((HWND)wParam, c_szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
|
|
/********************************************************************************
|
|
Advanced properties code
|
|
*********************************************************************************/
|
|
|
|
BOOL Advanced_OnInitDialog(HWND hdlg, HWND hwndFocus, LPARAM lParam)
|
|
{
|
|
POOEBuf pBuf;
|
|
|
|
ASSERT(NULL != (POOEBuf)lParam);
|
|
|
|
SetWindowLongPtr(hdlg, DWLP_USER, lParam);
|
|
|
|
pBuf = (POOEBuf)lParam;
|
|
|
|
UINT flags = pBuf->m_RecurseFlags;
|
|
CheckDlgButton(hdlg, IDC_DOWNLOAD_IMAGES, flags & WEBCRAWL_GET_IMAGES);
|
|
CheckDlgButton(hdlg, IDC_DOWNLOAD_APPLETS, flags & WEBCRAWL_GET_CONTROLS);
|
|
CheckDlgButton(hdlg, IDC_DOWNLOAD_MEDIA,
|
|
flags & (WEBCRAWL_GET_BGSOUNDS | WEBCRAWL_GET_VIDEOS));
|
|
|
|
CheckDlgButton(hdlg, IDC_DOWNLOAD_ONLY_HTML_LINKS, flags & WEBCRAWL_ONLY_LINKS_TO_HTML);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void Advanced_SetFlag(HWND hdlg, POOEBuf pBuf, int ID, LONG flags)
|
|
{
|
|
if (IsDlgButtonChecked(hdlg, ID))
|
|
{
|
|
pBuf->m_RecurseFlags |= flags;
|
|
}
|
|
else
|
|
{
|
|
pBuf->m_RecurseFlags &= ~flags;
|
|
}
|
|
}
|
|
|
|
BOOL Advanced_OnCommand(HWND hdlg, WORD wNotifyCode, WORD wID, HWND hwndCtl)
|
|
{
|
|
BOOL bHandled = TRUE;
|
|
POOEBuf pBuf = GetBuf(hdlg);
|
|
ASSERT(pBuf);
|
|
|
|
switch (wID)
|
|
{
|
|
case IDOK:
|
|
Advanced_SetFlag(hdlg, pBuf, IDC_DOWNLOAD_IMAGES, WEBCRAWL_GET_IMAGES);
|
|
Advanced_SetFlag(hdlg, pBuf, IDC_DOWNLOAD_APPLETS, WEBCRAWL_GET_CONTROLS);
|
|
Advanced_SetFlag(hdlg, pBuf, IDC_DOWNLOAD_MEDIA,
|
|
WEBCRAWL_GET_BGSOUNDS | WEBCRAWL_GET_VIDEOS);
|
|
Advanced_SetFlag(hdlg, pBuf, IDC_DOWNLOAD_ONLY_HTML_LINKS, WEBCRAWL_ONLY_LINKS_TO_HTML);
|
|
EndDialog(hdlg, IDOK);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
EndDialog(hdlg, IDCANCEL);
|
|
break;
|
|
|
|
case IDC_DOWNLOAD_IMAGES:
|
|
case IDC_DOWNLOAD_APPLETS:
|
|
case IDC_DOWNLOAD_MEDIA:
|
|
case IDC_DOWNLOAD_ONLY_HTML_LINKS:
|
|
break;
|
|
|
|
default:
|
|
bHandled = FALSE;
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
INT_PTR CALLBACK AdvancedDownloadDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
BOOL bHandled = FALSE;
|
|
|
|
switch (message)
|
|
{
|
|
|
|
case WM_INITDIALOG:
|
|
bHandled = Advanced_OnInitDialog(hdlg, (HWND)wParam, lParam);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
bHandled = Advanced_OnCommand(hdlg, HIWORD(wParam), LOWORD(wParam), (HWND)lParam);
|
|
break;
|
|
|
|
case WM_HELP:
|
|
SHWinHelpOnDemandWrap((HWND)((LPHELPINFO) lParam)->hItemHandle, c_szHelpFile,
|
|
HELP_WM_HELP, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
SHWinHelpOnDemandWrap((HWND)wParam, c_szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
/********************************************************************************
|
|
Login properties code
|
|
*********************************************************************************/
|
|
|
|
BOOL Login_OnInitDialog(HWND hdlg, HWND hwndFocus, LPARAM lParam)
|
|
{
|
|
POOEBuf pBuf;
|
|
|
|
ASSERT(NULL != (POOEBuf)lParam);
|
|
|
|
SetWindowLongPtr(hdlg, DWLP_USER, lParam);
|
|
|
|
pBuf = (POOEBuf)lParam;
|
|
|
|
Edit_LimitText(GetDlgItem(hdlg, IDC_USERNAME), ARRAYSIZE(pBuf->username) - 1);
|
|
SetDlgItemText(hdlg, IDC_USERNAME, pBuf->username);
|
|
|
|
Edit_LimitText(GetDlgItem(hdlg, IDC_PASSWORD), ARRAYSIZE(pBuf->password) - 1);
|
|
SetDlgItemText(hdlg, IDC_PASSWORD, pBuf->password);
|
|
|
|
Edit_LimitText(GetDlgItem(hdlg, IDC_PASSWORDCONFIRM), ARRAYSIZE(pBuf->password) - 1);
|
|
SetDlgItemText(hdlg, IDC_PASSWORDCONFIRM, pBuf->password);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL Login_OnCommand(HWND hdlg, WORD wNotifyCode, WORD wID, HWND hwndCtl)
|
|
{
|
|
BOOL bHandled = TRUE;
|
|
POOEBuf pBuf = GetBuf(hdlg);
|
|
ASSERT(pBuf);
|
|
|
|
switch (wID)
|
|
{
|
|
case IDOK:
|
|
{
|
|
TCHAR szUsername[ARRAYSIZE(pBuf->username) + 1];
|
|
TCHAR szPassword[ARRAYSIZE(pBuf->password) + 1];
|
|
TCHAR szPasswordConfirm[ARRAYSIZE(pBuf->password) + 1];
|
|
|
|
GetDlgItemText(hdlg, IDC_USERNAME, szUsername, ARRAYSIZE(szUsername));
|
|
GetDlgItemText(hdlg, IDC_PASSWORD, szPassword, ARRAYSIZE(szPassword));
|
|
GetDlgItemText(hdlg, IDC_PASSWORDCONFIRM, szPasswordConfirm, ARRAYSIZE(szPasswordConfirm));
|
|
|
|
if (!szUsername[0] && (szPassword[0] || szPasswordConfirm[0]))
|
|
{
|
|
SGMessageBox(hdlg,
|
|
(pBuf->bChannel ? IDS_NEEDCHANNELUSERNAME : IDS_NEEDUSERNAME),
|
|
MB_ICONWARNING);
|
|
}
|
|
else if (szUsername[0] && !szPassword[0])
|
|
{
|
|
SGMessageBox(hdlg,
|
|
(pBuf->bChannel ? IDS_NEEDCHANNELPASSWORD : IDS_NEEDPASSWORD),
|
|
MB_ICONWARNING);
|
|
}
|
|
else if (StrCmp(szPassword, szPasswordConfirm) != 0)
|
|
{
|
|
SGMessageBox(hdlg, IDS_MISMATCHED_PASSWORDS, MB_ICONWARNING);
|
|
}
|
|
else
|
|
{
|
|
StrCpyN(pBuf->username, szUsername, ARRAYSIZE(pBuf->username));
|
|
StrCpyN(pBuf->password, szPassword, ARRAYSIZE(pBuf->password));
|
|
pBuf->dwFlags |= (PROP_WEBCRAWL_UNAME | PROP_WEBCRAWL_PSWD);
|
|
EndDialog(hdlg, IDOK);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case IDCANCEL:
|
|
EndDialog(hdlg, IDCANCEL);
|
|
break;
|
|
|
|
default:
|
|
bHandled = FALSE;
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
INT_PTR CALLBACK LoginOptionDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
BOOL bHandled = FALSE;
|
|
|
|
switch (message)
|
|
{
|
|
|
|
case WM_INITDIALOG:
|
|
bHandled = Login_OnInitDialog(hdlg, (HWND)wParam, lParam);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
bHandled = Login_OnCommand(hdlg, HIWORD(wParam), LOWORD(wParam), (HWND)lParam);
|
|
break;
|
|
|
|
case WM_HELP:
|
|
SHWinHelpOnDemandWrap((HWND)((LPHELPINFO) lParam)->hItemHandle, c_szHelpFile,
|
|
HELP_WM_HELP, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
SHWinHelpOnDemandWrap((HWND)wParam, c_szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)aHelpIDs);
|
|
bHandled = TRUE;
|
|
break;
|
|
}
|
|
|
|
return bHandled;
|
|
}
|
|
|
|
//
|
|
// Read the users default email address and smtp from the Athena Account Mgr
|
|
//
|
|
// Expects lpszEmailAddress and lpszSMTPServer to pt to char buffers of
|
|
// CCHMAX_EMAIL_ADDRESS and CCHMAX_SERVER_NAME size, resp.
|
|
//
|
|
BOOL ReadAthenaMailSettings(LPSTR lpszEmailAddress, LPSTR lpszSMTPServer)
|
|
{
|
|
//
|
|
// This api gets called from threads that haven't used COM before so wrap
|
|
// in CoInitialize/CoUninitialize
|
|
//
|
|
HRESULT hr = CoInitialize(NULL);
|
|
ASSERT(SUCCEEDED(hr));
|
|
|
|
//
|
|
// Create an Internet Mail and News Account Manager
|
|
//
|
|
IImnAccountManager * pAccountManager;
|
|
hr = CoCreateInstance(
|
|
CLSID_ImnAccountManager,
|
|
NULL, // no aggregation
|
|
CLSCTX_INPROC_SERVER, // inproc server implemented in webcheck.dll
|
|
IID_IImnAccountManager, //
|
|
(void **)&pAccountManager);
|
|
|
|
if (SUCCEEDED(hr)) {
|
|
hr = pAccountManager->Init(NULL);
|
|
|
|
if (SUCCEEDED(hr)) {
|
|
//
|
|
// Get the default SMTP account
|
|
//
|
|
IImnAccount * pAccount;
|
|
hr = pAccountManager->GetDefaultAccount(ACCT_MAIL, &pAccount);
|
|
|
|
if (hr == S_OK) {
|
|
//
|
|
// Get the SMTP_SERVER name for this account
|
|
//
|
|
if (NULL != lpszSMTPServer)
|
|
{
|
|
hr = pAccount->GetPropSz(
|
|
AP_SMTP_SERVER,
|
|
lpszSMTPServer,
|
|
CCHMAX_SERVER_NAME);
|
|
}
|
|
|
|
//
|
|
// Get the Users email address for this account
|
|
//
|
|
|
|
if (NULL != lpszEmailAddress)
|
|
{
|
|
hr |= pAccount->GetPropSz(
|
|
AP_SMTP_EMAIL_ADDRESS,
|
|
lpszEmailAddress,
|
|
CCHMAX_EMAIL_ADDRESS);
|
|
}
|
|
|
|
pAccount->Release(); // done with IImnAccount
|
|
}
|
|
}
|
|
pAccountManager->Release(); // done with IImnAccountManager
|
|
}
|
|
|
|
//
|
|
// This api gets called from threads that haven't used COM before so wrap
|
|
// in CoInitialize/CoUninitialize
|
|
//
|
|
CoUninitialize();
|
|
|
|
if (hr == S_OK)
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
void ReadDefaultEmail(LPTSTR szBuf, UINT cch)
|
|
{
|
|
ASSERT(szBuf);
|
|
|
|
szBuf[0] = (TCHAR)0;
|
|
if(ReadRegValue(HKEY_CURRENT_USER, c_szRegKey, c_szDefEmail, szBuf, cch * sizeof(TCHAR)))
|
|
return;
|
|
|
|
// TODO: Look for eudora/netscape as well
|
|
CHAR szEmailAddress[CCHMAX_EMAIL_ADDRESS];
|
|
if (ReadAthenaMailSettings(szEmailAddress, NULL))
|
|
{
|
|
SHAnsiToTChar(szEmailAddress, szBuf, cch);
|
|
}
|
|
}
|
|
|
|
void WriteDefaultEmail(LPTSTR szBuf)
|
|
{
|
|
ASSERT(szBuf);
|
|
WriteRegValue(HKEY_CURRENT_USER, c_szRegKey, c_szDefEmail, szBuf, (lstrlen(szBuf) + 1) * sizeof(TCHAR), REG_SZ);
|
|
}
|
|
|
|
void ReadDefaultSMTPServer(LPTSTR szBuf, UINT cch)
|
|
{
|
|
ASSERT(szBuf);
|
|
|
|
szBuf[0] = (TCHAR)0;
|
|
if(ReadRegValue(HKEY_CURRENT_USER, c_szRegKey, c_szDefServer, szBuf, cch * sizeof(TCHAR)))
|
|
return;
|
|
|
|
// TODO: Look for eudora/netscape as well
|
|
CHAR szSMTPServer[CCHMAX_SERVER_NAME];
|
|
if (ReadAthenaMailSettings(NULL, szSMTPServer))
|
|
{
|
|
SHAnsiToTChar(szSMTPServer, szBuf, cch);
|
|
}
|
|
}
|
|
|
|
void WriteDefaultSMTPServer(LPTSTR szBuf)
|
|
{
|
|
ASSERT(szBuf);
|
|
WriteRegValue(HKEY_CURRENT_USER, c_szRegKey, c_szDefServer, szBuf, (lstrlen(szBuf) + 1) * sizeof(TCHAR), REG_SZ);
|
|
}
|