00001 /* 00002 Free Download Manager Copyright (c) 2003-2007 FreeDownloadManager.ORG 00003 Open Download Manager Copyright (c) 2008-2010 OpenDownloadManager.ORG 00004 */ 00005 00006 #include "stdafx.h" 00007 #include "FdmApp.h" 00008 #include "WgUrlListReceiver.h" 00009 #include "CreateDownloadListDlg.h" 00010 #include "DownloadsWnd.h" 00011 #include <Mshtml.h> 00012 #include "MainFrm.h" 00013 #include "UIThread.h" 00014 00015 extern CDownloadsWnd *_pwndDownloads; 00016 00017 STDMETHODIMP CWgUrlListReceiver::get_Url(BSTR *pVal) 00018 { 00019 *pVal = SysAllocString (m_bstrUrl); 00020 return S_OK; 00021 } 00022 00023 STDMETHODIMP CWgUrlListReceiver::put_Url(BSTR newVal) 00024 { 00025 m_bstrUrl = newVal; 00026 return S_OK; 00027 } 00028 00029 STDMETHODIMP CWgUrlListReceiver::get_Comment(BSTR *pVal) 00030 { 00031 *pVal = SysAllocString (m_bstrComment); 00032 return S_OK; 00033 } 00034 00035 STDMETHODIMP CWgUrlListReceiver::put_Comment(BSTR newVal) 00036 { 00037 m_bstrComment = newVal; 00038 return S_OK; 00039 } 00040 00041 STDMETHODIMP CWgUrlListReceiver::get_Referer(BSTR *pVal) 00042 { 00043 *pVal = SysAllocString (m_bstrReferer); 00044 return S_OK; 00045 } 00046 00047 STDMETHODIMP CWgUrlListReceiver::put_Referer(BSTR newVal) 00048 { 00049 m_bstrReferer = newVal; 00050 return S_OK; 00051 } 00052 00053 STDMETHODIMP CWgUrlListReceiver::ShowAddUrlListDialog() 00054 { 00055 if (m_vUrls.size () == 0) 00056 return S_FALSE; 00057 00058 00059 AddRef (); 00060 00061 UIThread *thr = (UIThread*) RUNTIME_CLASS (UIThread)->CreateObject (); 00062 thr->set_Thread (_threadAddUrlListDialog, this); 00063 thr->CreateThread (); 00064 00065 return S_OK; 00066 } 00067 00068 STDMETHODIMP CWgUrlListReceiver::AddUrlToList() 00069 { 00070 USES_CONVERSION; 00071 00072 LPCSTR pszUrl = W2A (m_bstrUrl); 00073 00074 if (pszUrl == NULL) 00075 return E_INVALIDARG; 00076 00077 for (int i = 0; i < m_vUrls.size (); i++) 00078 if (stricmp (pszUrl, m_vUrls [i]) == 0) 00079 return S_FALSE; 00080 00081 m_vUrls.add (pszUrl); 00082 m_vReferers.add (W2A (m_bstrReferer)); 00083 m_vComments.add (W2A (m_bstrComment)); 00084 m_vCookies.add (W2A (m_bstrCookies)); 00085 00086 return S_OK; 00087 } 00088 00089 STDMETHODIMP CWgUrlListReceiver::GetUrlListFromDocumentSelection(IDispatch *pDispatch) 00090 { 00091 USES_CONVERSION; 00092 00093 CComQIPtr<IHTMLDocument2> doc = pDispatch; 00094 00095 if (doc == NULL) 00096 return E_FAIL; 00097 00098 BSTR bstr = NULL; 00099 doc->get_cookie (&bstr); 00100 if (bstr) 00101 { 00102 put_Cookies (bstr); 00103 SysFreeString (bstr); 00104 } 00105 else 00106 put_Cookies (L""); 00107 00108 CComQIPtr <IHTMLSelectionObject> sel; 00109 00110 if (FAILED (doc->get_selection (&sel))) 00111 return E_FAIL; 00112 00113 CComBSTR str; 00114 00115 sel->get_type (&str); 00116 00117 if (stricmp (W2A (str), "none") == 0) 00118 return S_FALSE; 00119 00120 IDispatch *pDisp = NULL; 00121 00122 if (FAILED (sel->createRange (&pDisp))) 00123 return E_FAIL; 00124 00125 CComQIPtr <IHTMLTxtRange> text = pDisp; 00126 00127 if (text == NULL) 00128 return E_FAIL; 00129 00130 CComBSTR htmlText; 00131 00132 if (FAILED (text->get_htmlText (&htmlText))) 00133 return E_FAIL; 00134 00135 fsHTMLParser parser; 00136 00137 parser.SetKillDupes (TRUE); 00138 parser.ParseHTML ((LPSTR) W2A (htmlText)); 00139 00140 m_bstrComment = m_bstrReferer = L""; 00141 00142 CComBSTR bstrRootURL; 00143 00144 if (FAILED (doc->get_URL (&bstrRootURL))) 00145 return E_FAIL; 00146 00147 LPCSTR pszRootURL = W2A (bstrRootURL); 00148 00149 for (int i = 0; i < parser.GetUrlCount (); i ++) 00150 { 00151 LPCSTR pszUrl = parser.GetUrl (i); 00152 00153 00154 if (*pszUrl == '#') 00155 continue; 00156 00157 LPSTR pszFullUrl; 00158 00159 fsUrlToFullUrl (pszRootURL, pszUrl, &pszFullUrl); 00160 if (pszFullUrl == NULL) 00161 continue; 00162 00163 fsURL url; 00164 if (IR_SUCCESS != url.Crack (pszFullUrl, TRUE)) 00165 { 00166 delete [] pszFullUrl; 00167 continue; 00168 } 00169 00170 if (*url.GetHostName () == 0) 00171 { 00172 delete [] pszFullUrl; 00173 continue; 00174 } 00175 00176 put_Url (A2W (pszFullUrl)); 00177 AddUrlToList (); 00178 00179 delete [] pszFullUrl; 00180 } 00181 00182 return S_OK; 00183 } 00184 00185 DWORD WINAPI CWgUrlListReceiver::_threadAddUrlListDialog(LPVOID lp) 00186 { 00187 CWgUrlListReceiver* pthis = (CWgUrlListReceiver*) lp; 00188 00189 CCreateDownloadListDlg dlg; 00190 00191 while (((CFdmApp*)AfxGetApp ())->Is_Starting ()) 00192 Sleep (100); 00193 00194 dlg.m_pvUrls = &pthis->m_vUrls; 00195 dlg.m_pvReferers = &pthis->m_vReferers; 00196 dlg.m_pvComments = &pthis->m_vComments; 00197 dlg.m_pvCookies = &pthis->m_vCookies; 00198 00199 _DlgMgr.OnDoModal (&dlg); 00200 dlg.DoModal (); 00201 _DlgMgr.OnEndDialog (&dlg); 00202 00203 pthis->Release (); 00204 return 0; 00205 } 00206 00207 STDMETHODIMP CWgUrlListReceiver::get_Cookies(BSTR *pVal) 00208 { 00209 *pVal = SysAllocString (m_bstrCookies); 00210 return S_OK; 00211 } 00212 00213 STDMETHODIMP CWgUrlListReceiver::put_Cookies(BSTR newVal) 00214 { 00215 m_bstrCookies = newVal; 00216 return S_OK; 00217 } 00218
1.5.6