📄 preferences.cpp
字号:
memcpy(incomingdir, prefsImport19c->incomingdir, 510);
memcpy(tempdir, prefsImport19c->tempdir, 510);
strNick = prefsImport19c->nick;
delete prefsImport19c;
}
} else {
md4cpy(userhash, prefsExt->userhash);
EmuleWindowPlacement = prefsExt->EmuleWindowPlacement;
}
fclose(preffile);
smartidstate = 0;
}
// shared directories
fullpath = new TCHAR[_tcslen(configdir)+MAX_PATH]; // i_a
_stprintf(fullpath,_T("%sshareddir.dat"),configdir);
CStdioFile* sdirfile = new CStdioFile();
if (sdirfile->Open(fullpath,CFile::modeRead|CFile::shareDenyWrite)){
CString toadd;
while (sdirfile->ReadString(toadd))
{
TCHAR szFullPath[MAX_PATH];
if (PathCanonicalize(szFullPath, toadd))
toadd = szFullPath;
if (IsInstallationDirectory(toadd))
continue;
if (_taccess(toadd, 0) == 0){ // only add directories which still exist
if (toadd.Right(1) != _T('\\'))
toadd.Append(_T("\\"));
shareddir_list.AddHead(toadd);
}
}
sdirfile->Close();
}
delete sdirfile;
delete[] fullpath;
//serverlist adresses
fullpath = new TCHAR[_tcslen(configdir)+20];
_stprintf(fullpath,_T("%sadresses.dat"),configdir);
sdirfile = new CStdioFile();
if (sdirfile->Open(fullpath,CFile::modeRead|CFile::shareDenyWrite)){
CString toadd;
while (sdirfile->ReadString(toadd))
adresses_list.AddHead(toadd);
sdirfile->Close();
}
delete sdirfile;
delete[] fullpath;
fullpath=NULL;
userhash[5] = 14;
userhash[14] = 111;
// deadlake PROXYSUPPORT
m_UseProxyListenPort = false;
ListenPort = 0;
// Explicitly inform the user about errors with incoming/temp folders!
if (!PathFileExists(GetIncomingDir()) && !::CreateDirectory(GetIncomingDir(),0)) {
CString strError;
strError.Format(GetResString(IDS_ERR_CREATE_DIR), GetResString(IDS_PW_INCOMING), GetIncomingDir(), GetErrorMessage(GetLastError()));
AfxMessageBox(strError, MB_ICONERROR);
_stprintf(incomingdir,_T("%sincoming"),appdir);
if (!PathFileExists(GetIncomingDir()) && !::CreateDirectory(GetIncomingDir(),0)){
strError.Format(GetResString(IDS_ERR_CREATE_DIR), GetResString(IDS_PW_INCOMING), GetIncomingDir(), GetErrorMessage(GetLastError()));
AfxMessageBox(strError, MB_ICONERROR);
}
}
if (!PathFileExists(GetTempDir()) && !::CreateDirectory(GetTempDir(),0)) {
CString strError;
strError.Format(GetResString(IDS_ERR_CREATE_DIR), GetResString(IDS_PW_TEMP), GetTempDir(), GetErrorMessage(GetLastError()));
AfxMessageBox(strError, MB_ICONERROR);
_stprintf(tempdir,_T("%stemp"),appdir);
if (!PathFileExists(GetTempDir()) && !::CreateDirectory(GetTempDir(),0)){
strError.Format(GetResString(IDS_ERR_CREATE_DIR), GetResString(IDS_PW_TEMP), GetTempDir(), GetErrorMessage(GetLastError()));
AfxMessageBox(strError, MB_ICONERROR);
}
}
if (((int*)userhash[0]) == 0 && ((int*)userhash[1]) == 0 && ((int*)userhash[2]) == 0 && ((int*)userhash[3]) == 0)
CreateUserHash();
}
void CPreferences::Uninit()
{
while (!catMap.IsEmpty())
{
Category_Struct* delcat = catMap.GetAt(0);
catMap.RemoveAt(0);
delete delcat;
}
}
void CPreferences::SetStandartValues()
{
CreateUserHash();
WINDOWPLACEMENT defaultWPM;
defaultWPM.length = sizeof(WINDOWPLACEMENT);
defaultWPM.rcNormalPosition.left=10;defaultWPM.rcNormalPosition.top=10;
defaultWPM.rcNormalPosition.right=700;defaultWPM.rcNormalPosition.bottom=500;
defaultWPM.showCmd=0;
EmuleWindowPlacement=defaultWPM;
versioncheckLastAutomatic=0;
// Save();
}
bool CPreferences::IsTempFile(const CString& rstrDirectory, const CString& rstrName)
{
if (CompareDirectories(rstrDirectory, GetTempDir()))
return false;
// do not share a file from the temp directory, if it matches one of the following patterns
CString strNameLower(rstrName);
strNameLower.MakeLower();
strNameLower += _T("|"); // append an EOS character which we can query for
static const LPCTSTR _apszNotSharedExts[] = {
_T("%u.part") _T("%c"),
_T("%u.part.met") _T("%c"),
_T("%u.part.met") PARTMET_BAK_EXT _T("%c"),
_T("%u.part.met") PARTMET_TMP_EXT _T("%c")
};
for (int i = 0; i < ARRSIZE(_apszNotSharedExts); i++){
UINT uNum;
TCHAR iChar;
// "misuse" the 'scanf' function for a very simple pattern scanning.
if (_stscanf(strNameLower, _apszNotSharedExts[i], &uNum, &iChar) == 2 && iChar == _T('|'))
return true;
}
return false;
}
// SLUGFILLER: SafeHash
bool CPreferences::IsConfigFile(const CString& rstrDirectory, const CString& rstrName)
{
if (CompareDirectories(rstrDirectory, configdir))
return false;
// do not share a file from the config directory, if it contains one of the following extensions
static const LPCTSTR _apszNotSharedExts[] = { _T(".met.bak"), _T(".ini.old") };
for (int i = 0; i < ARRSIZE(_apszNotSharedExts); i++){
int iLen = _tcslen(_apszNotSharedExts[i]);
if (rstrName.GetLength()>=iLen && rstrName.Right(iLen).CompareNoCase(_apszNotSharedExts[i])==0)
return true;
}
// do not share following files from the config directory
static const LPCTSTR _apszNotSharedFiles[] =
{
_T("AC_SearchStrings.dat"),
_T("AC_ServerMetURLs.dat"),
_T("adresses.dat"),
_T("category.ini"),
_T("clients.met"),
_T("cryptkey.dat"),
_T("emfriends.met"),
_T("fileinfo.ini"),
_T("ipfilter.dat"),
_T("known.met"),
_T("preferences.dat"),
_T("preferences.ini"),
_T("server.met"),
_T("server.met.new"),
_T("server_met.download"),
_T("server_met.old"),
_T("shareddir.dat"),
_T("sharedsubdir.dat"),
_T("staticservers.dat"),
_T("webservices.dat")
};
for (int i = 0; i < ARRSIZE(_apszNotSharedFiles); i++){
if (rstrName.CompareNoCase(_apszNotSharedFiles[i])==0)
return true;
}
return false;
}
// SLUGFILLER: SafeHash
uint16 CPreferences::GetMaxDownload(){
return GetMaxDownloadInBytesPerSec()/1024;
}
uint64 CPreferences::GetMaxDownloadInBytesPerSec(boolean dynamic){
//dont be a Lam3r :)
uint64 maxup;
if(dynamic && thePrefs.IsDynUpEnabled() && theApp.uploadqueue->GetWaitingUserCount() != 0 && theApp.uploadqueue->GetDatarate() != 0) {
maxup = theApp.uploadqueue->GetDatarate();
} else {
maxup = GetMaxUpload()*1024;
}
if( maxup < 10*1024 )
return (( (maxup < 10*1024) && (maxup*3 < maxdownload*1024) )? maxup*3 : maxdownload*1024);
return (( (maxup < 30*1024) && (maxup*4 < maxdownload*1024) )? maxup*4 : maxdownload*1024);
}//VeryCD版修改,分别改为10和30
// -khaos--+++> A whole bunch of methods! Keep going until you reach the end tag.
void CPreferences::SaveStats(int bBackUp){
// This function saves all of the new statistics in my addon. It is also used to
// save backups for the Reset Stats function, and the Restore Stats function (Which is actually LoadStats)
// bBackUp = 0: DEFAULT; save to statistics.ini
// bBackUp = 1: Save to statbkup.ini, which is used to restore after a reset
// bBackUp = 2: Save to statbkuptmp.ini, which is temporarily created during a restore and then renamed to statbkup.ini
CString fullpath(configdir);
if (bBackUp == 1)
fullpath += _T("statbkup.ini");
else if (bBackUp == 2)
fullpath += _T("statbkuptmp.ini");
else
fullpath += _T("statistics.ini");
CIni ini(fullpath, _T("Statistics"));
// Save cumulative statistics to preferences.ini, going in order as they appear in CStatisticsDlg::ShowStatistics.
// We do NOT SET the values in prefs struct here.
// Save Cum Down Data
ini.WriteUInt64(_T("TotalDownloadedBytes"), theStats.sessionReceivedBytes + GetTotalDownloaded());
ini.WriteInt(_T("DownSuccessfulSessions"), cumDownSuccessfulSessions);
ini.WriteInt(_T("DownFailedSessions"), cumDownFailedSessions);
ini.WriteInt(_T("DownAvgTime"), (GetDownC_AvgTime() + GetDownS_AvgTime()) / 2);
ini.WriteUInt64(_T("LostFromCorruption"), cumLostFromCorruption + sesLostFromCorruption);
ini.WriteUInt64(_T("SavedFromCompression"), sesSavedFromCompression + cumSavedFromCompression);
ini.WriteInt(_T("PartsSavedByICH"), cumPartsSavedByICH + sesPartsSavedByICH);
ini.WriteUInt64(_T("DownData_EDONKEY"), GetCumDownData_EDONKEY());
ini.WriteUInt64(_T("DownData_EDONKEYHYBRID"), GetCumDownData_EDONKEYHYBRID());
ini.WriteUInt64(_T("DownData_EMULE"), GetCumDownData_EMULE());
ini.WriteUInt64(_T("DownData_MLDONKEY"), GetCumDownData_MLDONKEY());
ini.WriteUInt64(_T("DownData_LMULE"), GetCumDownData_EMULECOMPAT());
ini.WriteUInt64(_T("DownData_AMULE"), GetCumDownData_AMULE());
ini.WriteUInt64(_T("DownData_SHAREAZA"), GetCumDownData_SHAREAZA());
ini.WriteUInt64(_T("DownData_URL"), GetCumDownData_URL());
ini.WriteUInt64(_T("DownDataPort_4662"), GetCumDownDataPort_4662());
ini.WriteUInt64(_T("DownDataPort_OTHER"), GetCumDownDataPort_OTHER());
ini.WriteUInt64(_T("DownOverheadTotal"),theStats.GetDownDataOverheadFileRequest() +
theStats.GetDownDataOverheadSourceExchange() +
theStats.GetDownDataOverheadServer() +
theStats.GetDownDataOverheadKad() +
theStats.GetDownDataOverheadOther() +
GetDownOverheadTotal());
ini.WriteUInt64(_T("DownOverheadFileReq"), theStats.GetDownDataOverheadFileRequest() + GetDownOverheadFileReq());
ini.WriteUInt64(_T("DownOverheadSrcEx"), theStats.GetDownDataOverheadSourceExchange() + GetDownOverheadSrcEx());
ini.WriteUInt64(_T("DownOverheadServer"), theStats.GetDownDataOverheadServer() + GetDownOverheadServer());
ini.WriteUInt64(_T("DownOverheadKad"), theStats.GetDownDataOverheadKad() + GetDownOverheadKad());
ini.WriteUInt64(_T("DownOverheadTotalPackets"), theStats.GetDownDataOverheadFileRequestPackets() +
theStats.GetDownDataOverheadSourceExchangePackets() +
theStats.GetDownDataOverheadServerPackets() +
theStats.GetDownDataOverheadKadPackets() +
theStats.GetDownDataOverheadOtherPackets() +
GetDownOverheadTotalPackets());
ini.WriteUInt64(_T("DownOverheadFileReqPackets"), theStats.GetDownDataOverheadFileRequestPackets() + GetDownOverheadFileReqPackets());
ini.WriteUInt64(_T("DownOverheadSrcExPackets"), theStats.GetDownDataOverheadSourceExchangePackets() + GetDownOverheadSrcExPackets());
ini.WriteUInt64(_T("DownOverheadServerPackets"), theStats.GetDownDataOverheadServerPackets() + GetDownOverheadServerPackets());
ini.WriteUInt64(_T("DownOverheadKadPackets"), theStats.GetDownDataOverheadKadPackets() + GetDownOverheadKadPackets());
// Save Cumulative Upline Statistics
ini.WriteUInt64(_T("TotalUploadedBytes"), theStats.sessionSentBytes + GetTotalUploaded());
ini.WriteInt(_T("UpSuccessfulSessions"), theApp.uploadqueue->GetSuccessfullUpCount() + GetUpSuccessfulSessions());
ini.WriteInt(_T("UpFailedSessions"), theApp.uploadqueue->GetFailedUpCount() + GetUpFailedSessions());
ini.WriteInt(_T("UpAvgTime"), (theApp.uploadqueue->GetAverageUpTime() + GetUpAvgTime())/2);
ini.WriteUInt64(_T("UpData_EDONKEY"), GetCumUpData_EDONKEY());
ini.WriteUInt64(_T("UpData_EDONKEYHYBRID"), GetCumUpData_EDONKEYHYBRID());
ini.WriteUInt64(_T("UpData_EMULE"), GetCumUpData_EMULE());
ini.WriteUInt64(_T("UpData_MLDONKEY"), GetCumUpData_MLDONKEY());
ini.WriteUInt64(_T("UpData_LMULE"), GetCumUpData_EMULECOMPAT());
ini.WriteUInt64(_T("UpData_AMULE"), GetCumUpData_AMULE());
ini.WriteUInt64(_T("UpData_SHAREAZA"), GetCumUpData_SHAREAZA());
ini.WriteUInt64(_T("UpDataPort_4662"), GetCumUpDataPort_4662());
ini.WriteUInt64(_T("UpDataPort_OTHER"), GetCumUpDataPort_OTHER());
ini.WriteUInt64(_T("UpData_File"), GetCumUpData_File());
ini.WriteUInt64(_T("UpData_Partfile"), GetCumUpData_Partfile());
ini.WriteUInt64(_T("UpOverheadTotal"), theStats.GetUpDataOverheadFileRequest() +
theStats.GetUpDataOverheadSourceExchange() +
theStats.GetUpDataOverheadServer() +
theStats.GetUpDataOverheadKad() +
theStats.GetUpDataOverheadOther() +
GetUpOverheadTotal());
ini.WriteUInt64(_T("UpOverheadFileReq"), theStats.GetUpDataOverheadFileRequest() + GetUpOverheadFileReq());
ini.WriteUInt64(_T("UpOverheadSrcEx"), theStats.GetUpDataOverheadSourceExchange() + GetUpOverheadSrcEx());
ini.WriteUInt64(_T("UpOverheadServer"), theStats.GetUpDataOverheadServer() + GetUpOverheadServer());
ini.WriteUInt64(_T("UpOverheadKad"), theStats.GetUpDataOverheadKad() + GetUpOverheadKad());
ini.WriteUInt64(_T("UpOverheadTotalPackets"), theStats.GetUpDataOverheadFileRequestPackets() +
theStats.GetUpDataOverheadSourceExchangePackets() +
theStats.GetUpDataOverheadServerPackets() +
theStats.GetUpDataOverheadKadPackets() +
theStats.GetUpDataOverheadOtherPackets() +
GetUpOverheadTotalPackets());
ini.WriteUInt64(_T("UpOverheadFileReqPackets"), theStats.GetUpDataOverheadFileRequestPackets() + GetUpOverheadFileReqPackets());
ini.WriteUInt64(_T("UpOverheadSrcExPackets"), theStats.GetUpDataOverheadSourceExchangePackets() + GetUpOverheadSrcExPackets());
ini.WriteUInt64(_T("UpOverheadServerPackets"), theStats.GetUpDataOverheadServerPackets() + GetUpOverheadServerPackets());
ini.WriteUInt64(_T("UpOverheadKadPackets"), theStats.GetUpDataOverheadKadPackets() + GetUpOverheadKadPackets());
// Save Cumulative Connection Statistics
float tempRate = 0.0F;
// Download Rate Average
tempRate = theStats.GetAvgDownloadRate(AVG_TOTAL);
ini.WriteFloat(_T("ConnAvgDownRate"), tempRate);
// Max Download Rate Average
if (tempRate > GetConnMaxAvgDownRate())
SetConnMaxAvgDownRate(tempRate);
ini.WriteFloat(_T("ConnMaxAvgDownRate"), GetConnMaxAvgDownRate());
// Max Download Rate
tempRate = (float)theApp.downloadqueue->GetDatarate() / 1024;
if (tempRate > GetConnMaxDownRate())
SetConnMaxDownRate(tempRate);
ini.WriteFloat(_T("ConnMaxDownRate"), GetConnMaxDownRate());
// Upload Rate Average
tempRate = theStats.GetAvgUploadRate(AVG_TOTAL);
ini.WriteFloat(_T("ConnAvgUpRate"), tempRate);
// Max Upload Rate Average
if (tempRate > GetConnMaxAvgUpRate())
SetConnMaxAvgUpRate(tempRate);
ini.WriteFloat(_T("ConnMaxAvgUpRate"), GetConnMaxAvgUpRate());
// Max Upload Rate
tempRate = (float)theApp.uploadqueue->GetDatarate() / 1024;
if (tempRate > GetConnMaxUpRate())
SetConnMaxUpRate(tempRate);
ini.WriteFloat(_T("ConnMaxUpRate"), GetConnMaxUpRate());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -