void CommandLine::SetCurDir(const string& CurDir) { if (!equal_icase(m_CurDir, CurDir) || !equal_icase(os::fs::GetCurrentDirectory(), CurDir)) { m_CurDir = CurDir; //Mantis#2350 - тормоз, это и так делается выше //if (Global->CtrlObject->Cp()->ActivePanel()->GetMode()!=PLUGIN_PANEL) //PrepareDiskPath(strCurDir); } }
void Panel::InitCurDir(const string& CurDir) { if (!equal_icase(m_CurDir, CurDir) || !equal_icase(os::fs::GetCurrentDirectory(), CurDir)) { m_CurDir = CurDir; if (m_PanelMode != panel_mode::PLUGIN_PANEL) { PrepareDiskPath(m_CurDir); if(!IsRootPath(m_CurDir)) { DeleteEndSlash(m_CurDir); } } } }
std::tuple<os::fs::file, string, uintptr_t> OpenLangFile(string_view const Path, string_view const Mask, string_view const Language) { FN_RETURN_TYPE(OpenLangFile) CurrentFileData, EnglishFileData; for (const auto& FindData: os::fs::enum_files(path::join(Path, Mask))) { const auto CurrentFileName = path::join(Path, FindData.FileName); auto& CurrentFile = std::get<0>(CurrentFileData); auto& CurrentLngName = std::get<1>(CurrentFileData); auto& CurrentCodepage = std::get<2>(CurrentFileData); CurrentFile = os::fs::file(CurrentFileName, FILE_READ_DATA, FILE_SHARE_READ, nullptr, OPEN_EXISTING); if (CurrentFile) { CurrentCodepage = GetFileCodepage(CurrentFile, encoding::codepage::oem(), nullptr, false); if (GetLangParam(CurrentFile, L"Language"sv, CurrentLngName, nullptr, CurrentCodepage) && equal_icase(CurrentLngName, Language)) { return CurrentFileData; } if (equal_icase(CurrentLngName, L"English"sv)) { EnglishFileData = std::move(CurrentFileData); } } } if (std::get<0>(EnglishFileData)) return EnglishFileData; return CurrentFileData; }
string ConvertNameToUNC(string_view const Object) { auto strFileName = ConvertNameToFull(Object); // Посмотрим на тип файловой системы string strFileSystemName; os::fs::GetVolumeInformation(GetPathRoot(strFileName), nullptr, nullptr, nullptr, nullptr, &strFileSystemName); DWORD uniSize = 1024; block_ptr<UNIVERSAL_NAME_INFO> uni(uniSize); // применяем WNetGetUniversalName для чего угодно, только не для Novell`а if (!equal_icase(strFileSystemName, L"NWFS"sv)) { switch (WNetGetUniversalName(strFileName.c_str(), UNIVERSAL_NAME_INFO_LEVEL, uni.get(), &uniSize)) { case NO_ERROR: strFileName = uni->lpUniversalName; break; case ERROR_MORE_DATA: uni.reset(uniSize); if (WNetGetUniversalName(strFileName.c_str(),UNIVERSAL_NAME_INFO_LEVEL,uni.get(),&uniSize)==NO_ERROR) strFileName = uni->lpUniversalName; break; } } else if (strFileName.size() > 1 && strFileName[1] == L':') { // BugZ#449 - Неверная работа CtrlAltF с ресурсами Novell DS // Здесь, если не получилось получить UniversalName и если это // мапленный диск - получаем как для меню выбора дисков string strTemp; if (DriveLocalToRemoteName(DRIVE_UNKNOWN,strFileName[0],strTemp)) { const auto SlashPos = FindSlash(strFileName); if (SlashPos != string::npos) path::append(strTemp, string_view(strFileName).substr(SlashPos + 1)); strFileName = strTemp; } } return ConvertNameToReal(strFileName); }
static bool ProcessServiceModes(range<const wchar_t* const*> const Args, int& ServiceResult) { const auto& isArg = [](const wchar_t* Arg, string_view const Name) { return (*Arg == L'/' || *Arg == L'-') && equal_icase(Arg + 1, Name); }; if (Args.size() == 4 && IsElevationArgument(Args[0])) // /service:elevation {GUID} PID UsePrivileges { ServiceResult = ElevationMain(Args[1], std::wcstoul(Args[2], nullptr, 10), *Args[3] == L'1'); return true; } if (InRange(2u, Args.size(), 5u) && (isArg(Args[0], L"export"sv) || isArg(Args[0], L"import"sv))) { const auto Export = isArg(Args[0], L"export"sv); string strProfilePath(Args.size() > 2 ? Args[2] : L""), strLocalProfilePath(Args.size() > 3 ? Args[3] : L""), strTemplatePath(Args.size() > 4 ? Args[4] : L""); InitTemplateProfile(strTemplatePath); InitProfile(strProfilePath, strLocalProfilePath); Global->m_ConfigProvider = new config_provider(Export? config_provider::mode::m_export : config_provider::mode::m_import); ServiceResult = !ConfigProvider().ServiceMode(Args[1]); return true; } if (InRange(1u, Args.size(), 3u) && isArg(Args[0], L"clearcache"sv)) { string strProfilePath(Args.size() > 1 ? Args[1] : L""); string strLocalProfilePath(Args.size() > 2 ? Args[2] : L""); InitProfile(strProfilePath, strLocalProfilePath); config_provider::ClearPluginsCache(); ServiceResult = 0; return true; } return false; }
bool ends_with_icase(const string_view Str, const string_view Suffix) { return Str.size() >= Suffix.size() && equal_icase(Str.substr(Str.size() - Suffix.size()), Suffix); }
bool starts_with_icase(const string_view Str, const string_view Prefix) { return Str.size() >= Prefix.size() && equal_icase(Str.substr(0, Prefix.size()), Prefix); }
bool equal_icase_t::operator()(const string_view Str1, const string_view Str2) const { return equal_icase(Str1, Str2); }
bool Panel::NeedUpdatePanel(const Panel *AnotherPanel) const { /* Обновить, если обновление разрешено и пути совпадают */ return (!Global->Opt->AutoUpdateLimit || static_cast<unsigned>(GetFileCount()) <= static_cast<unsigned>(Global->Opt->AutoUpdateLimit)) && equal_icase(AnotherPanel->m_CurDir, m_CurDir); }
static bool SelectLanguage(bool HelpLanguage, string& Dest) { lng Title; string_view Mask; if (HelpLanguage) { Title = lng::MHelpLangTitle; Mask=Global->HelpFileMask; } else { Title = lng::MLangTitle; Mask=LangFileMask; } const auto LangMenu = VMenu2::create(msg(Title), {}, ScrY - 4); LangMenu->SetMenuFlags(VMENU_WRAPMODE); LangMenu->SetPosition(ScrX/2-8+5*HelpLanguage,ScrY/2-4+2*HelpLanguage,0,0); for (const auto& FindData: os::fs::enum_files(path::join(Global->g_strFarPath, Mask))) { const os::fs::file LangFile(path::join(Global->g_strFarPath, FindData.FileName), FILE_READ_DATA, FILE_SHARE_READ, nullptr, OPEN_EXISTING); if (!LangFile) continue; const auto Codepage = GetFileCodepage(LangFile, encoding::codepage::oem(), nullptr, false); string strLangName, strLangDescr; if (GetLangParam(LangFile, L"Language"sv, strLangName, &strLangDescr, Codepage)) { string strEntryName; if (!HelpLanguage || ( !GetLangParam(LangFile, L"PluginContents"sv, strEntryName, nullptr, Codepage) && !GetLangParam(LangFile, L"DocumentContents"sv, strEntryName, nullptr, Codepage))) { MenuItemEx LangMenuItem(!strLangDescr.empty()? strLangDescr : strLangName); /* $ 01.08.2001 SVS Не допускаем дубликатов! Если в каталог с ФАРом положить еще один HLF с одноименным языком, то... фигня получается при выборе языка. */ if (LangMenu->FindItem(0,LangMenuItem.Name,LIFIND_EXACTMATCH) == -1) { LangMenuItem.SetSelect(equal_icase(Dest, strLangName)); LangMenuItem.ComplexUserData = strLangName; LangMenu->AddItem(LangMenuItem); } } } } LangMenu->AssignHighlights(FALSE); LangMenu->Run(); if (LangMenu->GetExitCode()<0) return false; Dest = *LangMenu->GetComplexUserDataPtr<string>(); return true; }