pugi::xml_node CXmlFile::Load() { Close(); m_error.clear(); wxCHECK(!m_fileName.empty(), m_element); std::wstring redirectedName = GetRedirectedName(); GetXmlFile(redirectedName); if (!m_element) { wxString err = wxString::Format(_("The file '%s' could not be loaded."), m_fileName); if (m_error.empty()) { err += wxString(_T("\n")) + _("Make sure the file can be accessed and is a well-formed XML document."); } else { err += _T("\n") + m_error; } // Try the backup file GetXmlFile(redirectedName + _T("~")); if (!m_element) { // Loading backup failed. If both original and backup file are empty, create new file. if (fz::local_filesys::get_size(fz::to_native(redirectedName)) <= 0 && fz::local_filesys::get_size(fz::to_native(redirectedName + _T("~"))) <= 0) { m_error.clear(); CreateEmpty(); m_modificationTime = fz::local_filesys::get_modification_time(fz::to_native(redirectedName)); return m_element; } // File corrupt and no functional backup, give up. m_error = err; m_modificationTime.clear(); return m_element; } // Loading the backup file succeeded, restore file bool res; { wxLogNull null; res = wxCopyFile(redirectedName + _T("~"), redirectedName); } if (!res) { // Could not restore backup, give up. Close(); m_error = err.ToStdWstring(); m_error += _T("\n") + wxString::Format(_("The valid backup file %s could not be restored"), redirectedName + _T("~")).ToStdWstring(); m_modificationTime.clear(); return m_element; } // We no longer need the backup wxRemoveFile(redirectedName + _T("~")); m_error.clear(); } m_modificationTime = fz::local_filesys::get_modification_time(fz::to_native(redirectedName)); return m_element; }
TiXmlElement* CXmlFile::Load(const wxFileName& fileName) { if (fileName.IsOk()) SetFileName(fileName); wxCHECK(m_fileName.IsOk(), 0); delete m_pDocument; m_pDocument = 0; TiXmlElement* pElement = GetXmlFile(m_fileName); if (!pElement) { m_modificationTime = wxDateTime(); return 0; } { wxLogNull log; m_modificationTime = m_fileName.GetModificationTime(); } m_pDocument = pElement->GetDocument(); return pElement; }
TiXmlElement* CXmlFile::Load(const wxFileName& fileName) { if (fileName.IsOk()) SetFileName(fileName); wxCHECK(m_fileName.IsOk(), 0); delete m_pDocument; m_pDocument = 0; wxString error; TiXmlElement* pElement = GetXmlFile(m_fileName, &error); if (!pElement) { if (!error.empty()) { m_error.Printf(_("The file '%s' could not be loaded."), m_fileName.GetFullPath().c_str()); if (!error.empty()) m_error += _T("\n") + error; else m_error += wxString(_T("\n")) + _("Make sure the file can be accessed and is a well-formed XML document."); m_modificationTime = wxDateTime(); } return 0; } { wxLogNull log; m_modificationTime = m_fileName.GetModificationTime(); } m_pDocument = pElement->GetDocument(); return pElement; }
bool CThemeProvider::ThemeHasSize(const wxString& themePath, const wxString& size) { wxFileName fn(wxGetApp().GetResourceDir() + themePath, _T("theme.xml")); TiXmlElement* pDocument = GetXmlFile(fn.GetFullPath(), false); if (!pDocument) return false; TiXmlElement* pTheme = pDocument->FirstChildElement("Theme"); if (!pTheme) { delete pDocument->GetDocument(); return false; } for (TiXmlElement* pSize = pTheme->FirstChildElement("size"); pSize; pSize = pSize->NextSiblingElement("size")) { const char* txt = pSize->GetText(); if (!txt) continue; if (size == ConvLocal(txt)) { delete pDocument->GetDocument(); return true; } } delete pDocument->GetDocument(); return false; }
std::list<wxString> CThemeProvider::GetThemeSizes(const wxString& themePath) { std::list<wxString> sizes; wxFileName fn(wxGetApp().GetResourceDir() + themePath, _T("theme.xml")); TiXmlElement* pDocument = GetXmlFile(fn.GetFullPath(), false); if (!pDocument) return sizes; TiXmlElement* pTheme = pDocument->FirstChildElement("Theme"); if (pTheme) { for (TiXmlElement* pSize = pTheme->FirstChildElement("size"); pSize; pSize = pSize->NextSiblingElement("size")) { const char* txt = pSize->GetText(); if (!txt) continue; wxString size = ConvLocal(txt); if (size == _T("")) continue; sizes.push_back(size); } } delete pDocument->GetDocument(); return sizes; }
void CWrapEngine::SetWidthToCache(const char* name, int width) { if (!m_use_cache) return; if (!name || !*name) return; // We have to synchronize access to layout.xml so that multiple processed don't write // to the same file or one is reading while the other one writes. CInterProcessMutex mutex(MUTEX_LAYOUT); wxFileName file(COptions::Get()->GetOption(OPTION_DEFAULT_SETTINGSDIR), _T("layout.xml")); TiXmlElement* pDocument = GetXmlFile(file); if (!pDocument) return; TiXmlElement* pElement = pDocument->FirstChildElement("Layout"); if (!pElement) { delete pDocument->GetDocument(); return; } wxString language = wxGetApp().GetCurrentLanguageCode(); if (language.empty()) language = _T("default"); TiXmlElement* pLanguage = FindElementWithAttribute(pElement, "Language", "id", language.mb_str()); if (!pLanguage) { delete pDocument->GetDocument(); return; } TiXmlElement* pDialog = FindElementWithAttribute(pLanguage, "Dialog", "name", name); if (!pDialog) { pDialog = pLanguage->LinkEndChild(new TiXmlElement("Dialog"))->ToElement(); pDialog->SetAttribute("name", name); } pDialog->SetAttribute("width", width); wxString error; SaveXmlFile(file, pDocument, &error); delete pDocument->GetDocument(); }
bool CThemeProvider::GetThemeData(const wxString& themePath, wxString& name, wxString& author, wxString& email) { wxFileName fn(wxGetApp().GetResourceDir() + themePath, _T("theme.xml")); TiXmlElement* pDocument = GetXmlFile(fn.GetFullPath(), false); if (!pDocument) return false; TiXmlElement* pTheme = pDocument->FirstChildElement("Theme"); if (pTheme) { name = GetTextElement(pTheme, "Name"); author = GetTextElement(pTheme, "Author"); email = GetTextElement(pTheme, "Mail"); } delete pDocument->GetDocument(); return pTheme != 0; }
void CFilterManager::LoadFilters() { if (m_loaded) { m_filters = m_globalFilters; m_filterSets = m_globalFilterSets; m_currentFilterSet = m_globalCurrentFilterSet; return; } m_loaded = true; CInterProcessMutex mutex(MUTEX_FILTERS); wxFileName file(wxGetApp().GetSettingsDir(), _T("filters.xml")); if (!file.FileExists()) { wxFileName defaults(wxGetApp().GetResourceDir(), _T("defaultfilters.xml")); if (defaults.FileExists()) { TiXmlElement* pDocument = GetXmlFile(defaults); if (pDocument) SaveXmlFile(file, pDocument); } } TiXmlElement* pDocument = GetXmlFile(file); if (!pDocument) { wxString msg = wxString::Format(_("Could not load \"%s\", please make sure the file is valid and can be accessed.\nAny changes made in the Site Manager could not be saved."), file.GetFullPath().c_str()); wxMessageBox(msg, _("Error loading xml file"), wxICON_ERROR); return; } TiXmlElement *pFilters = pDocument->FirstChildElement("Filters"); if (!pFilters) { delete pDocument->GetDocument(); return; } TiXmlElement *pFilter = pFilters->FirstChildElement("Filter"); while (pFilter) { CFilter filter; filter.name = GetTextElement(pFilter, "Name"); if (filter.name == _T("")) { pFilter = pFilter->NextSiblingElement("Filter"); continue; } filter.filterFiles = GetTextElement(pFilter, "ApplyToFiles") == _T("1"); filter.filterDirs = GetTextElement(pFilter, "ApplyToDirs") == _T("1"); wxString type = GetTextElement(pFilter, "MatchType"); if (type == _T("Any")) filter.matchType = CFilter::any; else if (type == _T("None")) filter.matchType = CFilter::none; else filter.matchType = CFilter::all; filter.matchCase = GetTextElement(pFilter, "MatchCase") == _T("1"); TiXmlElement *pConditions = pFilter->FirstChildElement("Conditions"); if (!pConditions) { pFilter = pFilter->NextSiblingElement("Filter"); continue; } TiXmlElement *pCondition = pConditions->FirstChildElement("Condition"); while (pCondition) { CFilterCondition condition; int type = GetTextElementInt(pCondition, "Type", 0); if (type < 0 || type >= filterType_size) { pCondition = pCondition->NextSiblingElement("Condition"); continue; } condition.type = (enum t_filterType)type; condition.condition = GetTextElementInt(pCondition, "Condition", 0); condition.strValue = GetTextElement(pCondition, "Value"); condition.matchCase = filter.matchCase; if (condition.strValue == _T("")) { pCondition = pCondition->NextSiblingElement("Condition"); continue; } // TODO: 64bit filesize if (condition.type == size) { unsigned long tmp; condition.strValue.ToULong(&tmp); condition.value = tmp; } else if (condition.type == attributes || condition.type == permissions) { if (condition.strValue == _T("0")) condition.value = 0; else condition.value = 1; } filter.filters.push_back(condition); pCondition = pCondition->NextSiblingElement("Condition"); } if (!filter.filters.empty()) m_globalFilters.push_back(filter); pFilter = pFilter->NextSiblingElement("Filter"); } m_filters = m_globalFilters; TiXmlElement* pSets = pDocument->FirstChildElement("Sets"); if (!pSets) { delete pDocument->GetDocument(); return; } for (TiXmlElement* pSet = pSets->FirstChildElement("Set"); pSet; pSet = pSet->NextSiblingElement("Set")) { CFilterSet set; TiXmlElement* pItem = pSet->FirstChildElement("Item"); while (pItem) { wxString local = GetTextElement(pItem, "Local"); wxString remote = GetTextElement(pItem, "Remote"); set.local.push_back(local == _T("1") ? true : false); set.remote.push_back(remote == _T("1") ? true : false); pItem = pItem->NextSiblingElement("Item"); } if (!m_globalFilterSets.empty()) { set.name = GetTextElement(pSet, "Name"); if (set.name == _T("")) continue; } if (set.local.size() == m_filters.size()) m_globalFilterSets.push_back(set); } m_filterSets = m_globalFilterSets; wxString attribute = GetTextAttribute(pSets, "Current"); unsigned long value; if (attribute.ToULong(&value)) { if (value < m_globalFilterSets.size()) m_globalCurrentFilterSet = value; } m_currentFilterSet = m_globalCurrentFilterSet; delete pDocument->GetDocument(); }
void CFilterDialog::SaveFilters() { CInterProcessMutex mutex(MUTEX_FILTERS); wxFileName file(wxGetApp().GetSettingsDir(), _T("filters.xml")); TiXmlElement* pDocument = GetXmlFile(file); if (!pDocument) { wxString msg = wxString::Format(_("Could not load \"%s\", please make sure the file is valid and can be accessed.\nAny changes made in the Site Manager could not be saved."), file.GetFullPath().c_str()); wxMessageBox(msg, _("Error loading xml file"), wxICON_ERROR); return; } TiXmlElement *pFilters = pDocument->FirstChildElement("Filters"); while (pFilters) { pDocument->RemoveChild(pFilters); pFilters = pDocument->FirstChildElement("Filters"); } pFilters = pDocument->InsertEndChild(TiXmlElement("Filters"))->ToElement(); for (std::vector<CFilter>::const_iterator iter = m_globalFilters.begin(); iter != m_globalFilters.end(); iter++) { const CFilter& filter = *iter; TiXmlElement* pFilter = pFilters->InsertEndChild(TiXmlElement("Filter"))->ToElement(); AddTextElement(pFilter, "Name", filter.name); AddTextElement(pFilter, "ApplyToFiles", filter.filterFiles ? _T("1") : _T("0")); AddTextElement(pFilter, "ApplyToDirs", filter.filterDirs ? _T("1") : _T("0")); AddTextElement(pFilter, "MatchType", (filter.matchType == CFilter::any) ? _T("Any") : ((filter.matchType == CFilter::none) ? _T("None") : _T("All"))); AddTextElement(pFilter, "MatchCase", filter.matchCase ? _T("1") : _T("0")); TiXmlElement* pConditions = pFilter->InsertEndChild(TiXmlElement("Conditions"))->ToElement(); for (std::vector<CFilterCondition>::const_iterator conditionIter = filter.filters.begin(); conditionIter != filter.filters.end(); conditionIter++) { const CFilterCondition& condition = *conditionIter; TiXmlElement* pCondition = pConditions->InsertEndChild(TiXmlElement("Condition"))->ToElement(); AddTextElement(pCondition, "Type", condition.type); AddTextElement(pCondition, "Condition", condition.condition); AddTextElement(pCondition, "Value", condition.strValue); } } TiXmlElement *pSets = pDocument->FirstChildElement("Sets"); while (pSets) { pDocument->RemoveChild(pSets); pSets = pDocument->FirstChildElement("Sets"); } pSets = pDocument->InsertEndChild(TiXmlElement("Sets"))->ToElement(); SetTextAttribute(pSets, "Current", wxString::Format(_T("%d"), m_currentFilterSet)); for (std::vector<CFilterSet>::const_iterator iter = m_globalFilterSets.begin(); iter != m_globalFilterSets.end(); iter++) { const CFilterSet& set = *iter; TiXmlElement* pSet = pSets->InsertEndChild(TiXmlElement("Set"))->ToElement(); if (iter != m_globalFilterSets.begin()) AddTextElement(pSet, "Name", set.name); for (unsigned int i = 0; i < set.local.size(); i++) { TiXmlElement* pItem = pSet->InsertEndChild(TiXmlElement("Item"))->ToElement(); AddTextElement(pItem, "Local", set.local[i] ? _T("1") : _T("0")); AddTextElement(pItem, "Remote", set.remote[i] ? _T("1") : _T("0")); } } SaveXmlFile(file, pDocument); delete pDocument->GetDocument(); }
void CFilterManager::LoadFilters() { if (m_loaded) return; m_loaded = true; CInterProcessMutex mutex(MUTEX_FILTERS); wxFileName file(wxGetApp().GetSettingsDir(), _T("filters.xml")); if (!file.FileExists()) { wxFileName defaults(wxGetApp().GetResourceDir(), _T("defaultfilters.xml")); if (defaults.FileExists()) { TiXmlElement* pDocument = GetXmlFile(defaults); if (pDocument) { SaveXmlFile(file, pDocument); delete pDocument->GetDocument(); } } } CXmlFile xml(file); TiXmlElement* pDocument = xml.Load(); if (!pDocument) { wxString msg = xml.GetError() + _T("\n\n") + _("Any changes made to the filters will not be saved."); wxMessageBox(msg, _("Error loading xml file"), wxICON_ERROR); return; } TiXmlElement *pFilters = pDocument->FirstChildElement("Filters"); if (!pFilters) return; TiXmlElement *pFilter = pFilters->FirstChildElement("Filter"); while (pFilter) { CFilter filter; filter.name = GetTextElement(pFilter, "Name"); if (filter.name == _T("")) { pFilter = pFilter->NextSiblingElement("Filter"); continue; } filter.filterFiles = GetTextElement(pFilter, "ApplyToFiles") == _T("1"); filter.filterDirs = GetTextElement(pFilter, "ApplyToDirs") == _T("1"); wxString type = GetTextElement(pFilter, "MatchType"); if (type == _T("Any")) filter.matchType = CFilter::any; else if (type == _T("None")) filter.matchType = CFilter::none; else filter.matchType = CFilter::all; filter.matchCase = GetTextElement(pFilter, "MatchCase") == _T("1"); TiXmlElement *pConditions = pFilter->FirstChildElement("Conditions"); if (!pConditions) { pFilter = pFilter->NextSiblingElement("Filter"); continue; } TiXmlElement *pCondition = pConditions->FirstChildElement("Condition"); while (pCondition) { CFilterCondition condition; int type = GetTextElementInt(pCondition, "Type", 0); switch (type) { case 0: condition.type = filter_name; break; case 1: condition.type = filter_size; break; case 2: condition.type = filter_attributes; break; case 3: condition.type = filter_permissions; break; case 4: condition.type = filter_path; break; default: pCondition = pCondition->NextSiblingElement("Condition"); continue; } condition.condition = GetTextElementInt(pCondition, "Condition", 0); condition.strValue = GetTextElement(pCondition, "Value"); condition.matchCase = filter.matchCase; if (condition.strValue == _T("")) { pCondition = pCondition->NextSiblingElement("Condition"); continue; } // TODO: 64bit filesize if (condition.type == filter_size) { unsigned long tmp; condition.strValue.ToULong(&tmp); condition.value = tmp; } else if (condition.type == filter_attributes || condition.type == filter_permissions) { if (condition.strValue == _T("0")) condition.value = 0; else condition.value = 1; } filter.filters.push_back(condition); pCondition = pCondition->NextSiblingElement("Condition"); } if (!filter.filters.empty()) m_globalFilters.push_back(filter); pFilter = pFilter->NextSiblingElement("Filter"); } CompileRegexes(); TiXmlElement* pSets = pDocument->FirstChildElement("Sets"); if (!pSets) return; for (TiXmlElement* pSet = pSets->FirstChildElement("Set"); pSet; pSet = pSet->NextSiblingElement("Set")) { CFilterSet set; TiXmlElement* pItem = pSet->FirstChildElement("Item"); while (pItem) { wxString local = GetTextElement(pItem, "Local"); wxString remote = GetTextElement(pItem, "Remote"); set.local.push_back(local == _T("1") ? true : false); set.remote.push_back(remote == _T("1") ? true : false); pItem = pItem->NextSiblingElement("Item"); } if (!m_globalFilterSets.empty()) { set.name = GetTextElement(pSet, "Name"); if (set.name == _T("")) continue; } if (set.local.size() == m_globalFilters.size()) m_globalFilterSets.push_back(set); } wxString attribute = GetTextAttribute(pSets, "Current"); unsigned long value; if (attribute.ToULong(&value)) { if (value < m_globalFilterSets.size()) m_globalCurrentFilterSet = value; } }
void CFilterManager::LoadFilters() { if (m_loaded) return; m_loaded = true; CInterProcessMutex mutex(MUTEX_FILTERS); wxFileName file(COptions::Get()->GetOption(OPTION_DEFAULT_SETTINGSDIR), _T("filters.xml")); if (!file.FileExists()) { wxFileName defaults(wxGetApp().GetResourceDir(), _T("defaultfilters.xml")); if (defaults.FileExists()) { TiXmlElement* pDocument = GetXmlFile(defaults); if (pDocument) { SaveXmlFile(file, pDocument); delete pDocument->GetDocument(); } } } CXmlFile xml(file); TiXmlElement* pDocument = xml.Load(); if (!pDocument) { wxString msg = xml.GetError() + _T("\n\n") + _("Any changes made to the filters will not be saved."); wxMessageBox(msg, _("Error loading xml file"), wxICON_ERROR); return; } TiXmlElement *pFilters = pDocument->FirstChildElement("Filters"); if (!pFilters) return; TiXmlElement *pFilter = pFilters->FirstChildElement("Filter"); while (pFilter) { CFilter filter; bool loaded = LoadFilter(pFilter, filter); if (loaded && filter.name != _T("") && !filter.filters.empty()) m_globalFilters.push_back(filter); pFilter = pFilter->NextSiblingElement("Filter"); } CompileRegexes(); TiXmlElement* pSets = pDocument->FirstChildElement("Sets"); if (!pSets) return; for (TiXmlElement* pSet = pSets->FirstChildElement("Set"); pSet; pSet = pSet->NextSiblingElement("Set")) { CFilterSet set; TiXmlElement* pItem = pSet->FirstChildElement("Item"); while (pItem) { wxString local = GetTextElement(pItem, "Local"); wxString remote = GetTextElement(pItem, "Remote"); set.local.push_back(local == _T("1") ? true : false); set.remote.push_back(remote == _T("1") ? true : false); pItem = pItem->NextSiblingElement("Item"); } if (!m_globalFilterSets.empty()) { set.name = GetTextElement(pSet, "Name"); if (set.name == _T("")) continue; } if (set.local.size() == m_globalFilters.size()) m_globalFilterSets.push_back(set); } wxString attribute = GetTextAttribute(pSets, "Current"); unsigned long value; if (attribute.ToULong(&value)) { if (value < m_globalFilterSets.size()) m_globalCurrentFilterSet = value; } }