public async Task <ActionResult> InitialExport(string courseId, int stepikCourseId, string newLessonsSlidesIds, string xQueueName, string uploadVideo) { var returnUrl = Url.Action("InitialExportOptions", "Stepik", new { courseId = courseId, stepikCourseId = stepikCourseId }); /* TODO (andgein): following 4 lines are copy-paste*/ var oauthAuthorizationUrl = OAuth.GetAuthorizationUrl(stepikClientId, GetStepikOAuthRedirectUri(), OAuth.EncryptState(returnUrl)); var client = await GetAuthenticatedStepikApiClient(); if (client == null) { return(Redirect(oauthAuthorizationUrl)); } var exporter = new CourseExporter(client.AccessToken); var course = courseManager.GetCourse(courseId); var exportOptions = new CourseInitialExportOptions(stepikCourseId, xQueueName, ConvertStringToGuidList(newLessonsSlidesIds).ToList()) { VideoUploadOptions = (UploadVideoToStepikOption)Enum.Parse(typeof(UploadVideoToStepikOption), uploadVideo) }; var thread = new Thread(async() => await DoInitialExport(exporter, course, exportOptions)); thread.Start(); return(View("ExportStarted", course)); }
public async Task SetUp() { Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); await InitializeClient(); courseExporter = new CourseExporter(client.AccessToken); }
public async Task <ActionResult> UpdateCourse(string courseId, int stepikCourseId, string updateSlidesIds, string xQueueName, string uploadVideo) { var exportSlideAfterKey = "stepik__course-update__export-slide-after__"; var returnUrl = Url.Action("UpdateOptions", "Stepik", new { courseId = courseId, stepikCourseId = stepikCourseId }); /* TODO (andgein): following 4 lines are copy-paste*/ var oauthAuthorizationUrl = OAuth.GetAuthorizationUrl(stepikClientId, GetStepikOAuthRedirectUri(), OAuth.EncryptState(returnUrl)); var client = await GetAuthenticatedStepikApiClient(); if (client == null) { return(Redirect(oauthAuthorizationUrl)); } var exporter = new CourseExporter(client.AccessToken); var course = courseManager.GetCourse(courseId); var updateSlidesGuids = ConvertStringToGuidList(updateSlidesIds).ToList(); var slidesUpdateOptions = new List <SlideUpdateOptions>(); foreach (var slideId in updateSlidesGuids) { var stepsIdsForSlide = stepikRepo.GetStepsExportedFromSlide(courseId, stepikCourseId, slideId) .Select(m => m.StepId) .ToList(); var insertSlideAfterStepId = int.Parse(Request.Form[exportSlideAfterKey + slideId.GetNormalizedGuid()]); slidesUpdateOptions.Add(new SlideUpdateOptions(slideId, insertSlideAfterStepId, stepsIdsForSlide)); } var updateOptions = new CourseUpdateOptions( stepikCourseId, xQueueName, slidesUpdateOptions, new List <Guid>() ) { VideoUploadOptions = (UploadVideoToStepikOption)Enum.Parse(typeof(UploadVideoToStepikOption), uploadVideo) }; var thread = new Thread(async() => await DoUpdateCourse(exporter, course, updateOptions)); thread.Start(); return(View("UpdateStarted", course)); }
private async Task DoExport(CourseExporter exporter, Course course, CourseExportOptions options, bool isInitialExport) { var process = await stepikRepo.AddExportProcess(course.Id, options.StepikCourseId, User.Identity.GetUserId(), isInitialExport); CourseExportResults exportResults; if (isInitialExport) { exportResults = await exporter.InitialExportCourse(course, (CourseInitialExportOptions)options); } else { exportResults = await exporter.UpdateCourse(course, (CourseUpdateOptions)options); } process.StepikCourseTitle = exportResults.StepikCourseTitle; await UpdateMapInfoAboutExportedSlides(course, exportResults); await stepikRepo.MarkExportProcessAsFinished(process, exportResults.Exception == null, (exportResults.Exception?.ToString() ?? "") + exportResults.Log); await notificationsRepo.AddNotification(course.Id, new CourseExportedToStepikNotification { ProcessId = process.Id }, usersRepo.GetUlearnBotUserId()); }
private Task DoUpdateCourse(CourseExporter exporter, Course course, CourseUpdateOptions updateOptions) { return(DoExport(exporter, course, updateOptions, false)); }
private Task DoInitialExport(CourseExporter exporter, Course course, CourseInitialExportOptions exportOptions) { return(DoExport(exporter, course, exportOptions, true)); }