📄 preferences.cpp
字号:
cumDownOverheadKad = ini.GetUInt64(_T("DownOverheadKad"));
cumDownOverheadTotalPackets = ini.GetUInt64(_T("DownOverheadTotalPackets"));
cumDownOverheadFileReqPackets = ini.GetUInt64(_T("DownOverheadFileReqPackets"));
cumDownOverheadSrcExPackets = ini.GetUInt64(_T("DownOverheadSrcExPackets"));
cumDownOverheadServerPackets = ini.GetUInt64(_T("DownOverheadServerPackets"));
cumDownOverheadKadPackets = ini.GetUInt64(_T("DownOverheadKadPackets"));
// Load stats for cumulative upline overhead
cumUpOverheadTotal = ini.GetUInt64(_T("UpOverHeadTotal"));
cumUpOverheadFileReq = ini.GetUInt64(_T("UpOverheadFileReq"));
cumUpOverheadSrcEx = ini.GetUInt64(_T("UpOverheadSrcEx"));
cumUpOverheadServer = ini.GetUInt64(_T("UpOverheadServer"));
cumUpOverheadKad = ini.GetUInt64(_T("UpOverheadKad"));
cumUpOverheadTotalPackets = ini.GetUInt64(_T("UpOverHeadTotalPackets"));
cumUpOverheadFileReqPackets = ini.GetUInt64(_T("UpOverheadFileReqPackets"));
cumUpOverheadSrcExPackets = ini.GetUInt64(_T("UpOverheadSrcExPackets"));
cumUpOverheadServerPackets = ini.GetUInt64(_T("UpOverheadServerPackets"));
cumUpOverheadKadPackets = ini.GetUInt64(_T("UpOverheadKadPackets"));
// Load stats for cumulative upline data
cumUpSuccessfulSessions = ini.GetInt(_T("UpSuccessfulSessions"));
cumUpFailedSessions = ini.GetInt(_T("UpFailedSessions"));
cumUpAvgTime = ini.GetInt(_T("UpAvgTime"));
// Load cumulative client breakdown stats for sent bytes
cumUpData_EDONKEY = ini.GetUInt64(_T("UpData_EDONKEY"));
cumUpData_EDONKEYHYBRID = ini.GetUInt64(_T("UpData_EDONKEYHYBRID"));
cumUpData_EMULE = ini.GetUInt64(_T("UpData_EMULE"));
cumUpData_MLDONKEY = ini.GetUInt64(_T("UpData_MLDONKEY"));
cumUpData_EMULECOMPAT = ini.GetUInt64(_T("UpData_LMULE"));
cumUpData_AMULE = ini.GetUInt64(_T("UpData_AMULE"));
cumUpData_SHAREAZA = ini.GetUInt64(_T("UpData_SHAREAZA"));
// Load cumulative port breakdown stats for sent bytes
cumUpDataPort_4662 = ini.GetUInt64(_T("UpDataPort_4662"));
cumUpDataPort_OTHER = ini.GetUInt64(_T("UpDataPort_OTHER"));
// Load cumulative source breakdown stats for sent bytes
cumUpData_File = ini.GetUInt64(_T("UpData_File"));
cumUpData_Partfile = ini.GetUInt64(_T("UpData_Partfile"));
// Load stats for cumulative downline data
cumDownCompletedFiles = ini.GetInt(_T("DownCompletedFiles"));
cumDownSuccessfulSessions = ini.GetInt(_T("DownSuccessfulSessions"));
cumDownFailedSessions = ini.GetInt(_T("DownFailedSessions"));
cumDownAvgTime = ini.GetInt(_T("DownAvgTime"));
// Cumulative statistics for saved due to compression/lost due to corruption
cumLostFromCorruption = ini.GetUInt64(_T("LostFromCorruption"));
cumSavedFromCompression = ini.GetUInt64(_T("SavedFromCompression"));
cumPartsSavedByICH = ini.GetInt(_T("PartsSavedByICH"));
// Load cumulative client breakdown stats for received bytes
cumDownData_EDONKEY = ini.GetUInt64(_T("DownData_EDONKEY"));
cumDownData_EDONKEYHYBRID = ini.GetUInt64(_T("DownData_EDONKEYHYBRID"));
cumDownData_EMULE = ini.GetUInt64(_T("DownData_EMULE"));
cumDownData_MLDONKEY = ini.GetUInt64(_T("DownData_MLDONKEY"));
cumDownData_EMULECOMPAT = ini.GetUInt64(_T("DownData_LMULE"));
cumDownData_AMULE = ini.GetUInt64(_T("DownData_AMULE"));
cumDownData_SHAREAZA = ini.GetUInt64(_T("DownData_SHAREAZA"));
cumDownData_URL = ini.GetUInt64(_T("DownData_URL"));
// Load cumulative port breakdown stats for received bytes
cumDownDataPort_4662 = ini.GetUInt64(_T("DownDataPort_4662"));
cumDownDataPort_OTHER = ini.GetUInt64(_T("DownDataPort_OTHER"));
// Load stats for cumulative connection data
cumConnAvgDownRate = ini.GetFloat(_T("ConnAvgDownRate"));
cumConnMaxAvgDownRate = ini.GetFloat(_T("ConnMaxAvgDownRate"));
cumConnMaxDownRate = ini.GetFloat(_T("ConnMaxDownRate"));
cumConnAvgUpRate = ini.GetFloat(_T("ConnAvgUpRate"));
cumConnMaxAvgUpRate = ini.GetFloat(_T("ConnMaxAvgUpRate"));
cumConnMaxUpRate = ini.GetFloat(_T("ConnMaxUpRate"));
cumConnRunTime = ini.GetUInt64(_T("ConnRunTime"));
cumConnTransferTime = ini.GetInt(_T("ConnTransferTime"));
cumConnDownloadTime = ini.GetInt(_T("ConnDownloadTime"));
cumConnUploadTime = ini.GetInt(_T("ConnUploadTime"));
cumConnServerDuration = ini.GetInt(_T("ConnServerDuration"));
cumConnNumReconnects = ini.GetInt(_T("ConnNumReconnects"));
cumConnAvgConnections = ini.GetInt(_T("ConnAvgConnections"));
cumConnMaxConnLimitReached = ini.GetInt(_T("ConnMaxConnLimitReached"));
cumConnPeakConnections = ini.GetInt(_T("ConnPeakConnections"));
// Load date/time of last reset
stat_datetimeLastReset = ini.GetUInt64(_T("statsDateTimeLastReset"));
// Smart Load For Restores - Don't overwrite records that are greater than the backed up ones
if (loadBackUp == 1)
{
// Load records for servers / network
if (ini.GetInt(_T("SrvrsMostWorkingServers")) > cumSrvrsMostWorkingServers)
cumSrvrsMostWorkingServers = ini.GetInt(_T("SrvrsMostWorkingServers"));
if (ini.GetInt(_T("SrvrsMostUsersOnline")) > (int)cumSrvrsMostUsersOnline)
cumSrvrsMostUsersOnline = ini.GetInt(_T("SrvrsMostUsersOnline"));
if (ini.GetInt(_T("SrvrsMostFilesAvail")) > (int)cumSrvrsMostFilesAvail)
cumSrvrsMostFilesAvail = ini.GetInt(_T("SrvrsMostFilesAvail"));
// Load records for shared files
if (ini.GetInt(_T("SharedMostFilesShared")) > cumSharedMostFilesShared)
cumSharedMostFilesShared = ini.GetInt(_T("SharedMostFilesShared"));
uint64 temp64 = ini.GetUInt64(_T("SharedLargestShareSize"));
if (temp64 > cumSharedLargestShareSize)
cumSharedLargestShareSize = temp64;
temp64 = ini.GetUInt64(_T("SharedLargestAvgFileSize"));
if (temp64 > cumSharedLargestAvgFileSize)
cumSharedLargestAvgFileSize = temp64;
temp64 = ini.GetUInt64(_T("SharedLargestFileSize"));
if (temp64 > cumSharedLargestFileSize)
cumSharedLargestFileSize = temp64;
// Check to make sure the backup of the values we just overwrote exists. If so, rename it to the backup file.
// This allows us to undo a restore, so to speak, just in case we don't like the restored values...
CString sINIBackUp;
sINIBackUp.Format(_T("%sstatbkuptmp.ini"), configdir);
if (findBackUp.FindFile(sINIBackUp)){
CFile::Remove(sINI); // Remove the backup that we just restored from
CFile::Rename(sINIBackUp, sINI); // Rename our temporary backup to the normal statbkup.ini filename.
}
// Since we know this is a restore, now we should call ShowStatistics to update the data items to the new ones we just loaded.
// Otherwise user is left waiting around for the tick counter to reach the next automatic update (Depending on setting in prefs)
theApp.emuledlg->statisticswnd->ShowStatistics();
}
// Stupid Load -> Just load the values.
else
{
// Load records for servers / network
cumSrvrsMostWorkingServers = ini.GetInt(_T("SrvrsMostWorkingServers"));
cumSrvrsMostUsersOnline = ini.GetInt(_T("SrvrsMostUsersOnline"));
cumSrvrsMostFilesAvail = ini.GetInt(_T("SrvrsMostFilesAvail"));
// Load records for shared files
cumSharedMostFilesShared = ini.GetInt(_T("SharedMostFilesShared"));
cumSharedLargestShareSize = ini.GetUInt64(_T("SharedLargestShareSize"));
cumSharedLargestAvgFileSize = ini.GetUInt64(_T("SharedLargestAvgFileSize"));
cumSharedLargestFileSize = ini.GetUInt64(_T("SharedLargestFileSize"));
// Initialize new session statistic variables...
sesDownCompletedFiles = 0;
sesUpData_EDONKEY = 0;
sesUpData_EDONKEYHYBRID = 0;
sesUpData_EMULE = 0;
sesUpData_MLDONKEY = 0;
sesUpData_AMULE = 0;
sesUpData_EMULECOMPAT = 0;
sesUpData_SHAREAZA = 0;
sesUpDataPort_4662 = 0;
sesUpDataPort_OTHER = 0;
sesDownData_EDONKEY = 0;
sesDownData_EDONKEYHYBRID = 0;
sesDownData_EMULE = 0;
sesDownData_MLDONKEY = 0;
sesDownData_AMULE = 0;
sesDownData_EMULECOMPAT = 0;
sesDownData_SHAREAZA = 0;
sesDownData_URL = 0;
sesDownDataPort_4662 = 0;
sesDownDataPort_OTHER = 0;
sesDownSuccessfulSessions = 0;
sesDownFailedSessions = 0;
sesPartsSavedByICH = 0;
}
if (!fileex)
{
time_t timeNow;
time(&timeNow);
stat_datetimeLastReset = (__int64)timeNow;
}
return true;
}
// This formats the UTC long value that is saved for stat_datetimeLastReset
// If this value is 0 (Never reset), then it returns Unknown.
CString CPreferences::GetStatsLastResetStr(bool formatLong)
{
// formatLong dictates the format of the string returned.
// For example...
// true: DateTime format from the .ini
// false: DateTime format from the .ini for the log
CString returnStr;
if (GetStatsLastResetLng()) {
tm *statsReset;
TCHAR szDateReset[128];
time_t lastResetDateTime = (time_t) GetStatsLastResetLng();
statsReset = localtime(&lastResetDateTime);
if (statsReset){
_tcsftime(szDateReset, ARRSIZE(szDateReset), formatLong ? GetDateTimeFormat() : GetDateTimeFormat4Log(), statsReset);
returnStr = szDateReset;
}
}
if (returnStr.IsEmpty())
returnStr = GetResString(IDS_UNKNOWN);
return returnStr;
}
// <-----khaos-
bool CPreferences::Save(){
bool error = false;
TCHAR* fullpath = new TCHAR[_tcslen(configdir)+MAX_PATH]; // i_a
_stprintf(fullpath,_T("%spreferences.dat"),configdir);
FILE* preffile = _tfsopen(fullpath,_T("wb"), _SH_DENYWR);
prefsExt->version = PREFFILE_VERSION;
// -khaos--+++> Don't save stats if preferences.ini doesn't exist yet (Results in unhandled exception).
_stprintf(fullpath,_T("%spreferences.ini"),configdir);
bool bSaveStats = true;
if (!PathFileExists(fullpath))
bSaveStats = false;
// <-----khaos-
delete[] fullpath;
if (preffile){
prefsExt->version=PREFFILE_VERSION;
prefsExt->EmuleWindowPlacement=EmuleWindowPlacement;
md4cpy(prefsExt->userhash, userhash);
error = fwrite(prefsExt,sizeof(Preferences_Ext_Struct),1,preffile);
if (thePrefs.GetCommitFiles() >= 2 || (thePrefs.GetCommitFiles() >= 1 && !theApp.emuledlg->IsRunning())){
fflush(preffile); // flush file stream buffers to disk buffers
(void)_commit(_fileno(preffile)); // commit disk buffers to disk
}
fclose(preffile);
}
else
error = true;
SavePreferences();
// -khaos--+++> SaveStats is now called here instead of from SavePreferences...
if (bSaveStats)
SaveStats();
// <-----khaos-
fullpath = new TCHAR[_tcslen(configdir)+14];
_stprintf(fullpath,_T("%sshareddir.dat"),configdir);
CStdioFile sdirfile;
if (sdirfile.Open(fullpath,CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite))
{
try{
for (POSITION pos = shareddir_list.GetHeadPosition();pos != 0;){
sdirfile.WriteString(shareddir_list.GetNext(pos).GetBuffer());
sdirfile.Write(_T("\n"),1);
}
if (thePrefs.GetCommitFiles() >= 2 || (thePrefs.GetCommitFiles() >= 1 && !theApp.emuledlg->IsRunning())){
sdirfile.Flush(); // flush file stream buffers to disk buffers
if (_commit(_fileno(sdirfile.m_pStream)) != 0) // commit disk buffers to disk
AfxThrowFileException(CFileException::hardIO, GetLastError(), sdirfile.GetFileName());
}
sdirfile.Close();
}
catch(CFileException* error){
TCHAR buffer[MAX_CFEXP_ERRORMSG];
error->GetErrorMessage(buffer,ARRSIZE(buffer));
if (thePrefs.GetVerbose())
AddDebugLogLine(true,_T("Failed to save %s - %s"), fullpath, buffer);
error->Delete();
}
}
else
error = true;
delete[] fullpath;
fullpath=NULL;
::CreateDirectory(GetIncomingDir(),0);
::CreateDirectory(GetTempDir(),0);
return error;
}
void CPreferences::CreateUserHash()
{
for (int i = 0; i < 8; i++)
{
uint16 random = GetRandomUInt16();
memcpy(&userhash[i*2], &random, 2);
}
// mark as emule client. that will be need in later version
userhash[5] = 14;
userhash[14] = 111;
}
int CPreferences::GetColumnWidth(Table t, int index)
{
switch(t) {
case tableDownload:
return downloadColumnWidths[index];
case tableUpload:
return uploadColumnWidths[index];
case tableQueue:
return queueColumnWidths[index];
case tableSearch:
return searchColumnWidths[index];
case tableShared:
return sharedColumnWidths[index];
case tableServer:
return serverColumnWidths[index];
case tableClientList:
return clientListColumnWidths[index];
case tableFilenames:
return FilenamesListColumnWidths[index];
}
return 0;
}
void CPreferences::SetColumnWidth(Table t, int index, int width) {
switch(t) {
case tableDownload:
downloadColumnWidths[index] = width;
break;
case tableUpload:
uploadColumnWidths[index] = width;
break;
case tableQueue:
queueColumnWidths[index] = width;
break;
case tableSearch:
searchColumnWidths[index] = width;
break;
case tableShared:
sharedColumnWidths[index] = width;
break;
case tableServer:
serverColumnWidths[index] = width;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -