/** Adds a recognition result to the cache. An object is not added, when an up-to-date version is already in the cache or if it's not possible to check the file's LastModified(). @internalComponent */ void CApsRecognitionCache::DoAddL(const TDesC& aDirectory, const TDesC& aFileName, const TTime& aLastModified, const TDataRecognitionResult& aRecognitionResult) { if(iNumberOfEntries > KMaxNumberOfEntries) { Cleanup(); } CCacheDirectoryEntry* entry = NULL; iIter.SetToFirst(); while ((entry = iIter++) != NULL) { if(CompareDirectories(entry->Directory(),aDirectory)) { // move directory to top (it is likely to be used again soon) entry->iDlink.Deque(); iDirectoryHeader.AddFirst(*entry); break; } } if(!entry) { // create directory and append it entry = CCacheDirectoryEntry::NewL(aDirectory); iDirectoryHeader.AddFirst(*entry); } // insert to correct directory if(entry->Files().AddL(aFileName, aLastModified, aRecognitionResult)) { iNumberOfEntries++; } }
/** Searches the cache for the particular recognition result. If the file was not modified since the file was recognized, the stored recognition result is returned. N.B. The returned value is reference counted! @internalComponent */ CRecognitionResult* CApsRecognitionCache::DoGet(const TDesC& aDirectory, const TDesC& aFileName, const TTime& aLastModified) { CRecognitionResult* result = NULL; CCacheDirectoryEntry* entry; iIter.SetToFirst(); while ((entry = iIter++) != NULL) { if(CompareDirectories(entry->Directory(),aDirectory)) { TTime cachedLastModified; result = entry->Files().Get(aFileName, cachedLastModified); if(result) { if(cachedLastModified != aLastModified) { result->Close(); result = NULL; } } // move directory to top (it is likely to be used again soon) entry->iDlink.Deque(); iDirectoryHeader.AddFirst(*entry); break; } } return result; }
BOOL CPPgDirectories::OnApply() { bool testtempdirchanged=false; CString testincdirchanged = thePrefs.GetMuleDirectory(EMULE_INCOMINGDIR); CString strIncomingDir; GetDlgItemText(IDC_INCFILES, strIncomingDir); MakeFoldername(strIncomingDir); if (strIncomingDir.IsEmpty()){ strIncomingDir = thePrefs.GetDefaultDirectory(EMULE_INCOMINGDIR, true); // will create the directory here if it doesnt exists SetDlgItemText(IDC_INCFILES, strIncomingDir); } else if (thePrefs.IsInstallationDirectory(strIncomingDir)){ AfxMessageBox(GetResString(IDS_WRN_INCFILE_RESERVED)); return FALSE; } else if (strIncomingDir.CompareNoCase(testincdirchanged) != 0 && strIncomingDir.CompareNoCase(thePrefs.GetDefaultDirectory(EMULE_INCOMINGDIR, false)) != 0){ // if the user chooses a non-default directory which already contains files, inform him that all those files // will be shared CFileFind ff; CString strSearchPath; strSearchPath.Format(_T("%s\\*"),strIncomingDir); bool bEnd = !ff.FindFile(strSearchPath, 0); bool bExistingFile = false; while (!bEnd) { bEnd = !ff.FindNextFile(); if (ff.IsDirectory() || ff.IsDots() || ff.IsSystem() || ff.IsTemporary() || ff.GetLength()==0 || ff.GetLength()>MAX_EMULE_FILE_SIZE) continue; // ignore real LNK files TCHAR szExt[_MAX_EXT]; _tsplitpath(ff.GetFileName(), NULL, NULL, NULL, szExt); if (_tcsicmp(szExt, _T(".lnk")) == 0){ SHFILEINFO info; if (SHGetFileInfo(ff.GetFilePath(), 0, &info, sizeof(info), SHGFI_ATTRIBUTES) && (info.dwAttributes & SFGAO_LINK)){ if (!thePrefs.GetResolveSharedShellLinks()) continue; } } // ignore real THUMBS.DB files -- seems that lot of ppl have 'thumbs.db' files without the 'System' file attribute if (ff.GetFileName().CompareNoCase(_T("thumbs.db")) == 0) continue; bExistingFile = true; break; } if (bExistingFile && AfxMessageBox(GetResString(IDS_WRN_INCFILE_EXISTS), MB_OKCANCEL | MB_ICONINFORMATION) == IDCANCEL) { return FALSE; } } // checking specified tempdir(s) CString strTempDir; GetDlgItemText(IDC_TEMPFILES, strTempDir); if (strTempDir.IsEmpty()){ strTempDir = thePrefs.GetDefaultDirectory(EMULE_TEMPDIR, true); // will create the directory here if it doesnt exists SetDlgItemText(IDC_TEMPFILES, strTempDir); } int curPos=0; CStringArray temptempfolders; CString atmp=strTempDir.Tokenize(_T("|"), curPos); while (!atmp.IsEmpty()) { atmp.Trim(); if (!atmp.IsEmpty()) { if (CompareDirectories(strIncomingDir, atmp)==0){ AfxMessageBox(GetResString(IDS_WRN_INCTEMP_SAME)); return FALSE; } if (thePrefs.IsInstallationDirectory(atmp)){ AfxMessageBox(GetResString(IDS_WRN_TEMPFILES_RESERVED)); return FALSE; } bool doubled=false; for (int i=0;i<temptempfolders.GetCount();i++) // avoid double tempdirs if (temptempfolders.GetAt(i).CompareNoCase(atmp)==0) { doubled=true; break; } if (!doubled) { temptempfolders.Add(atmp); if (thePrefs.tempdir.GetCount()>=temptempfolders.GetCount()) { if( atmp.CompareNoCase(thePrefs.GetTempDir(temptempfolders.GetCount()-1))!=0 ) testtempdirchanged=true; } else testtempdirchanged=true; } } atmp = strTempDir.Tokenize(_T("|"), curPos); } if (temptempfolders.IsEmpty()) temptempfolders.Add(strTempDir = thePrefs.GetDefaultDirectory(EMULE_TEMPDIR, true)); if (temptempfolders.GetCount()!=thePrefs.tempdir.GetCount()) testtempdirchanged=true; // applying tempdirs if (testtempdirchanged) { thePrefs.tempdir.RemoveAll(); for (int i=0;i<temptempfolders.GetCount();i++) { CString toadd=temptempfolders.GetAt(i); MakeFoldername(toadd); if (!PathFileExists(toadd)) CreateDirectory(toadd,NULL); if (PathFileExists(toadd)) thePrefs.tempdir.Add(toadd); } } if (thePrefs.tempdir.IsEmpty()) thePrefs.tempdir.Add(thePrefs.GetDefaultDirectory(EMULE_TEMPDIR, true)); thePrefs.m_strIncomingDir = strIncomingDir; MakeFoldername(thePrefs.m_strIncomingDir); thePrefs.GetCategory(0)->strIncomingPath = thePrefs.GetMuleDirectory(EMULE_INCOMINGDIR); thePrefs.shareddir_list.RemoveAll(); m_ShareSelector.GetSharedDirectories(&thePrefs.shareddir_list); for (int i = 0; i < m_ctlUncPaths.GetItemCount(); i++) thePrefs.shareddir_list.AddTail(m_ctlUncPaths.GetItemText(i, 0)); // check shared directories for reserved folder names POSITION pos = thePrefs.shareddir_list.GetHeadPosition(); while (pos){ POSITION posLast = pos; const CString& rstrDir = thePrefs.shareddir_list.GetNext(pos); if (!thePrefs.IsShareableDirectory(rstrDir)) thePrefs.shareddir_list.RemoveAt(posLast); } if (testtempdirchanged) AfxMessageBox(GetResString(IDS_SETTINGCHANGED_RESTART)); // on changing incoming dir, update incoming dirs of category of the same path if (testincdirchanged.CompareNoCase(thePrefs.GetMuleDirectory(EMULE_INCOMINGDIR)) != 0) { CString oldpath; bool dontaskagain=false; for (int cat=1; cat<=thePrefs.GetCatCount()-1;cat++){ oldpath=CString(thePrefs.GetCatPath(cat)); if (oldpath.Left(testincdirchanged.GetLength()).CompareNoCase(testincdirchanged)==0) { if (!dontaskagain) { dontaskagain=true; if (AfxMessageBox(GetResString(IDS_UPDATECATINCOMINGDIRS),MB_YESNO)==IDNO) break; } thePrefs.GetCategory(cat)->strIncomingPath = thePrefs.GetMuleDirectory(EMULE_INCOMINGDIR) + oldpath.Mid(testincdirchanged.GetLength()); } } } theApp.emuledlg->sharedfileswnd->Reload(); SetModified(0); return CPropertyPage::OnApply(); }
BOOL CPPgDirectories::OnApply() { bool testtempdirchanged=false; CString testincdirchanged=thePrefs.GetIncomingDir(); CString strIncomingDir; GetDlgItemText(IDC_INCFILES, strIncomingDir); if (strIncomingDir.IsEmpty()){ strIncomingDir = thePrefs.GetAppDir() + _T("incoming"); SetDlgItemText(IDC_INCFILES, strIncomingDir); } if (thePrefs.IsInstallationDirectory(strIncomingDir)){ AfxMessageBox(GetResString(IDS_WRN_INCFILE_RESERVED)); return FALSE; } // checking specified tempdir(s) CString strTempDir; GetDlgItemText(IDC_TEMPFILES, strTempDir); if (strTempDir.IsEmpty()){ strTempDir = thePrefs.GetAppDir() + _T("temp"); SetDlgItemText(IDC_TEMPFILES, strTempDir); } int curPos=0; CStringArray temptempfolders; CString atmp=strTempDir.Tokenize(_T("|"), curPos); while (!atmp.IsEmpty()) { atmp.Trim(); if (!atmp.IsEmpty()) { if (CompareDirectories(strIncomingDir, atmp)==0){ AfxMessageBox(GetResString(IDS_WRN_INCTEMP_SAME)); return FALSE; } if (thePrefs.IsInstallationDirectory(atmp)){ AfxMessageBox(GetResString(IDS_WRN_TEMPFILES_RESERVED)); return FALSE; } bool doubled=false; for (int i=0;i<temptempfolders.GetCount();i++) // avoid double tempdirs if (temptempfolders.GetAt(i).CompareNoCase(atmp)==0) { doubled=true; break; } if (!doubled) { temptempfolders.Add(atmp); if (thePrefs.tempdir.GetCount()>=temptempfolders.GetCount()) { if( atmp.CompareNoCase(thePrefs.GetTempDir(temptempfolders.GetCount()-1))!=0 ) testtempdirchanged=true; } else testtempdirchanged=true; } } atmp = strTempDir.Tokenize(_T("|"), curPos); } if (temptempfolders.IsEmpty()) temptempfolders.Add(strTempDir = thePrefs.GetAppDir() + _T("temp")); if (temptempfolders.GetCount()!=thePrefs.tempdir.GetCount()) testtempdirchanged=true; // applying tempdirs if (testtempdirchanged) { thePrefs.tempdir.RemoveAll(); for (int i=0;i<temptempfolders.GetCount();i++) { CString toadd=temptempfolders.GetAt(i); MakeFoldername( toadd.GetBuffer(MAX_PATH) ); if (!PathFileExists(toadd)) CreateDirectory(toadd,NULL); if (PathFileExists(toadd)) thePrefs.tempdir.Add(toadd); } } // incomingdir _sntprintf(thePrefs.incomingdir, ARRSIZE(thePrefs.incomingdir), _T("%s"), strIncomingDir); MakeFoldername(thePrefs.incomingdir); _stprintf(thePrefs.GetCategory(0)->incomingpath,_T("%s"),thePrefs.incomingdir); thePrefs.shareddir_list.RemoveAll(); m_ShareSelector.GetSharedDirectories(&thePrefs.shareddir_list); for (int i = 0; i < m_ctlUncPaths.GetItemCount(); i++) thePrefs.shareddir_list.AddTail(m_ctlUncPaths.GetItemText(i, 0)); // check shared directories for reserved folder names POSITION pos = thePrefs.shareddir_list.GetHeadPosition(); while (pos){ POSITION posLast = pos; const CString& rstrDir = thePrefs.shareddir_list.GetNext(pos); if (!thePrefs.IsShareableDirectory(rstrDir)) thePrefs.shareddir_list.RemoveAt(posLast); } theApp.emuledlg->sharedfileswnd->Reload(); if (testtempdirchanged) AfxMessageBox(GetResString(IDS_SETTINGCHANGED_RESTART)); // on changing incoming dir, update incoming dirs of category of the same path if (testincdirchanged.CompareNoCase(thePrefs.GetIncomingDir())!=0) { CString oldpath; bool dontaskagain=false; for (int cat=1; cat<=thePrefs.GetCatCount()-1;cat++){ oldpath=CString(thePrefs.GetCatPath(cat)); if (oldpath.Left(testincdirchanged.GetLength()).CompareNoCase(testincdirchanged)==0) { if (!dontaskagain) { dontaskagain=true; if (AfxMessageBox(GetResString(IDS_UPDATECATINCOMINGDIRS),MB_YESNO)==IDNO) break; } _sntprintf(thePrefs.GetCategory(cat)->incomingpath, ARRSIZE(thePrefs.GetCategory(cat)->incomingpath), _T("%s%s"), thePrefs.GetIncomingDir(), oldpath.Mid(testincdirchanged.GetLength())); } } } SetModified(0); return CPropertyPage::OnApply(); }