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); }
private static void SetupCourseId() { var courseId = config.CourseIds.GetOrDefault(config.Path); if (!string.IsNullOrEmpty(courseId)) { return; } courseId = ConsoleWorker.GetCourseId(); config.CourseIds[config.Path] = courseId; }
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); } }
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); }
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); }
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(); }
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("Ошибка. Подробнее в логах"); } }