⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webserver.cpp

📁 另外一款开放源码的高质量p2p源码软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			}
		}
	}
	if (_ParseURL(Data.sURL, _T("sort")) != _T("")) 
	{
		if(_ParseURL(Data.sURL, _T("sort")) == _T("name"))
			pThis->m_Params.DownloadSort = DOWN_SORT_NAME;
		else
		if(_ParseURL(Data.sURL, _T("sort")) == _T("size"))
			pThis->m_Params.DownloadSort = DOWN_SORT_SIZE;
		else
		if(_ParseURL(Data.sURL, _T("sort")) == _T("transferred"))
			pThis->m_Params.DownloadSort = DOWN_SORT_TRANSFERRED;
		else
		if(_ParseURL(Data.sURL, _T("sort")) == _T("speed"))
			pThis->m_Params.DownloadSort = DOWN_SORT_SPEED;
		else
		if(_ParseURL(Data.sURL, _T("sort")) == _T("progress"))
			pThis->m_Params.DownloadSort = DOWN_SORT_PROGRESS;

		if(_ParseURL(Data.sURL, _T("sortreverse")) == _T(""))
			pThis->m_Params.bDownloadSortReverse = false;
	}
	if (_ParseURL(Data.sURL, _T("sortreverse")) != _T("")) 
	{
		pThis->m_Params.bDownloadSortReverse = (_ParseURL(Data.sURL, _T("sortreverse")) == _T("true"));
	}
	if(_ParseURL(Data.sURL, _T("showuploadqueue")) == _T("true"))
	{
		pThis->m_Params.bShowUploadQueue = true;
	}
	if(_ParseURL(Data.sURL, _T("showuploadqueue")) == _T("false"))
	{
		pThis->m_Params.bShowUploadQueue = false;
	}
	CString sDownloadSortRev;
	if(pThis->m_Params.bDownloadSortReverse)
		sDownloadSortRev = _T("false");
	else
		sDownloadSortRev = _T("true");

	Out += pThis->m_Templates.sTransferImages;
	Out += pThis->m_Templates.sTransferList;
	Out.Replace(_T("[DownloadHeader]"), pThis->m_Templates.sTransferDownHeader);
	Out.Replace(_T("[DownloadFooter]"), pThis->m_Templates.sTransferDownFooter);
	Out.Replace(_T("[UploadHeader]"), pThis->m_Templates.sTransferUpHeader);
	Out.Replace(_T("[UploadFooter]"), pThis->m_Templates.sTransferUpFooter);
	Out.Replace(_T("[Session]"), sSession);

	InsertCatBox(Out,cat,_T(""),true,true);

	if(pThis->m_Params.DownloadSort == DOWN_SORT_NAME)
		Out.Replace(_T("[SortName]"), _T("&sortreverse=") + sDownloadSortRev);
	else
		Out.Replace(_T("[SortName]"), _T(""));
	if(pThis->m_Params.DownloadSort == DOWN_SORT_SIZE)
		Out.Replace(_T("[SortSize]"), _T("&sortreverse=") + sDownloadSortRev);
	else
		Out.Replace(_T("[SortSize]"), _T(""));
	if(pThis->m_Params.DownloadSort == DOWN_SORT_TRANSFERRED)
		Out.Replace(_T("[SortTransferred]"), _T("&sortreverse=") + sDownloadSortRev);
	else
		Out.Replace(_T("[SortTransferred]"), _T(""));
	if(pThis->m_Params.DownloadSort == DOWN_SORT_SPEED)
		Out.Replace(_T("[SortSpeed]"), _T("&sortreverse=") + sDownloadSortRev);
	else
		Out.Replace(_T("[SortSpeed]"), _T(""));
	if(pThis->m_Params.DownloadSort == DOWN_SORT_PROGRESS)
		Out.Replace(_T("[SortProgress]"), _T("&sortreverse=") + sDownloadSortRev);
	else
		Out.Replace(_T("[SortProgress]"), _T(""));

	CString sortimg;
	if (pThis->m_Params.bDownloadSortReverse) sortimg=_T("<img src=\"l_up.gif\">");
		else sortimg=_T("<img src=\"l_down.gif\">");

	Out.Replace(_T("[Filename]"), _GetPlainResString(IDS_DL_FILENAME)+CString((pThis->m_Params.DownloadSort == DOWN_SORT_NAME)?sortimg:_T("")));
	Out.Replace(_T("[Size]"), _GetPlainResString(IDS_DL_SIZE)+CString((pThis->m_Params.DownloadSort == DOWN_SORT_SIZE)?sortimg:_T("")));
	Out.Replace(_T("[Transferred]"), _GetPlainResString(IDS_COMPLETE)+CString((pThis->m_Params.DownloadSort == DOWN_SORT_TRANSFERRED)?sortimg:_T("")));
	Out.Replace(_T("[Progress]"), _GetPlainResString(IDS_DL_PROGRESS)+CString((pThis->m_Params.DownloadSort == DOWN_SORT_PROGRESS)?sortimg:_T("")));
	Out.Replace(_T("[Speed]"), _GetPlainResString(IDS_DL_SPEED)+CString((pThis->m_Params.DownloadSort == DOWN_SORT_SPEED)?sortimg:_T("")));
	Out.Replace(_T("[Sources]"), _GetPlainResString(IDS_DL_SOURCES));
	Out.Replace(_T("[Actions]"), _GetPlainResString(IDS_WEB_ACTIONS));
	Out.Replace(_T("[User]"), _GetPlainResString(IDS_QL_USERNAME));
	Out.Replace(_T("[TotalDown]"), _GetPlainResString(IDS_INFLST_USER_TOTALDOWNLOAD));
	Out.Replace(_T("[TotalUp]"), _GetPlainResString(IDS_INFLST_USER_TOTALUPLOAD));
	Out.Replace(_T("[Prio]"), _GetPlainResString(IDS_PRIORITY));
	Out.Replace(_T("[CatSel]"),sCat);
	CString OutE = pThis->m_Templates.sTransferDownLine;
	CString OutE2 = pThis->m_Templates.sTransferDownLineGood;

	float fTotalSize = 0, fTotalTransferred = 0, fTotalSpeed = 0;
	CArray<DownloadFiles, DownloadFiles> FilesArray;

	CArray<CPartFile*,CPartFile*> partlist;
	theApp.emuledlg->transferwnd->downloadlistctrl.GetDisplayedFiles(&partlist);

	// Populating array
	bool completedAv=false;
	for (int i=0;i<partlist.GetCount();i++) {
		
		CPartFile* cur_file=partlist.GetAt(i);
		if (cur_file) {

			DownloadFiles dFile;
			dFile.sFileName = _SpecialChars(cur_file->GetFileName());
			dFile.lFileSize = cur_file->GetFileSize();
			dFile.lFileTransferred = cur_file->GetCompletedSize();
			dFile.fCompleted = cur_file->GetPercentCompleted();
			dFile.lFileSpeed = cur_file->GetDatarate();
			dFile.nFileStatus = cur_file->GetStatus();
			dFile.sFileStatus = cur_file->getPartfileStatus();
			dFile.nFilePrio = cur_file->GetDownPriority();
			if (cur_file->IsAutoDownPriority()) dFile.nFilePrio+=10;
			dFile.sFileHash = EncodeBase16(cur_file->GetFileHash(), 16);
			dFile.lSourceCount = cur_file->GetSourceCount();
			dFile.lNotCurrentSourceCount = cur_file->GetNotCurrentSourcesCount();
			dFile.lTransferringSourceCount = cur_file->GetTransferingSrcCount();
			if (theApp.IsConnected() && !theApp.IsFirewalled())
				dFile.sED2kLink = theApp.CreateED2kSourceLink(cur_file);
			else
				dFile.sED2kLink = CreateED2kLink(cur_file);
			dFile.sFileInfo = _SpecialChars(cur_file->GetInfoSummary(cur_file));

			if (cat>0 && cur_file->GetCategory()!=cat) continue;
			if (cat<0) {
				switch (cat) {
					case -1 : if (cur_file->GetCategory()!=0) continue; break;
					case -2 : if (!cur_file->IsPartFile()) continue; break;
					case -3 : if (cur_file->IsPartFile()) continue; break;
					case -4 : if (!((cur_file->GetStatus()==PS_READY|| cur_file->GetStatus()==PS_EMPTY) && cur_file->GetTransferingSrcCount()==0)) continue; break;
					case -5 : if (!((cur_file->GetStatus()==PS_READY|| cur_file->GetStatus()==PS_EMPTY) && cur_file->GetTransferingSrcCount()>0)) continue; break;
					case -6 : if (cur_file->GetStatus()!=PS_ERROR) continue; break;
					case -7 : if (cur_file->GetStatus()!=PS_PAUSED) continue; break;
					case -8 : if (!cur_file->IsStopped()) continue; break;
					case -9 : if (!cur_file->IsMovie()) continue; break;
					case -10 : if (ED2KFT_AUDIO != GetED2KFileTypeID(cur_file->GetFileName())) continue; break;
					case -11 : if (!cur_file->IsArchive()) continue; break;
					case -12 : if (ED2KFT_CDIMAGE != GetED2KFileTypeID(cur_file->GetFileName())) continue; break;
				}
			}
			FilesArray.Add(dFile);
			if (!cur_file->IsPartFile()) completedAv=true;
		}
	}
	// Sorting (simple bubble sort, we don't have tons of data here)
	bool bSorted = true;
	for(int nMax = 0;bSorted && nMax < FilesArray.GetCount()*2; nMax++)
	{
		bSorted = false;
		for(int i = 0; i < FilesArray.GetCount() - 1; i++)
		{
			bool bSwap = false;
			switch(pThis->m_Params.DownloadSort)
			{
				case DOWN_SORT_NAME:
					bSwap = FilesArray[i].sFileName.CompareNoCase(FilesArray[i+1].sFileName) > 0;
					break;
				case DOWN_SORT_SIZE:
					bSwap = FilesArray[i].lFileSize < FilesArray[i+1].lFileSize;
					break;
				case DOWN_SORT_TRANSFERRED:
					bSwap = FilesArray[i].lFileTransferred < FilesArray[i+1].lFileTransferred;
					break;
				case DOWN_SORT_SPEED:
					bSwap = FilesArray[i].lFileSpeed < FilesArray[i+1].lFileSpeed;
					break;
				case DOWN_SORT_PROGRESS:
						bSwap = FilesArray[i].fCompleted  < FilesArray[i+1].fCompleted ;
						break;
			}
			if(pThis->m_Params.bDownloadSortReverse)
			{
				bSwap = !bSwap;
			}
			if(bSwap)
			{
				bSorted = true;
				DownloadFiles TmpFile = FilesArray[i];
				FilesArray[i] = FilesArray[i+1];
				FilesArray[i+1] = TmpFile;
			}
		}
	}

	// Displaying
	CString sDownList = _T("");
	CString HTTPTemp;

	for(int i = 0; i < FilesArray.GetCount(); i++)
	{
		CString JSfileinfo=FilesArray[i].sFileInfo;
		JSfileinfo.Replace(_T("\n"),_T("\\n"));
		JSfileinfo.Replace(_T("\'"),_T("\\'"));			// [Thx2 Zune]
		CString sActions = _T("<acronym title=\"") + FilesArray[i].sFileStatus + _T("\"><a href=\"javascript:alert(\'")+ JSfileinfo + _T("')\"><img src=\"l_info.gif\" alt=\"") + FilesArray[i].sFileStatus + _T("\"></a></acronym> ");

		CString sED2kLink;
		sED2kLink.Format(_T("<acronym title=\"[Ed2klink]\"><a href=\"")+ FilesArray[i].sED2kLink +_T("\"><img src=\"l_ed2klink.gif\" alt=\"[Ed2klink]\"></a></acronym> "));
		sED2kLink.Replace(_T("[Ed2klink]"), _GetPlainResString(IDS_SW_LINK));
		sActions += sED2kLink;

		bool bCanBeDeleted = true;
		switch(FilesArray[i].nFileStatus)
		{
			case PS_COMPLETING:
			case PS_COMPLETE:
				bCanBeDeleted = false;
				break;
			case PS_HASHING: 
			case PS_WAITINGFORHASH:
			case PS_ERROR:
				break;
			case PS_PAUSED:
			{
				if (IsSessionAdmin(Data,sSession)) {
					CString sResume=_T("");
					sResume.Format(_T("<acronym title=\"[Resume]\"><a href=\"[Link]\"><img src=\"l_resume.gif\" alt=\"[Resume]\"></a></acronym> "));
					sResume.Replace(_T("[Link]"), CString(_T("?ses=") + sSession + _T("&w=transfer&op=resume&file=") + FilesArray[i].sFileHash +sCat )) ;
					sActions += sResume;
				}
			}
				break; 
			default: // waiting or downloading
			{
				if (IsSessionAdmin(Data,sSession)) {
					CString sPause;
					sPause.Format(_T("<acronym title=\"[Pause]\"><a href=\"[Link]\"><img src=\"l_pause.gif\" alt=\"[Pause]\"></a></acronym> "));
					sPause.Replace(_T("[Link]"), CString(_T("?ses=") + sSession + _T("&w=transfer&op=pause&file=") + FilesArray[i].sFileHash+sCat ));
					sActions += sPause;
				}
			}
			break;
		}
		if(bCanBeDeleted)
		{
			if (IsSessionAdmin(Data,sSession)) {
				CString sCancel;
				sCancel.Format(_T("<acronym title=\"[Cancel]\"><a href=\"[Link]\" onclick=\"return confirm(\'[ConfirmCancel]\')\"><img src=\"l_cancel.gif\" alt=\"[Cancel]\"></a></acronym> "));
				sCancel.Replace(_T("[Link]"), CString(_T("?ses=") + sSession + _T("&w=transfer&op=cancel&file=") + FilesArray[i].sFileHash+sCat ) );
				sActions += sCancel;
			}
		}

		if (IsSessionAdmin(Data,sSession)) {
			sActions.Replace(_T("[Resume]"), _GetPlainResString(IDS_DL_RESUME));
			sActions.Replace(_T("[Pause]"), _GetPlainResString(IDS_DL_PAUSE));
			sActions.Replace(_T("[Cancel]"), _GetPlainResString(IDS_MAIN_BTN_CANCEL));
			sActions.Replace(_T("[ConfirmCancel]"), _GetPlainResStringNoQuote(IDS_Q_CANCELDL2));
			
			if (FilesArray[i].nFileStatus!=PS_COMPLETE && FilesArray[i].nFileStatus!=PS_COMPLETING) {
				sActions.Append(_T("<acronym title=\"[PriorityUp]\"><a href=\"?ses=[Session]&amp;w=transfer&op=prioup&file=") + FilesArray[i].sFileHash+sCat+_T("\"><img src=\"l_up.gif\" alt=\"[PriorityUp]\"></a></acronym>"));
				sActions.Append(_T("&nbsp;<acronym title=\"[PriorityDown]\"><a href=\"?ses=[Session]&amp;w=transfer&op=priodown&file=") + FilesArray[i].sFileHash+sCat +_T("\"><img src=\"l_down.gif\" alt=\"[PriorityDown]\"></a></acronym>"));
			}
		}

		CString HTTPProcessData;
		// if downloading, draw in other color
		if(FilesArray[i].lFileSpeed > 0)
			HTTPProcessData = OutE2;
		else
			HTTPProcessData = OutE;

		if(FilesArray[i].sFileName.GetLength() > SHORT_FILENAME_LENGTH)
			HTTPProcessData.Replace(_T("[ShortFileName]"), FilesArray[i].sFileName.Left(SHORT_FILENAME_LENGTH) + _T("..."));
		else
			HTTPProcessData.Replace(_T("[ShortFileName]"), FilesArray[i].sFileName);

		HTTPProcessData.Replace(_T("[FileInfo]"), FilesArray[i].sFileInfo);

		fTotalSize += FilesArray[i].lFileSize;

		HTTPProcessData.Replace(_T("[2]"), CastItoXBytes(FilesArray[i].lFileSize));

		if(FilesArray[i].lFileTransferred > 0)
		{
			fTotalTransferred += FilesArray[i].lFileTransferred;

			HTTPProcessData.Replace(_T("[3]"), CastItoXBytes(FilesArray[i].lFileTransferred));
		}
		else
			HTTPProcessData.Replace(_T("[3]"), _T("-"));

		HTTPProcessData.Replace(_T("[DownloadBar]"), _GetDownloadGraph(Data,FilesArray[i].sFileHash));

		if(FilesArray[i].lFileSpeed > 0.0f)
		{
			fTotalSpeed += FilesArray[i].lFileSpeed;

			HTTPTemp.Format(_T("%8.2f %s"), FilesArray[i].lFileSpeed/1024.0 ,_GetPlainResString(IDS_KBYTESEC) );
			HTTPProcessData.Replace(_T("[4]"), HTTPTemp);
		}
		else
			HTTPProcessData.Replace(_T("[4]"), _T("-"));
		if(FilesArray[i].lSourceCount > 0)
		{
			HTTPTemp.Format(_T("%i&nbsp;/&nbsp;%8i&nbsp;(%i)"),
				FilesArray[i].lSourceCount-FilesArray[i].lNotCurrentSourceCount,
				FilesArray[i].lSourceCount,
				FilesArray[i].lTransferringSourceCount);

		HTTPProcessData.Replace(_T("[5]"), HTTPTemp);
		}
		else
			HTTPProcessData.Replace(_T("[5]"), _T("-"));

		switch(FilesArray[i].nFilePrio) {
			case 0: HTTPTemp=GetResString(IDS_PRIOLOW);break;
			case 10: HTTPTemp=GetResString(IDS_PRIOAUTOLOW);break;

			case 1: HTTPTemp=GetResString(IDS_PRIONORMAL);break;
			case 11: HTTPTemp=GetResString(IDS_PRIOAUTONORMAL);break;

			case 2: HTTPTemp=GetResString(IDS_PRIOHIGH);break;
			case 12: HTTPTemp=GetResString(IDS_PRIOAUTOHIGH);break;
		}

		HTTPProcessData.Replace(_T("[PrioVal]"), HTTPTemp);
		HTTPProcessData.Replace(_T("[6]"), sActions);

		sDownList += HTTPProcessData;
	}

	Out.Replace(_T("[DownloadFilesList]"), sDownList);
    Out.Replace(_T("[PriorityUp]"), _GetPlainResString(IDS_PRIORITY_UP));
    Out.Replace(_T("[PriorityDown]"), _GetPlainResString(IDS_PRIORITY_DOWN));
	// Elandal: cast from float to integral type always drops fractions.
	// avoids implicit cast warning
	Out.Replace(_T("[TotalDownSize]"), CastItoXBytes((uint64)fTotalSize));
	Out.Replace(_T("[TotalDownTransferred]"), CastItoXBytes((uint64)fTotalTransferred));

	Out.Replace(_T("[ClearCompletedButton]"),(completedAv && IsSessionAdmin(Data,sSession))?pThis->m_Templates.sClearCompleted :_T(""));

	HTTPTemp.Format(_T("%8.2f %s"), fTotalSpeed/1024.0,_GetPlainResString(IDS_KBYTESEC));
	Out.Replace(_T("[TotalDownSpeed]"), HTTPTemp);
	OutE = pThis->m_Templates.sTransferUpLine;
	
	HTTPTemp.Format(_T("%i"),pThis->m_Templates.iProgressbarWidth);
	Out.Replace(_T("[PROGRESSBARWIDTHVAL]"),HTTPTemp);

	fTotalSize = 0;
	fTotalTransferred = 0;
	fTotalSpeed = 0;

	CString sUpList = _T("");
	
	for (POSITION pos = theApp.uploadqueue->GetFirstFromUploadList();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -