00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "fsWebPageDownloadsMgr.h"
00009 #include "mfchelp.h"
00010
00011 #ifdef _DEBUG
00012 #undef THIS_FILE
00013 static char THIS_FILE[]=__FILE__;
00014 #define new DEBUG_NEW
00015 #endif
00016
00017 fsWebPageDownloadsMgr::fsWebPageDownloadsMgr()
00018 {
00019 m_pfnEvents = NULL;
00020 }
00021
00022 fsWebPageDownloadsMgr::~fsWebPageDownloadsMgr()
00023 {
00024 for (int i = 0; i < m_vWPDs.size (); i++)
00025 delete m_vWPDs [i];
00026 }
00027
00028 void fsWebPageDownloadsMgr::Add(fsWebPageDownloader *wpd)
00029 {
00030 wpd->SetEventFunc (_DownloaderEvents, this);
00031 m_vWPDs.add (wpd);
00032 }
00033
00034 void fsWebPageDownloadsMgr::_DownloaderEvents(fsWebPageDownloader* dldr, fsWPDEvent ev, int info, LPVOID lp)
00035 {
00036 fsWebPageDownloadsMgr* pThis = (fsWebPageDownloadsMgr*) lp;
00037 if (pThis->m_pfnEvents)
00038 pThis->m_pfnEvents (dldr, ev, info, pThis->m_lpEventsParam);
00039 }
00040
00041 void fsWebPageDownloadsMgr::SetEventsFunc(fntWPDEvents pfn, LPVOID lp)
00042 {
00043 m_pfnEvents = pfn;
00044 m_lpEventsParam = lp;
00045 }
00046
00047 int fsWebPageDownloadsMgr::GetWPDCount()
00048 {
00049 return m_vWPDs.size ();
00050 }
00051
00052 fsWebPageDownloader* fsWebPageDownloadsMgr::GetWPD(int iIndex)
00053 {
00054 return m_vWPDs [iIndex];
00055 }
00056
00057 void fsWebPageDownloadsMgr::Delete(fsWebPageDownloader *wpd)
00058 {
00059 for (int i = 0; i < m_vWPDs.size (); i++)
00060 {
00061 if (m_vWPDs [i] == wpd)
00062 {
00063 m_vWPDs.del (i);
00064 delete wpd;
00065 return;
00066 }
00067 }
00068 }
00069
00070 BOOL fsWebPageDownloadsMgr::Save()
00071 {
00072 HANDLE hFile = CreateFile (fsGetDataFilePath ("spider.sav"), GENERIC_WRITE, FILE_SHARE_READ, NULL,
00073 CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);
00074
00075 if (hFile == INVALID_HANDLE_VALUE)
00076 return FALSE;
00077
00078 int cWPD = m_vWPDs.size ();
00079 DWORD dw;
00080 fsSpiderFileHdr hdr;
00081
00082 if (FALSE == WriteFile (hFile, &hdr, sizeof (hdr), &dw, NULL))
00083 {
00084 CloseHandle (hFile);
00085 return FALSE;
00086 }
00087
00088 if (FALSE == WriteFile (hFile, &cWPD, sizeof (cWPD), &dw, NULL))
00089 {
00090 CloseHandle (hFile);
00091 return FALSE;
00092 }
00093
00094 for (int i = 0; i < cWPD; i++)
00095 {
00096 if (FALSE == m_vWPDs [i]->Save (hFile))
00097 {
00098 CloseHandle (hFile);
00099 return FALSE;
00100 }
00101 }
00102
00103 CloseHandle (hFile);
00104 return TRUE;
00105 }
00106
00107 BOOL fsWebPageDownloadsMgr::Load()
00108 {
00109 for (int i = 0; i < m_vWPDs.size (); i++)
00110 delete m_vWPDs [i];
00111
00112 m_vWPDs.clear ();
00113
00114 HANDLE hFile = CreateFile (fsGetDataFilePath ("spider.sav"), GENERIC_READ, FILE_SHARE_READ, NULL,
00115 OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);
00116
00117 if (hFile == INVALID_HANDLE_VALUE)
00118 return FALSE;
00119
00120 if (GetLastError () != ERROR_ALREADY_EXISTS)
00121 {
00122 CloseHandle (hFile);
00123 return TRUE;
00124 }
00125
00126 int cWPD;
00127 DWORD dw;
00128 fsSpiderFileHdr hdr;
00129 WORD wVer = SPIDERFILE_CURRENT_VERSION;
00130
00131 if (FALSE == ReadFile (hFile, &hdr, sizeof (hdr), &dw, NULL))
00132 {
00133 wVer = 1;
00134 }
00135 else
00136 {
00137 if (strcmp (hdr.szSig, SPIDERFILE_SIG))
00138 {
00139 wVer = 1;
00140 SetFilePointer (hFile, 0, NULL, FILE_BEGIN);
00141 }
00142 else
00143 {
00144 wVer = hdr.wVer;
00145 }
00146 }
00147
00148 if (FALSE == ReadFile (hFile, &cWPD, sizeof (cWPD), &dw, NULL))
00149 {
00150 CloseHandle (hFile);
00151 return FALSE;
00152 }
00153
00154 for (i = 0; i < cWPD; i++)
00155 {
00156 fsWebPageDownloader *wpd;
00157 fsnew1 (wpd, fsWebPageDownloader);
00158 if (FALSE == wpd->Load (hFile, wVer))
00159 {
00160 delete wpd;
00161 CloseHandle (hFile);
00162 return FALSE;
00163 }
00164 Add (wpd);
00165 }
00166
00167 CloseHandle (hFile);
00168 return TRUE;
00169 }
00170
00171 BOOL fsWebPageDownloadsMgr::OnDownloadRestored(vmsDownloadSmartPtr dld)
00172 {
00173 for (int i = m_vWPDs.size () - 1; i >= 0; i--)
00174 {
00175 fsWebPageDownloader* wpd = m_vWPDs [i];
00176 if (fsWebPageDownloader::_DldEvents (dld, DME_DLDRESTORED, wpd))
00177 return TRUE;
00178 }
00179
00180 return FALSE;
00181 }
00182
00183 void fsWebPageDownloadsMgr::StopAll()
00184 {
00185 for (int i = m_vWPDs.size () - 1; i >= 0; i--)
00186 {
00187 fsWebPageDownloader* wpd = m_vWPDs [i];
00188 wpd->StopDownloading ();
00189 }
00190 }