options.cpp
来自「一个FTP下载的源代码。代码质量非常高」· C++ 代码 · 共 1,782 行 · 第 1/4 页
CPP
1,782 行
_T("Use GSS"), 1, _T("GSS enabled servers"), 0,
_T("Last Server dont save pass"), 1, _T("Remember Window Size"), 1,
_T("Last Window Size"), 0, _T("Debug Trace"), 1,
_T("Debug Show Listing"), 1, _T("Debug Log To File"), 1,
_T("Debug Log File"), 0, _T("Limit Port Range"), 1,
_T("Port Range Low"), 1, _T("Port Range High"), 1,
_T("Remember Local View"), 1, _T("Remember Remote View"), 1,
_T("Last Splitter Pos"), 0, _T("Use directory cache"), 1,
_T("Max Dir Cache Time"), 1, _T("Last Server Type"), 1,
_T("Minimize to Tray"), 1, _T("Show Remote Treeview"), 1,
_T("Remember Local column widths"), 1, _T("Remember Remote column widths"), 1,
_T("Local column widths"), 0, _T("Remote column widths"), 0,
_T("Local Filesize format"), 1, _T("Remote Filesize format"), 1,
_T("Last server name"), 0, _T("Preserve DL file time"), 1,
_T("Run in Secure Mode"), 0, _T("Default View Edit Prog"), 0,
_T("Custom View Edit Progs"), 0, _T("Always Show Hidden Files"), 1,
_T("Primary TransferMax Size"), 1, _T("Enable debug menu"), 1,
_T("Transfer Api Count"), 1, _T("Use Registry"), 1,
_T("Use multiple connections"), 1, _T("Use Ident server"), 1,
_T("Ident when connecting only"), 1, _T("Ident reply same IP"), 1,
_T("Ident OS"), 0, _T("Ident UserID"), 0,
_T("File exists Action"), 1, _T("SpeedLimit Download Type"), 1,
_T("SpeedLimit Upload Type"), 1, _T("SpeedLimit Download Value"), 1,
_T("SpeedLimit Upload Value"), 1, _T("SpeedLimit Download Rules"), 0,
_T("SpeedLimit Upload Rules"), 0, _T("SiteManager Folders First"), 1,
_T("No Expand SiteManager Folders"),1, _T("Show Local Statusbar"), 1,
_T("Show Remote Statusbar"), 1, _T("Local column sort direction"), 1,
_T("Remote column sort direction"), 1, _T("SSH Use Compression"), 1,
_T("SSH Force Protocol"), 1, _T("Transfer IP"), 0,
_T("Local doubleclick action"), 1, _T("Remote doubleclick action"), 1,
_T("Local treeview location"), 1, _T("Remote treeview location"), 1
};
void COptions::SetOption(int nOptionID,int value)
{
ASSERT(options[nOptionID-1].nType==1);
Init();
CSingleLock lock(&m_Sync, TRUE);
m_OptionsCache[nOptionID-1].bCached=TRUE;
m_OptionsCache[nOptionID-1].createtime=CTime::GetCurrentTime();
m_OptionsCache[nOptionID-1].value=value;
m_OptionsCache[nOptionID-1].nType=1;
if (m_bUseXML)
{
m_markup.ResetPos();
if (!m_markup.FindChildElem( _T("Settings") ))
m_markup.AddChildElem( _T("Settings") );
CString valuestr;
valuestr.Format( _T("%d"), value);
m_markup.IntoElem();
BOOL res=m_markup.FindChildElem();
while (res)
{
CString name=m_markup.GetChildAttrib( _T("name"));
if (!_tcscmp(name, options[nOptionID-1].name))
{
m_markup.SetChildAttrib(_T("name"), options[nOptionID-1].name);
m_markup.SetChildAttrib(_T("type"), _T("numeric"));
m_markup.SetChildData(valuestr);
break;
}
res=m_markup.FindChildElem();
}
if (!res)
{
m_markup.InsertChildElem( _T("Item"), valuestr );
m_markup.SetChildAttrib(_T("name"), options[nOptionID-1].name);
m_markup.SetChildAttrib(_T("type"), _T("numeric"));
}
m_markup.Save( ((CFileZillaApp *)AfxGetApp())->m_appPath + _T("FileZilla.xml") );
}
else
{
unsigned char tmp[4];
memcpy(tmp,&value,4);
HKEY key;
if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\FileZilla"), 0, 0, REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &key, NULL)==ERROR_SUCCESS)
{
RegSetValueEx(key, options[nOptionID-1].name, 0, REG_DWORD, tmp, 4);
RegCloseKey(key);
}
}
}
void COptions::SetOption(int nOptionID, CString value)
{
ASSERT(!options[nOptionID-1].nType);
Init();
CSingleLock lock(&m_Sync, TRUE);
m_OptionsCache[nOptionID-1].bCached=TRUE;
m_OptionsCache[nOptionID-1].createtime=CTime::GetCurrentTime();
m_OptionsCache[nOptionID-1].str=value;
m_OptionsCache[nOptionID-1].nType=0;
if (m_bUseXML)
{
m_markup.ResetPos();
if (!m_markup.FindChildElem( _T("Settings") ))
m_markup.AddChildElem( _T("Settings") );
CString str;
m_markup.IntoElem();
str=m_markup.GetTagName();
BOOL res=m_markup.FindChildElem();
while (res)
{
CString name=m_markup.GetChildAttrib( _T("name"));
if (!_tcscmp(name, options[nOptionID-1].name))
{
m_markup.SetChildAttrib(_T("name"), options[nOptionID-1].name);
m_markup.SetChildAttrib(_T("type"), _T("string"));
m_markup.SetChildData(value);
break;
}
res=m_markup.FindChildElem();
}
if (!res)
{
m_markup.InsertChildElem( _T("Item"), value );
m_markup.SetChildAttrib(_T("name"), options[nOptionID-1].name);
m_markup.SetChildAttrib(_T("type"), _T("string"));
}
m_markup.Save( ((CFileZillaApp *)AfxGetApp())->m_appPath + _T("FileZilla.xml") );
}
else
{
LPTSTR tmp=new TCHAR[value.GetLength()+1];
LPCTSTR str=value;
_tcscpy(tmp,str);
HKEY key;
if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\FileZilla"), 0, 0, REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &key, NULL)==ERROR_SUCCESS)
{
RegSetValueEx(key, options[nOptionID-1].name, 0, REG_SZ, (unsigned char *)tmp, (_tcslen(tmp)+1)*sizeof(TCHAR) );
RegCloseKey(key);
}
delete [] tmp;
}
}
CString COptions::GetOption(int nOptionID)
{
ASSERT(!options[nOptionID-1].nType);
Init();
CSingleLock lock(&m_Sync, TRUE);
CString res = "";
if (m_OptionsCache[nOptionID-1].bCached)
{
ASSERT(!m_OptionsCache[nOptionID-1].nType);
CTimeSpan span=CTime::GetCurrentTime()-m_OptionsCache[nOptionID-1].createtime;
if (span.GetTotalSeconds()<120 || m_bUseXML)
res=m_OptionsCache[nOptionID-1].str;
else
m_OptionsCache[nOptionID-1].bCached=FALSE;
}
if (!m_OptionsCache[nOptionID-1].bCached)
{
HKEY key;
unsigned long tmp=2000;
unsigned char *buffer=new unsigned char[2000];
BOOL exists = FALSE;
if (RegOpenKey(HKEY_CURRENT_USER, _T("Software\\FileZilla"), &key)==ERROR_SUCCESS)
{
memset(buffer, 0, 2000);
if (RegQueryValueEx(key, options[nOptionID-1].name, NULL, NULL, buffer, &tmp)==ERROR_SUCCESS)
{
exists=TRUE;
res=(LPTSTR)buffer;
}
RegCloseKey(key);
}
if (!exists || (!_ttoi(res) && nOptionID==OPTION_RUNINSECUREMODE))
{
memset(buffer, 0, 2000);
if (RegOpenKey(HKEY_LOCAL_MACHINE, _T("Software\\FileZilla") ,&key)==ERROR_SUCCESS)
{
if (RegQueryValueEx(key, options[nOptionID-1].name, NULL, NULL, buffer, &tmp)==ERROR_SUCCESS)
res = buffer;
RegCloseKey(key);
}
}
delete [] buffer;
}
if (res == "")
{
if (nOptionID==OPTION_ASCIIFILES)
res = "ASP;BAT;C;CFM;CGI;CONF;CPP;CSS;DHTML;DIZ;H;HPP;HTM;HTML;INC;JS;MAK;NFO;PAS;PATCH;PHP;PHTML;PINERC;PL;QMAIL;SH;SHTML;SQL;TCL;TPL;TXT;VBS;";
else if (nOptionID==OPTION_GSSSERVERS)
res = "mit.edu;";
else if (nOptionID==OPTION_IDENTSYSTEM)
res = _T("UNIX");
}
if (!m_OptionsCache[nOptionID-1].bCached)
{
m_OptionsCache[nOptionID-1].bCached=TRUE;
m_OptionsCache[nOptionID-1].createtime=CTime::GetCurrentTime();
m_OptionsCache[nOptionID-1].str=res;
m_OptionsCache[nOptionID-1].nType=0;
}
return res;
}
int COptions::GetOptionVal(int nOptionID)
{
ASSERT(options[nOptionID-1].nType==1);
Init();
CSingleLock lock(&m_Sync, TRUE);
int val=0;
if (m_OptionsCache[nOptionID-1].bCached)
{
ASSERT(m_OptionsCache[nOptionID-1].nType==1);
CTimeSpan span=CTime::GetCurrentTime()-m_OptionsCache[nOptionID-1].createtime;
if (span.GetTotalSeconds()<120 || m_bUseXML)
return m_OptionsCache[nOptionID-1].value;
else
m_OptionsCache[nOptionID-1].bCached=FALSE;
}
int error=1;
if (!m_OptionsCache[nOptionID-1].bCached)
{
error=1;
HKEY key;
unsigned char *buffer = new unsigned char[200];
unsigned long tmp=100;
if (RegOpenKey(HKEY_CURRENT_USER, _T("Software\\FileZilla") ,&key)==ERROR_SUCCESS)
{
DWORD type;
if (RegQueryValueEx(key, options[nOptionID-1].name, NULL, &type, buffer, &tmp)==ERROR_SUCCESS)
{
if (type == REG_DWORD)
{
if (tmp<=4)
{
memcpy(&val,buffer,tmp);
error=0;
}
}
else
{
int i;
LPTSTR str = (LPTSTR)buffer;
for (i = 0; i < 100; i++)
{
if (!str[i])
break;
}
if (i == 100)
str[99] = 0;
val = _ttoi(str);
error = 0;
}
}
RegCloseKey(key);
}
if (error)
{
memset(buffer,0,100);
if (RegOpenKey(HKEY_LOCAL_MACHINE, _T("Software\\FileZilla") ,&key)==ERROR_SUCCESS)
{
DWORD type;
if (RegQueryValueEx(key, options[nOptionID-1].name, NULL, &type, buffer, &tmp)==ERROR_SUCCESS)
{
if (type == REG_DWORD)
{
if (tmp<=4)
{
memcpy(&val,buffer,tmp);
error=0;
}
}
else
{
int i;
LPTSTR str = (LPTSTR)buffer;
for (i = 0; i < 100; i++)
{
if (!str[i])
break;
}
if (i == 100)
str[99] = 0;
val = _ttoi(str);
error = 0;
}
}
RegCloseKey(key);
}
}
delete [] buffer;
}
switch (nOptionID)
{
case OPTION_KEEPALIVE:
if (error)
val=1;
break;
case OPTION_INTERVALLOW:
if (val>500)
val=15;
else if (val<15)
val=15;
break;
case OPTION_INTERVALHIGH:
if (val>500)
val=30;
else if (val<15)
val=30;
break;
case OPTION_TIMEOUTLENGTH:
if (val<30)
val=30;
else if (val>999)
val=30;
break;
case OPTION_NUMRETRIES:
if (val<0 || error)
val=5;
else if (val>999)
val=5;
break;
case OPTION_RETRYDELAY:
if (val<0 || error)
val=5;
else if (val>999)
val=5;
break;
case OPTION_DEFAULTFOLDERTYPE:
if (val!=1)
val=0;
break;
case OPTION_TRANSFERMODE:
if (val<0 || val>2)
val=0;
break;
case OPTION_PORTRANGELOW:
if (val<1 || val>65535)
val=1;
break;
case OPTION_PORTRANGEHIGH:
if (val<1 || val>65535)
val=65535;
break;
case OPTION_MAXCACHETIME:
if (val<=0)
val=60*30;
break;
case OPTION_LOCALFILESIZEFORMAT:
if (error || val<0 || val >3)
val=0;
break;
case OPTION_REMOTEFILESIZEFORMAT:
if (error || val<0 || val >3)
val=1;
break;
case OPTION_USECACHE:
if (error)
val=1;
break;
case OPTION_TRANSFERPRIMARYMAXSIZE:
if (error || val < 0 || val > 999999)
val=1024;
break;
case OPTION_TRANSFERAPICOUNT:
if (error || val < 1 || val > 10)
val=2;
break;
case OPTION_TRANSFERUSEMULTIPLE:
if (error)
val=1;
break;
case OPTION_FILEEXISTSACTION:
if (val<0 || val>5)
val=0;
break;
case OPTION_SPEEDLIMIT_DOWNLOAD_VALUE:
case OPTION_SPEEDLIMIT_UPLOAD_VALUE:
if (error || val<=0)
val=10;
break;
case OPTION_SHOWLOCALSTATUSBAR:
case OPTION_SHOWREMOTESTATUSBAR:
if (error)
val = 1;
break;
case OPTION_HIDEREMOTECOLUMNS:
if (error)
val = 0x20;
break;
case OPTION_SSHUSECOMPRESSION:
case OPTION_SSHPROTOCOL:
if (val < 0 || val > 2)
val = 0;
break;
case OPTION_MINIMIZETOTRAY:
if (val < 0 || val > 2)
val = 0;
break;
case OPTION_LOCAL_DOUBLECLICK_ACTION:
case OPTION_REMOTE_DOUBLECLICK_ACTION:
if (val < 0 || val > 2)
val = 0;
break;
case OPTION_LOCALTREEVIEWLOCATION:
case OPTION_REMOTETREEVIEWLOCATION:
if (val < 0 || val > 1)
val = 0;
break;
case OPTION_USEREGISTRY:
if (error || val < 0 || val > 2)
val = -1;
break;
}
if (!m_OptionsCache[nOptionID-1].bCached)
{
m_OptionsCache[nOptionID-1].bCached = TRUE;
m_OptionsCache[nOptionID-1].createtime = CTime::GetCurrentTime();
m_OptionsCache[nOptionID-1].value = val;
m_OptionsCache[nOptionID-1].nType = 1;
}
return val;
}
void COptions::OnOK()
{
if (!UpdateData(true))
return;
if (!GetCurPage()->UpdateData(TRUE))
return;
for (std::list<CSAPrefsSubDlg *>::iterator iter = m_PageList.begin(); iter != m_PageList.end(); iter++)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?