Esempio n. 1
0
        private static async Task <bool> TempCourseExist(string userId)
        {
            var tempCourseId  = GetTmpCourseId(config.CourseId, userId);
            var hasTempCourse = await ulearnApiClient.HasCourse(tempCourseId);

            if (hasTempCourse)
            {
                ConsoleWorker.WriteLine($"Обнаружен существующий временный курс с id {tempCourseId}");
            }

            return(hasTempCourse);
        }
Esempio n. 2
0
        private static void SetupCourseId()
        {
            var courseId = config.CourseIds.GetOrDefault(config.Path);

            if (!string.IsNullOrEmpty(courseId))
            {
                return;
            }

            courseId = ConsoleWorker.GetCourseId();
            config.CourseIds[config.Path] = courseId;
        }
Esempio n. 3
0
        private static async Task SendFullCourse()
        {
            var tempCourseUpdateResponse = await ulearnApiClient.SendFullCourse(config.Path, config.CourseId, config.ExcludeCriterias);

            if (tempCourseUpdateResponse.ErrorType == ErrorType.NoErrors)
            {
                ConsoleWorker.WriteLine("Первоначальная полная загрузка курса прошла успешно");
                ConsoleWorker.WriteLine("Не закрывайте программу и редактируйте файлы курса у себя на компьютере. Сделанные изменения будут автоматически загружаться на ulearn. Перезагрузите страницу браузера, чтоб увидеть результат");
            }
            else
            {
                throw new CourseLoadingException(tempCourseUpdateResponse.Message);
            }
        }
Esempio n. 4
0
        private static async Task <bool> CreateCourse()
        {
            var createResponse = await ulearnApiClient.CreateCourse(config.CourseId);

            if (createResponse.ErrorType != ErrorType.NoErrors)
            {
                ConsoleWorker.WriteError(createResponse.Message);
            }
            else
            {
                ConsoleWorker.WriteLine(createResponse.Message);
            }

            return(createResponse.ErrorType == ErrorType.NoErrors);
        }
Esempio n. 5
0
        private static async Task <string> Login()
        {
            var shortUserInfo = await container.Resolve <ILoginAgent>().SignIn();

            if (shortUserInfo != null)
            {
                ConsoleWorker.WriteLine($"Вы вошли на {config.SiteUrl} под пользователем {shortUserInfo.Login}");
            }
            else
            {
                ConsoleWorker.WriteError("Неправильный логин или пароль");
            }

            return(shortUserInfo?.Id);
        }
Esempio n. 6
0
        private static async Task Startup()
        {
            if (!File.Exists("course.xml"))
            {
                ConsoleWorker.WriteLine("В текущей папке нет course.xml. Запустите программу в папке курса с course.xml");
                return;
            }

            if (File.Exists(Path.Combine(config.Path, "deleted.txt")))
            {
                ConsoleWorker.WriteError("В корне курса находится файл deleted.txt Программа не будет корректно работать, переименуйте его");
                return;
            }

            var userId = await Login();

            if (userId == null)
            {
                return;
            }

            SetupCourseId();
            var tempCourseForUserExist = await TempCourseExist(userId);

            if (!tempCourseForUserExist)
            {
                if (!await CreateCourse())
                {
                    return;
                }
            }
            config.Flush();

            config.ExcludeCriterias = ReadCourseConfig()?.CourseToolHotReloader?.ExcludeCriterias ?? new List <string> {
                "bin/", "obj/", ".vs/", ".idea/", ".git/", "_ReSharper.Caches/"
            };

            await SendFullCourse();

            var tempCourseId = GetTmpCourseId(config.CourseId, userId);

            OpenInBrowser(tempCourseId);

            StartWatch();
        }
Esempio n. 7
0
        private static void Main()
        {
            try
            {
                Init();
                Startup().Wait();
            }
            catch (AggregateException e)
            {
                log.Error(e, "Root error");
                switch (e.InnerExceptions.Single())
                {
                case UriFormatException _:
                    ConsoleWorker.WriteError("Указанный в config.json baseUrl имеет некорректный формат");
                    break;

                case HttpRequestException ee when ee.InnerException is SocketException:
                    ConsoleWorker.WriteError($"Не удалось подключиться к {config.ApiUrl}");
                    break;

                case HttpRequestException ee when ee.InnerException is IOException && ee.Message.Contains("SSL"):
                    ConsoleWorker.WriteError($"Не удалось использовать https при подключении к {config.ApiUrl}");
                    break;

                case IOException _:
                    ConsoleWorker.WriteError("Ошибка ввода-вывода. Подробнее в логах");
                    break;

                case InternalServerErrorException _:
                    ConsoleWorker.WriteError("Сервер вернул код 500. Это похоже на баг. Подробнее в логах");
                    break;

                case ForbiddenException _:
                    ConsoleWorker.WriteError("Сервер вернул код 403. Нет прав на операцию. Перезапустите программу и войдите повторно");
                    config.JwtToken = null;
                    config.Flush();
                    break;

                case UnauthorizedException _:
                    ConsoleWorker.WriteError("Сервер вернул код 401. Срок авторизации истек. Перезапустите программу и войдите повторно");
                    config.JwtToken = null;
                    config.Flush();
                    break;

                case StatusCodeException ee:
                    ConsoleWorker.WriteError($"Сервер вернул код {ee.StatusCode}");
                    break;

                case HttpRequestException _:
                    ConsoleWorker.WriteError(e.Message);
                    break;

                case CourseLoadingException _:
                    ConsoleWorker.WriteError(e.Message);
                    break;

                default:
                    ConsoleWorker.WriteError("Ошибка. Подробнее в логах");
                    break;
                }
            }
            catch (Exception e)
            {
                log.Error(e, "Root error");
                ConsoleWorker.WriteError("Ошибка. Подробнее в логах");
            }
        }