void CFilterDialog::SaveFilters() { CInterProcessMutex mutex(MUTEX_FILTERS); CXmlFile xml(wxGetApp().GetSettingsFile(_T("filters"))); TiXmlElement* pDocument = xml.Load(); if (!pDocument) { wxString msg = xml.GetError() + _T("\n\n") + _("Any changes made to the filters could not be saved."); wxMessageBoxEx(msg, _("Error loading xml file"), wxICON_ERROR); return; } TiXmlElement *pFilters = pDocument->FirstChildElement("Filters"); while (pFilters) { pDocument->RemoveChild(pFilters); pFilters = pDocument->FirstChildElement("Filters"); } pFilters = pDocument->LinkEndChild(new TiXmlElement("Filters"))->ToElement(); for (auto const& filter : m_globalFilters) { TiXmlElement* pElement = new TiXmlElement("Filter"); SaveFilter(pElement, filter); pFilters->LinkEndChild(pElement); } TiXmlElement *pSets = pDocument->FirstChildElement("Sets"); while (pSets) { pDocument->RemoveChild(pSets); pSets = pDocument->FirstChildElement("Sets"); } pSets = pDocument->LinkEndChild(new TiXmlElement("Sets"))->ToElement(); SetTextAttribute(pSets, "Current", wxString::Format(_T("%d"), m_currentFilterSet)); for (auto const& set : m_globalFilterSets) { TiXmlElement* pSet = pSets->LinkEndChild(new TiXmlElement("Set"))->ToElement(); if (!set.name.empty()) { AddTextElement(pSet, "Name", set.name); } for (unsigned int i = 0; i < set.local.size(); ++i) { TiXmlElement* pItem = pSet->LinkEndChild(new TiXmlElement("Item"))->ToElement(); AddTextElement(pItem, "Local", set.local[i] ? _T("1") : _T("0")); AddTextElement(pItem, "Remote", set.remote[i] ? _T("1") : _T("0")); } } xml.Save(true); m_filters_disabled = false; }
bool CBookmarksDialog::AddBookmark(const wxString &name, const wxString &local_dir, const CServerPath &remote_dir, bool sync) { if (local_dir.empty() && remote_dir.empty()) return false; if ((local_dir.empty() || remote_dir.empty()) && sync) return false; CInterProcessMutex mutex(MUTEX_GLOBALBOOKMARKS); CXmlFile file(wxGetApp().GetSettingsFile(_T("bookmarks"))); TiXmlElement* pDocument = file.Load(); if (!pDocument) { wxString msg = file.GetError() + _T("\n\n") + _("The bookmark could not be added."); wxMessageBoxEx(msg, _("Error loading xml file"), wxICON_ERROR); return false; } TiXmlElement *pInsertBefore = 0; TiXmlElement *pBookmark; for (pBookmark = pDocument->FirstChildElement("Bookmark"); pBookmark; pBookmark = pBookmark->NextSiblingElement("Bookmark")) { wxString remote_dir_raw; wxString old_name = GetTextElement(pBookmark, "Name"); if (!name.CmpNoCase(old_name)) { wxMessageBoxEx(_("Name of bookmark already exists."), _("New bookmark"), wxICON_EXCLAMATION); return false; } if (name < old_name && !pInsertBefore) pInsertBefore = pBookmark; } if (pInsertBefore) pBookmark = pDocument->InsertBeforeChild(pInsertBefore, TiXmlElement("Bookmark"))->ToElement(); else pBookmark = pDocument->LinkEndChild(new TiXmlElement("Bookmark"))->ToElement(); AddTextElement(pBookmark, "Name", name); if (!local_dir.empty()) AddTextElement(pBookmark, "LocalDir", local_dir); if (!remote_dir.empty()) AddTextElement(pBookmark, "RemoteDir", remote_dir.GetSafePath()); if (sync) AddTextElementRaw(pBookmark, "SyncBrowsing", "1"); if (!file.Save(false)) { wxString msg = wxString::Format(_("Could not write \"%s\", the bookmark could not be added: %s"), file.GetFileName(), file.GetError()); wxMessageBoxEx(msg, _("Error writing xml file"), wxICON_ERROR); return false; } return true; }
void CFilterDialog::SaveFilter(TiXmlElement* pElement, const CFilter& filter) { AddTextElement(pElement, "Name", filter.name); AddTextElement(pElement, "ApplyToFiles", filter.filterFiles ? _T("1") : _T("0")); AddTextElement(pElement, "ApplyToDirs", filter.filterDirs ? _T("1") : _T("0")); AddTextElement(pElement, "MatchType", (filter.matchType == CFilter::any) ? _T("Any") : ((filter.matchType == CFilter::none) ? _T("None") : _T("All"))); AddTextElement(pElement, "MatchCase", filter.matchCase ? _T("1") : _T("0")); TiXmlElement* pConditions = pElement->LinkEndChild(new TiXmlElement("Conditions"))->ToElement(); for (std::vector<CFilterCondition>::const_iterator conditionIter = filter.filters.begin(); conditionIter != filter.filters.end(); ++conditionIter) { const CFilterCondition& condition = *conditionIter; int type; switch (condition.type) { case filter_name: type = 0; break; case filter_size: type = 1; break; case filter_attributes: type = 2; break; case filter_permissions: type = 3; break; case filter_path: type = 4; break; case filter_date: type = 5; break; default: wxFAIL_MSG(_T("Unhandled filter type")); continue; } TiXmlElement* pCondition = pConditions->LinkEndChild(new TiXmlElement("Condition"))->ToElement(); AddTextElement(pCondition, "Type", type); if (condition.type == filter_size) { // Backwards compatibility sucks int v = condition.condition; if (v == 2) v = 3; else if (v > 2) --v; AddTextElement(pCondition, "Condition", v); } else AddTextElement(pCondition, "Condition", condition.condition); AddTextElement(pCondition, "Value", condition.strValue); } }
void CFolderItem::SaveItem(pugi::xml_node& element) const { auto file = element.append_child("Folder"); if (Download()) { AddTextElement(file, "LocalFile", GetLocalPath().GetPath() + GetLocalFile()); } else { AddTextElement(file, "RemoteFile", GetRemoteFile()); AddTextElement(file, "RemotePath", m_remotePath.GetSafePath()); } AddTextElementUtf8(file, "Download", Download() ? "1" : "0"); }
void CVerifyCertDialog::SetPermanentlyTrusted(CCertificateNotification const& notification) { const CCertificate certificate = notification.GetCertificates()[0]; unsigned int len; const unsigned char* const data = certificate.GetRawData(len); CReentrantInterProcessMutexLocker mutex(MUTEX_TRUSTEDCERTS); LoadTrustedCerts(); if (IsTrusted(notification.GetHost(), notification.GetPort(), data, len, true)) { return; } t_certData cert; cert.host = notification.GetHost(); cert.port = notification.GetPort(); cert.len = len; cert.data = new unsigned char[len]; memcpy(cert.data, data, len); m_trustedCerts.push_back(cert); if (COptions::Get()->GetOptionVal(OPTION_DEFAULT_KIOSKMODE) == 2) { return; } TiXmlElement* pElement = m_xmlFile.GetElement(); if (!pElement) { return; } TiXmlElement* pCerts = pElement->FirstChildElement("TrustedCerts"); if (!pCerts) pCerts = pElement->LinkEndChild(new TiXmlElement("TrustedCerts"))->ToElement(); TiXmlElement* pCert = pCerts->LinkEndChild(new TiXmlElement("Certificate"))->ToElement(); AddTextElement(pCert, "Data", ConvertHexToString(data, len)); wxLongLong time = certificate.GetActivationTime().GetTicks(); AddTextElement(pCert, "ActivationTime", time.ToString()); time = certificate.GetExpirationTime().GetTicks(); AddTextElement(pCert, "ExpirationTime", time.ToString()); AddTextElement(pCert, "Host", notification.GetHost()); AddTextElement(pCert, "Port", notification.GetPort()); m_xmlFile.Save(true); }
void CFolderItem::SaveItem(TiXmlElement* pElement) const { TiXmlElement file("Folder"); if (m_download) AddTextElement(&file, "LocalFile", m_localFile); else { AddTextElement(&file, "RemoteFile", m_remoteFile); AddTextElement(&file, "RemotePath", m_remotePath.GetSafePath()); } AddTextElementRaw(&file, "Download", m_download ? "1" : "0"); pElement->InsertEndChild(file); }
void CFolderItem::SaveItem(TiXmlElement* pElement) const { TiXmlElement *file = new TiXmlElement("Folder"); if (Download()) AddTextElement(file, "LocalFile", GetLocalPath().GetPath() + GetLocalFile()); else { AddTextElement(file, "RemoteFile", GetRemoteFile()); AddTextElement(file, "RemotePath", m_remotePath.GetSafePath()); } AddTextElementRaw(file, "Download", Download() ? "1" : "0"); pElement->LinkEndChild(file); }
TiXmlElement* CImportDialog::GetFolderWithName(TiXmlElement* pElement, const wxString& name) { TiXmlElement* pChild; for (pChild = pElement->FirstChildElement("Server"); pChild; pChild = pChild->NextSiblingElement("Server")) { wxString childName = GetTextElement(pChild); childName.Trim(true); childName.Trim(false); if (!name.CmpNoCase(childName)) return 0; } for (pChild = pElement->FirstChildElement("Folder"); pChild; pChild = pChild->NextSiblingElement("Folder")) { wxString childName = GetTextElement(pChild); childName.Trim(true); childName.Trim(false); if (!name.CmpNoCase(childName)) return pChild; } pChild = pElement->LinkEndChild(new TiXmlElement("Folder"))->ToElement(); AddTextElement(pChild, name); return pChild; }
void CFileItem::SaveItem(pugi::xml_node& element) const { if (m_edit != CEditHandler::none || !element) { return; } auto file = element.append_child("File"); AddTextElement(file, "LocalFile", m_localPath.GetPath() + GetLocalFile()); AddTextElement(file, "RemoteFile", GetRemoteFile()); AddTextElement(file, "RemotePath", m_remotePath.GetSafePath()); AddTextElementUtf8(file, "Download", Download() ? "1" : "0"); if (m_size != -1) { AddTextElement(file, "Size", m_size); } if (m_errorCount) { AddTextElement(file, "ErrorCount", m_errorCount); } if (m_priority != QueuePriority::normal) { AddTextElement(file, "Priority", static_cast<int>(m_priority)); } AddTextElementUtf8(file, "DataType", Ascii() ? "0" : "1"); if (m_defaultFileExistsAction != CFileExistsNotification::unknown) { AddTextElement(file, "OverwriteAction", m_defaultFileExistsAction); } }
bool CImportDialog::ImportSites(TiXmlElement* pSitesToImport, TiXmlElement* pExistingSites) { for (TiXmlElement* pImportFolder = pSitesToImport->FirstChildElement("Folder"); pImportFolder; pImportFolder = pImportFolder->NextSiblingElement("Folder")) { wxString name = GetTextElement_Trimmed(pImportFolder, "Name"); if (name == _T("")) name = GetTextElement_Trimmed(pImportFolder); if (name == _T("")) continue; wxString newName = name; int i = 2; TiXmlElement* pFolder; while (!(pFolder = GetFolderWithName(pExistingSites, newName))) { newName = wxString::Format(_T("%s %d"), name.c_str(), i++); } ImportSites(pImportFolder, pFolder); } for (TiXmlElement* pImportSite = pSitesToImport->FirstChildElement("Server"); pImportSite; pImportSite = pImportSite->NextSiblingElement("Server")) { wxString name = GetTextElement_Trimmed(pImportSite, "Name"); if (name == _T("")) name = GetTextElement_Trimmed(pImportSite); if (name == _T("")) continue; // Find free name wxString newName = name; int i = 2; while (HasEntryWithName(pExistingSites, newName)) { newName = wxString::Format(_T("%s %d"), name.c_str(), i++); } TiXmlElement* pServer = pExistingSites->InsertEndChild(*pImportSite)->ToElement(); AddTextElement(pServer, "Name", newName, true); AddTextElement(pServer, newName); } return true; }
void CVerifyCertDialog::SetPermanentlyTrusted(CCertificateNotification const& notification) { const CCertificate certificate = notification.GetCertificates()[0]; unsigned int len; const unsigned char* const data = certificate.GetRawData(len); CReentrantInterProcessMutexLocker mutex(MUTEX_TRUSTEDCERTS); LoadTrustedCerts(); if (IsTrusted(notification.GetHost(), notification.GetPort(), data, len, true)) { return; } t_certData cert; cert.host = notification.GetHost(); cert.port = notification.GetPort(); cert.len = len; cert.data = new unsigned char[len]; memcpy(cert.data, data, len); m_trustedCerts.push_back(cert); if (COptions::Get()->GetOptionVal(OPTION_DEFAULT_KIOSKMODE) == 2) { return; } auto element = m_xmlFile.GetElement(); if (!element) { return; } auto certs = element.child("TrustedCerts"); if (!certs) certs = element.append_child("TrustedCerts"); auto xCert = certs.append_child("Certificate"); AddTextElement(xCert, "Data", ConvertHexToString(data, len)); AddTextElement(xCert, "ActivationTime", static_cast<int64_t>(certificate.GetActivationTime().get_time_t())); AddTextElement(xCert, "ExpirationTime", static_cast<int64_t>(certificate.GetExpirationTime().get_time_t())); AddTextElement(xCert, "Host", notification.GetHost()); AddTextElement(xCert, "Port", notification.GetPort()); m_xmlFile.Save(true); }
void CBookmarksDialog::SaveGlobalBookmarks() { CInterProcessMutex mutex(MUTEX_GLOBALBOOKMARKS); CXmlFile file(wxGetApp().GetSettingsFile(_T("bookmarks"))); TiXmlElement* pDocument = file.Load(); if (!pDocument) { wxString msg = file.GetError() + _T("\n\n") + _("The global bookmarks could not be saved."); wxMessageBoxEx(msg, _("Error loading xml file"), wxICON_ERROR); return; } { TiXmlElement *pBookmark = pDocument->FirstChildElement("Bookmark"); while (pBookmark) { pDocument->RemoveChild(pBookmark); pBookmark = pDocument->FirstChildElement("Bookmark"); } } wxTreeItemIdValue cookie; for (wxTreeItemId child = m_pTree->GetFirstChild(m_bookmarks_global, cookie); child.IsOk(); child = m_pTree->GetNextChild(m_bookmarks_global, cookie)) { CBookmarkItemData *data = (CBookmarkItemData *)m_pTree->GetItemData(child); wxASSERT(data); TiXmlElement *pBookmark = pDocument->LinkEndChild(new TiXmlElement("Bookmark"))->ToElement(); AddTextElement(pBookmark, "Name", m_pTree->GetItemText(child)); if (!data->m_local_dir.empty()) AddTextElement(pBookmark, "LocalDir", data->m_local_dir); if (!data->m_remote_dir.empty()) AddTextElement(pBookmark, "RemoteDir", data->m_remote_dir.GetSafePath()); if (data->m_sync) AddTextElementRaw(pBookmark, "SyncBrowsing", "1"); } if (!file.Save(false)) { wxString msg = wxString::Format(_("Could not write \"%s\", the global bookmarks could no be saved: %s"), file.GetFileName(), file.GetError()); wxMessageBoxEx(msg, _("Error writing xml file"), wxICON_ERROR); } }
void CRemoteDataObject::Finalize() { // Convert data into XML TiXmlElement* pElement = m_xmlFile.CreateEmpty(); pElement = pElement->InsertEndChild(TiXmlElement("RemoteDataObject"))->ToElement(); AddTextElement(pElement, "ProcessId", m_processId); TiXmlElement* pServer = pElement->InsertEndChild(TiXmlElement("Server"))->ToElement(); SetServer(pServer, m_server); AddTextElement(pElement, "Path", m_path.GetSafePath()); TiXmlElement* pFiles = pElement->InsertEndChild(TiXmlElement("Files"))->ToElement(); for (std::list<t_fileInfo>::const_iterator iter = m_fileList.begin(); iter != m_fileList.end(); iter++) { TiXmlElement* pFile = pFiles->InsertEndChild(TiXmlElement("File"))->ToElement(); AddTextElement(pFile, "Name", iter->name); AddTextElement(pFile, "Dir", iter->dir ? 1 : 0); AddTextElement(pFile, "Size", iter->size.ToString()); } }
void CFileItem::SaveItem(TiXmlElement* pElement) const { if (m_edit != CEditHandler::none) return; TiXmlElement file("File"); AddTextElement(&file, "LocalFile", m_localFile); AddTextElement(&file, "RemoteFile", m_remoteFile); AddTextElement(&file, "RemotePath", m_remotePath.GetSafePath()); AddTextElement(&file, "Download", m_download ? _T("1") : _T("0")); if (m_size != -1) AddTextElement(&file, "Size", m_size.ToString()); if (m_errorCount) AddTextElement(&file, "ErrorCount", m_errorCount); AddTextElement(&file, "Priority", m_priority); AddTextElement(&file, "TransferMode", m_transferSettings.binary ? _T("1") : _T("0")); pElement->InsertEndChild(file); }
void CFileItem::SaveItem(TiXmlElement* pElement) const { if (m_edit != CEditHandler::none) return; TiXmlElement *file = pElement->LinkEndChild(new TiXmlElement("File"))->ToElement(); AddTextElement(file, "LocalFile", m_localFile); AddTextElement(file, "RemoteFile", m_remoteFile); AddTextElement(file, "RemotePath", m_remotePath.GetSafePath()); AddTextElementRaw(file, "Download", m_download ? "1" : "0"); if (m_size != -1) AddTextElement(file, "Size", m_size.ToString()); if (m_errorCount) AddTextElement(file, "ErrorCount", m_errorCount); if (m_priority != priority_normal) AddTextElement(file, "Priority", m_priority); AddTextElementRaw(file, "TransferMode", m_transferSettings.binary ? "1" : "0"); if (m_defaultFileExistsAction != CFileExistsNotification::unknown) AddTextElement(file, "OverwriteAction", m_defaultFileExistsAction); }
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 CFilterDialog::SaveFilters() { CInterProcessMutex mutex(MUTEX_FILTERS); wxFileName file(COptions::Get()->GetOption(OPTION_DEFAULT_SETTINGSDIR), _T("filters.xml")); CXmlFile xml(file); TiXmlElement* pDocument = xml.Load(); if (!pDocument) { wxString msg = xml.GetError() + _T("\n\n") + _("Any changes made to the filters could not be saved."); 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->LinkEndChild(new TiXmlElement("Filters"))->ToElement(); for (std::vector<CFilter>::const_iterator iter = m_globalFilters.begin(); iter != m_globalFilters.end(); iter++) { const CFilter& filter = *iter; TiXmlElement* pElement = new TiXmlElement("Filter"); SaveFilter(pElement, filter); pFilters->LinkEndChild(pElement); } TiXmlElement *pSets = pDocument->FirstChildElement("Sets"); while (pSets) { pDocument->RemoveChild(pSets); pSets = pDocument->FirstChildElement("Sets"); } pSets = pDocument->LinkEndChild(new 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->LinkEndChild(new 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->LinkEndChild(new TiXmlElement("Item"))->ToElement(); AddTextElement(pItem, "Local", set.local[i] ? _T("1") : _T("0")); AddTextElement(pItem, "Remote", set.remote[i] ? _T("1") : _T("0")); } } xml.Save(); m_filters_disabled = false; }
bool CImportDialog::ImportLegacySites(TiXmlElement* pSitesToImport, TiXmlElement* pExistingSites) { for (TiXmlElement* pImportFolder = pSitesToImport->FirstChildElement("Folder"); pImportFolder; pImportFolder = pImportFolder->NextSiblingElement("Folder")) { wxString name = GetTextAttribute(pImportFolder, "Name"); if (name == _T("")) continue; wxString newName = name; int i = 2; TiXmlElement* pFolder; while (!(pFolder = GetFolderWithName(pExistingSites, newName))) { newName = wxString::Format(_T("%s %d"), name.c_str(), i++); } ImportLegacySites(pImportFolder, pFolder); } for (TiXmlElement* pImportSite = pSitesToImport->FirstChildElement("Site"); pImportSite; pImportSite = pImportSite->NextSiblingElement("Site")) { wxString name = GetTextAttribute(pImportSite, "Name"); if (name == _T("")) continue; wxString host = GetTextAttribute(pImportSite, "Host"); if (host == _T("")) continue; int port = GetAttributeInt(pImportSite, "Port"); if (port < 1 || port > 65535) continue; int serverType = GetAttributeInt(pImportSite, "ServerType"); if (serverType < 0 || serverType > 4) continue; int protocol; switch (serverType) { default: case 0: protocol = 0; break; case 1: protocol = 3; break; case 2: case 4: protocol = 4; break; case 3: protocol = 1; break; } bool dontSavePass = GetAttributeInt(pImportSite, "DontSavePass") == 1; int logontype = GetAttributeInt(pImportSite, "Logontype"); if (logontype < 0 || logontype > 2) continue; if (logontype == 2) logontype = 4; if (logontype == 1 && dontSavePass) logontype = 2; wxString user = GetTextAttribute(pImportSite, "User"); wxString pass = DecodeLegacyPassword(GetTextAttribute(pImportSite, "Pass")); wxString account = GetTextAttribute(pImportSite, "Account"); if (logontype && user == _T("")) continue; // Find free name wxString newName = name; int i = 2; while (HasEntryWithName(pExistingSites, newName)) { newName = wxString::Format(_T("%s %d"), name.c_str(), i++); } TiXmlElement* pServer = pExistingSites->LinkEndChild(new TiXmlElement("Server"))->ToElement(); AddTextElement(pServer, newName); AddTextElement(pServer, "Host", host); AddTextElement(pServer, "Port", port); AddTextElement(pServer, "Protocol", protocol); AddTextElement(pServer, "Logontype", logontype); AddTextElement(pServer, "User", user); AddTextElement(pServer, "Pass", pass); AddTextElement(pServer, "Account", account); } return true; }
void SetServer(pugi::xml_node node, const CServer& server) { if (!node) return; bool kiosk_mode = COptions::Get()->GetOptionVal(OPTION_DEFAULT_KIOSKMODE) != 0; for (auto child = node.first_child(); child; child = node.first_child()) { node.remove_child(child); } AddTextElement(node, "Host", server.GetHost()); AddTextElement(node, "Port", server.GetPort()); AddTextElement(node, "Protocol", server.GetProtocol()); AddTextElement(node, "Type", server.GetType()); enum LogonType logonType = server.GetLogonType(); if (server.GetLogonType() != ANONYMOUS) { AddTextElement(node, "User", server.GetUser()); if (server.GetLogonType() == NORMAL || server.GetLogonType() == ACCOUNT) { if (kiosk_mode) logonType = ASK; else { wxString pass = server.GetPass(); auto const& buf = pass.utf8_str(); // wxWidgets has such an ugly string API.... std::string utf8(buf.data(), buf.length()); wxString base64 = wxBase64Encode(utf8.c_str(), utf8.size()); pugi::xml_node passElement = AddTextElement(node, "Pass", base64); if (passElement) { SetTextAttribute(passElement, "encoding", _T("base64")); } if (server.GetLogonType() == ACCOUNT) AddTextElement(node, "Account", server.GetAccount()); } } else if (server.GetLogonType() == KEY) { AddTextElement(node, "Keyfile", server.GetKeyFile()); } } AddTextElement(node, "Logontype", logonType); AddTextElement(node, "TimezoneOffset", server.GetTimezoneOffset()); switch (server.GetPasvMode()) { case MODE_PASSIVE: AddTextElementRaw(node, "PasvMode", "MODE_PASSIVE"); break; case MODE_ACTIVE: AddTextElementRaw(node, "PasvMode", "MODE_ACTIVE"); break; default: AddTextElementRaw(node, "PasvMode", "MODE_DEFAULT"); break; } AddTextElement(node, "MaximumMultipleConnections", server.MaximumMultipleConnections()); switch (server.GetEncodingType()) { case ENCODING_AUTO: AddTextElementRaw(node, "EncodingType", "Auto"); break; case ENCODING_UTF8: AddTextElementRaw(node, "EncodingType", "UTF-8"); break; case ENCODING_CUSTOM: AddTextElementRaw(node, "EncodingType", "Custom"); AddTextElement(node, "CustomEncoding", server.GetCustomEncoding()); break; } if (CServer::SupportsPostLoginCommands(server.GetProtocol())) { std::vector<wxString> const& postLoginCommands = server.GetPostLoginCommands(); if (!postLoginCommands.empty()) { auto element = node.append_child("PostLoginCommands"); for (std::vector<wxString>::const_iterator iter = postLoginCommands.begin(); iter != postLoginCommands.end(); ++iter) { AddTextElement(element, "Command", *iter); } } } AddTextElementRaw(node, "BypassProxy", server.GetBypassProxy() ? "1" : "0"); const wxString& name = server.GetName(); if (!name.empty()) AddTextElement(node, "Name", name); }
void SetServer(TiXmlElement *node, const CServer& server) { if (!node) return; bool kiosk_mode = COptions::Get()->GetOptionVal(OPTION_DEFAULT_KIOSKMODE) != 0; node->Clear(); AddTextElement(node, "Host", server.GetHost()); AddTextElement(node, "Port", server.GetPort()); AddTextElement(node, "Protocol", server.GetProtocol()); AddTextElement(node, "Type", server.GetType()); enum LogonType logonType = server.GetLogonType(); if (server.GetLogonType() != ANONYMOUS) { AddTextElement(node, "User", server.GetUser()); if (server.GetLogonType() == NORMAL || server.GetLogonType() == ACCOUNT) { if (kiosk_mode) logonType = ASK; else { AddTextElement(node, "Pass", server.GetPass()); if (server.GetLogonType() == ACCOUNT) AddTextElement(node, "Account", server.GetAccount()); } } } AddTextElement(node, "Logontype", logonType); AddTextElement(node, "TimezoneOffset", server.GetTimezoneOffset()); switch (server.GetPasvMode()) { case MODE_PASSIVE: AddTextElementRaw(node, "PasvMode", "MODE_PASSIVE"); break; case MODE_ACTIVE: AddTextElementRaw(node, "PasvMode", "MODE_ACTIVE"); break; default: AddTextElementRaw(node, "PasvMode", "MODE_DEFAULT"); break; } AddTextElement(node, "MaximumMultipleConnections", server.MaximumMultipleConnections()); switch (server.GetEncodingType()) { case ENCODING_AUTO: AddTextElementRaw(node, "EncodingType", "Auto"); break; case ENCODING_UTF8: AddTextElementRaw(node, "EncodingType", "UTF-8"); break; case ENCODING_CUSTOM: AddTextElementRaw(node, "EncodingType", "Custom"); AddTextElement(node, "CustomEncoding", server.GetCustomEncoding()); break; } if (CServer::SupportsPostLoginCommands(server.GetProtocol())) { std::vector<wxString> const& postLoginCommands = server.GetPostLoginCommands(); if (!postLoginCommands.empty()) { TiXmlElement* pElement = node->LinkEndChild(new TiXmlElement("PostLoginCommands"))->ToElement(); for (std::vector<wxString>::const_iterator iter = postLoginCommands.begin(); iter != postLoginCommands.end(); ++iter) AddTextElement(pElement, "Command", *iter); } } AddTextElementRaw(node, "BypassProxy", server.GetBypassProxy() ? "1" : "0"); const wxString& name = server.GetName(); if (!name.empty()) AddTextElement(node, "Name", name); }
void CFilterDialog::SaveFilters() { CInterProcessMutex mutex(MUTEX_FILTERS); wxFileName file(wxGetApp().GetSettingsDir(), _T("filters.xml")); CXmlFile xml(file); TiXmlElement* pDocument = xml.Load(); if (!pDocument) { wxString msg = xml.GetError() + _T("\n\n") + _("Any changes made to the filters could not be saved."); 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(); int type; switch (condition.type) { case filter_name: type = 0; break; case filter_size: type = 1; break; case filter_attributes: type = 2; break; case filter_permissions: type = 3; break; case filter_path: type = 4; break; default: wxFAIL_MSG(_T("Unhandled filter type")); break; } AddTextElement(pCondition, "Type", 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")); } } xml.Save(); m_filters_disabled = false; }
void SetServer(TiXmlElement *node, const CServer& server) { if (!node) return; node->Clear(); AddTextElement(node, "Host", server.GetHost()); AddTextElement(node, "Port", server.GetPort()); AddTextElement(node, "Protocol", server.GetProtocol()); AddTextElement(node, "Type", server.GetType()); AddTextElement(node, "Logontype", server.GetLogonType()); if (server.GetLogonType() != ANONYMOUS) { AddTextElement(node, "User", server.GetUser()); if (server.GetLogonType() == NORMAL || server.GetLogonType() == ACCOUNT) AddTextElement(node, "Pass", server.GetPass()); if (server.GetLogonType() == ACCOUNT) AddTextElement(node, "Account", server.GetAccount()); } AddTextElement(node, "TimezoneOffset", server.GetTimezoneOffset()); switch (server.GetPasvMode()) { case MODE_PASSIVE: AddTextElement(node, "PasvMode", _T("MODE_PASSIVE")); break; case MODE_ACTIVE: AddTextElement(node, "PasvMode", _T("MODE_ACTIVE")); break; default: AddTextElement(node, "PasvMode", _T("MODE_DEFAULT")); break; } AddTextElement(node, "MaximumMultipleConnections", server.MaximumMultipleConnections()); switch (server.GetEncodingType()) { case ENCODING_AUTO: AddTextElement(node, "EncodingType", _T("Auto")); break; case ENCODING_UTF8: AddTextElement(node, "EncodingType", _T("UTF-8")); break; case ENCODING_CUSTOM: AddTextElement(node, "EncodingType", _T("Custom")); AddTextElement(node, "CustomEncoding", server.GetCustomEncoding()); break; } const enum ServerProtocol protocol = server.GetProtocol(); if (protocol == FTP || protocol == FTPS || protocol == FTPES) { const std::vector<wxString>& postLoginCommands = server.GetPostLoginCommands(); if (!postLoginCommands.empty()) { TiXmlElement* pElement = node->InsertEndChild(TiXmlElement("PostLoginCommands"))->ToElement(); for (std::vector<wxString>::const_iterator iter = postLoginCommands.begin(); iter != postLoginCommands.end(); iter++) AddTextElement(pElement, "Command", *iter); } } AddTextElement(node, "BypassProxy", server.GetBypassProxy() ? 1 : 0); const wxString& name = server.GetName(); if (name != _T("")) AddTextElement(node, "Name", name); }
void AddTextElement(TiXmlElement* node, int value) { AddTextElement(node, wxString::Format(_T("%d"), value)); }
void SetServer(TiXmlElement *node, const CServer& server) { if (!node) return; static bool initialized = false; static bool kiosk_mode = false; if (!initialized) { COptions* pOptions = COptions::Get(); if (pOptions) { initialized = true; if (pOptions->GetDefaultVal(DEFAULT_KIOSKMODE) != 0) kiosk_mode = true; } } node->Clear(); AddTextElement(node, "Host", server.GetHost()); AddTextElement(node, "Port", server.GetPort()); AddTextElement(node, "Protocol", server.GetProtocol()); AddTextElement(node, "Type", server.GetType()); enum LogonType logonType = server.GetLogonType(); if (server.GetLogonType() != ANONYMOUS) { AddTextElement(node, "User", server.GetUser()); if (server.GetLogonType() == NORMAL || server.GetLogonType() == ACCOUNT) { if (kiosk_mode) logonType = ASK; else { AddTextElement(node, "Pass", server.GetPass()); if (server.GetLogonType() == ACCOUNT) AddTextElement(node, "Account", server.GetAccount()); } } } AddTextElement(node, "Logontype", logonType); AddTextElement(node, "TimezoneOffset", server.GetTimezoneOffset()); switch (server.GetPasvMode()) { case MODE_PASSIVE: AddTextElementRaw(node, "PasvMode", "MODE_PASSIVE"); break; case MODE_ACTIVE: AddTextElementRaw(node, "PasvMode", "MODE_ACTIVE"); break; default: AddTextElementRaw(node, "PasvMode", "MODE_DEFAULT"); break; } AddTextElement(node, "MaximumMultipleConnections", server.MaximumMultipleConnections()); switch (server.GetEncodingType()) { case ENCODING_AUTO: AddTextElementRaw(node, "EncodingType", "Auto"); break; case ENCODING_UTF8: AddTextElementRaw(node, "EncodingType", "UTF-8"); break; case ENCODING_CUSTOM: AddTextElementRaw(node, "EncodingType", "Custom"); AddTextElement(node, "CustomEncoding", server.GetCustomEncoding()); break; } const enum ServerProtocol protocol = server.GetProtocol(); if (protocol == FTP || protocol == FTPS || protocol == FTPES) { const std::vector<wxString>& postLoginCommands = server.GetPostLoginCommands(); if (!postLoginCommands.empty()) { TiXmlElement* pElement = node->LinkEndChild(new TiXmlElement("PostLoginCommands"))->ToElement(); for (std::vector<wxString>::const_iterator iter = postLoginCommands.begin(); iter != postLoginCommands.end(); iter++) AddTextElement(pElement, "Command", *iter); } } AddTextElementRaw(node, "BypassProxy", server.GetBypassProxy() ? "1" : "0"); const wxString& name = server.GetName(); if (name != _T("")) AddTextElement(node, "Name", name); }
void SetServer(pugi::xml_node node, const CServer& server) { if (!node) { return; } bool kiosk_mode = COptions::Get()->GetOptionVal(OPTION_DEFAULT_KIOSKMODE) != 0; for (auto child = node.first_child(); child; child = node.first_child()) { node.remove_child(child); } AddTextElement(node, "Host", server.GetHost()); AddTextElement(node, "Port", server.GetPort()); AddTextElement(node, "Protocol", server.GetProtocol()); AddTextElement(node, "Type", server.GetType()); LogonType logonType = server.GetLogonType(); if (server.GetLogonType() != ANONYMOUS) { AddTextElement(node, "User", server.GetUser()); if (server.GetLogonType() == NORMAL || server.GetLogonType() == ACCOUNT) { if (kiosk_mode) { logonType = ASK; } else { std::string pass = fz::to_utf8(server.GetPass()); pugi::xml_node passElement = AddTextElementUtf8(node, "Pass", fz::base64_encode(pass)); if (passElement) { SetTextAttribute(passElement, "encoding", _T("base64")); } if (server.GetLogonType() == ACCOUNT) { AddTextElement(node, "Account", server.GetAccount()); } } } else if (server.GetLogonType() == KEY) { AddTextElement(node, "Keyfile", server.GetKeyFile()); } } AddTextElement(node, "Logontype", logonType); AddTextElement(node, "TimezoneOffset", server.GetTimezoneOffset()); switch (server.GetPasvMode()) { case MODE_PASSIVE: AddTextElementUtf8(node, "PasvMode", "MODE_PASSIVE"); break; case MODE_ACTIVE: AddTextElementUtf8(node, "PasvMode", "MODE_ACTIVE"); break; default: AddTextElementUtf8(node, "PasvMode", "MODE_DEFAULT"); break; } AddTextElement(node, "MaximumMultipleConnections", server.MaximumMultipleConnections()); switch (server.GetEncodingType()) { case ENCODING_AUTO: AddTextElementUtf8(node, "EncodingType", "Auto"); break; case ENCODING_UTF8: AddTextElementUtf8(node, "EncodingType", "UTF-8"); break; case ENCODING_CUSTOM: AddTextElementUtf8(node, "EncodingType", "Custom"); AddTextElement(node, "CustomEncoding", server.GetCustomEncoding()); break; } if (CServer::SupportsPostLoginCommands(server.GetProtocol())) { std::vector<std::wstring> const& postLoginCommands = server.GetPostLoginCommands(); if (!postLoginCommands.empty()) { auto element = node.append_child("PostLoginCommands"); for (auto const& command : postLoginCommands) { AddTextElement(element, "Command", command); } } } AddTextElementUtf8(node, "BypassProxy", server.GetBypassProxy() ? "1" : "0"); std::wstring const& name = server.GetName(); if (!name.empty()) { AddTextElement(node, "Name", name); } }
bool CSiteManager::AddBookmark(wxString sitePath, const wxString& name, const wxString &local_dir, const CServerPath &remote_dir, bool sync) { if (local_dir.empty() && remote_dir.IsEmpty()) return false; if (sitePath[0] != '0') return false; sitePath = sitePath.Mid(1); // We have to synchronize access to sitemanager.xml so that multiple processed don't write // to the same file or one is reading while the other one writes. CInterProcessMutex mutex(MUTEX_SITEMANAGER); CXmlFile file; TiXmlElement* pDocument = file.Load(_T("sitemanager")); if (!pDocument) { wxString msg = file.GetError() + _T("\n") + _("The bookmark could not be added."); wxMessageBox(msg, _("Error loading xml file"), wxICON_ERROR); return false; } TiXmlElement* pElement = pDocument->FirstChildElement("Servers"); if (!pElement) return false; std::list<wxString> segments; if (!UnescapeSitePath(sitePath, segments)) { wxMessageBox(_("Site path is malformed."), _("Invalid site path")); return 0; } TiXmlElement* pChild = GetElementByPath(pElement, segments); if (!pChild || strcmp(pChild->Value(), "Server")) { wxMessageBox(_("Site does not exist."), _("Invalid site path")); return 0; } // Bookmarks TiXmlElement *pInsertBefore = 0; TiXmlElement* pBookmark; for (pBookmark = pChild->FirstChildElement("Bookmark"); pBookmark; pBookmark = pBookmark->NextSiblingElement("Bookmark")) { TiXmlHandle handle(pBookmark); wxString old_name = GetTextElement_Trimmed(pBookmark, "Name"); if (old_name.empty()) continue; if (name == old_name) { wxMessageBox(_("Name of bookmark already exists."), _("New bookmark"), wxICON_EXCLAMATION); return false; } if (name < old_name && !pInsertBefore) pInsertBefore = pBookmark; } if (pInsertBefore) pBookmark = pChild->InsertBeforeChild(pInsertBefore, TiXmlElement("Bookmark"))->ToElement(); else pBookmark = pChild->LinkEndChild(new TiXmlElement("Bookmark"))->ToElement(); AddTextElement(pBookmark, "Name", name); if (!local_dir.empty()) AddTextElement(pBookmark, "LocalDir", local_dir); if (!remote_dir.IsEmpty()) AddTextElement(pBookmark, "RemoteDir", remote_dir.GetSafePath()); if (sync) AddTextElementRaw(pBookmark, "SyncBrowsing", "1"); wxString error; if (!file.Save(&error)) { if (COptions::Get()->GetOptionVal(OPTION_DEFAULT_KIOSKMODE) == 2) return true; wxString msg = wxString::Format(_("Could not write \"%s\", the selected sites could not be exported: %s"), file.GetFileName().GetFullPath().c_str(), error.c_str()); wxMessageBox(msg, _("Error writing xml file"), wxICON_ERROR); } return true; }
void TextExtractor::ExtractText( PdfMemDocument* pDocument, PdfPage* pPage ) { const char* pszToken = NULL; PdfVariant var; EPdfContentsType eType; PdfContentsTokenizer tokenizer( pPage ); double dCurPosX = 0.0; double dCurPosY = 0.0; double dCurFontSize = 0.0; bool bTextBlock = false; PdfFont* pCurFont = NULL; std::stack<PdfVariant> stack; while( tokenizer.ReadNext( eType, pszToken, var ) ) { if( eType == ePdfContentsType_Keyword ) { // support 'l' and 'm' tokens if( strcmp( pszToken, "l" ) == 0 || strcmp( pszToken, "m" ) == 0 ) { dCurPosX = stack.top().GetReal(); stack.pop(); dCurPosY = stack.top().GetReal(); stack.pop(); } else if( strcmp( pszToken, "BT" ) == 0 ) { bTextBlock = true; // BT does not reset font // dCurFontSize = 0.0; // pCurFont = NULL; } else if( strcmp( pszToken, "ET" ) == 0 ) { if( !bTextBlock ) fprintf( stderr, "WARNING: Found ET without BT!\n" ); } if( bTextBlock ) { if( strcmp( pszToken, "Tf" ) == 0 ) { dCurFontSize = stack.top().GetReal(); stack.pop(); PdfName fontName = stack.top().GetName(); PdfObject* pFont = pPage->GetFromResources( PdfName("Font"), fontName ); if( !pFont ) { PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidHandle, "Cannot create font!" ); } pCurFont = pDocument->GetFont( pFont ); if( !pCurFont ) { fprintf( stderr, "WARNING: Unable to create font for object %i %i R\n", pFont->Reference().ObjectNumber(), pFont->Reference().GenerationNumber() ); } } else if( strcmp( pszToken, "Tj" ) == 0 || strcmp( pszToken, "'" ) == 0 ) { AddTextElement( dCurPosX, dCurPosY, pCurFont, stack.top().GetString() ); stack.pop(); } else if( strcmp( pszToken, "\"" ) == 0 ) { AddTextElement( dCurPosX, dCurPosY, pCurFont, stack.top().GetString() ); stack.pop(); stack.pop(); // remove char spacing from stack stack.pop(); // remove word spacing from stack } else if( strcmp( pszToken, "TJ" ) == 0 ) { PdfArray array = stack.top().GetArray(); stack.pop(); for( int i=0; i<static_cast<int>(array.GetSize()); i++ ) { if( array[i].IsString() ) AddTextElement( dCurPosX, dCurPosY, pCurFont, array[i].GetString() ); } } } } else if ( eType == ePdfContentsType_Variant ) { stack.push( var ); } else { // Impossible; type must be keyword or variant PODOFO_RAISE_ERROR( ePdfError_InternalLogic ); } } }