00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "DownloadsWnd.h"
00009 #include "CreateDownloadDlg.h"
00010 #include "fsDownloadMgr.h"
00011 #include "plugins.h"
00012 #include "DownloadPropertiesSheet.h"
00013 #include "DownloaderPropertiesSheet.h"
00014 #include "NOWDlg.h"
00015 #include "ShedulerWnd.h"
00016 #include "plugincmds.h"
00017 #include "system.h"
00018 #include "WaitDlg.h"
00019 #include "MainFrm.h"
00020 #include "fsUrlsToDownloadRegKeyMgr.h"
00021 #include "inetutil.h"
00022 #include "SpiderWnd.h"
00023 #include "Dlg_Opinions.h"
00024 #include "vmsSimpleFileDownloader.h"
00025 #include "fsDownloadsMgr.h"
00026 #include "Dlg_Download.h"
00027 #include "vmsDownloadsGroupsMgr.h"
00028 #include "BtDldSheet.h"
00029 #include "CreateDownloadFromTorrentFileDlg.h"
00030 #include "FlashVideoDownloadsWnd.h"
00031 #include "vmsMaliciousDownloadChecker.h"
00032
00033 extern CSpiderWnd* _pwndSpider;
00034
00035 #ifdef _DEBUG
00036 #define new DEBUG_NEW
00037 #undef THIS_FILE
00038 static char THIS_FILE[] = __FILE__;
00039 #endif
00040
00041 CDownloadsWnd* _pwndDownloads;
00042
00043 extern CShedulerWnd *_pwndScheduler;
00044
00045 CDownloadsWnd::CDownloadsWnd()
00046 {
00047 m_wndGroups.m_pWndDownloads = this;
00048 m_wndDownloads.m_tasks.m_pDownloadsWnd = this;
00049 _DldsMgr.SetEventsFunc (_Events, this);
00050 m_bExiting = FALSE;
00051 m_bDontUpdateTIPO = FALSE;
00052
00053 _DldsMgr.AttachToIECatchMgr (&_IECatchMgr);
00054
00055 m_uTotalSpeed = 0;
00056
00057 m_cCheckDldHasOpinionsThreads = 0;
00058
00059 m_bDeletingManyDownloads = false;
00060 }
00061
00062 CDownloadsWnd::~CDownloadsWnd()
00063 {
00064 _DldsMgr.Shutdown ();
00065 }
00066
00067 BEGIN_MESSAGE_MAP(CDownloadsWnd, CWnd)
00068
00069 ON_WM_CREATE()
00070 ON_WM_SIZE()
00071 ON_WM_TIMER()
00072 ON_WM_DESTROY()
00073 ON_COMMAND(ID_DLDDELETE, OnDlddelete)
00074 ON_COMMAND(ID_DLDLAUNCH, OnDldlaunch)
00075 ON_COMMAND(ID_DLDOPENFOLDER, OnDldopenfolder)
00076 ON_COMMAND(ID_DLDPROPERTIES, OnDldproperties)
00077 ON_COMMAND(ID_DLDSTART, OnDldstart)
00078 ON_COMMAND(ID_DLDSTOP, OnDldstop)
00079 ON_COMMAND(ID_DLDSCHEDULE, OnDldschedule)
00080 ON_COMMAND(ID_DLDAUTOSTART, OnDldautostart)
00081 ON_WM_SETFOCUS()
00082 ON_COMMAND(ID_DLDADDSECTION, OnDldaddsection)
00083 ON_COMMAND(ID_DLDDELSECTION, OnDlddelsection)
00084 ON_COMMAND(ID_DLDRESTART, OnDldrestart)
00085 ON_COMMAND(ID_DLDQSIZE, OnDldqsize)
00086 ON_COMMAND(ID_DLDCREATEBATCH, OnDldcreatebatch)
00087 ON_WM_ERASEBKGND()
00088 ON_COMMAND(ID_DLDCHECKVIR, OnDldcheckvir)
00089 ON_COMMAND(ID_DLDFIND, OnDldfind)
00090 ON_COMMAND(ID_DLDFINDNEXT, OnDldfindnext)
00091 ON_COMMAND(ID_DLDUNPACK, OnDldunpack)
00092 ON_COMMAND(ID_DLDMOVEDOWN, OnDldmovedown)
00093 ON_COMMAND(ID_DLDMOVEUP, OnDldmoveup)
00094 ON_COMMAND(ID_DLDCHECKINTEGRITY, OnDldcheckintegrity)
00095 ON_COMMAND(ID_DLDMOVETOFOLDER, OnDldmovetofolder)
00096 ON_COMMAND(ID_DLDMOVEBOTTOM, OnDldmovebottom)
00097 ON_COMMAND(ID_DLDMOVETOP, OnDldmovetop)
00098 ON_COMMAND(ID_DLDSCHEDULESTOP, OnDldschedulestop)
00099 ON_COMMAND(ID_DLDGRANTBANDWIDTHFORDLD, OnDldgrantbandwidthfordld)
00100 ON_COMMAND(ID_DLDSHOWPROGRESSDLG, OnDldshowprogressdlg)
00101 ON_COMMAND(ID_DLDCONVERT, OnDldconvert)
00102 ON_COMMAND(ID_DLDCREATE, OnDownloadCreate)
00103 ON_COMMAND(ID_DLDENABLESEEDING, OnDldenableseeding)
00104
00105
00106 ON_MESSAGE (WM_WGP_SHUTDOWN, OnAppExit)
00107 ON_MESSAGE (WM_WGP_READYTOSHUTDOWN, OnAppQueryExit)
00108 ON_MESSAGE (WM_WGP_UPDATE_MENUMAIN, OnUpdateMenu)
00109 ON_MESSAGE (WM_WGP_UPDATE_MENUVIEW, OnUpdateMenuView)
00110 ON_MESSAGE (WM_WGP_UPDATE_CMDITEM, OnUpdateToolBar)
00111 ON_MESSAGE (WM_WGP_INSERT, OnInsert)
00112
00113 ON_COMMAND(WGP_MENU_VIEWSMPLITEM_CMDSTART+0, OnShowAllGroups)
00114 ON_COMMAND(WGP_MENU_VIEWSMPLITEM_CMDSTART+1, OnShowDownloadingInfo)
00115
00116 ON_COMMAND_RANGE(ID_DLLIST_1, ID_DLLIST_8, OnDLListShowCol)
00117 ON_COMMAND_RANGE(ID_DLOG_1, ID_DLOG_3, OnDLLogShowCol)
00118
00119 ON_MESSAGE (WM_DW_CREATEDLDDIALOG, OnDWCreateDldDialog)
00120 ON_MESSAGE (WM_DW_CLOSEDLDDIALOG, OnDWCloseDldDialog)
00121 ON_MESSAGE (WM_DW_UPDATEDLDDIALOG, OnDWUpdateDldDialog)
00122
00123 ON_MESSAGE (WM_DLD_SHOWOPINIONS, OnDldShowOpinions)
00124
00125 ON_MESSAGE (WM_DLD_CONVERT_MEDIA, OnDldConvertMedia)
00126
00127 END_MESSAGE_MAP()
00128
00129 BOOL CDownloadsWnd::Create(CWnd *pParent)
00130 {
00131 CRect rc (0, 0, 50, 50);
00132
00133 _DldsMgr.Initialize ();
00134
00135 if (FALSE == CWnd::Create (AfxRegisterWndClass (0, NULL,
00136 NULL, NULL), NULL, WS_CHILD | WS_VISIBLE, rc, pParent, 0x121))
00137 return FALSE;
00138
00139 return TRUE;
00140 }
00141
00142 int CDownloadsWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
00143 {
00144 LOG ("downloadswnd created ok." << nl);
00145
00146 if (CWnd::OnCreate(lpCreateStruct) == -1)
00147 return -1;
00148
00149 m_bShowGroups = _App.View_AllGroups ();
00150
00151 m_enDWWN = DWWN_LISTOFDOWNLOADS;
00152
00153 LOG ("loading groups" << nl);
00154
00155 if (!_DldsGrps.LoadFromDisk ())
00156 MessageBox (LS (L_ERRLOADGRPS), LS (L_ERR), MB_ICONERROR);
00157
00158 LOG ("groups loaded ok." << nl);
00159
00160 if (FALSE == m_wndDownloads.Create (this))
00161 return -1;
00162
00163 LOG ("downloads frame created ok." << nl);
00164
00165 if (FALSE == m_wndHistory.Create (this))
00166 return -1;
00167
00168 LOG ("history wnd created ok." << nl);
00169
00170 if (FALSE == m_wndDeleted.Create (this))
00171 return -1;
00172
00173 LOG ("recycle bin wnd created ok." << nl);
00174
00175 if (FALSE == m_wndGroups.Create (this))
00176 return -1;
00177
00178 LOG ("groups wnd created ok." << nl);
00179
00180 if (m_splitter.Create (AfxGetInstanceHandle (), m_hWnd) == FALSE)
00181 return -1;
00182
00183 m_splitter.SetWnd1 (m_wndGroups.m_hWnd);
00184
00185 m_wndDownloads.m_tasks.m_bSizesInBytes = _App.View_SizesInBytes ();
00186
00187 LOG ("loading downloads" << nl);
00188
00189 do
00190 {
00191 if (FALSE == LoadDownloads ())
00192 {
00193
00194 break;
00195 }
00196 else
00197 break;
00198 }
00199 while (TRUE);
00200
00201 LOG ("downloads loaded ok" << nl);
00202
00203 ApplyDWWN ();
00204
00205 SetTimer (1, 1000, NULL);
00206
00207 _App.View_ReadWndSize (&m_wndGroups, "DownloadsGroups");
00208
00209 ShowAllGroups (m_bShowGroups);
00210 UpdateNumbersOfDownloadsInGroups ();
00211
00212 LOG ("showallgroups ok." << nl);
00213
00214 return 0;
00215 }
00216
00217 void CDownloadsWnd::OnSize(UINT, int cx, int cy)
00218 {
00219 if (cx && cy)
00220 {
00221
00222 if (m_bShowGroups)
00223 {
00224
00225 m_splitter.RecalRatio (TRUE);
00226 m_splitter.ApplyRatio ();
00227 }
00228 else
00229 {
00230
00231 m_wndDownloads.MoveWindow (0, 0, cx, cy);
00232 m_wndHistory.MoveWindow (0, 0, cx, cy);
00233 m_wndDeleted.MoveWindow (0, 0, cx, cy);
00234 }
00235 }
00236 }
00237
00238 void CDownloadsWnd::OnDownloadCreate()
00239 {
00240 CreateDownload ((LPCSTR)NULL);
00241 }
00242
00243 void CDownloadsWnd::OnTimer(UINT )
00244 {
00245 int cDownloads = _DldsMgr.GetCount ();
00246 UINT uTotalSpeed = 0;
00247 DLDS_LIST v;
00248
00249 try {
00250 for (int i = 0; i < cDownloads; i++)
00251 {
00252 vmsDownloadSmartPtr dld = _DldsMgr.GetDownload (i);
00253
00254 if (dld == m_wndDownloads.m_info.Get_ActiveDownload ())
00255 {
00256 m_wndDownloads.m_info.UpdateActiveDownload ();
00257 m_wndDownloads.m_info.m_video.m_vidman.Update ();
00258 m_wndDownloads.m_info.m_bt.m_general.UpdateUploadStat ();
00259 m_wndDownloads.m_info.m_bt.UpdatePeersStat ();
00260 m_wndDownloads.m_info.m_bt.m_general.UpdateWastedStat ();
00261 if (dld->pMgr->IsDownloading ())
00262 m_wndDownloads.m_info.m_bt.m_files.UpdateProgress ();
00263 }
00264
00265 if (dld->pMgr->IsDownloading ())
00266 {
00267 uTotalSpeed += dld->pMgr->GetSpeed ();
00268 m_wndDownloads.m_tasks.UpdateDownload (dld);
00269 if (dld->dwFlags & DLD_FLASH_VIDEO)
00270 _pwndFVDownloads->m_wndTasks.UpdateDownload (dld);
00271 }
00272 else if (dld->pMgr->IsReservingDiskSpace ())
00273 {
00274 m_wndDownloads.m_tasks.UpdateDownload (dld);
00275 if (dld->dwFlags & DLD_FLASH_VIDEO)
00276 _pwndFVDownloads->m_wndTasks.UpdateDownload (dld);
00277 }
00278
00279 if (dld->pMgr->IsBittorrent () &&
00280 dld->pMgr->GetBtDownloadMgr ()->GetUploadSpeed ())
00281 {
00282 v.push_back (dld);
00283 if (dld->pMgr->IsDownloading () == FALSE)
00284 m_wndDownloads.m_tasks.UpdateDownload (dld);
00285 }
00286 }
00287 m_uTotalSpeed = uTotalSpeed;
00288 }
00289 catch (...) {}
00290
00291 if (v != m_vUploadDownloads)
00292 {
00293 m_vUploadDownloads = v;
00294 ((CMainFrame*)AfxGetApp ()->m_pMainWnd)->RebuidDownloadsList ();
00295 }
00296 }
00297
00298 void CDownloadsWnd::SetActiveDownload(vmsDownloadSmartPtr dld)
00299 {
00300 try {
00301 m_wndDownloads.m_info.Set_ActiveDownload (dld);
00302 }
00303 catch (...) {}
00304 }
00305
00306 void CDownloadsWnd::OnDownloadProperties(DLDS_LIST &vDlds, CWnd* pwndParent)
00307 {
00308 ASSERT (vDlds [0]->pMgr->GetDownloadMgr () != NULL);
00309
00310 CDownloadPropertiesSheet sheet (LS (L_DLDPROP), pwndParent ? pwndParent : this);
00311
00312 sheet.Init (&vDlds, DPS_SHP_ALL);
00313
00314 _DlgMgr.OnDoModal (&sheet);
00315
00316 if (sheet.DoModal () == IDOK)
00317 {
00318
00319 if (sheet.IsNeedUpdateTasks ())
00320 OnDownloadsGroupChanged ();
00321
00322 if (sheet.IsNeedProcessDownloads ())
00323 _DldsMgr.ProcessDownloads ();
00324 }
00325
00326 _DlgMgr.OnEndDialog (&sheet);
00327 }
00328
00329 BOOL CDownloadsWnd::LoadDownloads()
00330 {
00331 LOG ("DW::LoadDownloads" << nl);
00332
00333 if (!_DldsMgr.LoadDownloads ())
00334 {
00335 LOG ("DW::LoadDownloads failed" << nl);
00336 return FALSE;
00337 }
00338
00339 _MediaConvertMgr.LoadState ();
00340
00341 LOG ("DW::LoadDownloads: form Recycle Bin list" << nl);
00342
00343 for (int i = _DldsMgr.Get_DeletedDownloadCount ()-1; i >= 0; i--)
00344 m_wndDeleted.AddDownload (_DldsMgr.Get_DeletedDownload (i));
00345
00346 LOG ("DW::LoadDownloads: Recycle Bin list formed ok." << nl);
00347
00348 m_wndGroups.UpdateDeletedIcon ();
00349
00350 LOG ("DW::LoadDownloads: done ok." << nl);
00351
00352 return TRUE;
00353 }
00354
00355 LRESULT CDownloadsWnd::OnAppExit(WPARAM, LPARAM)
00356 {
00357 m_bExiting = TRUE;
00358
00359 KillTimer (1);
00360
00361 _DldsMgr.AllowStartNewDownloads (FALSE);
00362
00363 LOG ("DLWnd::OnAppExit: stopping downloads" << nl);
00364
00365 for (size_t i = 0; i < _DldsMgr.GetCount (); i++)
00366 {
00367 vmsDownloadSmartPtr dld = _DldsMgr.GetDownload (i);
00368
00369 if (dld->pdlg)
00370 {
00371 dld->AddRef ();
00372 PostMessage (WM_DW_CLOSEDLDDIALOG, 0, (LPARAM)(fsDownload*) dld);
00373 }
00374
00375 if (dld->pMgr->GetDownloadMgr ())
00376 {
00377 dld->pMgr->GetDownloadMgr ()->SetEventFunc (NULL, 0);
00378 dld->pMgr->GetDownloadMgr ()->SetEventDescFunc (NULL, 0);
00379 }
00380 else if (dld->pMgr->GetBtDownloadMgr ())
00381 {
00382 dld->pMgr->GetBtDownloadMgr ()->SetEventsHandler (NULL, 0);
00383 dld->pMgr->GetBtDownloadMgr ()->StopSeeding ();
00384 }
00385
00386 dld->pMgr->StopDownloading ();
00387 }
00388
00389 LOG ("DLWnd::OnAppExit: waiting downloads" << nl);
00390
00391 MSG msg;
00392
00393 for (i = 0; i < _DldsMgr.GetCount (); i++)
00394 {
00395 vmsDownloadSmartPtr dld = _DldsMgr.GetDownload (i);
00396
00397 vmsDownloadMgrSmartPtr pMgr = dld->pMgr;
00398
00399 while (pMgr->IsRunning ())
00400 {
00401 while (PeekMessage (&msg, 0, 0, 0, PM_REMOVE))
00402 DispatchMessage (&msg);
00403
00404 Sleep (10);
00405 }
00406 }
00407
00408 LOG ("DLWnd::OnAppExit: messages" << nl);
00409
00410 while (PeekMessage (&msg, 0, 0, 0, PM_REMOVE))
00411 DispatchMessage (&msg);
00412
00413 LOG ("DLWnd::OnAppExit: saving" << nl);
00414
00415 while (m_cCheckDldHasOpinionsThreads)
00416 Sleep (10);
00417
00418 SaveAll (TRUE);
00419
00420 LOG ("DLWnd::OnAppExit: detach IE" << nl);
00421
00422 _IECatchMgr.Detach ();
00423
00424 return 0;
00425 }
00426
00427 BOOL CDownloadsWnd::DeleteGroup(vmsDownloadsGroupSmartPtr pGroup)
00428 {
00429 if (pGroup->nId == GRP_OTHER_ID)
00430 return FALSE;
00431
00432 CString str = LS (L_AREYOUSURE); str += '\n'; str += LS (L_THISDELGRPDLDS);
00433 if (IDNO == MessageBox (str, LS (L_CONFIRMATION), MB_ICONQUESTION|MB_YESNO))
00434 return FALSE;
00435
00436 std::vector <vmsDownloadsGroupSmartPtr> v;
00437 _DldsGrps.GetGroupWithSubgroups (pGroup, v);
00438 for (size_t i = 0; i < v.size (); i++)
00439 v [i]->bAboutToBeDeleted = true;
00440
00441 if (FALSE == _DldsMgr.DeleteGroupsDownloads (pGroup, TRUE))
00442 {
00443 for (size_t i = 0; i < v.size (); i++)
00444 v [i]->bAboutToBeDeleted = false;
00445 return FALSE;
00446 }
00447
00448 _DldsGrps.DeleteGroup (pGroup);
00449
00450 _SitesMgr.CheckGroups ();
00451
00452 return TRUE;
00453 }
00454
00455 DWORD CDownloadsWnd::_Events(fsDownload* dld, fsDownloadsMgrEvent ev, LPVOID lp)
00456 {
00457 CDownloadsWnd* pThis = (CDownloadsWnd*) lp;
00458
00459 if (pThis->m_bExiting)
00460 return TRUE;
00461
00462 fsDLHistoryRecord* rec = (fsDLHistoryRecord*) dld;
00463 BOOL bUpdateTIPO = TRUE;
00464
00465 try {
00466
00467 switch (ev)
00468 {
00469 case DME_DOWNLOADEREVENTRECEIVED:
00470 case DME_DOWNLOAD_STATE_CHANGED:
00471 ASSERT (dld != NULL);
00472
00473 pThis->m_wndDownloads.m_tasks.UpdateDownload (dld);
00474 pThis->m_wndDownloads.m_info.m_video.m_vidman.Update ();
00475 if (dld->dwFlags & DLD_FLASH_VIDEO)
00476 {
00477 _pwndFVDownloads->m_wndTasks.UpdateDownload (dld);
00478 _pwndFVDownloads->m_wndPreview.m_vidman.Update ();
00479 }
00480 break;
00481
00482 case DME_EVENTDESCRIPRIONRECEIVED:
00483 ASSERT (dld != NULL);
00484
00485 if (dld == pThis->m_wndDownloads.m_tasks.GetActiveDownload ())
00486
00487 pThis->m_wndDownloads.m_info.AddDownloadEvent (&dld->vEvents [dld->vEvents.size () - 1]);
00488
00489
00490 pThis->m_wndDownloads.m_tasks.UpdateDownload (dld);
00491 if (dld->dwFlags & DLD_FLASH_VIDEO)
00492 _pwndFVDownloads->m_wndTasks.UpdateDownload (dld);
00493 break;
00494
00495 case DME_DOWNLOADWILLBEDELETED:
00496 ASSERT (dld != NULL);
00497 LOG ("DLDSWND::WillbeDeleted..." << nl);
00498
00499 if (pThis->m_bDeletingManyDownloads == false)
00500 {
00501 pThis->m_wndDownloads.m_tasks.WillBeDeleted (dld);
00502 if (dld->dwFlags & DLD_FLASH_VIDEO)
00503 _pwndFVDownloads->m_wndTasks.WillBeDeleted (dld);
00504 }
00505
00506 LOG ("DLDSWND::WillbeDeleted processed" << nl);
00507
00508 dld = NULL;
00509 bUpdateTIPO = FALSE;
00510 break;
00511
00512 case DME_DLDAUTODELETED:
00513 pThis->m_wndDownloads.m_tasks.UpdateActiveDownload (0);
00514 break;
00515
00516 case DME_DOWNLOADFILEWILLBEDELETED:
00517 pThis->m_wndDownloads.m_info.m_video.Stop ();
00518 bUpdateTIPO = FALSE;
00519 break;
00520
00521 case DME_NOACTIVEDOWNLOADS:
00522 if (pThis->m_bExiting == FALSE)
00523 {
00524
00525 _pwndScheduler->GetMgr ()->ExciteEvent (EV_NODOWNLOADS);
00526
00527 _Snds.Event (SME_NOACTIVEDOWNLOADS);
00528 }
00529 break;
00530
00531 case DME_FILEUPDATED:
00532 ASSERT (dld != NULL);
00533 pThis->m_wndDownloads.m_tasks.UpdateDownload (dld);
00534 if (dld->dwFlags & DLD_FLASH_VIDEO)
00535 _pwndFVDownloads->m_wndTasks.UpdateDownload (dld);
00536 pThis->m_wndDownloads.m_info.m_video.m_vidman.Update ();
00537 ((CMainFrame*)AfxGetApp ()->m_pMainWnd)->RebuidDownloadsList ();
00538 bUpdateTIPO = FALSE;
00539 break;
00540
00541 case DME_CREATEDLDDIALOG:
00542 ASSERT (dld != NULL);
00543 dld->AddRef ();
00544 pThis->PostMessage (WM_DW_CREATEDLDDIALOG, 0, (LPARAM)dld);
00545 bUpdateTIPO = FALSE;
00546 break;
00547
00548 case DME_UPDATEDLDDIALOG:
00549 ASSERT (dld != NULL);
00550 dld->AddRef ();
00551 pThis->PostMessage (WM_DW_UPDATEDLDDIALOG, 0, (LPARAM)dld);
00552 bUpdateTIPO = FALSE;
00553 break;
00554
00555 case DME_CLOSEDLDDIALOG:
00556 ASSERT (dld != NULL);
00557 dld->AddRef ();
00558 pThis->PostMessage (WM_DW_CLOSEDLDDIALOG, 0, (LPARAM)dld);
00559 bUpdateTIPO = FALSE;
00560 break;
00561
00562 case DME_REDIRECTED:
00563 ASSERT (dld != NULL);
00564 pThis->m_wndDownloads.m_tasks.UpdateDownload (dld);
00565 if (dld->dwFlags & DLD_FLASH_VIDEO)
00566 _pwndFVDownloads->m_wndTasks.UpdateDownload (dld);
00567 pThis->m_wndDownloads.m_info.m_video.m_vidman.Update ();
00568 ((CMainFrame*)AfxGetApp ()->m_pMainWnd)->RebuidDownloadsList ();
00569 bUpdateTIPO = FALSE;
00570 break;
00571
00572 case DME_DLDSAUTOSTARTMDFD:
00573 pThis->m_wndDownloads.m_tasks.Invalidate (FALSE);
00574 _pwndFVDownloads->m_wndTasks.Invalidate (FALSE);
00575 break;
00576
00577 case DME_DOWNLOADSTOPPEDORDONE:
00578 {
00579 ASSERT (dld != NULL);
00580
00581 ((CMainFrame*)AfxGetApp ()->m_pMainWnd)->RebuidDownloadsList ();
00582 BOOL bNoBalloon = FALSE;
00583
00584 char szFile [MY_MAX_PATH];
00585 CDownloads_Tasks::GetFileName (dld, szFile);
00586
00587 LPCSTR pszMsg;
00588
00589 if (dld->pMgr->IsDone ())
00590 {
00591 pszMsg = LS (L_DONE);
00592
00593 bool bNotif = true;
00594
00595 if (dld->dwFlags & DLD_NOTIFICATIONS_LL)
00596 bNotif = false;
00597 else if ((dld->dwFlags & DLD_BATCH) && _App.Notif_DisableForBatchDownloads ())
00598 bNotif = false;
00599
00600 if (bNotif)
00601 _Snds.Event (SME_DOWNLOADCOMPLETE);
00602 else
00603 bNoBalloon = TRUE;
00604
00605 if (pThis->m_wndDownloads.m_info.Get_ActiveDownload () == dld)
00606 {
00607 BOOL bDontSwitchToMedia = FALSE;
00608
00609 if (pThis->m_wndDownloads.m_info.get_CurTab () == DIT_OPINIONS)
00610 pThis->m_wndDownloads.m_info.m_opinions.UpdateContent ();
00611 else if (_App.Community_SwitchToOpinions ())
00612 {
00613 pThis->m_wndDownloads.m_info.m_opinions.UpdateContent (true);
00614 bDontSwitchToMedia = TRUE;
00615 }
00616
00617 if (bDontSwitchToMedia == FALSE && _App.View_AutoSwitchToMediaPreview ())
00618 {
00619 if (pThis->IsMediaDownload (dld))
00620 pThis->m_wndDownloads.m_info.set_CurTab (DIT_MEDIAPREVIEW);
00621 }
00622 }
00623 }
00624 else if (dld->pMgr->IsStoppedByUser ())
00625 {
00626 break;
00627 }
00628 else
00629 {
00630 if (dld->bAutoStart == FALSE)
00631 {
00632 pszMsg = LS (L_STOPPED);
00633 _Snds.Event (SME_DOWNLOADFAILED);
00634 }
00635 else
00636 {
00637 pszMsg = LS (L_WAITING);
00638 if (dld->dwFlags & DLD_NOTIFICATIONS_LL)
00639 bNoBalloon = TRUE;
00640 else if ((dld->dwFlags & DLD_BATCH) && _App.Notif_DisableForBatchDownloads ())
00641 bNoBalloon = TRUE;
00642 }
00643 }
00644
00645 if (bNoBalloon == FALSE)
00646 {
00647 CString str;
00648 str.Format ("%s - %s", szFile, pszMsg);
00649 CMainFrame::ShowTimeoutBalloon (str, PRG_NAME);
00650 }
00651 }
00652 break;
00653
00654 case DME_SECTIONDOWNLOADING:
00655 ASSERT (dld != NULL);
00656 if (dld == pThis->m_wndDownloads.m_info.Get_ActiveDownload () &&
00657 dld->pMgr->GetDownloadingSectionCount () == 1)
00658 {
00659 if (_App.Community_DisplayOpinionsAtDlding ())
00660 {
00661 if (dld->dwFlags & DLD_HASOPINIONS_YES)
00662 pThis->OnDldHasOpinions (dld);
00663 else if ((dld->dwFlags & DLD_HASOPINIONS_NO) == 0)
00664 pThis->CheckDldHasOpinions (dld);
00665 }
00666
00667 if (_App.View_AutoSwitchToMediaPreview ())
00668 {
00669 if (pThis->IsMediaDownload (dld))
00670 pThis->m_wndDownloads.m_info.set_CurTab (DIT_MEDIAPREVIEW);
00671 }
00672 }
00673 break;
00674
00675 case DME_DOWNLOADWASDELETEDFROMLIST:
00676 dld = NULL;
00677
00678 case DME_SECTIONSTARTED:
00679 case DME_DLMGRTHREADSTARTING:
00680 if (pThis->m_bDeletingManyDownloads == false)
00681 ((CMainFrame*)AfxGetApp ()->m_pMainWnd)->RebuidDownloadsList ();
00682
00683 break;
00684
00685 case DME_DLDADDEDTODELETED:
00686 ASSERT (dld != NULL);
00687 pThis->m_wndDeleted.AddDownload (dld);
00688 pThis->m_wndGroups.UpdateDeletedIcon ();
00689 dld = NULL;
00690 bUpdateTIPO = FALSE;
00691 break;
00692
00693 case DME_RECYCLEBINCONTENTCHANGED:
00694 pThis->m_wndGroups.UpdateDeletedIcon ();
00695 bUpdateTIPO = FALSE;
00696 break;
00697
00698 case DME_DLDREMOVEDFROMDELETED:
00699 ASSERT (dld != NULL);
00700 pThis->m_wndDeleted.RemoveDownload (dld);
00701 dld = NULL;
00702 bUpdateTIPO = FALSE;
00703 break;
00704
00705 case DME_DLDRESTORED:
00706 ASSERT (dld != NULL);
00707 fsDldFilter *filter;
00708 filter = pThis->m_wndGroups.GetCurrentFilter ();
00709
00710 if (filter)
00711 {
00712 if (filter->IsSatisfies (dld))
00713 pThis->m_wndDownloads.m_tasks.AddDownloadToList (dld, FALSE);
00714 }
00715
00716 _pwndSpider->GetMgr ()->OnDownloadRestored (dld);
00717 bUpdateTIPO = FALSE;
00718 break;
00719
00720 case DME_RECADDEDTOHISTORY:
00721 dld = NULL;
00722 fsDldHistRecFilter* f;
00723 f = pThis->m_wndGroups.GetHistoryCurrentFilter ();
00724 if (f && f->IsSatisfies (rec))
00725 pThis->m_wndHistory.AddRecord (rec);
00726 bUpdateTIPO = FALSE;
00727 break;
00728
00729 case DME_RECDELETEDFROMHISTORY:
00730 dld = NULL;
00731 pThis->m_wndHistory.DeleteRecord (rec);
00732 bUpdateTIPO = FALSE;
00733 break;
00734
00735 case DME_HISTORYCLEARED:
00736 dld = NULL;
00737 pThis->m_wndHistory.DeleteAllRecords ();
00738 bUpdateTIPO = FALSE;
00739 break;
00740
00741 case DME_DLDWILLBEFULLYDELETED:
00742 dld = NULL;
00743 bUpdateTIPO = FALSE;
00744 break;
00745
00746 case DME_BEGINDELETEMANYDOWNLOADS:
00747 pThis->m_bDeletingManyDownloads = true;
00748 bUpdateTIPO = FALSE;
00749 break;
00750
00751 case DME_ENDDELETEMANYDOWNLOADS:
00752 pThis->m_bDeletingManyDownloads = false;
00753 pThis->ApplyCurrentFilter ();
00754 ((CMainFrame*)AfxGetApp ()->m_pMainWnd)->RebuidDownloadsList ();
00755 bUpdateTIPO = FALSE;
00756 break;
00757
00758 case DME_BTDLD_STAT_CHANGED:
00759 ASSERT (dld != NULL);
00760 if (dld == pThis->m_wndDownloads.m_info.Get_ActiveDownload ())
00761 pThis->m_wndDownloads.m_info.UpdateBtStat ();
00762 break;
00763 }
00764
00765 if (dld)
00766 pThis->m_wndGroups.ApplyNotGroupFilterForDownload (dld);
00767
00768 if (bUpdateTIPO)
00769 pThis->UpdateTrayIconPlusOthers ();
00770
00771 }
00772 catch (...) {}
00773
00774 return TRUE;
00775 }
00776
00777 void CDownloadsWnd::OnDownloadDefProperties()
00778 {
00779 CDownloadPropertiesSheet sheet (LS (L_DLDDEFOPT), this);
00780 DLDS_LIST vDlds;
00781
00782 vmsDownloadSmartPtr http, ftp, https;
00783
00784 http.CreateInstance ();
00785 http->pMgr.CreateInstance ();
00786 http->pMgr->Attach (new fsDownloadMgr);
00787 https.CreateInstance ();
00788 https->pMgr.CreateInstance ();
00789 https->pMgr->Attach (new fsDownloadMgr);
00790 ftp.CreateInstance ();
00791 ftp->pMgr.CreateInstance ();
00792 ftp->pMgr->Attach (new fsDownloadMgr);
00793
00794 http->pMgr->GetDownloadMgr ()->CreateByUrl ("http://");
00795 https->pMgr->GetDownloadMgr ()->CreateByUrl ("https://");
00796 ftp->pMgr->GetDownloadMgr ()->CreateByUrl ("ftp://");
00797
00798 vDlds.push_back (http);
00799 vDlds.push_back (https);
00800 vDlds.push_back (ftp);
00801
00802 sheet.Init (&vDlds, DPS_SHP_NOGENERALNOMIRR);
00803
00804 _DlgMgr.OnDoModal (&sheet);
00805
00806 if (sheet.DoModal () == IDOK)
00807 {
00808 fsDownload_Properties *dp = http->pMgr->GetDownloadMgr ()->GetDP ();
00809 fsDownload_NetworkProperties *dnp = http->pMgr->GetDownloadMgr ()->GetDNP ();
00810
00811
00812 _App.AccDeniedReaction (dp->aEP [DFE_ACCDENIED]);
00813 _App.AdditionalExtension (dp->pszAdditionalExt);
00814 _App.Download_CreateExt (dp->pszCreateExt);
00815 _App.Agent (dnp->pszAgent);
00816 _App.AlreadyExistReaction (dp->enAER);
00817 _App.FtpTransferType (dnp->enFtpTransferType);
00818 _App.ASCIIExts (dnp->pszASCIIExts);
00819 _App.DownloadFlags (dp->dwFlags);
00820 _App.IgnoreRestrictions (dp->bIgnoreRestrictions);
00821 _App.InternetAccessType (dnp->enAccType);
00822 _App.MaxAttempts (dp->uMaxAttempts);
00823 _App.MaxSections (dp->uMaxSections);
00824 _App.NotFoundReaction (dp->aEP [DFE_NOTFOUND]);
00825 _App.FtpFlags (dnp->dwFtpFlags);
00826 _App.Referer (dnp->pszReferer);
00827 _App.ReserveDiskSpace (dp->bReserveDiskSpace);
00828 _App.RestartSpeedLow (dp->bRestartSpeedLow);
00829 _App.RetriesTime (dp->uRetriesTime);
00830 _App.SectionMinSize (dp->uSectionMinSize);
00831 _App.SizeChangeReaction (dp->enSCR);
00832 _App.Timeout (dp->uTimeout);
00833 _App.TrafficRestriction (dp->uTrafficRestriction);
00834 _App.UseCookie (dnp->bUseCookie);
00835 _App.UseHttp11 (dnp->bUseHttp11);
00836 _App.UserName (dnp->pszUserName);
00837 _App.UserPassword (dnp->pszPassword);
00838 _App.RollBackSize (dnp->wRollBackSize);
00839 _App.DNPFlags (dnp->dwFlags);
00840 _App.LowSpeed_Duration (dnp->wLowSpeed_Duration);
00841 _App.LowSpeed_Factor (dnp->wLowSpeed_Factor);
00842 _App.Download_CheckIntegrityWhenDone (dp->bCheckIntegrityWhenDone);
00843 _App.Download_IntegrityCheckFailedReaction (dp->enICFR);
00844
00845 _App.HttpProxy_Name (dnp->pszProxyName);
00846 _App.HttpProxy_Password (dnp->pszProxyPassword);
00847 _App.HttpProxy_UserName (dnp->pszProxyUserName);
00848
00849 _App.HttpsProxy_Name (https->pMgr->GetDownloadMgr ()->GetDNP ()->pszProxyName);
00850 _App.HttpsProxy_Password (https->pMgr->GetDownloadMgr ()->GetDNP ()->pszProxyPassword);
00851 _App.HttpsProxy_UserName (https->pMgr->GetDownloadMgr ()->GetDNP ()->pszProxyUserName);
00852
00853 _App.FtpProxy_Name (ftp->pMgr->GetDownloadMgr ()->GetDNP ()->pszProxyName);
00854 _App.FtpProxy_Password (ftp->pMgr->GetDownloadMgr ()->GetDNP ()->pszProxyPassword);
00855 _App.FtpProxy_UserName (ftp->pMgr->GetDownloadMgr ()->GetDNP ()->pszProxyUserName);
00856 }
00857
00858 _DlgMgr.OnEndDialog (&sheet);
00859 }
00860
00861 void CDownloadsWnd::OnDownloaderProperties()
00862 {
00863 CDownloaderPropertiesSheet sheet (LS (L_DLDR_OPTIONS), this);
00864
00865 sheet.Init ();
00866 _DlgMgr.OnDoModal (&sheet);
00867 sheet.DoModal ();
00868 _DlgMgr.OnEndDialog (&sheet);
00869 _DldsMgr.SaveSettings ();
00870 _DldsMgr.ProcessDownloads ();
00871 }
00872
00873 void CDownloadsWnd::SetTUM(fsTUM tum)
00874 {
00875 _DldsMgr.SetTUM (tum);
00876 }
00877
00878 fsTUM CDownloadsWnd::GetTUM()
00879 {
00880 return _DldsMgr.GetTUM ();
00881 }
00882
00883 void CDownloadsWnd::OnOptimizationWizard()
00884 {
00885 CNOWDlg dlg;
00886
00887 _DlgMgr.OnDoModal (&dlg);
00888
00889 if (IDOK != dlg.DoModal ())
00890 {
00891 _DlgMgr.OnEndDialog (&dlg);
00892 return;
00893 }
00894
00895 _DlgMgr.OnEndDialog (&dlg);
00896
00897 ApplyConnectionType (dlg.m_enCT);
00898 }
00899
00900 void CDownloadsWnd::ApplyConnectionType(fsConnectionType enCT)
00901 {
00902 _DldsMgr.ApplyConnectionType (enCT);
00903 }
00904
00905 void CDownloadsWnd::OnDestroy()
00906 {
00907 CWnd::OnDestroy();
00908
00909 delete _pwndDownloads;
00910 }
00911
00912 LRESULT CDownloadsWnd::OnAppQueryExit(WPARAM, LPARAM)
00913 {
00914
00915 return 0;
00916 }
00917
00918 LRESULT CDownloadsWnd::OnUpdateMenu(WPARAM, LPARAM lp)
00919 {
00920 HMENU *hMenu = (HMENU*) lp;
00921
00922 m_wndDownloads.m_tasks.UpdateMenu (CMenu::FromHandle (*hMenu));
00923
00924 return 0;
00925 }
00926
00927 void CDownloadsWnd::OnDlddelete()
00928 {
00929 m_wndDownloads.m_tasks.OnDlddelete ();
00930 }
00931
00932 void CDownloadsWnd::OnDldlaunch()
00933 {
00934 m_wndDownloads.m_tasks.OnDldlaunch ();
00935 }
00936
00937 void CDownloadsWnd::OnDldopenfolder()
00938 {
00939 m_wndDownloads.m_tasks.OnDldopenfolder ();
00940 }
00941
00942 void CDownloadsWnd::OnDldproperties()
00943 {
00944 m_wndDownloads.m_tasks.OnDldproperties ();
00945 }
00946
00947 void CDownloadsWnd::OnDldstart()
00948 {
00949 m_wndDownloads.m_tasks.OnDldstart ();
00950 }
00951
00952 void CDownloadsWnd::OnDldstop()
00953 {
00954 m_wndDownloads.m_tasks.OnDldstop ();
00955 }
00956
00957 BOOL CDownloadsWnd::CreateDownload(LPCSTR pszStartUrl, BOOL bReqTopMostDialog, LPCSTR pszComment, LPCSTR pszReferer, BOOL bSilent, DWORD dwForceAutoLaunch, BOOL *pbAutoStart, vmsDWCD_AdditionalParameters* pParams, UINT* pRes)
00958 {
00959 vmsDownloadSmartPtr dld;
00960 Download_CreateInstance (dld);
00961
00962 #ifdef _USELOGGING
00963 LOG ("creating new download..." << nl);
00964
00965 if (pszStartUrl)
00966 LOG ("url is \"" << pszStartUrl << "\"" << nl);
00967 if (pszReferer)
00968 LOG ("referer is \"" << pszReferer << "\"" << nl);
00969 if (pszComment)
00970 LOG ("comment is \"" << pszComment << "\"" << nl);
00971 #endif
00972
00973 UINT res = IDOK;
00974 bool bPlaceToTop = false;
00975 BOOL bScheduled = FALSE;
00976 fsSchedule task;
00977
00978 if (bSilent == FALSE)
00979 {
00980 CCreateDownloadDlg dlg (dld, pszStartUrl, pszComment, pszReferer, this);
00981 dlg.m_bReqTopMostDialog = bReqTopMostDialog;
00982
00983 if (pParams)
00984 {
00985 if ((pParams->dwMask & DWCDAP_FLAGS) && (pParams->dwFlags & DWDCDAP_F_SETFOCUSTOOKBTN))
00986 dlg.m_bSetFocusToOKBtn = true;
00987 if (pParams->dwMask & DWCDAP_COOKIES)
00988 dlg.m_pszCookies = pParams->strCookies;
00989 if (pParams->dwMask & DWCDAP_POSTDATA)
00990 dlg.m_pszPostData = pParams->strPostData;
00991 if (pParams->dwMask & DWCDAP_GROUP)
00992 dlg.m_pGroup = pParams->pGroup;
00993 }
00994
00995 res = _DlgMgr.DoModal (&dlg);
00996 bPlaceToTop = dlg.m_bPlaceAtTop;
00997 bScheduled = dlg.m_bScheduled;
00998 task = dlg.m_task;
00999 }
01000 else
01001 {
01002 if (FALSE == CreateDownloadWithDefSettings (dld, pszStartUrl))
01003 return FALSE;
01004
01005 if (pbAutoStart)
01006 dld->bAutoStart = *pbAutoStart;
01007
01008 if (pszComment)
01009 dld->strComment = pszComment;
01010
01011 if (pszReferer)
01012 {
01013 SAFE_DELETE_ARRAY (dld->pMgr->GetDownloadMgr ()->GetDNP ()->pszReferer);
01014 dld->pMgr->GetDownloadMgr ()->GetDNP ()->pszReferer = new char [strlen (pszReferer) + 1];
01015 strcpy (dld->pMgr->GetDownloadMgr ()->GetDNP ()->pszReferer, pszReferer);
01016 }
01017
01018 if (dwForceAutoLaunch != DWCD_NOFORCEAUTOLAUNCH)
01019 {
01020 dld->pMgr->GetDownloadMgr ()->GetDP ()->dwFlags |= DPF_STARTWHENDONE;
01021 if (dwForceAutoLaunch == DWCD_FORCEAUTOLAUNCH_NOCONF)
01022 dld->pMgr->GetDownloadMgr ()->GetDP ()->dwFlags |= DPF_STARTWHENDONE_NOCONF;
01023 }
01024
01025 BOOL bShowUI = TRUE;
01026 if (pParams && 0 != (pParams->dwFlags & DWDCDAP_F_NO_UI))
01027 bShowUI = FALSE;
01028
01029 if (pParams && (pParams->dwMask & DWCDAP_FLAGS) &&
01030 (pParams->dwFlags & DWDCDAP_F_DONTCHECKURLALREADYEXISTS))
01031 {
01032 if (_DldsMgr.IsSuchUrlExistsAlready (dld) != -1)
01033 {
01034 if (dld->pMgr->GetDownloadMgr ())
01035 {
01036 dld->pMgr->GetDownloadMgr ()->GetDP ()->enAER = AER_RENAME;
01037 }
01038 }
01039 }
01040 else
01041 {
01042 int ret = CCreateDownloadDlg::_CheckDownloadAlrExists (dld, TRUE, bShowUI);
01043 if (ret)
01044 {
01045 if (ret == 1)
01046 res = ID_DLNOTADDED;
01047 else
01048 res = IDCANCEL;
01049 }
01050 }
01051 }
01052
01053 if (res != IDOK)
01054 {
01055 if (pRes)
01056 *pRes = res;
01057
01058 return FALSE;
01059 }
01060
01061 if (pParams)
01062 {
01063 if (pParams->dwMask & DWCDAP_GROUP)
01064 {
01065 dld->pGroup = pParams->pGroup;
01066
01067 LPCSTR pszFolder = dld->pGroup->strOutFolder;
01068 delete [] dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName;
01069 dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName = new char [lstrlen (pszFolder) + 2];
01070 lstrcpy (dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName, pszFolder);
01071 if (pszFolder [lstrlen (pszFolder) - 1] != '\\')
01072 lstrcat (dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName, "\\");
01073 }
01074
01075 if (pParams->dwMask & DWCDAP_FILENAME)
01076 {
01077 fsDownload_Properties *dp = dld->pMgr->GetDownloadMgr ()->GetDP ();
01078 if (dp->pszFileName [lstrlen (dp->pszFileName) - 1] == '\\' ||
01079 dp->pszFileName [lstrlen (dp->pszFileName) - 1] == '/')
01080 {
01081 LPSTR psz = new char [lstrlen (dp->pszFileName) + pParams->strFileName.GetLength () + 1];
01082 lstrcpy (psz, dp->pszFileName);
01083 lstrcat (psz, pParams->strFileName);
01084 delete [] dp->pszFileName;
01085 dp->pszFileName = psz;
01086 }
01087 }
01088
01089 if (pParams->dwMask & DWCDAP_FLAGS)
01090 {
01091 if (pParams->dwFlags & DWDCDAP_F_SAVETODESKTOP)
01092 {
01093 char szDesktop [MY_MAX_PATH];
01094 LPITEMIDLIST pidl = NULL;
01095 SHGetSpecialFolderLocation (NULL, CSIDL_DESKTOP, &pidl);
01096 SHGetPathFromIDList (pidl, szDesktop);
01097 if (szDesktop [lstrlen (szDesktop) - 1] != '\\')
01098 lstrcat (szDesktop, "\\");
01099 delete [] dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName;
01100 dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName = new char [lstrlen (szDesktop) + 1];
01101 lstrcpy (dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName, szDesktop);
01102 }
01103 else if (pParams->dwFlags & DWDCDAP_F_SAVETOTEMPFLDR)
01104 {
01105 char szTmpFolder [MY_MAX_PATH];
01106 GetTempPath (MY_MAX_PATH, szTmpFolder);
01107 if (szTmpFolder [lstrlen (szTmpFolder) - 1] != '\\')
01108 lstrcat (szTmpFolder, "\\");
01109 delete [] dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName;
01110 dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName = new char [lstrlen (szTmpFolder) + 1];
01111 lstrcpy (dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName, szTmpFolder);
01112 }
01113
01114 if (pParams->dwFlags & DWDCDAP_F_DELWHENDONE)
01115 dld->dwFlags |= DLD_DELETEWHENDONE | DLD_DELETEFILEATRESTART;
01116
01117 if (pParams->dwFlags & DWDCDAP_F_IGNOREALLRESTRICTS)
01118 dld->pMgr->GetDownloadMgr ()->GetDP ()->bIgnoreRestrictions = TRUE;
01119
01120 if (pParams->dwFlags & DWDCDAP_F_PLACETOTOP)
01121 bPlaceToTop = true;
01122
01123 if (pParams->dwFlags & DWDCDAP_F_NOGRPAUTOCHANGE)
01124 dld->dwFlags |= DLD_NOAUTOCHANGECURGRPFILTER;
01125
01126 if (pParams->dwFlags & DWDCDAP_F_FORCEAUTOSTART)
01127 dld->bAutoStart = TRUE;
01128
01129 if (pParams->dwFlags & DWDCDAP_F_DISABLEMALICIOUSCHECK)
01130 dld->dwFlags |= DLD_MALICIOUS_DISABLE_CHECK;
01131
01132 if (pParams->dwFlags & DWDCDAP_F_FLASHVIDEODOWNLOAD)
01133 dld->dwFlags |= DLD_FLASH_VIDEO;
01134 }
01135
01136 if (pParams->dwMask & DWCDAP_COOKIES)
01137 {
01138 SAFE_DELETE_ARRAY (dld->pMgr->GetDownloadMgr ()->GetDNP ()->pszCookies);
01139 dld->pMgr->GetDownloadMgr ()->GetDNP ()->pszCookies = new char [pParams->strCookies.GetLength () + 1];
01140 lstrcpy (dld->pMgr->GetDownloadMgr ()->GetDNP ()->pszCookies, pParams->strCookies);
01141 }
01142
01143 if (pParams->dwMask & DWCDAP_POSTDATA)
01144 {
01145 SAFE_DELETE_ARRAY (dld->pMgr->GetDownloadMgr ()->GetDNP ()->pszPostData);
01146 dld->pMgr->GetDownloadMgr ()->GetDNP ()->pszPostData = new char [pParams->strPostData.GetLength () + 1];
01147 lstrcpy (dld->pMgr->GetDownloadMgr ()->GetDNP ()->pszPostData, pParams->strPostData);
01148 }
01149
01150 if (pParams->dwMask & DWCDAP_MEDIA_CONVERT_SETTINGS)
01151 {
01152 dld->dwFlags |= DLD_MF_AUTO_CONVERT;
01153 _MediaConvertMgr.AddTask (dld, pParams->stgsMediaConvert);
01154 }
01155 }
01156
01157 LOG ("user approved download creation" << nl);
01158
01159 CreateDownload (dld, bScheduled ? &task : NULL, FALSE, bPlaceToTop);
01160
01161 if (dld->dwFlags & DLD_FLASH_VIDEO)
01162 _pwndFVDownloads->AddDownload (dld);
01163
01164 return TRUE;
01165 }
01166
01167 void CDownloadsWnd::StartDownloadsInList()
01168 {
01169 CDownloads_Tasks *tasks = &m_wndDownloads.m_tasks;
01170 int cDlds = tasks->GetItemCount ();
01171 DLDS_LIST vDlds;
01172
01173 for (int i = 0; i < cDlds; i++)
01174 {
01175 vmsDownloadSmartPtr dld = (fsDownload*) tasks->GetItemData (i);
01176 vDlds.push_back (dld);
01177 }
01178
01179 _DldsMgr.StartDownloads (vDlds, TRUE);
01180 }
01181
01182 void CDownloadsWnd::StopDownloadsInList()
01183 {
01184 CDownloads_Tasks *tasks = &m_wndDownloads.m_tasks;
01185 int cDlds = tasks->GetItemCount ();
01186 DLDS_LIST vDlds;
01187
01188 for (int i = 0; i < cDlds; i++)
01189 {
01190 vmsDownloadSmartPtr dld = (fsDownload*) tasks->GetItemData (i);
01191 vDlds.push_back (dld);
01192 }
01193
01194 _DldsMgr.StopDownloads (vDlds, TRUE);
01195
01196 for (i = 0; i < cDlds; i++)
01197 tasks->UpdateDownload (vDlds [i]);
01198 }
01199
01200 void CDownloadsWnd::DeleteDownloadsInList()
01201 {
01202 CDownloads_Tasks *tasks = &m_wndDownloads.m_tasks;
01203 int cDlds = tasks->GetItemCount ();
01204
01205 if (cDlds == 0)
01206 return;
01207
01208 if (_App.Deleted_ConfirmDeletion ())
01209 if (IDNO == MessageBox (LS (L_AREYOUSURE), LS (L_CONFIRMATION), MB_ICONQUESTION|MB_YESNO))
01210 return;
01211
01212 cDlds = tasks->GetItemCount ();
01213
01214 DLDS_LIST vDlds;
01215
01216 for (int i = 0; i < cDlds; i++)
01217 vDlds.push_back ((fsDownload*) tasks->GetItemData (i));
01218
01219 tasks->ShowWindow (SW_HIDE);
01220 if (m_bShowGroups)
01221 m_wndGroups.ShowWindow (SW_HIDE);
01222
01223 DeleteDownloads (vDlds, TRUE, FALSE);
01224
01225 tasks->ShowWindow (SW_SHOW);
01226 if (m_bShowGroups)
01227 m_wndGroups.ShowWindow (SW_SHOW);
01228 }
01229
01230 void CDownloadsWnd::DeleteCompletedDownloadsInList()
01231 {
01232 CDownloads_Tasks *tasks = &m_wndDownloads.m_tasks;
01233 int cDlds = tasks->GetItemCount ();
01234
01235 DLDS_LIST vDlds;
01236
01237 for (int i = 0; i < cDlds; i++)
01238 {
01239 vmsDownloadSmartPtr dld = (fsDownload*) tasks->GetItemData (i);
01240 if (dld->pMgr->IsDone ())
01241 vDlds.push_back (dld);
01242 }
01243
01244 if (vDlds.size () == 0)
01245 return;
01246
01247 DeleteDownloads (vDlds, TRUE, FALSE);
01248 }
01249
01250 void CDownloadsWnd::OnDldschedule()
01251 {
01252 m_wndDownloads.m_tasks.OnDldschedule ();
01253 }
01254
01255 void CDownloadsWnd::UpdateAllDownloads()
01256 {
01257 m_wndDownloads.m_tasks.UpdateAllDownloads ();
01258 }
01259
01260 void CDownloadsWnd::OnDldautostart()
01261 {
01262 m_wndDownloads.m_tasks.OnDldautostart ();
01263 }
01264
01265 void CDownloadsWnd::CreateDownloads(DLDS_LIST &vDlds, fsSchedule *task, BOOL bDontUseSounds, bool bPlaceToTop)
01266 {
01267 if (vDlds.size () == 0)
01268 return;
01269
01270
01271 if (task)
01272 {
01273 task->wts.enType = WTS_STARTDOWNLOAD;
01274 fsnew1 (task->wts.pvIDs, fs::list <UINT>);
01275 }
01276
01277 int sz = vDlds.size ();
01278
01279 _DldsMgr.LockList ();
01280 m_wndDownloads.m_tasks.LockList ();
01281
01282 for (int i = 0; i < sz; i++)
01283 {
01284 UINT uID = _DldsMgr.Add (vDlds [i], FALSE, bPlaceToTop);
01285
01286
01287 if (task)
01288 task->wts.pvIDs->add (uID);
01289 }
01290
01291 if (task)
01292 _pwndScheduler->AddTask (task);
01293
01294 fsDldFilter *filter = m_wndGroups.GetCurrentFilter ();
01295
01296
01297 BOOL bNeedAdd = filter != NULL && filter->IsSatisfies (vDlds [0]);
01298
01299 BOOL bNeedShow = (vDlds [0]->dwFlags & (DLD_USEDBYHTMLSPIDER | DLD_NOAUTOCHANGECURGRPFILTER)) == 0;
01300
01301 if (bNeedAdd == FALSE)
01302 {
01303 if (bNeedShow)
01304 {
01305 m_wndDownloads.m_tasks.UnlockList ();
01306 m_wndGroups.SetGroupFilter (vDlds [0]->pGroup);
01307 m_wndDownloads.m_tasks.LockList ();
01308 vmsDownloadSmartPtr dld = _DldsMgr.GetDownload (_DldsMgr.GetCount ()-1);
01309 m_wndDownloads.m_tasks.SelectDownload (dld);
01310 }
01311 }
01312 else
01313 {
01314 LOG ("createdld: adding " << (DWORD)vDlds.size () << " downloads to list" << nl);
01315
01316
01317 int start = bPlaceToTop ? 0 : _DldsMgr.GetCount () - vDlds.size ();
01318
01319 LOG ("createdld: start = " << start << nl);
01320
01321 sz = bPlaceToTop ? vDlds.size () : _DldsMgr.GetCount ();
01322
01323 LOG ("createdld: sz = " << sz << nl);
01324
01325 m_wndDownloads.m_tasks.BeginAddDownloads ();
01326
01327 for (i = start; i < sz; i++)
01328 {
01329 vmsDownloadSmartPtr dld = _DldsMgr.GetDownload (i);
01330 m_wndDownloads.m_tasks.AddDownloadToList (dld, FALSE, bPlaceToTop);
01331 }
01332
01333 m_wndDownloads.m_tasks.EndAddDownloads ();
01334
01335 if (bNeedShow)
01336 m_wndDownloads.m_tasks.SelectDownload (_DldsMgr.GetDownload (bPlaceToTop ? start : sz-1));
01337 }
01338
01339 _DldsMgr.UnlockList ();
01340 m_wndDownloads.m_tasks.UnlockList ();
01341
01342 if (bDontUseSounds == FALSE)
01343 _Snds.Event (SME_DOWNLOADADDED);
01344
01345 _DldsMgr.ProcessDownloads ();
01346
01347 UpdateNumbersOfDownloadsInGroups ();
01348 }
01349
01350 void CDownloadsWnd::SaveAll(BOOL )
01351 {
01352 try{
01353 _DldsGrps.SaveToDisk ();
01354 _DldsMgr.Save ();
01355 _DldsMgr.SaveSettings ();
01356 _MediaConvertMgr.SaveState ();
01357
01358 ASSERT (::IsWindow (m_hWnd));
01359
01360 _App.View_SaveWndSize (&m_wndGroups, "DownloadsGroups");
01361 m_wndDownloads.SaveState ();
01362 m_wndHistory.SaveState ("DownloadsHistory");
01363 m_wndDeleted.SaveState ("DownloadsDeleted");
01364 _App.View_SizesInBytes (m_wndDownloads.m_tasks.m_bSizesInBytes);
01365 _App.View_DWWN (m_enDWWN);
01366 }catch (...){}
01367 }
01368
01369 LRESULT CDownloadsWnd::OnUpdateToolBar(WPARAM wp, LPARAM)
01370 {
01371 return m_wndDownloads.m_tasks.OnUpdateToolBar (wp);
01372 }
01373
01374 void CDownloadsWnd::UpdateTrayIconPlusOthers()
01375 {
01376 if (m_bDontUpdateTIPO)
01377 return;
01378
01379 try {
01380
01381 BOOL bRun = FALSE;
01382 BOOL bRunOk = FALSE;
01383 BOOL bWaitRunOk = FALSE;
01384 BOOL bUploading = FALSE;
01385
01386 for (size_t i = 0; i < _DldsMgr.GetCount (); i++)
01387 {
01388 vmsDownloadSmartPtr dld = _DldsMgr.GetDownload (i);
01389 vmsDownloadMgrSmartPtr pMgr = dld->pMgr;
01390
01391 if (pMgr->IsRunning () && pMgr->IsDone () == FALSE)
01392 {
01393 bRun = TRUE;
01394
01395 if (pMgr->GetDownloadingSectionCount ())
01396 bRunOk = TRUE;
01397
01398 if (pMgr->IsCantStart () == FALSE)
01399 bWaitRunOk = TRUE;
01400 }
01401
01402 if (bUploading == FALSE && dld->pMgr->IsBittorrent () &&
01403 dld->pMgr->GetBtDownloadMgr ()->GetUploadSpeed ())
01404 bUploading = TRUE;
01405
01406 if (bRunOk)
01407 break;
01408
01409 }
01410
01411 if (_App.View_FloatingInfoWindow ())
01412 {
01413 CMainFrame* pFrm = (CMainFrame*) AfxGetApp ()->m_pMainWnd;
01414 if (bRun || bUploading)
01415 {
01416 if (pFrm->IsFloatingInfoWindowVisible () == FALSE)
01417 pFrm->ShowFloatingInfoWindow (TRUE);
01418 }
01419 else
01420 {
01421 if (pFrm->IsFloatingInfoWindowVisible ())
01422 pFrm->ShowFloatingInfoWindow (FALSE);
01423 }
01424 }
01425
01426 if (bRunOk)
01427 {
01428 _TrayMgr.ShowIcon (TRAY_ICON_DOWNLOADING);
01429 }
01430 else if (bRun)
01431 {
01432 if (bWaitRunOk)
01433 _TrayMgr.ShowIcon (TRAY_ICON_UNKNOWN);
01434 else
01435 _TrayMgr.ShowIcon (TRAY_ICON_ERRORS);
01436 }
01437 else
01438 {
01439 _TrayMgr.ShowIcon (TRAY_ICON_NORMAL);
01440 }
01441
01442 }
01443 catch (...) {}
01444 }
01445
01446 void CDownloadsWnd::OnShowAllGroups()
01447 {
01448 ShowAllGroups (m_bShowGroups == FALSE);
01449 }
01450
01451 void CDownloadsWnd::ShowAllGroups(BOOL bShow)
01452 {
01453 UINT nShow = bShow ? SW_SHOW : SW_HIDE;
01454 m_wndGroups.ShowWindow (nShow);
01455 ::ShowWindow (m_splitter.m_wndSplitter, nShow);
01456
01457 m_bShowGroups = bShow;
01458 _App.View_AllGroups (m_bShowGroups);
01459
01460 RECT rc;
01461 GetClientRect (&rc);
01462 OnSize (0, rc.right, rc.bottom);
01463
01464 if (bShow == FALSE)
01465 m_wndGroups.SelectItem (m_wndGroups.m_hAllGroups);
01466 }
01467
01468 void CDownloadsWnd::OnShowDownloadingInfo()
01469 {
01470 m_wndDownloads.ShowDLInfo (m_wndDownloads.m_bShowDLInfo == FALSE);
01471 }
01472
01473 void CDownloadsWnd::CreateDownload(vmsDownloadSmartPtr dld, fsSchedule *task, BOOL bDontUseSounds, bool bPlaceToTop)
01474 {
01475 DLDS_LIST vDlds;
01476 vDlds.push_back (dld);
01477 CreateDownloads (vDlds, task, bDontUseSounds, bPlaceToTop);
01478 }
01479
01480 void CDownloadsWnd::OnNewGroupCreated (vmsDownloadsGroupSmartPtr pGroup)
01481 {
01482 m_wndGroups.OnNewGroupCreated (pGroup);
01483 }
01484
01485 void CDownloadsWnd::UpdateDownload(vmsDownloadSmartPtr dld, BOOL )
01486 {
01487 m_wndDownloads.m_tasks.UpdateDownload (dld);
01488 }
01489
01490 void CDownloadsWnd::OnDownloadsGroupChanged()
01491 {
01492 if (GetCurrentFilter () && GetCurrentFilter ()->GetType () == DFT_GROUP)
01493 ApplyCurrentFilter ();
01494 }
01495
01496 void CDownloadsWnd::DeleteDownload(vmsDownloadSmartPtr dld, BOOL bByUser)
01497 {
01498 DLDS_LIST vpDlds;
01499 vpDlds.push_back (dld);
01500 DeleteDownloads (vpDlds, bByUser, FALSE);
01501 }
01502
01503 void CDownloadsWnd::OnSetFocus(CWnd* pOldWnd)
01504 {
01505 CWnd::OnSetFocus(pOldWnd);
01506 m_wndDownloads.m_tasks.SetFocus ();
01507 }
01508
01509 void CDownloadsWnd::OnDldaddsection()
01510 {
01511 m_wndDownloads.m_tasks.OnDldaddsection ();
01512 }
01513
01514 void CDownloadsWnd::OnDlddelsection()
01515 {
01516 m_wndDownloads.m_tasks.OnDlddelsection ();
01517 }
01518
01519 void CDownloadsWnd::OnDldrestart()
01520 {
01521 m_wndDownloads.m_tasks.OnDldrestart ();
01522 }
01523
01524 void CDownloadsWnd::OnDldqsize()
01525 {
01526 m_wndDownloads.m_tasks.OnDldqsize ();
01527 }
01528
01529 HWND CDownloadsWnd::Plugin_CreateMainWindow(HWND hParent)
01530 {
01531 fsnew1 (_pwndDownloads, CDownloadsWnd);
01532
01533 _pwndDownloads->Create (CWnd::FromHandle (hParent));
01534
01535 return _pwndDownloads->m_hWnd;
01536 }
01537
01538 void CDownloadsWnd::Plugin_GetMenuImages(fsSetImage **ppImages, int *pcImages)
01539 {
01540 static fsSetImage images [] =
01541 {
01542 fsSetImage (ID_DLDCREATE, 0),
01543 fsSetImage (ID_DLDSTART, 1),
01544 fsSetImage (ID_DLDSTOP, 2),
01545
01546 fsSetImage (ID_DLDMOVEUP, 4),
01547 fsSetImage (ID_DLDMOVEDOWN, 5),
01548 fsSetImage (ID_DLDPROPERTIES, 6),
01549 fsSetImage (ID_DLDDELETE, 7),
01550 fsSetImage (ID_DLDUNPACK, 8),
01551 };
01552
01553 *ppImages = images;
01554 *pcImages = sizeof (images) / sizeof (fsSetImage);
01555 }
01556
01557 void CDownloadsWnd::Plugin_GetMenuViewItems(wgMenuViewItem **ppItems, int *cItems)
01558 {
01559 static wgMenuViewItem aItems [] = {
01560 wgMenuViewItem ("", &_pwndDownloads->m_bShowGroups),
01561 wgMenuViewItem ("", &_pwndDownloads->m_wndDownloads.m_bShowDLInfo),
01562 };
01563
01564 aItems [0].pszName = LS (L_DLGROUPS);
01565 aItems [1].pszName = LS (L_DLINFO);
01566
01567 *ppItems = aItems;
01568 *cItems = sizeof (aItems) / sizeof (wgMenuViewItem);
01569 }
01570
01571 void CDownloadsWnd::Plugin_GetPluginNames(LPCSTR *ppszLong, LPCSTR *ppszShort)
01572 {
01573 static CString strName;
01574 strName = LSNP (L_DOWNLOADS);
01575 *ppszLong = *ppszShort = strName;
01576 }
01577
01578 void CDownloadsWnd::Plugin_GetToolBarInfo(wgTButtonInfo **ppButtons, int *pcButtons)
01579 {
01580 static wgTButtonInfo btns [] =
01581 {
01582 wgTButtonInfo (ID_DLDCREATE, TBSTYLE_BUTTON, ""),
01583 wgTButtonInfo (ID_DLDSTART, TBSTYLE_BUTTON, ""),
01584 wgTButtonInfo (ID_DLDSTOP, TBSTYLE_BUTTON, ""),
01585 wgTButtonInfo (ID_DLDSCHEDULE, TBSTYLE_BUTTON, ""),
01586 wgTButtonInfo (0, TBSTYLE_SEP, ""),
01587 wgTButtonInfo (ID_DLDMOVEUP, TBSTYLE_BUTTON, ""),
01588 wgTButtonInfo (ID_DLDMOVEDOWN, TBSTYLE_BUTTON, ""),
01589 };
01590
01591 btns [0].pszToolTip = LS (L_NEWDLD);
01592 btns [1].pszToolTip = LS (L_STARTDLDS);
01593 btns [2].pszToolTip = LS (L_STOPDLDS);
01594 btns [3].pszToolTip = LS (L_SCHEDULEDLDS);
01595 btns [5].pszToolTip = LS (L_MOVEDLDUP);
01596 btns [6].pszToolTip = LS (L_MOVEDLDDOWN);
01597
01598 *ppButtons = btns;
01599 *pcButtons = sizeof (btns) / sizeof (wgTButtonInfo);
01600 }
01601
01602 void CDownloadsWnd::Plugin_SetLanguage(wgLanguage, HMENU hMenuMain, HMENU hMenuView)
01603 {
01604 CMenu *menu = CMenu::FromHandle (hMenuMain);
01605 _pwndDownloads->m_wndDownloads.m_tasks.ApplyLanguageToMenu (menu);
01606 _pwndDownloads->m_wndGroups.ApplyLanguage ();
01607 _pwndDownloads->m_wndDownloads.ApplyLanguage ();
01608 _pwndDownloads->m_wndHistory.ApplyLanguage ();
01609 _pwndDownloads->m_wndDeleted.ApplyLanguage ();
01610 _pwndDownloads->ApplyLanguageToMenuView (CMenu::FromHandle (hMenuView));
01611 }
01612
01613 void CDownloadsWnd::ApplyLanguageToMenuView(CMenu *menu)
01614 {
01615 menu->ModifyMenu (0, MF_BYPOSITION | MF_STRING, 0, LS (L_LISTOFDLDS));
01616 menu->ModifyMenu (1, MF_BYPOSITION | MF_STRING, 0, LS (L_LOG));
01617
01618 UINT aCmds [] = {ID_DLLIST_1, ID_DLLIST_2, ID_DLLIST_3, ID_DLLIST_4, ID_DLLIST_5,
01619 ID_DLLIST_6, ID_DLLIST_7, ID_DLLIST_8, ID_DLOG_1, ID_DLOG_2, ID_DLOG_3 };
01620 LPCSTR apszCmds [] = {LS (L_FILENAME), LS (L_SIZE), LS (L_DOWNLOADED),
01621 LS (L_TIMELEFT), LS (L_SECTIONS), LS (L_SPEED), LS (L_COMMENT), LS (L_ADDED),
01622 LS (L_TIME), LS (L_DATE), LS (L_INFORMATION)};
01623
01624 for (int i = 0; i < sizeof (aCmds) / sizeof (UINT); i++)
01625 menu->ModifyMenu (aCmds [i], MF_BYCOMMAND|MF_STRING, aCmds [i], apszCmds [i]);
01626 }
01627
01628 LRESULT CDownloadsWnd::OnUpdateMenuView(WPARAM, LPARAM lp)
01629 {
01630 HMENU* pMenus = (HMENU*) lp;
01631 UpdateDLListColMenu (CMenu::FromHandle (pMenus [0]));
01632 UpdateDLLogColMenu (CMenu::FromHandle (pMenus [1]));
01633 return 0;
01634 }
01635
01636 void CDownloadsWnd::UpdateDLListColMenu(CMenu *menu)
01637 {
01638 BOOL bEn = m_wndDownloads.m_tasks.GetHeaderCtrl ()->GetItemCount () > 1;
01639 for (int i = 0; i < 8; i++)
01640 {
01641 if (m_wndDownloads.m_tasks.IsColumnShown (i))
01642 {
01643 menu->CheckMenuItem (ID_DLLIST_1+i, MF_CHECKED);
01644 if (bEn == FALSE)
01645 menu->EnableMenuItem (ID_DLLIST_1+i, MF_GRAYED);
01646 }
01647 }
01648 }
01649
01650 void CDownloadsWnd::UpdateDLLogColMenu(CMenu *menu)
01651 {
01652
01653 BOOL bEn = m_wndDownloads.m_info.Get_LogWindow ()->GetHeaderCtrl ()->GetItemCount () > 1;
01654 for (int i = 0; i < 3; i++)
01655 {
01656 if (m_wndDownloads.m_info.Get_LogWindow ()->IsColumnShown (i))
01657 {
01658 menu->CheckMenuItem (ID_DLOG_1+i, MF_CHECKED);
01659 if (bEn == FALSE)
01660
01661 menu->EnableMenuItem (ID_DLOG_1+i, MF_GRAYED);
01662 }
01663 }
01664 }
01665
01666 void CDownloadsWnd::OnDLListShowCol(UINT uCmd)
01667 {
01668 int iCol = uCmd - ID_DLLIST_1;
01669 m_wndDownloads.m_tasks.ChangeColumnVisibility (iCol);
01670 }
01671
01672 void CDownloadsWnd::OnDLLogShowCol(UINT nCmd)
01673 {
01674 int iCol = nCmd - ID_DLOG_1;
01675 m_wndDownloads.m_info.Get_LogWindow ()->ChangeColumnVisibility (iCol);
01676 }
01677
01678 void CDownloadsWnd::FilterDownloads(fsDldFilter *filter)
01679 {
01680 if (filter == NULL)
01681 {
01682 m_wndDownloads.m_tasks.DeleteAllItems ();
01683 return;
01684 }
01685
01686 FilterDownloads2 (filter);
01687 }
01688
01689 void CDownloadsWnd::ApplyCurrentFilter()
01690 {
01691 FilterDownloads (m_wndGroups.GetCurrentFilter ());
01692 }
01693
01694 fsDldFilter* CDownloadsWnd::GetCurrentFilter()
01695 {
01696 return m_wndGroups.GetCurrentFilter ();
01697 }
01698
01699 void CDownloadsWnd::FilterDownloads2(fsDldFilter *filter, int *pProgress)
01700 {
01701 CDownloads_Tasks *pList = &m_wndDownloads.m_tasks;
01702
01703 if (filter == NULL)
01704 return;
01705
01706 while (_DldsMgr.IsDeletingNow ())
01707 {
01708 MSG msg;
01709 while (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
01710 DispatchMessage (&msg);
01711
01712 Sleep (50);
01713 }
01714
01715 pList->LockList ();
01716
01717 try {
01718
01719 pList->DeleteAllItems ();
01720
01721 pList->BeginAddDownloads ();
01722
01723 vmsDownloadSmartPtr dldSel;
01724
01725 for (size_t i = 0; i < _DldsMgr.GetCount (); i++)
01726 {
01727 vmsDownloadSmartPtr dld = _DldsMgr.GetDownload (i);
01728 if (filter->IsSatisfies (dld)) {
01729 pList->AddDownloadToList (dld, FALSE);
01730 if (dldSel == NULL)
01731 dldSel = dld;
01732 }
01733 if (pProgress)
01734 *pProgress = (int) ((double) i / (double) _DldsMgr.GetCount () * 100);
01735 }
01736
01737 if (dldSel != NULL)
01738 pList->SelectDownload (dldSel);
01739
01740 } catch (...) {}
01741
01742 pList->EndAddDownloads ();
01743
01744 pList->UnlockList ();
01745 }
01746
01747 DWORD WINAPI CDownloadsWnd::_threadFilterDownloads(LPVOID lp)
01748 {
01749 ProcWaitInfo *info = (ProcWaitInfo*) lp;
01750 CDownloadsWnd* pThis = (CDownloadsWnd*) info->lpParam1;
01751 fsDldFilter *filter = (fsDldFilter*) info->lpParam2;
01752 pThis->FilterDownloads2 (filter, &info->iProgress);
01753 info->bWaitDone = TRUE;
01754 return 0;
01755 }
01756
01757 void CDownloadsWnd::OnDldcreatebatch()
01758 {
01759 m_wndDownloads.m_tasks.OnDldcreatebatch ();
01760 }
01761
01762 LRESULT CDownloadsWnd::OnInsert(WPARAM, LPARAM)
01763 {
01764 m_wndDownloads.m_tasks.OnDldcreate ();
01765 return 0;
01766 }
01767
01768 BOOL CDownloadsWnd::IsSizesInBytes()
01769 {
01770 return m_wndDownloads.m_tasks.m_bSizesInBytes;
01771 }
01772
01773 BOOL CDownloadsWnd::CreateDownloadWithDefSettings(vmsDownloadSmartPtr dld, LPCSTR pszUrl)
01774 {
01775 if (dld->pMgr == NULL)
01776 dld->pMgr = new vmsDownloadMgrEx;
01777
01778 if (dld->pMgr->GetDownloadMgr () == NULL)
01779 {
01780 ASSERT (dld->pMgr->GetBtDownloadMgr () == NULL);
01781 dld->pMgr->Attach (new fsDownloadMgr (dld));
01782 }
01783
01784 if (IR_SUCCESS != dld->pMgr->GetDownloadMgr ()->CreateByUrl (pszUrl, TRUE))
01785 return FALSE;
01786
01787 fsDownload_NetworkProperties* dnp = dld->pMgr->GetDownloadMgr ()->GetDNP ();
01788
01789 fsSiteInfo *site = _SitesMgr.FindSite2 (dnp->pszServerName, fsNPToSiteValidFor (dnp->enProtocol));
01790 if (site && site->strUser != NULL && *dnp->pszUserName == 0)
01791 fsDNP_SetAuth (dnp, site->strUser, site->strPassword);
01792
01793 CString strFolder;
01794
01795 vmsDownloadsGroupSmartPtr pGroup = _DldsGrps.FindGroup (_App.NewDL_GroupId ());
01796
01797 if (pGroup == NULL)
01798 {
01799 if (site && site->pGroup != NULL)
01800 {
01801 pGroup = site->pGroup;
01802 }
01803 else
01804 {
01805 CHAR szFile [10000];
01806 *szFile = 0;
01807
01808 fsFileNameFromUrlPath (dnp->pszPathName, dnp->enProtocol == NP_FTP,
01809 TRUE, szFile, sizeof (szFile));
01810
01811 int len = strlen (szFile);
01812
01813 if (len)
01814 {
01815 for (int i = len-1; i > 0; i--)
01816 if (szFile [i] == '.')
01817 break;
01818
01819 if (i && i < len-1)
01820 {
01821 i++;
01822 CHAR szExt [1000];
01823 strcpy (szExt, szFile + i);
01824 pGroup = _DldsGrps.FindGroupByExt (szExt);
01825 }
01826 }
01827 }
01828 }
01829
01830 if (pGroup == NULL)
01831 pGroup = _DldsGrps.FindGroup (GRP_OTHER_ID);
01832
01833 dld->pGroup = pGroup;
01834
01835 dld->bAutoStart = _App.NewDL_AutoStart ();
01836 if (_App.NewDL_UseZIPPreview ())
01837 dld->pMgr->GetDownloadMgr ()->GetDP ()->dwFlags |= DPF_USEZIPPREVIEW;
01838 else
01839 dld->pMgr->GetDownloadMgr ()->GetDP ()->dwFlags &= ~DPF_USEZIPPREVIEW;
01840
01841 if (strFolder.GetLength () == 0)
01842 strFolder = pGroup->strOutFolder;
01843 if (strFolder.Right (1) != '\\' && strFolder.Right (1) != '/')
01844 strFolder += '\\';
01845
01846 SAFE_DELETE (dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName);
01847 dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName = new char [strFolder.GetLength () + 1];
01848 strcpy (dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName, strFolder);
01849
01850 return TRUE;
01851 }
01852
01853 fsDLsWndWhatIsNow CDownloadsWnd::Get_DWWN()
01854 {
01855 return m_enDWWN;
01856 }
01857
01858 void CDownloadsWnd::ApplyDWWN(BOOL bRecalcSize)
01859 {
01860 switch (m_enDWWN)
01861 {
01862 case DWWN_LISTOFDOWNLOADS:
01863 m_splitter.SetWnd2 (m_wndDownloads.m_hWnd);
01864 break;
01865
01866 case DWWN_HISTORY:
01867 m_splitter.SetWnd2 (m_wndHistory.m_hWnd);
01868 break;
01869
01870 case DWWN_DELETED:
01871 m_splitter.SetWnd2 (m_wndDeleted.m_hWnd);
01872 break;
01873 }
01874
01875 if (bRecalcSize)
01876 m_splitter.ApplyRatio ();
01877
01878 switch (m_enDWWN)
01879 {
01880 case DWWN_LISTOFDOWNLOADS:
01881 m_wndHistory.ShowWindow (SW_HIDE);
01882 m_wndDeleted.ShowWindow (SW_HIDE);
01883 m_wndDownloads.ShowWindow (SW_SHOW);
01884 break;
01885
01886 case DWWN_HISTORY:
01887 m_wndDownloads.ShowWindow (SW_HIDE);
01888 m_wndDeleted.ShowWindow (SW_HIDE);
01889 m_wndHistory.ShowWindow (SW_SHOW);
01890 break;
01891
01892 case DWWN_DELETED:
01893 m_wndDownloads.ShowWindow (SW_HIDE);
01894 m_wndHistory.ShowWindow (SW_HIDE);
01895 m_wndDeleted.ShowWindow (SW_SHOW);
01896 break;
01897 }
01898 }
01899
01900 void CDownloadsWnd::Set_DWWN(fsDLsWndWhatIsNow en)
01901 {
01902 if (en != m_enDWWN)
01903 {
01904 m_enDWWN = en;
01905 ApplyDWWN (TRUE);
01906 }
01907 }
01908
01909 void CDownloadsWnd::ApplyHistoryCurrentFilter()
01910 {
01911 m_wndHistory.ApplyFilter (m_wndGroups.GetHistoryCurrentFilter ());
01912 }
01913
01914 void CDownloadsWnd::ShowAllDownloads()
01915 {
01916 m_wndGroups.SetFilter_AllDownloads ();
01917 }
01918
01919 void CDownloadsWnd::SelectDownload(vmsDownloadSmartPtr dld)
01920 {
01921 fsDldFilter *filter = m_wndGroups.GetCurrentFilter ();
01922
01923 if (filter == NULL || filter->IsSatisfies (dld) == FALSE)
01924 m_wndGroups.SetGroupFilter (dld->pGroup);
01925
01926 m_wndDownloads.m_tasks.SelectDownload (dld);
01927 }
01928
01929 void CDownloadsWnd::FindDownloads_Start()
01930 {
01931 m_finder.PrepareFind ();
01932 if (FALSE == m_finder.FindNext ())
01933 MessageBox (LS (L_THEREISNOITEMS), LS (L_FINDDONE), MB_ICONEXCLAMATION);
01934 }
01935
01936 void CDownloadsWnd::FindDownloads_FindNext()
01937 {
01938 if (FALSE == m_finder.FindNext ())
01939 MessageBox (LS (L_THEREISNOMOREITEMS), LS (L_FINDDONE), MB_ICONEXCLAMATION);
01940 }
01941
01942 void CDownloadsWnd::ShowAllHistory()
01943 {
01944 m_wndGroups.SetFilter_AllHistory ();
01945 }
01946
01947 void CDownloadsWnd::SelectHistRecord(fsDLHistoryRecord *rec)
01948 {
01949 m_wndHistory.SelectRecord (rec);
01950 }
01951
01952 void CDownloadsWnd::ShowDeletedDownloads()
01953 {
01954 m_wndGroups.SetFilter_DeletedDownloads ();
01955 }
01956
01957 void CDownloadsWnd::SelectDeletedDownload(vmsDownloadSmartPtr dld)
01958 {
01959 m_wndDeleted.SelectDownload (dld);
01960 }
01961
01962 BOOL CDownloadsWnd::IsFindNextAvail()
01963 {
01964 return m_finder.IsFindNextAvail ();
01965 }
01966
01967 BOOL CDownloadsWnd::OnEraseBkgnd(CDC* pDC)
01968 {
01969 if (_pwndDownloads->m_wndDownloads.m_info.m_video.m_wndVideo.m_player.Get_State () != VFPS_CLOSED)
01970 {
01971 CRect rc;
01972
01973 _pwndDownloads->m_wndDownloads.m_info.m_video.GetWindowRect(&rc);
01974 ScreenToClient(&rc);
01975
01976 pDC->ExcludeClipRect(&rc);
01977 }
01978
01979 return CWnd::OnEraseBkgnd(pDC);
01980 }
01981
01982 void CDownloadsWnd::OnDldcheckvir()
01983 {
01984 m_wndDownloads.m_tasks.OnDldcheckvir ();
01985 }
01986
01987 void CDownloadsWnd::OnDldfind()
01988 {
01989 m_wndDownloads.m_tasks.OnDldfind ();
01990 }
01991
01992 void CDownloadsWnd::OnDldfindnext()
01993 {
01994 m_wndDownloads.m_tasks.OnDldfindnext ();
01995 }
01996
01997 void CDownloadsWnd::RestartDownload(vmsDownloadSmartPtr dld, BOOL bSelThisDld)
01998 {
01999 if (dld->pMgr->IsRunning () == FALSE)
02000 {
02001 dld->pMgr->RestartDownloading ();
02002
02003 SYSTEMTIME time;
02004 GetLocalTime (&time);
02005 SystemTimeToFileTime (&time, &dld->dateAdded);
02006
02007 _DldsMgr.MoveDownloadToEndOfList (dld);
02008
02009 if (-1 != m_wndDownloads.m_tasks.FindItem (dld))
02010 {
02011
02012 m_wndDownloads.m_tasks.DeleteDownload (dld);
02013 m_wndDownloads.m_tasks.AddDownload (dld, FALSE);
02014 }
02015
02016 if (bSelThisDld)
02017 SelectDownload (dld);
02018 }
02019 }
02020
02021 void CDownloadsWnd::set_DontUpdateTIPO(BOOL b)
02022 {
02023 m_bDontUpdateTIPO = b;
02024 }
02025
02026 LRESULT CDownloadsWnd::OnDWCreateDldDialog(WPARAM wp, LPARAM lp)
02027 {
02028 vmsDownloadSmartPtr dld = (fsDownload*) lp;
02029 dld->Release ();
02030
02031 if (_App.DownloadDialog_Use () == FALSE)
02032 return 2;
02033
02034 if (dld->pdlg)
02035 {
02036 dld->pdlg->NeedUpdate ();
02037 return 1;
02038 }
02039
02040 if (wp == 0)
02041 if (dld->dwFlags & (DLD_DONTSHOWDIALOG | DLD_USEDBYHTMLSPIDER | DLD_BATCH))
02042 return 1;
02043
02044 dld->pdlg = new CDlg_Download;
02045 dld->pdlg->Create (dld);
02046 dld->pdlg->ShowWindow (SW_SHOW);
02047
02048 return 0;
02049 }
02050
02051 LRESULT CDownloadsWnd::OnDWCloseDldDialog(WPARAM, LPARAM lp)
02052 {
02053 vmsDownloadSmartPtr dld = (fsDownload*) lp;
02054 dld->Release ();
02055 if (dld->pdlg)
02056 {
02057 dld->pdlg->DestroyWindow ();
02058 SAFE_DELETE (dld->pdlg);
02059 }
02060 return 0;
02061 }
02062
02063 LRESULT CDownloadsWnd::OnDWUpdateDldDialog(WPARAM, LPARAM lp)
02064 {
02065 vmsDownloadSmartPtr dld = (fsDownload*) lp;
02066 dld->Release ();
02067 if (dld->pdlg)
02068 {
02069 if (dld->pdlg->IsDlgButtonChecked (IDC_AUTOCLOSE) == BST_CHECKED)
02070 {
02071 dld->AddRef ();
02072 return OnDWCloseDldDialog (0, lp);
02073 }
02074 dld->pdlg->NeedUpdate ();
02075 }
02076 return 0;
02077 }
02078
02079 void CDownloadsWnd::OnDldunpack()
02080 {
02081 m_wndDownloads.m_tasks.OnDldunpack ();
02082 }
02083
02084 UINT CDownloadsWnd::get_TotalSpeed()
02085 {
02086 return m_uTotalSpeed;
02087 }
02088
02089 void CDownloadsWnd::OnDldmovedown()
02090 {
02091 m_wndDownloads.m_tasks.OnDldmovedown ();
02092 }
02093
02094 void CDownloadsWnd::OnDldmoveup()
02095 {
02096 m_wndDownloads.m_tasks.OnDldmoveup ();
02097 }
02098
02099 void CDownloadsWnd::OnDldcheckintegrity()
02100 {
02101 m_wndDownloads.m_tasks.OnDldcheckintegrity ();
02102 }
02103
02104 LRESULT CDownloadsWnd::OnDldShowOpinions(WPARAM, LPARAM lp)
02105 {
02106 CDlg_Opinions dlg;
02107 vmsDownloadSmartPtr dld = (fsDownload*)lp;
02108 dld->Release ();
02109 CString strUrl;
02110 if (dld->pMgr->IsBittorrent ())
02111 strUrl = dld->pMgr->GetBtDownloadMgr ()->get_InfoHash ();
02112 else
02113 strUrl = vmsMaliciousDownloadChecker::EncodeUrl (dld->pMgr->get_URL ());
02114 dlg.m_pszUrl = strUrl;
02115 return IDC_ABORT != _DlgMgr.DoModal (&dlg);
02116 }
02117
02118 DWORD WINAPI CDownloadsWnd::_threadCheckDldHasOpinions(LPVOID lp)
02119 {
02120 CDownloadsWnd* pthis = (CDownloadsWnd*)lp;
02121 vmsDownloadSmartPtr dld = pthis->m_wndDownloads.m_info.Get_ActiveDownload ();
02122 vmsSimpleFileDownloader dldr;
02123 CString strUrl;
02124
02125 if (dld == NULL)
02126 goto _lExit;
02127
02128 strUrl.Format ("http://fdm.freedownloadmanager.org/fromfdm/checkurl.php?url=%s",
02129 vmsMaliciousDownloadChecker::EncodeUrl (dld->pMgr->get_URL ()));
02130
02131 char szTmpPath [MY_MAX_PATH];
02132 char szTmpFile [MY_MAX_PATH];
02133
02134 GetTempPath (sizeof (szTmpPath), szTmpPath);
02135 GetTempFileName (szTmpPath, "fdm", 0, szTmpFile);
02136
02137 dldr.Download (strUrl, szTmpFile);
02138 while (pthis->m_bExiting == FALSE && dldr.IsRunning ())
02139 Sleep (50);
02140
02141 DeleteFile (szTmpFile);
02142
02143 if (pthis->m_bExiting)
02144 goto _lExit;
02145
02146 bool bHasOpinions;
02147 bHasOpinions = dldr.GetLastError () == IR_SUCCESS;
02148
02149 dld->dwFlags &= ~ (DLD_HASOPINIONS_YES | DLD_HASOPINIONS_NO);
02150
02151 if (bHasOpinions)
02152 dld->dwFlags |= DLD_HASOPINIONS_YES;
02153 else
02154 dld->dwFlags |= DLD_HASOPINIONS_NO;
02155
02156 pthis->OnDldHasOpinions (dld);
02157
02158 _lExit:
02159 InterlockedDecrement (&pthis->m_cCheckDldHasOpinionsThreads);
02160 return 0;
02161 }
02162
02163 void CDownloadsWnd::OnDldHasOpinions(vmsDownloadSmartPtr dld)
02164 {
02165 ASSERT (dld->dwFlags & (DLD_HASOPINIONS_YES | DLD_HASOPINIONS_NO));
02166
02167 if (m_wndDownloads.m_info.Get_ActiveDownload () != dld)
02168 return;
02169
02170 if (dld->dwFlags & DLD_HASOPINIONS_YES)
02171 m_wndDownloads.m_info.m_opinions.UpdateContent (true);
02172
02173 }
02174
02175 void CDownloadsWnd::CheckDldHasOpinions(vmsDownloadSmartPtr dld)
02176 {
02177 InterlockedIncrement (&m_cCheckDldHasOpinionsThreads);
02178 DWORD dw;
02179 CloseHandle (
02180 CreateThread (NULL, 0, _threadCheckDldHasOpinions, this, 0, &dw));
02181 }
02182
02183 void CDownloadsWnd::OnDldmovetofolder()
02184 {
02185 m_wndDownloads.m_tasks.OnDldmovetofolder ();
02186 }
02187
02188 void CDownloadsWnd::OnDldmovebottom()
02189 {
02190 m_wndDownloads.m_tasks.OnDldmovebottom ();
02191 }
02192
02193 void CDownloadsWnd::OnDldmovetop()
02194 {
02195 m_wndDownloads.m_tasks.OnDldmovetop ();
02196 }
02197
02198 void CDownloadsWnd::OnDldschedulestop()
02199 {
02200 m_wndDownloads.m_tasks.OnDldschedulestop ();
02201 }
02202
02203 void CDownloadsWnd::OnGroupNameChanged(vmsDownloadsGroupSmartPtr pGroup)
02204 {
02205 m_wndGroups.OnGroupNameChanged (pGroup);
02206 }
02207
02208 void CDownloadsWnd::DeleteDeadDownloadsInList()
02209 {
02210 CDownloads_Tasks *tasks = &m_wndDownloads.m_tasks;
02211 int cDlds = tasks->GetItemCount ();
02212
02213 DLDS_LIST vDlds;
02214
02215 for (int i = 0; i < cDlds; i++)
02216 {
02217 vmsDownloadSmartPtr dld = (fsDownload*) tasks->GetItemData (i);
02218 if (dld->pMgr->IsDone ())
02219 {
02220 fsString strFile;
02221 if (dld->pMgr->GetDownloadMgr ())
02222 strFile = dld->pMgr->get_OutputFilePathName ();
02223 else
02224 strFile = dld->pMgr->GetBtDownloadMgr ()->get_OutputFilePathName (0);
02225
02226 if (GetFileAttributes (strFile) == DWORD (-1))
02227 vDlds.push_back (dld);
02228 }
02229 }
02230
02231 if (vDlds.size () == 0)
02232 return;
02233
02234 tasks->ShowWindow (SW_HIDE);
02235 try {_DldsMgr.DeleteDownloads (vDlds, TRUE, FALSE);} catch (...){}
02236 tasks->ShowWindow (SW_SHOW);
02237 }
02238
02239 void CDownloadsWnd::UpdateNumbersOfDownloadsInGroups()
02240 {
02241 m_wndGroups.UpdateNumbersOfDownloadsInGroups ();
02242 }
02243
02244 void CDownloadsWnd::OnBtDownloadProperties(DLDS_LIST &vDlds, CWnd *pwndParent)
02245 {
02246 CBtDldSheet sheet (LS (L_DLDPROP), pwndParent ? pwndParent : this);
02247
02248 sheet.Init (&vDlds);
02249
02250 if (_DlgMgr.DoModal (&sheet) == IDOK)
02251 {
02252
02253 if (sheet.IsNeedUpdateTasks ())
02254 OnDownloadsGroupChanged ();
02255 }
02256
02257 _DlgMgr.OnEndDialog (&sheet);
02258 }
02259
02260 BOOL CDownloadsWnd::CreateBtDownloadFromFile(LPCSTR pszFile, LPCSTR pszTorrentUrl, BOOL bSilent)
02261 {
02262 vmsDownloadSmartPtr dld;
02263 Download_CreateInstance (dld, true);
02264
02265 if (_App.ReserveDiskSpace ())
02266 dld->pMgr->GetBtDownloadMgr ()->enable_Flags (BTDF_RESERVE_DISK_SPACE);
02267 if (_App.DownloadFlags () & DPF_GENERATEDESCFILE)
02268 dld->pMgr->GetBtDownloadMgr ()->enable_Flags (BTDF_GENERATE_DESC_FILE);
02269 if (_App.DownloadFlags () & DPF_STARTWHENDONE)
02270 dld->pMgr->GetBtDownloadMgr ()->enable_Flags (BTDF_LAUNCH_WHEN_DONE);
02271
02272 if (bSilent == FALSE)
02273 {
02274 CCreateDownloadFromTorrentFileDlg dlg;
02275 dlg.m_strTorrentFile = pszFile;
02276 dlg.m_dld = dld;
02277 if (IDOK != _DlgMgr.DoModal (&dlg))
02278 return FALSE;
02279
02280 CreateDownload (dld, dlg.m_bScheduled ? &dlg.m_task : NULL, FALSE, dlg.m_bPlaceToTop != 0);
02281 }
02282 else
02283 {
02284 if (_App.NewDL_GroupId () != -1)
02285 dld->pGroup = _DldsGrps.FindGroup (_App.NewDL_GroupId ());
02286 if (dld->pGroup == NULL)
02287 dld->pGroup = _DldsGrps.FindGroupByExt ("torrent");
02288 if (dld->pGroup == NULL)
02289 dld->pGroup = _DldsGrps.FindGroup (GRP_OTHER_ID);
02290 dld->bAutoStart = _App.NewDL_AutoStart ();
02291
02292 vmsBtDownloadManager *pMgr = dld->pMgr->GetBtDownloadMgr ();
02293
02294 if (FALSE == pMgr->CreateByTorrentFile (pszFile, dld->pGroup->strOutFolder, pszTorrentUrl))
02295 return FALSE;
02296
02297 fsString strComment = pMgr->get_TorrentComment ();
02298 if (strComment.IsEmpty () == FALSE)
02299 {
02300 if (dld->strComment.IsEmpty () == FALSE)
02301 dld->strComment += "\r\n";
02302 dld->strComment += strComment;
02303 }
02304
02305 CreateDownload (dld, NULL, FALSE, false);
02306 }
02307
02308 return TRUE;
02309 }
02310
02311 void CDownloadsWnd::OnDldgrantbandwidthfordld()
02312 {
02313 m_wndDownloads.m_tasks.OnDldgrantbandwidthfordld ();
02314 }
02315
02316 void CDownloadsWnd::OnDldshowprogressdlg()
02317 {
02318 m_wndDownloads.m_tasks.OnDldshowprogressdlg ();
02319 }
02320
02321 void CDownloadsWnd::ShowDownloads(DLDS_LIST_REF vDlds)
02322 {
02323 _DldsMgr.LockList ();
02324 m_wndDownloads.m_tasks.LockList ();
02325
02326 try{
02327
02328 fsDldFilter *filter = m_wndGroups.GetCurrentFilter ();
02329
02330
02331 BOOL bNeedAdd = filter != NULL && filter->IsSatisfies (vDlds [0]);
02332
02333 if (bNeedAdd == FALSE)
02334 {
02335 m_wndDownloads.m_tasks.UnlockList ();
02336 m_wndGroups.SetGroupFilter (vDlds [0]->pGroup);
02337 m_wndDownloads.m_tasks.LockList ();
02338 }
02339 else
02340 {
02341 }
02342
02343 m_wndDownloads.m_tasks.SelectDownload (vDlds [0]);
02344
02345 }catch (...) {}
02346
02347 _DldsMgr.UnlockList ();
02348 m_wndDownloads.m_tasks.UnlockList ();
02349 }
02350
02351 int CDownloadsWnd::DeleteDownloads(DLDS_LIST_REF v, BOOL bByUser, BOOL bDontConfirmFileDeleting)
02352 {
02353 int nRes = 0;
02354 m_wndDownloads.m_tasks.ShowWindow (SW_HIDE);
02355 try {
02356 nRes = _DldsMgr.DeleteDownloads (v, bByUser, bDontConfirmFileDeleting);
02357 } catch (...){}
02358 UpdateTrayIconPlusOthers ();
02359 m_wndDownloads.m_tasks.UpdateActiveDownload (0);
02360 m_wndDownloads.m_tasks.ShowWindow (SW_SHOW);
02361 return nRes;
02362 }
02363
02364 LRESULT CDownloadsWnd::OnDldConvertMedia(WPARAM wp, LPARAM lp)
02365 {
02366 vmsDownloadSmartPtr dld = (fsDownload*) lp;
02367 dld->Release ();
02368
02369 _MediaConvertMgr.ConvertMediaFile (dld, (vmsMediaConvertMgr_OptionsSource)wp);
02370
02371 return 0;
02372 }
02373
02374 void CDownloadsWnd::OnDldconvert()
02375 {
02376 m_wndDownloads.m_tasks.OnDldconvert ();
02377 }
02378
02379 BOOL CDownloadsWnd::IsMediaDownload(vmsDownloadSmartPtr dld)
02380 {
02381 fsString strFile = dld->pMgr->get_OutputFilePathName ();
02382 LPCSTR pszExt = strrchr (strFile, '.');
02383 if (pszExt++ == NULL)
02384 return FALSE;
02385 return IsExtInExtsStr (vmsDownloadsGroupsMgr::GetVideoExts (), pszExt) ||
02386 IsExtInExtsStr (vmsDownloadsGroupsMgr::GetAudioExts (), pszExt);
02387 }
02388
02389 HMENU CDownloadsWnd::Plugin_GetMainMenu()
02390 {
02391 return LoadMenu (AfxGetInstanceHandle (), MAKEINTRESOURCE (IDM_DOWNLOADS));
02392 }
02393
02394 HMENU CDownloadsWnd::Plugin_GetViewMenu()
02395 {
02396 return LoadMenu (AfxGetInstanceHandle (), MAKEINTRESOURCE (IDM_DL_VIEW));
02397 }
02398
02399 void CDownloadsWnd::OnDldenableseeding()
02400 {
02401 m_wndDownloads.m_tasks.OnDldenableseeding ();
02402 }