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; }
bool CImportDialog::ImportSites(TiXmlElement* pSites) { CInterProcessMutex mutex(MUTEX_SITEMANAGER); CXmlFile file(wxGetApp().GetSettingsFile(_T("sitemanager"))); TiXmlElement* pDocument = file.Load(); 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 will not be saved."), file.GetFileName()); wxMessageBoxEx(msg, _("Error loading xml file"), wxICON_ERROR); return false; } TiXmlElement* pCurrentSites = pDocument->FirstChildElement("Servers"); if (!pCurrentSites) pCurrentSites = pDocument->LinkEndChild(new TiXmlElement("Servers"))->ToElement(); if (!ImportSites(pSites, pCurrentSites)) return false; return file.Save(true); }
void CImportDialog::Show() { wxFileDialog dlg(m_parent, _("Select file to import settings from"), _T(""), _T("FileZilla.xml"), _T("XML files (*.xml)|*.xml"), wxFD_OPEN | wxFD_FILE_MUST_EXIST); dlg.CenterOnParent(); if (dlg.ShowModal() != wxID_OK) return; wxFileName fn(dlg.GetPath()); const wxString& path = fn.GetPath(); const wxString& settings(COptions::Get()->GetOption(OPTION_DEFAULT_SETTINGSDIR)); if (path == settings) { wxMessageBox(_("You cannot import settings from FileZilla's own settings directory."), _("Error importing"), wxICON_ERROR, m_parent); return; } TiXmlDocument* xmlDocument = new TiXmlDocument(); xmlDocument->SetCondenseWhiteSpace(false); if (!LoadXmlDocument(xmlDocument, dlg.GetPath())) { delete xmlDocument; wxMessageBox(_("Cannot load file, not a valid XML file."), _("Error importing"), wxICON_ERROR, m_parent); return; } TiXmlElement* fz3Root = xmlDocument->FirstChildElement("FileZilla3"); TiXmlElement* fz2Root = xmlDocument->FirstChildElement("FileZilla"); if (fz3Root) { bool settings = fz3Root->FirstChildElement("Settings") != 0; bool queue = fz3Root->FirstChildElement("Queue") != 0; bool sites = fz3Root->FirstChildElement("Servers") != 0; if (settings || queue || sites) { Load(m_parent, _T("ID_IMPORT")); if (!queue) XRCCTRL(*this, "ID_QUEUE", wxCheckBox)->Hide(); if (!sites) XRCCTRL(*this, "ID_SITEMANAGER", wxCheckBox)->Hide(); if (!settings) XRCCTRL(*this, "ID_SETTINGS", wxCheckBox)->Hide(); Fit(); if (ShowModal() != wxID_OK) { delete xmlDocument; return; } if (queue && XRCCTRL(*this, "ID_QUEUE", wxCheckBox)->IsChecked()) { m_pQueueView->ImportQueue(fz3Root->FirstChildElement("Queue"), true); } if (sites && XRCCTRL(*this, "ID_SITEMANAGER", wxCheckBox)->IsChecked()) { ImportSites(fz3Root->FirstChildElement("Servers")); } if (settings && XRCCTRL(*this, "ID_SETTINGS", wxCheckBox)->IsChecked()) { COptions::Get()->Import(fz3Root->FirstChildElement("Settings")); wxMessageBox(_("The settings have been imported. You have to restart FileZilla for all settings to have effect."), _("Import successful"), wxOK, this); } wxMessageBox(_("The selected categories have been imported."), _("Import successful"), wxOK, this); delete xmlDocument; return; } } else if (fz2Root) { bool sites_fz2 = fz2Root->FirstChildElement("Sites") != 0; if (sites_fz2) { int res = wxMessageBox(_("The file you have selected contains site manager data from a previous version of FileZilla.\nDue to differences in the storage format, only host, port, username and password will be imported.\nContinue with the import?"), _("Import data from older version"), wxICON_QUESTION | wxYES_NO); if (res == wxYES) ImportLegacySites(fz2Root->FirstChildElement("Sites")); delete xmlDocument; return; } } delete xmlDocument; wxMessageBox(_("File does not contain any importable data."), _("Error importing"), wxICON_ERROR, m_parent); }
void CImportDialog::Run() { wxFileDialog dlg(m_parent, _("Select file to import settings from"), wxString(), _T("FileZilla.xml"), _T("XML files (*.xml)|*.xml"), wxFD_OPEN | wxFD_FILE_MUST_EXIST); dlg.CenterOnParent(); if (dlg.ShowModal() != wxID_OK) return; wxFileName fn(dlg.GetPath()); wxString const path = fn.GetPath(); wxString const settingsDir(COptions::Get()->GetOption(OPTION_DEFAULT_SETTINGSDIR)); if (path == settingsDir) { wxMessageBoxEx(_("You cannot import settings from FileZilla's own settings directory."), _("Error importing"), wxICON_ERROR, m_parent); return; } CXmlFile fz3(dlg.GetPath()); TiXmlElement* fz3Root = fz3.Load(); if (fz3Root) { bool settings = fz3Root->FirstChildElement("Settings") != 0; bool queue = fz3Root->FirstChildElement("Queue") != 0; bool sites = fz3Root->FirstChildElement("Servers") != 0; if (settings || queue || sites) { if (!Load(m_parent, _T("ID_IMPORT"))) { wxBell(); return; } if (!queue) XRCCTRL(*this, "ID_QUEUE", wxCheckBox)->Hide(); if (!sites) XRCCTRL(*this, "ID_SITEMANAGER", wxCheckBox)->Hide(); if (!settings) XRCCTRL(*this, "ID_SETTINGS", wxCheckBox)->Hide(); GetSizer()->Fit(this); if (ShowModal() != wxID_OK) { return; } if (fz3.IsFromFutureVersion()) { wxString msg = wxString::Format(_("The file '%s' has been created by a more recent version of FileZilla.\nLoading files created by newer versions can result in loss of data.\nDo you want to continue?"), fz3.GetFileName()); if (wxMessageBoxEx(msg, _("Detected newer version of FileZilla"), wxICON_QUESTION | wxYES_NO) != wxYES) { return; } } if (queue && XRCCTRL(*this, "ID_QUEUE", wxCheckBox)->IsChecked()) { m_pQueueView->ImportQueue(fz3Root->FirstChildElement("Queue"), true); } if (sites && XRCCTRL(*this, "ID_SITEMANAGER", wxCheckBox)->IsChecked()) { ImportSites(fz3Root->FirstChildElement("Servers")); } if (settings && XRCCTRL(*this, "ID_SETTINGS", wxCheckBox)->IsChecked()) { COptions::Get()->Import(fz3Root->FirstChildElement("Settings")); wxMessageBoxEx(_("The settings have been imported. You have to restart FileZilla for all settings to have effect."), _("Import successful"), wxOK, this); } wxMessageBoxEx(_("The selected categories have been imported."), _("Import successful"), wxOK, this); return; } } CXmlFile fz2(dlg.GetPath(), _T("FileZilla")); TiXmlElement* fz2Root = fz2.Load(); if (fz2Root) { TiXmlElement* sites_fz2 = fz2Root->FirstChildElement("Sites"); if (sites_fz2) { int res = wxMessageBoxEx(_("The file you have selected contains site manager data from a previous version of FileZilla.\nDue to differences in the storage format, only host, port, username and password will be imported.\nContinue with the import?"), _("Import data from older version"), wxICON_QUESTION | wxYES_NO); if (res == wxYES) ImportLegacySites(sites_fz2); return; } } wxMessageBoxEx(_("File does not contain any importable data."), _("Error importing"), wxICON_ERROR, m_parent); }