Exemplo n.º 1
0
        public static void Main()
        {
            var progWatch = Stopwatch.StartNew();

            try
            {
                var appConfig = ConfigurationManager.AppSettings;
                XmlConfigurator.Configure();

                // Строка соединения с БД.
                var сonnectionString = appConfig["connStr"];

                // Сущности.
                var entities = appConfig["entities"].Split(',');

                var webDavProvider = new WebDavProvider(appConfig["serverUrl"], appConfig["nextCloudUserName"],
                                                        appConfig["nextCloudPassword"]);
                var folderService = new FolderService(webDavProvider);
                var dbConnection  = new SqlConnection(сonnectionString);
                var fileService   = new FileService(webDavProvider);
                var dbService     = new DBService(dbConnection);

                Utils.LogInfoAndWriteToConsole("Приложение стартовало.");

                var allFolders = new HashSet <string>();
                foreach (var entity in entities)
                {
                    var from                 = int.Parse(appConfig["fromNumber"]);
                    var totalFiles           = dbService.GetFilesCount(entity, from.ToString());
                    var entityFilesTotalSize = 0;
                    if (totalFiles < from)
                    {
                        totalFiles = from + 1;
                    }
                    while (from < totalFiles)
                    {
                        Utils.LogInfoAndWriteToConsole($"Получаем файлы {entity}File из БД");
                        var watch    = Stopwatch.StartNew();
                        var fileList = dbService.GetFilesFromDb(entity, from.ToString()).ToList();
                        watch.Stop();
                        if (fileList.Count > 0)
                        {
                            Utils.LogInfoAndWriteToConsole($"[ Получено {fileList.Count.ToString()} файлов {entity}File за {watch.Elapsed.Hours.ToString()} ч {watch.Elapsed.Minutes.ToString()} м {watch.Elapsed.Seconds.ToString()} с {watch.Elapsed.Milliseconds.ToString()} мс ]");
                            fileList.ToList().ForEach(file => entityFilesTotalSize += file.Data.Length);
                            var folders           = FillFolderList(fileList).ToList();
                            var notCreatedFolders = folders.Where(folder => !allFolders.Contains(folder)).ToList();
                            CreateFoldersAndUploadFiles(fileService, folderService, notCreatedFolders, fileList).Wait();
                            folders.ForEach(folder => allFolders.Add(folder));
                            from = fileList[fileList.Count - 1].Number + 1;
                        }
                        else
                        {
                            Utils.LogInfoAndWriteToConsole($"[ Получено 0 файлов {entity}File ]");
                            break;
                        }
                    }
                    Utils.LogInfoAndWriteToConsole($">>> Файлы {entity}File успешно выгружены <<<");
                    Utils.LogInfoAndWriteToConsole($">>> Объем выгруженных файлов {entity}File: {entityFilesTotalSize / 1024.0:####0.######} КБ ({entityFilesTotalSize / (1024.0 * 1024.0):####0.######} МБ) <<<");
                }
                progWatch.Stop();
                Utils.LogInfoAndWriteToConsole($"Приложение успешно завершило работу за {progWatch.Elapsed.Hours.ToString()} ч {progWatch.Elapsed.Minutes.ToString()} м {progWatch.Elapsed.Seconds.ToString()} с {progWatch.Elapsed.Milliseconds.ToString()} мс");
            }
            catch (Exception ex)
            {
                Utils.LogInfoAndWriteToConsole("Приложение завершило работу с ошибкой.");
                ExceptionHandler.LogExceptionToConsole(ex);
            }
        }
Exemplo n.º 2
0
 public FileService(WebDavProvider webDavProvider)
 {
     _webDavProvider = webDavProvider;
 }
Exemplo n.º 3
0
 public FolderService(WebDavProvider webDavProvider)
 {
     _webDavProvider = webDavProvider;
 }