void SFTPTreeView::DoOpenSession() { DoCloseSession(); wxString accountName = m_choiceAccount->GetStringSelection(); if(accountName.IsEmpty()) { return; } SFTPSettings settings; settings.Load(); m_account = SSHAccountInfo(); if(!settings.GetAccount(accountName, m_account)) { ::wxMessageBox(wxString() << _("Could not find account: ") << accountName, "codelite", wxICON_ERROR | wxOK); return; } clSSH::Ptr_t ssh( new clSSH(m_account.GetHost(), m_account.GetUsername(), m_account.GetPassword(), m_account.GetPort())); try { wxString message; m_plugin->GetManager()->SetStatusMessage(wxString() << _("Connecting to: ") << accountName << "..."); ssh->Connect(); if(!ssh->AuthenticateServer(message)) { if(::wxMessageBox(message, "SSH", wxYES_NO | wxCENTER | wxICON_QUESTION) == wxYES) { ssh->AcceptServerAuthentication(); } } ssh->Login(); m_sftp.reset(new clSFTP(ssh)); m_sftp->Initialize(); m_sftp->SetAccount(m_account.GetAccountName()); m_plugin->GetManager()->SetStatusMessage(wxString() << _("Done!")); DoBuildTree("/"); } catch(clException& e) { ::wxMessageBox(e.What(), "codelite", wxICON_ERROR | wxOK); DoCloseSession(); } }
void SFTPTreeView::DoOpenSession() { DoCloseSession(); wxString accountName = m_choiceAccount->GetStringSelection(); if(accountName.IsEmpty()) { return; } SFTPSettings settings; settings.Load(); m_account = SSHAccountInfo(); if(!settings.GetAccount(accountName, m_account)) { ::wxMessageBox(wxString() << _("Could not find account: ") << accountName, "codelite", wxICON_ERROR | wxOK); return; } wxString message; #ifndef _WIN64 wxProgressDialog dlg(_("SFTP"), wxString(' ', 100) + "\n\n", 10); dlg.Show(); dlg.Update(1, wxString() << _("Connecting to: ") << accountName << "..." << _("\n(this may take a few seconds)")); #else wxBusyCursor bc; clGetManager()->SetStatusMessage(wxString() << _("Connecting to: ") << accountName); #endif // We know that there is a bug that libssh succeeded on connecting only on the second attempt.. // to workaround it, we issue first connect with 1 second timeout, and then re-open the connection try { clSSH::Ptr_t ssh( new clSSH(m_account.GetHost(), m_account.GetUsername(), m_account.GetPassword(), m_account.GetPort())); ssh->Connect(wxNOT_FOUND); } catch(...) { } try { clSSH::Ptr_t ssh( new clSSH(m_account.GetHost(), m_account.GetUsername(), m_account.GetPassword(), m_account.GetPort())); ssh->Connect(5); #ifndef _WIN64 dlg.Update(5, _("Connected!")); dlg.Update(6, _("Authenticating server...")); #endif if(!ssh->AuthenticateServer(message)) { if(::wxMessageBox(message, "SSH", wxYES_NO | wxCENTER | wxICON_QUESTION) == wxYES) { #ifndef _WIN64 dlg.Update(7, _("Accepting server authentication server...")); #endif ssh->AcceptServerAuthentication(); } } else { #ifndef _WIN64 dlg.Update(7, _("Server authenticated")); #endif } #ifndef _WIN64 dlg.Update(8, _("Logging...")); #endif ssh->Login(); m_sftp.reset(new clSFTP(ssh)); m_sftp->Initialize(); m_sftp->SetAccount(m_account.GetAccountName()); m_plugin->GetManager()->SetStatusMessage(wxString() << _("Done!")); #ifndef _WIN64 dlg.Update(9, _("Fetching directory list...")); #endif DoBuildTree(m_account.GetDefaultFolder().IsEmpty() ? "/" : m_account.GetDefaultFolder()); #ifndef _WIN64 dlg.Update(10, _("Done")); #endif } catch(clException& e) { ::wxMessageBox(e.What(), "codelite", wxICON_ERROR | wxOK); DoCloseSession(); } }