public JsonResult ExexcuteSql(string FinalSql = null) { string json = string.Empty; ToolsBase.ExecuteSql = FinalSql; ToolsModel model = new ToolsModel(); List <ToolsModel> toolsList = new List <ToolsModel>(); try { actionResult = toolsAction.ExecuteReport_Sql(ToolsBase); if (actionResult.IsSuccess) { toolsList = (from DataRow row in actionResult.dtResult.Rows select new ToolsModel { ExecuteSql = row["Column1"] != DBNull.Value ? row["Column1"].ToString() : "" }).ToList(); } model.ExecuteSQlList = toolsList; } catch (Exception ex) { } return(Json(toolsList, JsonRequestBehavior.AllowGet)); }
/// <summary> /// Переименовывем папки в 'SyncRemoveFoldersExtension' на удаленом сервере - (если их нету на локальном) /// </summary> /// <param name="md">Стандартные параметры которые есть в каждом методе Tools</param> /// <param name="ListRemoteDirectoryToName">Список папок на удаленном сервере (имена)</param> /// <param name="SyncRemoveFoldersExtension">Расширение для удаленой папки</param> public static void RenameToRemoveDirectory(ToolsModel md, List <string> ListRemoteDirectoryToName, string SyncRemoveFoldersExtension) { bool IsErrorSync = false; Parallel.ForEach(ListRemoteDirectoryToName, new ParallelOptions { MaxDegreeOfParallelism = md.ActiveConnections }, RemoteDirectoryToName => { // Пропускаем папки которые уже имею расширение 'SyncRemoveFoldersExtension' if (RemoteDirectoryToName.Contains(".SyncRemove")) { return; } // Если папки нету на локальном сервере if (!Directory.Exists(md.LocalFolder + RemoteDirectoryToName)) { // Переименовываем папку на удаленном сервере, добовляя расширение 'SyncRemoveFoldersExtension' if (!md.serv.Rename($"{md.RemoteFolder}{RemoteDirectoryToName}", $"{md.RemoteFolder}{RemoteDirectoryToName}{SyncRemoveFoldersExtension}")) { IsErrorSync = true; } } }); if (IsErrorSync) // Если была ошибка { AddToListErrorLocalFolders(md.LocalFolder, ref md.NewListErrorLocalFolders); // Добовляем папку в список папок с ошибкой синхронизаци } }
private void SetSelected(ToolsModel sender) { A.SelectedItem = null; B.SelectedItem = null; A.SelectedItem = sender; B.SelectedItem = sender; }
/// <summary> /// Переименовывем файлы в 'SyncRemoveFileAddExtension' на удаленом сервере - (если их нету на локальном) /// </summary> /// <param name="md">Стандартные параметры которые есть в каждом методе Tools</param> /// <param name="ListRemoteFiles">Список файлов на удаленом сервере</param> /// <param name="SyncRemoveFileAddExtension">Расширение для удаленого файла</param> public static void RenameToRemoveFiles(ToolsModel md, List <FileModel> ListRemoteFiles, string SyncRemoveFileAddExtension) { bool IsErrorSync = false; Parallel.ForEach(ListRemoteFiles, new ParallelOptions { MaxDegreeOfParallelism = md.ActiveConnections }, RemoteFile => { // Пропускаем файлы которые уже имею расширение 'SyncRemoveFileAddExtension' if (RemoteFile.Name.Contains(".remove")) { return; } // Если файла нету на локальном сервере if (!File.Exists(md.LocalFolder + Regex.Replace(RemoteFile.Name, @"\.sync\..*$", ""))) { // Переименовываем файл на удаленном сервере, добовляя расширение 'SyncRemoveFileAddExtension' if (!md.serv.Rename($"{md.RemoteFolder}{RemoteFile.Name}", $"{md.RemoteFolder}{RemoteFile.Name}{SyncRemoveFileAddExtension}")) { IsErrorSync = true; } } }); if (IsErrorSync) // Если была ошибка { AddToListErrorLocalFolders(md.LocalFolder, ref md.NewListErrorLocalFolders); // Добовляем папку в список папок с ошибкой синхронизаци } }
// public async Task<IActionResult> Tool() // { // var tools = await _context.Tool.ToArrayAsync(); // return View(tools); // } public IActionResult Tools() { List <ToolsModel> toolsList = new List <ToolsModel>(); var query = _context.ToolDetail.Join( _context.ToolClassification, toolDetail => toolDetail.ToolClassificationId, toolClass => toolClass.ToolClassificationId, (toolDetail, toolClass) => new { Type = toolClass.ToolClassification1, Brand = toolDetail.ToolBrand, TradeName = toolDetail.TradeName }); foreach (var item in query) { ToolsModel model = new ToolsModel(); model.Type = item.Type; model.Brand = item.Brand; model.TradeName = item.TradeName; toolsList.Add(model); } return(View(toolsList)); }
public JsonResult LoadDataTablesTree(string GroupName = null) { string json = ""; ToolsModel model = new ToolsModel(); List <ToolsModel> toolsList = new List <ToolsModel>(); ToolsBase.GroupName = GroupName; try { actionResult = toolsAction.LoadDataTablesTree_ReportDesign(ToolsBase); if (actionResult.IsSuccess) { toolsList = (from DataRow row in actionResult.dtResult.Rows select new ToolsModel { TableName = row["TableName"] != DBNull.Value ? row["TableName"].ToString() : "", DisplayName = row["DisplayName"] != DBNull.Value ? row["DisplayName"].ToString() : "" }).ToList(); } model.LoadDataTablesTreeList = toolsList; } catch (Exception ex) { } return(Json(model, JsonRequestBehavior.AllowGet)); }
/// <summary> /// Загружаем файлы на удаленный сервер - (если файла нету на сервере) /// </summary> /// <param name="md">Стандартные параметры которые есть в каждом методе Tools</param> /// <param name="ListRemoteFiles">Список файлов на удаленом сервере</param> /// <param name="ListLocalFilesToName">Список файлов на локальном сервере</param> /// <param name="EncryptionAES">Использовать шифрование файлов AES 256</param> /// <param name="PasswdAES">Пароль для шифрования файлов</param> /// <param name="CountUploadToFilesOK">Количиство успешно загруженых файлов на уделеный сервер</param> /// <param name="CountUploadToFilesAll">Общее количиство файлов, которые нужно было загрузить на удаленый сервер</param> /// <param name="CountUploadToBytes">Общий размер переданых файлов в byte</param> public static void UploadToFiles(ToolsModel md, List <FileModel> ListRemoteFiles, List <string> ListLocalFilesToName, bool EncryptionAES, string PasswdAES, ref int CountUploadToFilesOK, ref int CountUploadToFilesAll, ref long CountUploadToBytes) { long CountUploadToBytesTmp = 0; int CountUploadToFilesOKTmp = 0, CountUploadToFilesAllTmp = 0; Parallel.ForEach(ListLocalFilesToName, new ParallelOptions { MaxDegreeOfParallelism = md.ActiveConnections }, FileName => { string LocalFile = $"{md.LocalFolder}{FileName}"; // Полный путь к локальному файлу FileInfo InfoLocalFile = new FileInfo(LocalFile); // Данные локального файла, 'LastWriteTime' и 'Length' string SyncExtension = $".sync{(EncryptionAES ? ".aes" : "")}.{InfoLocalFile.LastWriteTime.ToBinary()}"; // Расширение файла синхронизации string SyncExtensionCheck = $"{SyncExtension}{(EncryptionAES ? "" : $".{InfoLocalFile.Length}")}"; // Расширение файла синхронизации для проверки // Если локального файла нету на удаленом сервере if (!ListRemoteFiles.Exists(i => i.Name.Contains($"{FileName}{SyncExtensionCheck}"))) { // Загружаем файл на сервер if (md.serv.UploadFile(LocalFile, $"{md.RemoteFolder}{FileName}{SyncExtension}.{InfoLocalFile.Length}", EncryptionAES, PasswdAES)) { CountUploadToFilesOKTmp++; CountUploadToBytesTmp += InfoLocalFile.Length; } CountUploadToFilesAllTmp++; } });
public JsonResult BindReportSql(int ReportID = 0) { string json = string.Empty; ToolsBase.ReportID = ReportID; ToolsModel model = new ToolsModel(); List <ToolsModel> QuerySQLList = new List <ToolsModel>(); try { actionResult = toolsAction.ReportSQL_Load(ToolsBase); if (actionResult.IsSuccess) { QuerySQLList = (from DataRow row in actionResult.dtResult.Rows select new ToolsModel { QuerySQL = row["QuerySQL"] != DBNull.Value ? row["QuerySQL"].ToString() : "" }).ToList(); } model.QuerySQLList = QuerySQLList; } catch (Exception ex) { } return(Json(QuerySQLList, JsonRequestBehavior.AllowGet)); }
public JsonResult bindReportData(int ReportID = 0) { string json = string.Empty; ToolsBase.ReportID = ReportID; ToolsModel model = new ToolsModel(); List <ToolsModel> ReportLayoutList = new List <ToolsModel>(); try { actionResult = toolsAction.ReportLayout_Load(ToolsBase); if (actionResult.IsSuccess) { ReportLayoutList = (from DataRow row in actionResult.dtResult.Rows select new ToolsModel { ReportLayout = row["ReportLayout"] != DBNull.Value ? row["ReportLayout"].ToString() : "", WholeLayout = row["WholeLayout"] != DBNull.Value ? row["WholeLayout"].ToString() : "" }).ToList(); } model.ReportLayoutList = ReportLayoutList; } catch (Exception ex) { } return(Json(ReportLayoutList, JsonRequestBehavior.AllowGet)); }
public JsonResult LoadTableColumnsTreeNode(string TableName = null) { string json = ""; ToolsModel model = new ToolsModel(); List <ToolsModel> toolsList = new List <ToolsModel>(); ToolsBase.TableName = TableName; try { actionResult = toolsAction.LoadTableColumnsTreeNode_ReportDesign(ToolsBase); if (actionResult.IsSuccess) { toolsList = (from DataRow row in actionResult.dtResult.Rows select new ToolsModel { column_name = row["column_name"] != DBNull.Value ? row["column_name"].ToString() : "", data_type = row["data_type"] != DBNull.Value ? row["data_type"].ToString() : "" }).ToList(); } model.LoadTableColumnsTreeNodeList = toolsList; } catch (Exception ex) { } return(Json(model, JsonRequestBehavior.AllowGet)); }
public ToolsModule() { Get["/tools"] = x => { ToolsModel model = new ToolsModel(); return(View["tools", model]); }; }
public static object CreatePageLinks(ToolsModel toolsModel, int pageOffset = 0) { return(new { @Page = toolsModel.Page + pageOffset, @SortType = toolsModel.SortType, @Filter = toolsModel.Filter, @Search = toolsModel.Search, @Reversed = toolsModel.Reversed }); }
public static object CreateFilterLinks(ToolsModel toolsModel, string filter) { return(new { @Page = 1, @SortType = toolsModel.SortType, @Filter = filter, @Search = toolsModel.Search, @Reversed = toolsModel.Reversed }); }
public static object CreateSortLinks(ToolsModel toolsModel, string sortType, bool reversed) { return(new { @Page = toolsModel.Page, @SortType = sortType, @Filter = toolsModel.Filter, @Search = toolsModel.Search, @Reversed = reversed }); }
/// <summary> /// Создает папки на удаленом сервере /// Папки есть на локальном но нету на удаленом сервере /// </summary> /// <param name="md">Стандартные параметры которые есть в каждом методе Tools</param> /// <param name="ListRemoteDirectoryToName">Список папок на удаленном сервере (имена)</param> /// <param name="ListLocalDirectoryToName">Список папок на локальном сервере (имена)</param> /// <param name="CountCreateToDirectoryOK">Количиство успешно созданных папок</param> /// <param name="CountCreateToDirectoryAll">Общее количиство папок, которые нужно было создать</param> /// <param name="ListNewLocalFolders">Список новых папок - (обновляет список)</param> public static List <string> CreateToDirectory(ToolsModel md, List <string> ListRemoteDirectoryToName, List <string> ListLocalDirectoryToName, ref int CountCreateToDirectoryOK, ref int CountCreateToDirectoryAll, List <string> ListNewLocalFolders) { List <string> CreateFolders = new List <string>(); int CountCreateToDirectoryOKTmp = 0, CountCreateToDirectoryAllTmp = 0; // Считываем список папок на локальном сервере Parallel.ForEach(ListLocalDirectoryToName, new ParallelOptions { MaxDegreeOfParallelism = md.ActiveConnections }, LocalDirectoryName => { // Проверяем есть ли имя локальной папки на удаленом сервере if (!ListRemoteDirectoryToName.Contains(LocalDirectoryName)) { #region Создаем папку на сервере и обновляем NewListErrorLocalFolders // Создаем папку в папке 'RemoteFolders' на удаленом сервере if (md.serv.CreateDirectory($"{md.RemoteFolder}{LocalDirectoryName}")) { // Список созданных папок CreateFolders.Add($"{md.LocalFolder}{LocalDirectoryName} => {md.RemoteFolder}{LocalDirectoryName}"); CountCreateToDirectoryOKTmp++; } else { // Папка не создана, добовляем основную папку 'LocalFolders/LocalDirectoryName' в список папок с ошибкой синхронизации AddToListErrorLocalFolders($"{md.LocalFolder}{LocalDirectoryName}", ref md.NewListErrorLocalFolders); } #endregion // Сумируем общее количиство папок, которые нужно было создать CountCreateToDirectoryAllTmp++; // Добовляем новую папку в лист string NewFolder = $"{md.LocalFolder}{LocalDirectoryName}"; // Полный путь к локальной папке if (!ListNewLocalFolders.Exists(i => NewFolder.Contains(i))) // Если 'NewFolder' нету в списке новых папок { ListNewLocalFolders.Add(NewFolder); } } }); CountCreateToDirectoryOK += CountCreateToDirectoryOKTmp; CountCreateToDirectoryAll += CountCreateToDirectoryAllTmp; // Список созданных папок return(CreateFolders); }
public ToolsViewModel(ToolsModel theModel, IEventAggregator theEventAggregator, IRegionManager theManager, IUnityContainer theContainer) { Cursor = Cursors.Arrow; myCanExitApp = true; myEventAggregator = theEventAggregator; myRegionManager = theManager; myContainer = theContainer; myModel = theModel; AppExitCommand = new RelayCommand(CanExitApp, AppExitEvent); SettingsCommand = new RelayCommand(CanOpenSettings, OpenSettings); StopRecordCommand = new RelayCommand(CanStopRecording, StopRecording); StartRecordCommand = new RelayCommand(CanStartRecording, StartRecording); mySettingsView = myContainer.Resolve <SettingsView>(); IsSettingsEnabled = true; }
public ActionResult ReportDesign() { ToolsModel model = new ToolsModel(); List <ToolsModel> toolsList = new List <ToolsModel>(); List <ToolsModel> ReportNameList = new List <ToolsModel>(); List <ToolsModel> RoleNameList = new List <ToolsModel>(); actionResult = toolsAction.Data_Group(); if (actionResult.IsSuccess) { toolsList = (from DataRow row in actionResult.dtResult.Rows select new ToolsModel { GroupName = row["GroupName"] != DBNull.Value ? row["GroupName"].ToString() : "" }).ToList(); } model.toolsList = toolsList; actionResult = toolsAction.LoadReportNames_ReportDesigner(); if (actionResult.IsSuccess) { ReportNameList.Add(new ToolsModel { ReportID = 0, ReportName = "Select" }); ReportNameList = (from DataRow row in actionResult.dtResult.Rows select new ToolsModel { ReportID = row["ReportID"] != DBNull.Value ? Convert.ToInt32(row["ReportID"]) : 0, ReportName = row["ReportName"] != DBNull.Value ? row["ReportName"].ToString() : "" }).ToList(); } actionResult = toolsAction.SecurityFunctions_LoadAll(); if (actionResult.IsSuccess) { RoleNameList = (from DataRow row in actionResult.dtResult.Rows select new ToolsModel { RoleName = row["RoleName"] != DBNull.Value ? row["RoleName"].ToString() : "" }).ToList(); } model.RoleNameList = RoleNameList; model.toolsList = toolsList; model.ReportNameList = ReportNameList; return(View(model)); }
public static NewsPostAdminCollection GenerateNewsPostAdminCollection(ToolsModel model) { var adminService = AdminHelper.AdminService; var commentService = CommentHelper.CommentService; var businessModel = model.ConvertToOptions(); var newsPosts = NewsPostService.GetNewsPostsWithAdminTools(businessModel); var newsPostAdminViews = new List <NewsPostAdminView>(); foreach (NewsPost newsPost in newsPosts) { string newsPostAuthorName = adminService.GetAdmin(newsPost.AuthorId).Login; int commentCount = commentService.GetCommentCountByPostId(newsPost.Id); newsPostAdminViews.Add(new NewsPostAdminView(newsPost, newsPostAuthorName, commentCount)); } model.Pages = businessModel.Pages; return(new NewsPostAdminCollection(newsPostAdminViews, model)); }
public void SetSelected(ToolsModel e) { Attr.Template = null; switch (e) { case ClipModel clip: Attr.Template = ClipAttr; Attr.DataContext = e; break; case PenModel pen: Attr.Template = PenAttr; Attr.DataContext = e; break; case Pen9Model pen9: Attr.Template = Pen9Attr; Attr.DataContext = e; break; case TxEditModel text: Attr.Template = TextAttr; Attr.DataContext = e; break; case FillModel fill: Attr.Template = FillAttr; Attr.DataContext = e; break; case PickerModel pick: case BuckerModel buck: Attr.Template = PickAttr; Attr.DataContext = e; break; default: break; } }
/// <summary> /// Удаляем файлы которые не до конца загружены /// </summary> /// <param name="md">Стандартные параметры которые есть в каждом методе Tools</param> /// <param name="ListRemoteFiles">Список файлов на удаленом сервере</param> /// <param name="SyncRemoveFileAddExtension">Расширение для удаленого файла</param> public static void DeleteFilesToErrorUpload(ToolsModel md, ref List <FileModel> ListRemoteFiles, string SyncRemoveFileAddExtension) { // Список файлов которые нужно удалить из листа 'ListRemoteFiles' var ListRemoteFilesToDeleteItem = new List <FileModel>(); bool IsErrorSync = false; Parallel.ForEach(ListRemoteFiles, new ParallelOptions { MaxDegreeOfParallelism = md.ActiveConnections }, RemoteFile => { // Если у файла есть размер // Сравниваем имя файла с полученым размером, если размеры разные то удаляем файл if (RemoteFile.FileSize != -1 && !Regex.IsMatch(RemoteFile.Name, $"\\.{RemoteFile.FileSize}({SyncRemoveFileAddExtension})?$")) { // Удаляем файл на удаленом сервере if (md.serv.DeleteFile($"{md.RemoteFolder}{RemoteFile.Name}")) { // Заносим данные во временное хранилише 'ListRemoteFilesToDeleteItem' ListRemoteFilesToDeleteItem.Add(RemoteFile); } else { IsErrorSync = true; } } }); if (IsErrorSync) // Если была ошибка { AddToListErrorLocalFolders(md.LocalFolder, ref md.NewListErrorLocalFolders); // Добовляем папку в список папок с ошибкой синхронизаци } // Удаляем плохие файлы с листа foreach (var item in ListRemoteFilesToDeleteItem) { ListRemoteFiles.Remove(item); } }
public static NewsPostSimplifiedCollection GenerateNewsPostSimplifiedCollection(ToolsModel model) { var commentService = CommentHelper.CommentService; var businessModel = model.ConvertToOptions(); var newsPosts = NewsPostService.GetNewsPostsWithTools(businessModel); var newsPostSimplifiedViews = new List <NewsPostSimplifiedView>(); foreach (NewsPost newsPost in newsPosts) { int commentCount = commentService.GetCommentCountByPostId(newsPost.Id); newsPostSimplifiedViews.Add(new NewsPostSimplifiedView(newsPost, commentCount)); } model.Pages = businessModel.Pages; return(new NewsPostSimplifiedCollection(newsPostSimplifiedViews, model)); }
public AppController(ToolRentalSystemDBContext context) { _context = context; toolsModel = new ToolsModel(); }
public ActionResult Index(ToolsModel model) { NewsPostAdminCollection result = NewsPostHelper.GenerateNewsPostAdminCollection(model); return(View(result)); }
public NewsPostSimplifiedCollection(ICollection <NewsPostSimplifiedView> newsPostSimplifiedViews, ToolsModel toolBarModel) : base(toolBarModel) { NewsPostSimpliedViews = newsPostSimplifiedViews; Page++; }
public NewsPostAdminCollection(ICollection <NewsPostAdminView> newsPostAdminViews, ToolsModel toolBarModel) : base(toolBarModel) { NewsPostAdminViews = newsPostAdminViews; Page++; }
/// <summary> /// Сихронизация задания /// </summary> /// <param name="task">Задания</param> /// <param name="serv">Удаленный сервер</param> /// <param name="WorkNoteNotation">Текущее задание в WorkNote</param> /// <param name="NameAndValue">Колекция для ответа в журнал</param> /// <param name="IsOk">Выполнено задание или нет</param> private static void Sync(Task task, RemoteServer serv, Notation WorkNoteNotation, out List <More> NameAndValue, ref bool IsOk) { #region Ошибка подключения if (!serv.IsConnected) { NameAndValue = new List <More>() { new More("Состояние", $"Ошибка подключения к {task.TypeSunc.ToString()}") }; return; } #endregion try { #region Получаем список папок в которых были ошибки при синхронизации string PathSyncToErrorLocalFolder = $"{Folders.Sync}/tk-{task.Id}.ErrorLocalFolders.json"; var NewListErrorLocalFolders = new List <string>(); // Новый список папок с ошибкой синхронизации var oldListErrorLocalFolders = new List <string>(); // Текущий список папок с ошибкой синхронизации if (File.Exists(PathSyncToErrorLocalFolder)) { oldListErrorLocalFolders = JsonConvert.DeserializeObject <List <string> >(File.ReadAllText(PathSyncToErrorLocalFolder)); } #endregion #region Переменные // Список новых папок var ListNewLocalFolders = new List <string>(); // Время старта задания var TimeStartTask = DateTime.Now; // Количиство созданных папок и загруженых файлов int CountUploadToFilesOK = 0, CountUploadToFilesAll = 0, CountCreateToDirectoryOk = 0, CountCreateToDirectoryAll = 0; // Количиство провереных обьектов - (папок/файлов) int CountToCheckedObject = 0; // Общий размер переданых файлов в byte long CountUploadToBytes = 0; // Отчет созданных папок string ReportNameToCreateFolders = $"tk-{task.Id}_{DateTime.Now.ToString("dd-MM-yyy_HH-mm")}-{Generate.Passwd(6)}.folders.txt"; StreamWriter ReportToCreateFolders = new StreamWriter($"{Folders.ReportSync}/{ReportNameToCreateFolders}", false, Encoding.UTF8); // Отчет загруженных файлов string ReportNameToUploadFiles = $"tk-{task.Id}_{DateTime.Now.ToString("dd-MM-yyy_HH-mm")}-{Generate.Passwd(6)}.files.txt"; StreamWriter ReportToUploadFiles = new StreamWriter($"{Folders.ReportSync}/{ReportNameToUploadFiles}", false, Encoding.UTF8); #endregion // Получаем список всех папок foreach (var LocalFolder in SearchDirectory.Get(task.Whence)) { CountToCheckedObject++; // Если папка в списке игнорируемых папок if (task.IgnoreFileOrFolders.Exists(i => Regex.IsMatch(LocalFolder, i.Patch.Replace("\\", "/"), RegexOptions.IgnoreCase))) { continue; } // Проверяем папку, нужно ее синхронизировать или нет if (CacheLastWriteTimeToFiles(LocalFolder, task.CacheSync, ref CountToCheckedObject) || // Если дата изменения любого файла внутри папки LocalFolder выше чем CacheSync Directory.GetCreationTime(LocalFolder) > task.CacheSync || // Если дата создания папки выше CacheSync Directory.GetLastWriteTime(LocalFolder) > task.CacheSync || // Если дата изменения в папке выше CacheSync ListNewLocalFolders.Exists(i => LocalFolder.Contains(i)) || // Если эта папка является новой, нужно сихронизировать все включая все подпапки в ней oldListErrorLocalFolders.Exists(i => LocalFolder == i)) // Список папок в котрых в прошлый раз была ошибка при синхронизации { #region Переменные // Количиство потоков int ActiveConnections = 1; switch (task.TypeSunc) { case TypeSunc.OneDrive: ActiveConnections = 10; break; case TypeSunc.SFTP: ActiveConnections = task.FTP.ActiveConnections; break; } // Расширения файлов и папок string SyncRemoveFileAddExtension = ".remove"; string SyncRemoveFoldersExtension = $".SyncRemove.{DateTime.Now.ToBinary()}"; #endregion #region Локальный метод - "GetRemoteFolder" string GetRemoteFolder() { // Удаленный каталог string where = Tools.ConvertPatchToUnix(task.Where); // Локальный каталог string whence = Tools.ConvertPatchToUnix(task.Whence); // Результат return(LocalFolder.Replace(whence, where)); } #endregion // Папка на удаленном сервере Linux string RemoteFolder = GetRemoteFolder(); // Создаем папку на удаленом сервере serv.CreateDirectory(RemoteFolder, NotReport: true); // Список файлов и папок var ListRemoteServer = serv.ListDirectoryAndFiles(RemoteFolder); var ListLocalDirectoryToName = Directory.GetDirectories(LocalFolder, "*", SearchOption.TopDirectoryOnly).Select(i => Path.GetFileName(i)).ToList(); var ListLocalFilesToName = Directory.GetFiles(LocalFolder, "*", SearchOption.TopDirectoryOnly). Where(dir => !task.IgnoreFileOrFolders.Exists(i => Regex.IsMatch(dir, i.Patch, RegexOptions.IgnoreCase))). Select(dir => Path.GetFileName(dir)).ToList(); // Модель Tools ToolsModel md = new ToolsModel() { serv = serv, ActiveConnections = ActiveConnections, LocalFolder = LocalFolder, RemoteFolder = RemoteFolder, NewListErrorLocalFolders = NewListErrorLocalFolders }; // Переименовывем папки в 'SyncRemoveFoldersExtension' на удаленом сервере - (если их нету на локальном) Tools.RenameToRemoveDirectory(md, ListRemoteServer.Directory, SyncRemoveFoldersExtension); // Переименовывем файлы в 'SyncRemoveFileAddExtension' на удаленом сервере - (если их нету на локальном) Tools.RenameToRemoveFiles(md, ListRemoteServer.Files, SyncRemoveFileAddExtension); // Создаем папки на удаленом сервере - (папки есть на локальном но нету на удаленом сервере) foreach (string createFolder in Tools.CreateToDirectory(md, ListRemoteServer.Directory, ListLocalDirectoryToName, ref CountCreateToDirectoryOk, ref CountCreateToDirectoryAll, ListNewLocalFolders)) { // Сохраняем список созданных папок ReportToCreateFolders.WriteLine(createFolder); } // Удаляем файлы которые не до конца загружены Tools.DeleteFilesToErrorUpload(md, ref ListRemoteServer.Files, SyncRemoveFileAddExtension); // Загружаем файлы на удаленный сервер - (если файла нету на сервере) foreach (string uploadFile in Tools.UploadToFiles(md, ListRemoteServer.Files, ListLocalFilesToName, task.EncryptionAES, task.PasswdAES, ref CountUploadToFilesOK, ref CountUploadToFilesAll, ref CountUploadToBytes)) { // Сохраняем список загруженных файлов ReportToUploadFiles.WriteLine(uploadFile); } #region Очистка старых бекапов if (task.CountActiveBackup >= 1) { if (task.CountActiveBackup == 1) { // Удаляем все папки и файлы с пометкй "SyncRemoveFoldersExtension или SyncRemoveFoldersExtension" Tools.DeleteFilesOrDirectoryToRemove(md); } // Удаляем старые бекапы Tools.DeleteFilesToActiveBackup(md, task.CountActiveBackup); } // Удаляем старые по времени бекапы if (task.CountActiveDayBackup > 0) { Tools.DeleteFilesToActiveDayBackup(md, task.CountActiveDayBackup); } #endregion #region Обновляем WorkNote WorkNoteNotation.More = new List <More> { new More("Состояние", $"Выполняется {GetToWorkTime("")}"), new More("Проверено объектов", $"{CountToCheckedObject:N0}") }; if (CountUploadToFilesOK > 0) { WorkNoteNotation.More.Add(new More("Передано данных", ToSize(CountUploadToBytes))); WorkNoteNotation.More.Add(new More("Загружено файлов", $"{CountUploadToFilesOK:N0}")); } if (CountCreateToDirectoryOk > 0) { WorkNoteNotation.More.Add(new More("Создано папок", $"{CountCreateToDirectoryOk:N0}")); } #endregion } } // Закрываем потоки ReportToCreateFolders.Dispose(); ReportToUploadFiles.Dispose(); // Сохраняем новый список папок с ошибками, вместо старого File.WriteAllText(PathSyncToErrorLocalFolder, JsonConvert.SerializeObject(NewListErrorLocalFolders)); #region Локальный метод GetToWorkTime string GetToWorkTime(string arg) { var WorkTime = (DateTime.Now - TimeStartTask); if (WorkTime.TotalSeconds <= 60) { return(""); } if (WorkTime.TotalMinutes <= 60) { return($"{arg}{(int)WorkTime.TotalMinutes} {EndOfText.get("минуту", "минуты", "минут", (int)WorkTime.TotalMinutes)}"); } return($"{arg}{(int)WorkTime.TotalHours} {EndOfText.get("час", "часа", "часов", (int)WorkTime.TotalHours)}"); } #endregion #region Локальный метод ToSize string ToSize(double bytes) { string[] Suffix = { "Byte", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; int index = 0; while (bytes >= 1024) { bytes /= 1024; index++; } return($"{bytes:N3} {Suffix[index]}"); } #endregion #region Выполнено NameAndValue = new List <More>() { new More("Состояние", $"Выполнено {GetToWorkTime("за ")}"), new More("Проверено объектов", $"{CountToCheckedObject:N0}") }; if (CountCreateToDirectoryAll > 0) { NameAndValue.Add(new More("Создано папок", $"<a href='/reports/sync/{ReportNameToCreateFolders}' target='_blank'>{CountCreateToDirectoryOk:N0} из {CountCreateToDirectoryAll:N0}</a>")); } if (CountUploadToFilesAll > 0) { NameAndValue.Add(new More("Загружено файлов", $"<a href='/reports/sync/{ReportNameToUploadFiles}' target='_blank'>{CountUploadToFilesOK:N0} из {CountUploadToFilesAll:N0}</a>")); NameAndValue.Add(new More("Передано данных", ToSize(CountUploadToBytes))); } #endregion IsOk = true; } catch (Exception ex) { NameAndValue = new List <More>() { new More("Состояние", "Ошибка при выполнении задания"), new More("Код", ex.ToString()) }; } // Отключаемся от сервера serv.Disconnect(); }
public ActionResult Index(ToolsModel model) { var newsPostSimplifiedCollection = NewsPostHelper.GenerateNewsPostSimplifiedCollection(model); return(View(newsPostSimplifiedCollection)); }