📄 otherfunctions.cpp
字号:
return false;
for (int i = 0; i < 16; i++)
{
char byte[3];
byte[0] = rstr[i*2+0];
byte[1] = rstr[i*2+1];
byte[2] = '\0';
UINT b;
if (sscanf(byte, "%x", &b) != 1)
return false;
hash[i] = b;
}
return true;
}
CString CleanupFilename(CString filename) {
CString tempStr;
filename=URLDecode(filename);
filename.MakeLower();
//remove substrings, defined in the preferences (.ini)
CString resToken;
CString strlink=thePrefs.GetFilenameCleanups().MakeLower();
int curPos=0;
resToken= strlink.Tokenize(_T("|"),curPos);
while (!resToken.IsEmpty()) {
filename.Replace(resToken,_T(""));
resToken= strlink.Tokenize(_T("|"),curPos);
}
// Replace . with Spaces - except the last one (extention-dot)
int extpos=filename.ReverseFind(_T('.'));
if (extpos>=0) {
for (int i=0;i<extpos;++i) {
if (filename.GetAt(i)!=_T('.')) continue;
if (i>0 && i<filename.GetLength()-1 && isdigit(filename.GetAt(i-1)) && isdigit(filename.GetAt(i+1)) ) continue;
filename.SetAt(i,_T(' '));
}
}
// Replace Space-holders with Spaces
filename.Replace(_T('_'),_T(' '));
filename.Replace(_T("+"),_T(" ")); //SyruS for Jigle
//SyruS additional cleanup
// invalid for filenames
filename.Replace(_T("\\"), _T("")); //[edit: oops, one \ was missing]
filename.Replace(_T("\""), _T(""));
filename.Replace(_T("/"), _T(""));
filename.Replace(_T(":"), _T(""));
filename.Replace(_T("*"), _T(""));
filename.Replace(_T("?"), _T(""));
filename.Replace(_T("<"), _T(""));
filename.Replace(_T(">"), _T(""));
filename.Replace(_T("|"), _T(""));
// other common nonsense (u can use dots here!)
filename.Replace(_T("="), _T(""));
int pos1,pos2;
pos1=-1;
for (;;)
{
pos1=filename.Find(_T('['),pos1+1);
if (pos1==-1) break;
pos2=filename.Find(_T(']'),pos1);
if (pos1>-1 && pos2>pos1) {
if (pos2-pos1 > 1) {
tempStr=filename.Mid(pos1+1,pos2-pos1-1);
int numcount=0;
for (int i=0;i<tempStr.GetLength();++i)
if (isdigit(tempStr.GetAt(i))) ++numcount;
if (numcount>tempStr.GetLength()/2) continue;
}
filename=filename.Left(pos1)+filename.Right(filename.GetLength()-pos2-1);
pos1--;
} else break;
}
// Barry - Some additional formatting
filename.Replace(_T("()"), _T(""));
filename.Replace(_T(" "), _T(" "));
filename.Replace(_T(" ."), _T("."));
filename.Replace(_T("( "), _T("("));
filename.Replace(_T(" )"), _T(")"));
filename.Replace(_T("()"), _T(""));
//CML - for chinese string
if( (thePrefs.GetLanguageID() != MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_TRADITIONAL))&&
(thePrefs.GetLanguageID() != MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED)))
{
filename.Replace(_T("{ "), _T("{"));
filename.Replace(_T(" }"), _T("}"));
filename.Replace(_T("{}"), _T(""));
}
// Make leading Caps
if (filename.GetLength()>1)
{
tempStr=filename.GetAt(0);
tempStr.MakeUpper();
filename.SetAt(0, tempStr.GetAt(0));
int topos=filename.ReverseFind(_T('.'))-1;
if (topos<0) topos=filename.GetLength()-1;
for (int ix=0; ix<topos; ix++)
{
if (!IsCharAlpha(filename.GetAt(ix))) //if (filename.GetAt(ix) == ' ' || isdigit(filename.GetAt(ix)) )
{
if (ix<filename.GetLength()-2 && isdigit(filename.GetAt(ix+2) ))
continue;
tempStr=filename.GetAt(ix+1);
tempStr.MakeUpper();
filename.SetAt(ix+1,tempStr.GetAt(0));
}
}
}
filename.Trim();
return filename;
}
struct SED2KFileType
{
LPCTSTR pszExt;
EED2KFileType iFileType;
} _aED2KFileTypes[] =
{
{ _T(".669"), ED2KFT_AUDIO },
{ _T(".aac"), ED2KFT_AUDIO },
{ _T(".aif"), ED2KFT_AUDIO },
{ _T(".aiff"), ED2KFT_AUDIO },
{ _T(".amf"), ED2KFT_AUDIO },
{ _T(".ams"), ED2KFT_AUDIO },
{ _T(".ape"), ED2KFT_AUDIO },
{ _T(".au"), ED2KFT_AUDIO },
{ _T(".dbm"), ED2KFT_AUDIO },
{ _T(".dmf"), ED2KFT_AUDIO },
{ _T(".dsm"), ED2KFT_AUDIO },
{ _T(".far"), ED2KFT_AUDIO },
{ _T(".flac"), ED2KFT_AUDIO },
{ _T(".it"), ED2KFT_AUDIO },
{ _T(".mdl"), ED2KFT_AUDIO },
{ _T(".med"), ED2KFT_AUDIO },
{ _T(".mid"), ED2KFT_AUDIO },
{ _T(".midi"), ED2KFT_AUDIO },
{ _T(".mod"), ED2KFT_AUDIO },
{ _T(".mol"), ED2KFT_AUDIO },
{ _T(".mp1"), ED2KFT_AUDIO },
{ _T(".mp2"), ED2KFT_AUDIO },
{ _T(".mp3"), ED2KFT_AUDIO },
{ _T(".mp4"), ED2KFT_AUDIO },
{ _T(".mpa"), ED2KFT_AUDIO },
{ _T(".mpc"), ED2KFT_AUDIO },
{ _T(".mpp"), ED2KFT_AUDIO },
{ _T(".mtm"), ED2KFT_AUDIO },
{ _T(".nst"), ED2KFT_AUDIO },
{ _T(".ogg"), ED2KFT_AUDIO },
{ _T(".okt"), ED2KFT_AUDIO },
{ _T(".psm"), ED2KFT_AUDIO },
{ _T(".ptm"), ED2KFT_AUDIO },
{ _T(".ra"), ED2KFT_AUDIO },
{ _T(".rmi"), ED2KFT_AUDIO },
{ _T(".s3m"), ED2KFT_AUDIO },
{ _T(".stm"), ED2KFT_AUDIO },
{ _T(".ult"), ED2KFT_AUDIO },
{ _T(".umx"), ED2KFT_AUDIO },
{ _T(".wav"), ED2KFT_AUDIO },
{ _T(".wma"), ED2KFT_AUDIO },
{ _T(".wow"), ED2KFT_AUDIO },
{ _T(".xm"), ED2KFT_AUDIO },
{ _T(".asf"), ED2KFT_VIDEO },
{ _T(".avi"), ED2KFT_VIDEO },
{ _T(".divx"), ED2KFT_VIDEO },
{ _T(".m1v"), ED2KFT_VIDEO },
{ _T(".m2v"), ED2KFT_VIDEO },
{ _T(".mkv"), ED2KFT_VIDEO },
{ _T(".mov"), ED2KFT_VIDEO },
{ _T(".mp1v"), ED2KFT_VIDEO },
{ _T(".mp2v"), ED2KFT_VIDEO },
{ _T(".mpe"), ED2KFT_VIDEO },
{ _T(".mpeg"), ED2KFT_VIDEO },
{ _T(".mpg"), ED2KFT_VIDEO },
{ _T(".mps"), ED2KFT_VIDEO },
{ _T(".mpv"), ED2KFT_VIDEO },
{ _T(".mpv1"), ED2KFT_VIDEO },
{ _T(".mpv2"), ED2KFT_VIDEO },
{ _T(".ogm"), ED2KFT_VIDEO },
{ _T(".qt"), ED2KFT_VIDEO },
{ _T(".ram"), ED2KFT_VIDEO },
{ _T(".rm"), ED2KFT_VIDEO },
{ _T(".rv"), ED2KFT_VIDEO },
{ _T(".rv9"), ED2KFT_VIDEO },
{ _T(".ts"), ED2KFT_VIDEO },
{ _T(".vivo"), ED2KFT_VIDEO },
{ _T(".vob"), ED2KFT_VIDEO },
{ _T(".wmv"), ED2KFT_VIDEO },
{ _T(".xvid"), ED2KFT_VIDEO },
{ _T(".bmp"), ED2KFT_IMAGE },
{ _T(".dcx"), ED2KFT_IMAGE },
{ _T(".emf"), ED2KFT_IMAGE },
{ _T(".gif"), ED2KFT_IMAGE },
{ _T(".ico"), ED2KFT_IMAGE },
{ _T(".jpeg"), ED2KFT_IMAGE },
{ _T(".jpg"), ED2KFT_IMAGE },
{ _T(".pct"), ED2KFT_IMAGE },
{ _T(".pcx"), ED2KFT_IMAGE },
{ _T(".pic"), ED2KFT_IMAGE },
{ _T(".pict"), ED2KFT_IMAGE },
{ _T(".png"), ED2KFT_IMAGE },
{ _T(".psd"), ED2KFT_IMAGE },
{ _T(".psp"), ED2KFT_IMAGE },
{ _T(".tga"), ED2KFT_IMAGE },
{ _T(".tif"), ED2KFT_IMAGE },
{ _T(".tiff"), ED2KFT_IMAGE },
{ _T(".wmf"), ED2KFT_IMAGE },
{ _T(".xif"), ED2KFT_IMAGE },
{ _T(".ace"), ED2KFT_ARCHIVE },
{ _T(".arj"), ED2KFT_ARCHIVE },
{ _T(".bz2"), ED2KFT_ARCHIVE },
{ _T(".cab"), ED2KFT_ARCHIVE },
{ _T(".gz"), ED2KFT_ARCHIVE },
{ _T(".hqx"), ED2KFT_ARCHIVE },
{ _T(".lha"), ED2KFT_ARCHIVE },
{ _T(".msi"), ED2KFT_ARCHIVE },
{ _T(".rar"), ED2KFT_ARCHIVE },
{ _T(".sea"), ED2KFT_ARCHIVE },
{ _T(".sit"), ED2KFT_ARCHIVE },
{ _T(".tar"), ED2KFT_ARCHIVE },
{ _T(".tgz"), ED2KFT_ARCHIVE },
{ _T(".uc2"), ED2KFT_ARCHIVE },
{ _T(".zip"), ED2KFT_ARCHIVE },
{ _T(".bat"), ED2KFT_PROGRAM },
{ _T(".cmd"), ED2KFT_PROGRAM },
{ _T(".com"), ED2KFT_PROGRAM },
{ _T(".exe"), ED2KFT_PROGRAM },
{ _T(".bin"), ED2KFT_CDIMAGE },
{ _T(".bwa"), ED2KFT_CDIMAGE },
{ _T(".bwi"), ED2KFT_CDIMAGE },
{ _T(".bws"), ED2KFT_CDIMAGE },
{ _T(".bwt"), ED2KFT_CDIMAGE },
{ _T(".ccd"), ED2KFT_CDIMAGE },
{ _T(".cue"), ED2KFT_CDIMAGE },
{ _T(".dmg"), ED2KFT_CDIMAGE },
{ _T(".dmz"), ED2KFT_CDIMAGE },
{ _T(".img"), ED2KFT_CDIMAGE },
{ _T(".iso"), ED2KFT_CDIMAGE },
{ _T(".mdf"), ED2KFT_CDIMAGE },
{ _T(".mds"), ED2KFT_CDIMAGE },
{ _T(".nrg"), ED2KFT_CDIMAGE },
{ _T(".sub"), ED2KFT_CDIMAGE },
{ _T(".toast"), ED2KFT_CDIMAGE },
{ _T(".chm"), ED2KFT_DOCUMENT },
{ _T(".css"), ED2KFT_DOCUMENT },
{ _T(".diz"), ED2KFT_DOCUMENT },
{ _T(".doc"), ED2KFT_DOCUMENT },
{ _T(".dot"), ED2KFT_DOCUMENT },
{ _T(".hlp"), ED2KFT_DOCUMENT },
{ _T(".htm"), ED2KFT_DOCUMENT },
{ _T(".html"), ED2KFT_DOCUMENT },
{ _T(".nfo"), ED2KFT_DOCUMENT },
{ _T(".pdf"), ED2KFT_DOCUMENT },
{ _T(".pps"), ED2KFT_DOCUMENT },
{ _T(".ppt"), ED2KFT_DOCUMENT },
{ _T(".ps"), ED2KFT_DOCUMENT },
{ _T(".rtf"), ED2KFT_DOCUMENT },
{ _T(".wri"), ED2KFT_DOCUMENT },
{ _T(".txt"), ED2KFT_DOCUMENT },
{ _T(".xls"), ED2KFT_DOCUMENT },
{ _T(".xlt"), ED2KFT_DOCUMENT }
};
int __cdecl CompareE2DKFileType(const void* p1, const void* p2)
{
return _tcscmp( ((const SED2KFileType*)p1)->pszExt, ((const SED2KFileType*)p2)->pszExt );
}
EED2KFileType GetED2KFileTypeID(LPCTSTR pszFileName)
{
LPCTSTR pszExt = _tcsrchr(pszFileName, _T('.'));
if (pszExt == NULL)
return ED2KFT_ANY;
CString strExt(pszExt);
strExt.MakeLower();
SED2KFileType ft;
ft.pszExt = strExt;
ft.iFileType = ED2KFT_ANY;
const SED2KFileType* pFound = (SED2KFileType*)bsearch(&ft, _aED2KFileTypes, ARRSIZE(_aED2KFileTypes), sizeof _aED2KFileTypes[0], CompareE2DKFileType);
if (pFound != NULL)
return pFound->iFileType;
return ED2KFT_ANY;
}
// Retuns the ed2k file type term which is to be used in server searches
LPCSTR GetED2KFileTypeSearchTerm(EED2KFileType iFileID)
{
if (iFileID == ED2KFT_AUDIO) return ED2KFTSTR_AUDIO;
if (iFileID == ED2KFT_VIDEO) return ED2KFTSTR_VIDEO;
if (iFileID == ED2KFT_IMAGE) return ED2KFTSTR_IMAGE;
if (iFileID == ED2KFT_DOCUMENT) return ED2KFTSTR_DOCUMENT;
if (iFileID == ED2KFT_PROGRAM) return ED2KFTSTR_PROGRAM;
// NOTE: Archives and CD-Images are published with file type "Pro"
if (iFileID == ED2KFT_ARCHIVE) return ED2KFTSTR_PROGRAM;
if (iFileID == ED2KFT_CDIMAGE) return ED2KFTSTR_PROGRAM;
return NULL;
}
// Returns a file type which is used eMule internally only, examining the extention of the given filename
CStringA GetFileTypeByName(LPCTSTR pszFileName)
{
EED2KFileType iFileType = GetED2KFileTypeID(pszFileName);
switch (iFileType) {
case ED2KFT_AUDIO: return ED2KFTSTR_AUDIO;
case ED2KFT_VIDEO: return ED2KFTSTR_VIDEO;
case ED2KFT_IMAGE: return ED2KFTSTR_IMAGE;
case ED2KFT_DOCUMENT: return ED2KFTSTR_DOCUMENT;
case ED2KFT_PROGRAM: return ED2KFTSTR_PROGRAM;
case ED2KFT_ARCHIVE: return ED2KFTSTR_ARCHIVE;
case ED2KFT_CDIMAGE: return ED2KFTSTR_CDIMAGE;
default: return "";
}
}
// Returns a file type which is used eMule internally only (GUI)
CString GetFileTypeDisplayStrFromED2KFileType(LPCSTR pszED2KFileType)
{
ASSERT( pszED2KFileType != NULL );
if (pszED2KFileType != NULL)
{
if (strcmp(pszED2KFileType, ED2KFTSTR_AUDIO) == 0) return GetResString(IDS_SEARCH_AUDIO);
else if (strcmp(pszED2KFileType, ED2KFTSTR_VIDEO) == 0) return GetResString(IDS_SEARCH_VIDEO);
else if (strcmp(pszED2KFileType, ED2KFTSTR_IMAGE) == 0) return GetResString(IDS_SEARCH_PICS);
else if (strcmp(pszED2KFileType, ED2KFTSTR_DOCUMENT) == 0) return GetResString(IDS_SEARCH_DOC);
else if (strcmp(pszED2KFileType, ED2KFTSTR_PROGRAM) == 0) return GetResString(IDS_SEARCH_PRG);
else if (strcmp(pszED2KFileType, ED2KFTSTR_ARCHIVE) == 0) return GetResString(IDS_SEARCH_ARC);
else if (strcmp(pszED2KFileType, ED2KFTSTR_CDIMAGE) == 0) return GetResString(IDS_SEARCH_CDIMG);
}
return _T("");
}
class CED2KFileTypes{
public:
CED2KFileTypes(){
qsort(_aED2KFileTypes, ARRSIZE(_aED2KFileTypes), sizeof _aED2KFileTypes[0], CompareE2DKFileType);
#ifdef _DEBUG
// check for duplicate entries
LPCTSTR pszLast = _aED2KFileTypes[0].pszExt;
for (int i = 1; i < ARRSIZE(_aED2KFileTypes); i++){
ASSERT( _tcscmp(pszLast, _aED2KFileTypes[i].pszExt) != 0 );
pszLast = _aED2KFileTypes[i].pszExt;
}
#endif
}
};
CED2KFileTypes theED2KFileTypes; // get the list sorted *before* any code is accessing it
TCHAR *stristr(const TCHAR *str1, const TCHAR *str2)
{
const TCHAR *cp = str1;
const TCHAR *s1;
const TCHAR *s2;
if (!*str2)
return (TCHAR *)str1;
while (*cp)
{
s1 = cp;
s2 = str2;
while (*s1 && *s2 && _totlower(*s1) == _totlower(*s2))
s1++, s2++;
if (!*s2)
return (TCHAR *)cp;
cp++;
}
return NULL;
}
int GetSystemErrorString(DWORD dwError, CString &rstrError)
{
// FormatMessage language flags:
//
// - MFC uses: MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT)
// SUBLANG_SYS_DEFAULT = 0x02 (system default)
//
// - SDK uses: MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
// SUBLANG_DEFAULT = 0x01 (user default)
//
//
// Found in "winnt.h"
// ------------------
// Language IDs.
//
// The following two combinations of primary language ID and
// sublanguage ID have special semantics:
//
// Primary Language ID Sublanguage ID Result
// ------------------- --------------- ------------------------
// LANG_NEUTRAL SUBLANG_NEUTRAL Language neutral
// LANG_NEUTRAL SUBLANG_DEFAULT User default language
// LANG_NEUTRAL SUBLANG_SYS_DEFAULT System default language
//
// *** SDK notes also:
// If you pass in zero, 'FormatMessage' looks for a message for LANGIDs in
// the following order:
//
// 1) Language neutral
// 2) Thread LANGID, based on the thread's locale value
// 3) User default LANGID, based on the user's default locale value
// 4) System default LANGID, based on the system default locale value
// 5) US English
LPTSTR pszSysMsg = NULL;
DWORD dwLength = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),
(LPTSTR)&pszSysMsg, 0, NULL);
if (pszSysMsg != NULL && dwLength != 0)
{
if (dwLength >= 2 && pszSysMsg[dwLength - 2] == _T('\r'))
pszSysMsg[dwLength - 2] = _T('\0');
rstrError = pszSysMsg;
rstrError.Replace(_T("\r\n"), _T(" ")); // some messages contain CRLF within the message!?
}
else {
rstrError.Empty();
}
if (pszSysMsg)
LocalFree(pszSysMsg);
return rstrError.GetLength();
}
int GetModuleErrorString(DWORD dwError, CString &rstrError, LPCTSTR pszModule)
{
LPTSTR pszSysMsg = NULL;
DWORD dwLength = FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
GetModuleHandle(pszModule), dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),
(LPTSTR)&pszSysMsg, 0, NULL);
if (pszSysMsg != NULL && dwLength != 0)
{
if (dwLength >= 2 && pszSysMsg[dwLength - 2] == _T('\r'))
pszSysMsg[dwLength - 2] = _T('\0');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -