public ActionResult TryRun(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var item = DbContext.Current.GetBackupTasks().Find(s => s.Id == id);

            if (item == null)
            {
                return(HttpNotFound());
            }
            Dictionary <string, Tuple <bool, string> > v = new Dictionary <string, Tuple <bool, string> >();

            var connection = DbContext.Current.GetServerConnections().FirstOrDefault(s => s.Id == item.ConnectionId);

            if (connection == null)
            {
                v.Add("ValidateConnectionId", new Tuple <bool, string>(false, "Не выполнено!"));
            }
            else
            {
                v.Add("ValidateConnectionId", new Tuple <bool, string>(true, "Выполнено!"));

                string cnnString = ServerConnection.BuildConnectionString(connection);
                if (ServerConnection.TryConnect(cnnString))
                {
                    v.Add("ValidateConnectionCanConnect", new Tuple <bool, string>(true, "Выполнено!"));
                }
                else
                {
                    v.Add("ValidateConnectionCanConnect", new Tuple <bool, string>(false, "Не выполнено!"));
                }

                var drive = DbContext.Current.GetCloudDrives().FirstOrDefault(s => s.Id == item.CloudDriveId);
                if (drive != null)
                {
                    if (drive.Provider == CloudDrive.PROVIDER_FILESYSTEM)
                    {
                        v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "Выполнено!"));

                        if (string.IsNullOrEmpty(drive.Location))
                        {
                            drive.Location = AppConfig.DefaultBackupLocation;
                        }
                        // проверка доступности файловой системы
                        if (!Directory.Exists(drive.Location))
                        {
                            Directory.CreateDirectory(drive.Location);
                        }
                        v.Add("ValidateCloudDriveCanConnect", new Tuple <bool, string>(true, "Выполнено!"));
                        BackupToFileSystem(id, item, drive, cnnString, v);
                        if (v.Keys.Contains("CreateBackupDone"))
                        {
                            if (v["CreateBackupDone"].Item1)
                            {
                                item.LastRun    = DateTime.Now;
                                item.LastStatus = v["CreateBackupDone"].Item2;
                                DbContext.Current.Save(item);
                            }
                        }
                    }
                    else if (drive.Provider == CloudDrive.PROVIDER_BACKUPDEVICE)
                    {
                        v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "Выполнено!"));

                        // проверка доступности устройства резервного копирования
                        v.Add("ValidateCloudDriveCanConnect", new Tuple <bool, string>(true, "Выполнено!"));
                        BackupToSqlDevice(id, item, drive, cnnString, v);
                        if (v.Keys.Contains("CreateBackupDone"))
                        {
                            if (v["CreateBackupDone"].Item1)
                            {
                                item.LastRun    = DateTime.Now;
                                item.LastStatus = v["CreateBackupDone"].Item2;
                                DbContext.Current.Save(item);
                            }
                        }
                    }
                    else if (drive.Provider == CloudDrive.PROVIDER_MEGA)
                    {
                        // проверка доступности устройства резервного копирования
                        string msg = string.Empty;
                        if (CloudDataApi.TestMegaCloud(drive, out msg))
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "Выполнено!"));
                            string fileToTransfer = string.Empty;
                            BackupToDefaultFileSystem(id, item, cnnString, v, out fileToTransfer);
                            if (v.Keys.Contains("CreateBackupDone"))
                            {
                                if (v["CreateBackupDone"].Item1)
                                {
                                    item.LastRun    = DateTime.Now;
                                    item.LastStatus = v["CreateBackupDone"].Item2;
                                    DbContext.Current.Save(item);

                                    if (CloudDataApi.UploadToMegaCloud(drive, fileToTransfer, out msg))
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(true, "Выполнено! Файл доступен по ссылке:" + msg));
                                        //удаляем исходный файл
                                        try
                                        {
                                            System.IO.File.Delete(fileToTransfer);
                                        }
                                        catch (Exception e)
                                        {
                                        }
                                    }
                                    else
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(false, msg));
                                    }
                                }
                            }
                        }
                        else
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, msg));
                        }
                    }
                    else if (drive.Provider == CloudDrive.PROVIDER_MAILRU)
                    {
                        // проверка доступности устройства резервного копирования
                        string msg = string.Empty;
                        if (CloudDataApi.TestMailRuCloud(drive, out msg))
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "Выполнено!"));
                            string fileToTransfer = string.Empty;
                            BackupToDefaultFileSystem(id, item, cnnString, v, out fileToTransfer);
                            if (v.Keys.Contains("CreateBackupDone"))
                            {
                                if (v["CreateBackupDone"].Item1)
                                {
                                    item.LastRun    = DateTime.Now;
                                    item.LastStatus = v["CreateBackupDone"].Item2;
                                    DbContext.Current.Save(item);

                                    if (CloudDataApi.UploadToMailRuCloud(drive, fileToTransfer, out msg))
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(true, "Выполнено! Файл доступен по ссылке:" + msg));
                                        //удаляем исходный файл
                                        try
                                        {
                                            System.IO.File.Delete(fileToTransfer);
                                        }
                                        catch (Exception e)
                                        {
                                        }
                                    }
                                    else
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(false, msg));
                                    }
                                }
                            }
                        }
                        else
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, msg));
                        }
                    }
                    else if (drive.Provider == CloudDrive.PROVIDER_PCLOUD)
                    {
                        // проверка доступности устройства резервного копирования
                        string msg = string.Empty;
                        if (CloudDataApi.TestPCloud(drive, out msg))
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "Выполнено!"));
                            string fileToTransfer = string.Empty;
                            BackupToDefaultFileSystem(id, item, cnnString, v, out fileToTransfer);
                            if (v.Keys.Contains("CreateBackupDone"))
                            {
                                if (v["CreateBackupDone"].Item1)
                                {
                                    item.LastRun    = DateTime.Now;
                                    item.LastStatus = v["CreateBackupDone"].Item2;
                                    DbContext.Current.Save(item);

                                    if (CloudDataApi.UploadToPCloud(drive, fileToTransfer, out msg))
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(true, "Выполнено! " + msg));
                                        //удаляем исходный файл
                                        try
                                        {
                                            System.IO.File.Delete(fileToTransfer);
                                        }
                                        catch (Exception e)
                                        {
                                        }
                                    }
                                    else
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(false, msg));
                                    }
                                }
                            }
                        }
                        else
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, msg));
                        }
                    }
                    else if (drive.Provider == CloudDrive.PROVIDER_B2CLOUD)
                    {
                        // проверка доступности устройства резервного копирования
                        string msg = string.Empty;
                        if (CloudDataApi.TestB2Cloud(drive, out msg))
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "Выполнено!"));
                            string fileToTransfer = string.Empty;
                            BackupToDefaultFileSystem(id, item, cnnString, v, out fileToTransfer);
                            if (v.Keys.Contains("CreateBackupDone"))
                            {
                                if (v["CreateBackupDone"].Item1)
                                {
                                    item.LastRun    = DateTime.Now;
                                    item.LastStatus = v["CreateBackupDone"].Item2;
                                    DbContext.Current.Save(item);

                                    if (CloudDataApi.UploadToB2Cloud(drive, fileToTransfer, out msg))
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(true, "Выполнено! " + msg));
                                        //удаляем исходный файл
                                        try
                                        {
                                            System.IO.File.Delete(fileToTransfer);
                                        }
                                        catch (Exception e)
                                        {
                                        }
                                    }
                                    else
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(false, msg));
                                    }
                                }
                            }
                        }
                        else
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, msg));
                        }
                    }
                    else if (drive.Provider == CloudDrive.PROVIDER_YANDEXDISK)
                    {
                        // проверка доступности устройства резервного копирования
                        string msg = string.Empty;
                        if (CloudDataApi.TestYandexCloud(drive, out msg))
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "Выполнено!"));
                            string fileToTransfer = string.Empty;
                            BackupToDefaultFileSystem(id, item, cnnString, v, out fileToTransfer);
                            if (v.Keys.Contains("CreateBackupDone"))
                            {
                                if (v["CreateBackupDone"].Item1)
                                {
                                    item.LastRun    = DateTime.Now;
                                    item.LastStatus = v["CreateBackupDone"].Item2;
                                    DbContext.Current.Save(item);

                                    if (CloudDataApi.UploadToYandexCloud(drive, fileToTransfer, out msg))
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(true, "Выполнено! " + msg));
                                        //удаляем исходный файл
                                        try
                                        {
                                            System.IO.File.Delete(fileToTransfer);
                                        }
                                        catch (Exception e)
                                        {
                                        }
                                    }
                                    else
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(false, msg));
                                    }
                                }
                            }
                        }
                        else
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, msg));
                        }
                    }
                    else if (drive.Provider == CloudDrive.PROVIDER_GOOGLEDRIVE)
                    {
                        // проверка доступности устройства резервного копирования
                        string msg = string.Empty;
                        if (CloudDataApi.TestGoogleCloud(drive, out msg))
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "Выполнено!"));
                            string fileToTransfer = string.Empty;
                            BackupToDefaultFileSystem(id, item, cnnString, v, out fileToTransfer);
                            if (v.Keys.Contains("CreateBackupDone"))
                            {
                                if (v["CreateBackupDone"].Item1)
                                {
                                    item.LastRun    = DateTime.Now;
                                    item.LastStatus = v["CreateBackupDone"].Item2;
                                    DbContext.Current.Save(item);

                                    if (CloudDataApi.UploadToGoogleCloud(drive, fileToTransfer, out msg))
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(true, "Выполнено! " + msg));
                                        //удаляем исходный файл
                                        try
                                        {
                                            System.IO.File.Delete(fileToTransfer);
                                            v.Add("RemoveCurrentBackupFile", new Tuple <bool, string>(true, "Выполнено!"));
                                        }
                                        catch (Exception e)
                                        {
                                            v.Add("RemoveCurrentBackupFile", new Tuple <bool, string>(false, "Не выполнено! " + msg));
                                        }
                                    }
                                    else
                                    {
                                        v.Add("TranferToCloudDriveId", new Tuple <bool, string>(false, msg));
                                    }
                                }
                            }
                        }
                        else
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, msg));
                        }
                    }
                    else // неизвесный провайдер????
                    {
                        v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, "Не выполнено! Неизвестный и не поддерживаемый провайдер."));
                    }
                }
                else
                {
                    v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, "Не выполнено!"));
                    v.Add("ValidateCloudDriveCanConnect", new Tuple <bool, string>(false, "Не выполнено!"));
                }
            }
            var allModels = new Tuple <ModelBackupTaskViewDetail, Dictionary <string, Tuple <bool, string> > >
                                (ModelHelper.GetDetailModel(item), v);

            return(View(allModels));
        }
        public ActionResult TryValidate(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var item = DbContext.Current.GetBackupTasks().Find(s => s.Id == id);

            if (item == null)
            {
                return(HttpNotFound());
            }

            Dictionary <string, Tuple <bool, string> > v = new Dictionary <string, Tuple <bool, string> >();

            v.Add("ValidateConnectionId", new Tuple <bool, string>(true, "Выполнено!"));

            if (!string.IsNullOrEmpty(item.CloudDriveId))
            {
                CloudDrive drive = DbContext.Current.GetCloudDrives().FirstOrDefault(s => s.Id == item.CloudDriveId);
                if (drive != null)
                {
                    if (drive.Provider == CloudDrive.PROVIDER_MEGA)
                    {
                        string msg = string.Empty;
                        if (CloudDataApi.TestMegaCloud(drive, out msg))
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "Выполнено!"));
                        }
                        else
                        {
                            v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, msg));
                        }
                    }
                    else if (drive.Provider == CloudDrive.PROVIDER_BACKUPDEVICE)
                    {
                        v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "Выполнено!"));
                    }
                    else if (drive.Provider == CloudDrive.PROVIDER_FILESYSTEM)
                    {
                        v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "В разработке!"));
                    }
                    else if (drive.Provider == CloudDrive.PROVIDER_GOOGLEDRIVE)
                    {
                        v.Add("ValidateCloudDriveId", new Tuple <bool, string>(true, "В разработке!"));
                    }
                    else
                    {
                        v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, "Не поддерживаемый провайдер!"));
                    }
                }
                else
                {
                    v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, "Не найдено место хранения!"));
                }
            }
            else
            {
                v.Add("ValidateCloudDriveId", new Tuple <bool, string>(false, "Не указано место хранения!"));
            }


            v.Add("ValidateCloudDriveCanConnect", new Tuple <bool, string>(true, "Выполнено!"));
            v.Add("ValidateConnectionCanConnect", new Tuple <bool, string>(true, "Выполнено!"));


            var allModels = new Tuple <ModelBackupTaskViewDetail, Dictionary <string, Tuple <bool, string> > >
                                (ModelHelper.GetDetailModel(item), v);

            return(View(allModels));
        }