package Visual_DVM_2021.Passes.All; import Common.Current_; import Common.Utils.CommonUtils; import Common.Visual.CommonUI; import _VisualDVM.Current; import _VisualDVM.Global; import _VisualDVM.Visual.UI; import _VisualDVM.Utils; import _VisualDVM.GlobalData.RemoteFile.RemoteFile; import Visual_DVM_2021.Passes.PassCode; import Common.Passes.PassException; import Visual_DVM_2021.Passes.SSH.CurrentConnectionPass; import java.io.File; import java.nio.file.Paths; public class DownloadProject extends CurrentConnectionPass { private static final int maxSize = 10240; boolean dialogOK = false; RemoteFile src; RemoteFile remote_archive; File local_archive; @Override protected void ServerAction() throws Exception { dialogOK = (UI.getRemoteFileChooser().ShowDialog(getDescription(), this, true)); if (dialogOK) { src = Current.getRemoteFile(); remote_archive = new RemoteFile(src.full_name, src.name + ".zip", false); local_archive = Utils.getTempFileName(remote_archive.name); if ((user.connection.getFileKBSize(src.full_name)) <= maxSize) { ShowMessage2("Запаковка папки проекта.."); user.connection.Command( "cd " + CommonUtils.DQuotes(src.full_name), "zip -r " + CommonUtils.DQuotes(remote_archive.full_name) + " ./" ); // try { ShowMessage2("Загрузка проекта.."); user.connection.getSingleFile(remote_archive.full_name, local_archive.getAbsolutePath()); // } catch (Exception ex) { // throw new PassException("Ошибка загрузки"); // } user.connection.sftpChannel.rm(remote_archive.full_name); } else throw new PassException("Размер проекта превышает " + maxSize + " KB.\n"); } else { //диалога не вышло, сбрасываем файл. Current_.set(Current.RemoteFile, null); } } @Override protected boolean validate() { Current_.Check(Log, Current.RemoteFile); return (Log.isEmpty()); } @Override protected void performDone() throws Exception { File project = Paths.get(Global.visualiser.getWorkspace().getAbsolutePath(), CommonUtils.getDateName(src.name)).toFile(); if (passes.get(PassCode.UnzipFolderPass).Do(local_archive.getAbsolutePath(), project.getAbsolutePath())) { if (CommonUI.Question("Проект " + CommonUtils.Brackets(src.name) + " успешно загружен. Открыть его")) passes.get(PassCode.OpenCurrentProject).Do(project); } } }