Example #1
0
void CDownloadQueueManager::CancelRequests(IDownloadQueueObserver *aObserver)
{
  CSingleLock lock(m_critical);
  // run through all our queues and remove all requests from this observer
  for (QUEUEPOOL::iterator it = m_queues.begin(); it != m_queues.end(); ++it)
  {
    CDownloadQueue* downloadQueue = *it;
    downloadQueue->CancelRequests(aObserver);
  }
}
Example #2
0
CDownloadQueue* CDownloadQueueManager::GetNextDownloadQueue()
{
  CDownloadQueue* pQueueAvailable = NULL;

  // if we haven't added any queues to the pool, add one.
  if (m_queues.size() < 1)
  {
    m_queues.push_back( new CDownloadQueue() );
  }

  // return the queue with the least number of items pending
  for (QUEUEPOOL::iterator it = m_queues.begin(); it != m_queues.end(); ++it)
  {
    // always choose the first queue if we haven't selected one yet
    if (!pQueueAvailable)
    {
      pQueueAvailable = *it;
    }
    else
    {
      // pick this queue if it has less items pending than our previous selection
      if ( pQueueAvailable->Size() > (*it)->Size() )
      {
        pQueueAvailable = *it;
      }
    }
  }

  // if we picked a queue with pending items and we haven't reached out max pool limit
  if (pQueueAvailable->Size() > 0 && m_queues.size() < MAX_DOWNLOAD_QUEUES)
  {
    // spawn a new queue
    pQueueAvailable = new CDownloadQueue();
    m_queues.push_back(pQueueAvailable);
  }

  assert(pQueueAvailable != NULL);

  return pQueueAvailable;
}
Example #3
0
TEST_F(TestDownloadQueue, RequestFile)
{
  IDownloadQueueObserver observer;
  CDownloadQueue queue;
  CTestDownloadQueueThread thread;
  unsigned int count;

  std::vector<CStdString> urls =
    CXBMCTestUtils::Instance().getTestDownloadQueueUrls();

  std::vector<CStdString>::iterator it;
  count = 0;
  for (it = urls.begin(); it < urls.end(); it++)
  {
    std::cout << "Testing URL: " << *it << "\n";
    TICKET t = queue.RequestFile(*it, &observer);
    EXPECT_EQ(count, t.dwItemId);
    count++;
  }

  thread.Sleep(1000);
  queue.Flush();
  EXPECT_EQ(0, queue.Size());
}
Example #4
0
CPartFile* CDlgAddTask::SilenceAddNewTask(LPCTSTR lpszUrl, LPCTSTR lpszSaveDir /* = NULL */)
{
	CString Link(lpszUrl);
	CString tcsPrefix = Link.Left(Link.Find(_T(':')));
	CPartFile * pPartFile = NULL;
	CDownloadQueue * pQueue = CGlobalVariable::downloadqueue;

	// added by vc-yavey 20100507 : 保存到指定目录  <begin>
	CString strSaveDir = (lpszSaveDir != NULL && lpszSaveDir[0] != NULL ? lpszSaveDir : thePrefs.GetMuleDirectory(EMULE_INCOMINGDIR));
	// added by vc-yavey 20100507 : 保存到指定目录  <begin>

	if (tcsPrefix.CompareNoCase(_T("ed2k")) == 0)
	{
		CED2KFileLink			*pLink = NULL;
		CFileHashKey			key;
		CAddTaskDoc::SItem		item;

		pLink = CreateFileLinkFromUrl(lpszUrl);
		if (NULL != pLink)
		{
			key = pLink->GetHashKey();
			item.strLinkText = lpszUrl;
			item.bCheck = TRUE;
			item.iCategory = 0;
		
			int iState = CGlobalVariable::filemgr.GetFileState((const uchar*)&key);

			if (pQueue)
				pPartFile = pQueue->GetFileByID((const uchar*)&key);

			CString strPrompt;
			CString strFileName;
			m_uAddState = 1;
			switch (iState)
			{
			case FILESTATE_DOWNLOADING:   
				strFileName = CGlobalVariable::filemgr.GetFileName(item.strLinkText);
				strPrompt = GetResString(IDS_TASK_IN_DOWNLOADING);
				strPrompt += strFileName;
				CGlobalVariable::ShowNotifier(strPrompt,TBN_IMPORTANTEVENT);
				break;				
			case FILESTATE_COMPLETED:
			case FILESTATE_HASH:
			case FILESTATE_LOCAL_SHARE:
			case FILESTATE_DOWNLOADED_SHARE:	
			case FILESTATE_SHARE_TASK_DELED:
				strFileName = CGlobalVariable::filemgr.GetFileName(item.strLinkText);
				strPrompt = GetResString(IDS_ALREADY_DOWNLOAD);
				strPrompt += strFileName;
				CGlobalVariable::ShowNotifier(strPrompt,TBN_IMPORTANTEVENT);
				break;			
			case FILESTATE_DELETED: 
				/*
				strFileName = CGlobalVariable::filemgr.GetFileName(item.strLinkText);
				strPrompt = GetResString(IDS_DOWN_DELED_LINKS);
				strPrompt += strFileName;
				break;				
				if(IDNO == MessageBox(strPrompt,GetResString(IDS_CAPTION),MB_YESNO))
					break;
				*/
			case FILESTATE_NOT_EXIST:
				// MODIFIED by VC-yavey on 2010-04-16	<begin>
				// 安全地创建filelink
				CED2KFileLink	*pFilelink = NULL;
				pFilelink = CreateFileLinkFromUrl(item.strLinkText);
				if( pFilelink && pFilelink->GetSize()> OLD_MAX_EMULE_FILE_SIZE && !thePrefs.CanFSHandleLargeFiles())
				{					
					// modifyed by vc-yavey on 2010-5-6 <begin>
					// 既然是SilenceAddNewTask就不要弹框吧?
					/*
					CString strMessage = GetResString(IDS_ERR_FSCANTHANDLEFILE);
					strMessage += _T("\n");
					strMessage += pFilelink->GetName();					
					::AfxMessageBox(strMessage);
					*/

					// pFilelink需要被删除
					SAFE_DELETE(pFilelink);
					// modifyed by vc-yavey on 2010-5-6 <end>

					break;
				}
				// MODIFIED by VC-yavey on 2010-04-16	<end>
				SAFE_DELETE(pFilelink);


				// modified by vc-yavey 20100507 : 保存到指定目录 <begin>
				// CGlobalVariable::filemgr.NewDownloadFile(item.strLinkText, thePrefs.GetMuleDirectory(EMULE_INCOMINGDIR), item.iCategory);
				CGlobalVariable::filemgr.NewDownloadFile(item.strLinkText, strSaveDir, item.iCategory);
				// modified by vc-yavey 20100507 : 保存到指定目录 <end>
				
				// modifyed by vc-yavey on 2010-5-6 <begin>
				// 避免订阅时跳来跳去(此函数只在电驴更新和订阅时使用)
				/*
				CCmdGotoPage	cmdGotoPage;
				if(thePrefs.bringtoforeground == 1)
					cmdGotoPage.GotoDownloading();
				*/
				// modifyed by vc-yavey on 2010-5-6 <end>

				break;				            
			}
			SAFE_DELETE(pLink);
	//		m_doc.SetItem(key, item);
			return pPartFile;			
		}
	}
	else if (tcsPrefix.CollateNoCase(_T("http")) == 0)
	{
		int iState = CGlobalVariable::filemgr.GetUrlTaskState(lpszUrl);
		CString strPrompt;
		CString strFileName;
		m_uAddState = 1;

		for (POSITION pos = pQueue->filelist.GetHeadPosition();pos != 0;)
		{
			CPartFile* cur_file = pQueue->filelist.GetNext(pos);
			if (cur_file->GetPartFileURL().CompareNoCase(lpszUrl) == 0)
			{
				pPartFile = cur_file;
				break;
			}
		}

		switch (iState)
		{
		case FILESTATE_DOWNLOADING:  
			strFileName = CGlobalVariable::filemgr.GetUrlFileName(lpszUrl);
			strPrompt = GetResString(IDS_TASK_IN_DOWNLOADING);		
			strPrompt += strFileName;
			CGlobalVariable::ShowNotifier(strPrompt,TBN_IMPORTANTEVENT);
			break;				
		case FILESTATE_COMPLETED:
		case FILESTATE_HASH:
		case FILESTATE_LOCAL_SHARE:
			strFileName = CGlobalVariable::filemgr.GetUrlFileName(lpszUrl);
			strPrompt = GetResString(IDS_ALREADY_DOWNLOAD);
			strPrompt += strFileName;
			CGlobalVariable::ShowNotifier(strPrompt,TBN_IMPORTANTEVENT);
			break;
		case FILESTATE_DOWNLOADED_SHARE:
		case FILESTATE_SHARE_TASK_DELED:
		case FILESTATE_DELETED: 
		case FILESTATE_ZEROSIZE_DOWNLOADED:
			/*
			strFileName = CGlobalVariable::filemgr.GetUrlFileName(lpszUrl);
			strPrompt = GetResString(IDS_DOWN_DELED_LINKS);
			strPrompt += strFileName;
			break;
			
			if(IDNO == MessageBox(strPrompt,GetResString(IDS_CAPTION),MB_YESNO))			
				break;
			*/
		case FILESTATE_NOT_EXIST:
			// modified by vc-yavey 20100507 : 保存到指定目录 <begin>
			//CmdFuncs::ActualllyAddUrlDownload(lpszUrl,thePrefs.GetMuleDirectory(EMULE_INCOMINGDIR));
			CmdFuncs::ActualllyAddUrlDownload(lpszUrl, strSaveDir);
			// modified by vc-yavey 20100507 : 保存到指定目录 <end>

			// modifyed by vc-yavey on 2010-5-6 <begin>
			// 避免订阅时跳来跳去(此函数只在电驴更新和订阅时使用)
			/*
			CCmdGotoPage	cmdGotoPage;
			if(thePrefs.bringtoforeground == 1)
				cmdGotoPage.GotoDownloading();
			*/
			// modifyed by vc-yavey on 2010-5-6 <end>

			break;				            
		}
		//m_doc.AppendUrl(lpszUrl);
		return pPartFile;
	}
	return pPartFile;
}