📄 settings.cpp
字号:
Add( _T("Uploads.ClampdownFloor"), &Uploads.ClampdownFloor, 1024 );
Add( _T("Uploads.ThrottleMode"), &Uploads.ThrottleMode, TRUE );
Add( _T("Uploads.QueuePollMin"), &Uploads.QueuePollMin, 45000 );
Add( _T("Uploads.QueuePollMax"), &Uploads.QueuePollMax, 120000 );
Add( _T("Uploads.RotateChunkLimit"), &Uploads.RotateChunkLimit, 1024*1024 );
Add( _T("Uploads.SharePartials"), &Uploads.SharePartials, TRUE );
Add( _T("Uploads.ShareTiger"), &Uploads.ShareTiger, TRUE );
Add( _T("Uploads.ShareHashset"), &Uploads.ShareHashset, TRUE );
Add( _T("Uploads.ShareMetadata"), &Uploads.ShareMetadata, TRUE );
Add( _T("Uploads.SharePreviews"), &Uploads.SharePreviews, TRUE );
Add( _T("Uploads.DynamicPreviews"), &Uploads.DynamicPreviews, TRUE );
Add( _T("Uploads.PreviewQuality"), &Uploads.PreviewQuality, 40 );
Add( _T("Uploads.PreviewTransfers"), &Uploads.PreviewTransfers, 3 );
Add( _T("Uploads.AllowBackwards"), &Uploads.AllowBackwards, TRUE );
Add( _T("Uploads.HubUnshare"), &Uploads.HubUnshare, TRUE );
Add( _T("Uploads.BlockAgents"), &Uploads.BlockAgents, _T("|Mozilla|") );
Add( _T("Uploads.AutoClear"), &Uploads.AutoClear, FALSE );
Add( _T("Uploads.ClearDelay"), &Uploads.ClearDelay, 30000 );
Add( _T("Uploads.FilterMask"), &Uploads.FilterMask, 0xFFFFFFFD );
Add( _T("Remote.Enable"), &Remote.Enable, FALSE );
Add( _T("Remote.Username"), &Remote.Username, _T("") );
Add( _T("Remote.Password"), &Remote.Password, _T("") );
}
//////////////////////////////////////////////////////////////////////
// CSettings construction
CSettings::CSettings()
{
TCHAR szPath[128];
GetModuleFileName( NULL, szPath, 128 );
General.Path = szPath;
if ( General.Path.ReverseFind( '\\' ) >= 0 )
General.Path = General.Path.Left( General.Path.ReverseFind( '\\' ) );
Live.BandwidthScale = 90;
Live.LoadWindowState = FALSE;
Live.AutoClose = FALSE;
Live.FirstRun = FALSE;
Setup();
}
CSettings::~CSettings()
{
for ( POSITION pos = m_pItems.GetHeadPosition() ; pos ; )
{
delete (Item*)m_pItems.GetNext( pos );
}
}
//////////////////////////////////////////////////////////////////////
// CSettings add items
void CSettings::Add(LPCTSTR pszName, DWORD* pDword, DWORD nDefault)
{
m_pItems.AddTail( new Item( pszName, pDword, NULL, NULL ) );
*pDword = nDefault;
}
void CSettings::Add(LPCTSTR pszName, int* pDword, DWORD nDefault)
{
m_pItems.AddTail( new Item( pszName, (DWORD*)pDword, NULL, NULL ) );
*pDword = nDefault;
}
void CSettings::Add(LPCTSTR pszName, DOUBLE* pFloat, DOUBLE nDefault)
{
m_pItems.AddTail( new Item( pszName, NULL, pFloat, NULL ) );
*pFloat = nDefault;
}
void CSettings::Add(LPCTSTR pszName, CString* pString, LPCTSTR pszDefault)
{
m_pItems.AddTail( new Item( pszName, NULL, NULL, pString ) );
if ( pszDefault ) *pString = pszDefault;
}
//////////////////////////////////////////////////////////////////////
// CSettings load
#define SMART_VERSION 28
void CSettings::Load()
{
for ( POSITION pos = m_pItems.GetHeadPosition() ; pos ; )
{
Item* pItem = (Item*)m_pItems.GetNext( pos );
pItem->Load();
}
if ( theApp.GetProfileInt( _T("Settings"), _T("FirstRun"), TRUE ) )
{
Live.FirstRun = TRUE;
theApp.WriteProfileInt( _T("Settings"), _T("FirstRun"), FALSE );
}
SmartUpgrade();
if ( theApp.GetProfileInt( _T("Settings"), _T("Running"), FALSE ) )
{
theApp.WriteProfileInt( _T("VersionCheck"), _T("NextCheck"), 0 );
}
else
{
theApp.WriteProfileInt( _T("Settings"), _T("Running"), TRUE );
}
Gnutella1.EnableToday = Gnutella1.EnableAlways;
Gnutella2.EnableToday = Gnutella2.EnableAlways;
eDonkey.EnableToday = eDonkey.EnableAlways;
CreateDirectory( General.Path + _T("\\Data"), NULL );
}
void CSettings::Save(BOOL bShutdown)
{
if ( Connection.TimeoutConnect == 0 ) return;
for ( POSITION pos = m_pItems.GetHeadPosition() ; pos ; )
{
Item* pItem = (Item*)m_pItems.GetNext( pos );
if ( pItem->m_sName != _T(".Path") ) pItem->Save();
}
theApp.WriteProfileInt( _T("Settings"), _T("SmartVersion"), SMART_VERSION );
theApp.WriteProfileInt( _T("Settings"), _T("Running"), bShutdown ? FALSE : TRUE );
}
//////////////////////////////////////////////////////////////////////
// CSettings smart upgrade
void CSettings::SmartUpgrade()
{
int nVersion = theApp.GetProfileInt( _T("Settings"), _T("SmartVersion"), SMART_VERSION );
if ( nVersion < 20 )
{
Gnutella.HubForce = FALSE;
Gnutella1.TranslateTTL = 3;
Gnutella1.RequeryDelay = 45*60;
Gnutella2.NumPeers = 4;
Gnutella2.QueryGlobalThrottle = 200;
Gnutella2.UdpOutResend = 6000;
Gnutella2.UdpOutExpire = 26000;
Library.TigerHeight = 9;
Library.SourceExpire = 86400;
Library.BitziWebSubmit = _T("http://bitzi.com/lookup/(SHA1).(TTH)?fl=(SIZE)&ff=(FIRST20)&fn=(NAME)&a=(AGENT)&v=Q0.4&ref=shareaza");
Downloads.MaxFiles = max( Downloads.MaxFiles, 8 );
Downloads.MaxTransfers = max( Downloads.MaxTransfers, 32 );
Downloads.MaxFileTransfers = max( Downloads.MaxFileTransfers, 14 );
Downloads.AutoExpand = FALSE;
Uploads.SharePartials = TRUE;
Uploads.MaxPerHost = 2;
Uploads.ShareTiger = TRUE;
Replace( Library.PrivateTypes, _T("|nfo|"), _T("|") );
Replace( Library.SafeExecute, _T("|."), _T("|") );
}
if ( nVersion < 21 )
{
General.CloseMode = 0;
Library.ThumbSize = 96;
Library.SourceExpire = 86400;
Gnutella1.TranslateTTL = 2;
}
if ( nVersion < 24 )
{
General.CloseMode = 0;
Connection.TimeoutHandshake = max( Connection.TimeoutHandshake, 40000 );
Connection.TimeoutConnect = 16000;
Connection.TimeoutHandshake = 45000;
Connection.TimeoutTraffic = 140000;
Downloads.RetryDelay = 10*60000;
Uploads.FilterMask = 0xFFFFFFFD;
}
if ( nVersion < 25 )
{
Connection.TimeoutTraffic = 140000;
Gnutella2.NumHubs = 2;
Gnutella2.NumLeafs = 300;
Gnutella2.NumPeers = 6;
}
if ( nVersion < 26 )
{
Downloads.ConnectThrottle = max( Downloads.ConnectThrottle, 200 );
Downloads.MaxTransfers = min( Downloads.MaxTransfers, 128 );
}
if ( nVersion < 28 )
{
Connection.Firewalled = TRUE; // We now assume so until proven otherwise
Library.VirtualFiles = TRUE; // Virtual files (stripping) on
BitTorrent.Endgame = TRUE; // Endgame on
}
if ( ( nVersion < SMART_VERSION || Live.FirstRun ) &&
_tcsistr( MediaPlayer.FileTypes, _T("|ogg|") ) == NULL )
{
LONG nReg = 0;
if ( RegQueryValue( HKEY_CLASSES_ROOT,
_T("CLSID\\{02391F44-2767-4E6A-A484-9B47B506F3A4}"), NULL, &nReg )
== ERROR_SUCCESS && nReg > 0 )
{
MediaPlayer.FileTypes += _T("|ogg|");
}
}
}
//////////////////////////////////////////////////////////////////////
// CSettings settings lookup
CSettings::Item* CSettings::GetSetting(LPCTSTR pszName) const
{
for ( POSITION pos = m_pItems.GetHeadPosition() ; pos ; )
{
Item* pItem = (Item*)m_pItems.GetNext( pos );
if ( pItem->m_sName.CompareNoCase( pszName ) == 0 ) return pItem;
}
return NULL;
}
CSettings::Item* CSettings::GetSetting(LPVOID pValue) const
{
for ( POSITION pos = m_pItems.GetHeadPosition() ; pos ; )
{
Item* pItem = (Item*)m_pItems.GetNext( pos );
if ( pItem->m_pDword == pValue ||
pItem->m_pFloat == pValue ||
pItem->m_pString == pValue ) return pItem;
}
return NULL;
}
//////////////////////////////////////////////////////////////////////
// CSettings window position persistance
BOOL CSettings::LoadWindow(LPCTSTR pszName, CWnd* pWindow)
{
WINDOWPLACEMENT pPos;
CString strEntry;
if ( pszName != NULL )
strEntry = pszName;
else
strEntry = pWindow->GetRuntimeClass()->m_lpszClassName;
int nShowCmd = theApp.GetProfileInt( _T("Windows"), strEntry + _T(".ShowCmd"), -1 );
if ( nShowCmd == -1 ) return FALSE;
ZeroMemory( &pPos, sizeof(pPos) );
pPos.length = sizeof(pPos);
pPos.rcNormalPosition.left = theApp.GetProfileInt( _T("Windows"), strEntry + _T(".Left"), 0 );
pPos.rcNormalPosition.top = theApp.GetProfileInt( _T("Windows"), strEntry + _T(".Top"), 0 );
pPos.rcNormalPosition.right = theApp.GetProfileInt( _T("Windows"), strEntry + _T(".Right"), 0 );
pPos.rcNormalPosition.bottom = theApp.GetProfileInt( _T("Windows"), strEntry + _T(".Bottom"), 0 );
if ( pPos.rcNormalPosition.right && pPos.rcNormalPosition.bottom )
{
pPos.showCmd = 0;
pWindow->SetWindowPlacement( &pPos );
}
if ( Live.LoadWindowState && nShowCmd == SW_SHOWMINIMIZED )
{
pWindow->PostMessage( WM_SYSCOMMAND, SC_MINIMIZE );
}
else if ( ! Live.LoadWindowState && nShowCmd == SW_SHOWMAXIMIZED )
{
pWindow->PostMessage( WM_SYSCOMMAND, SC_MAXIMIZE );
}
return TRUE;
}
void CSettings::SaveWindow(LPCTSTR pszName, CWnd* pWindow)
{
WINDOWPLACEMENT pPos;
CString strEntry;
if ( pszName != NULL )
strEntry = pszName;
else
strEntry = pWindow->GetRuntimeClass()->m_lpszClassName;
pWindow->GetWindowPlacement( &pPos );
theApp.WriteProfileInt( _T("Windows"), strEntry + _T(".ShowCmd"), pPos.showCmd );
if ( pPos.showCmd != SW_SHOWNORMAL ) return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -