Esempio n. 1
0
        private List <TempCourse> GetTempCoursesWithCache()
        {
            if (tempCoursesCache != null && new DateTime(tempCoursesCacheUpdateTime) > DateTime.Now.Subtract(tempCoursesCacheUpdateEvery))
            {
                return(tempCoursesCache);
            }
            Interlocked.Exchange(ref tempCoursesCacheUpdateTime, DateTime.Now.Ticks);

            var tempCoursesRepo = new TempCoursesRepo();

            tempCoursesCache = tempCoursesRepo.GetTempCoursesNoTracking();
            return(tempCoursesCache);
        }
Esempio n. 2
0
        public AccountController()
        {
            userRolesRepo      = new UserRolesRepo(db);
            groupsRepo         = new GroupsRepo(db, courseManager);
            certificatesRepo   = new CertificatesRepo(db);
            visitsRepo         = new VisitsRepo(db);
            notificationsRepo  = new NotificationsRepo(db);
            coursesRepo        = new CoursesRepo(db);
            systemAccessesRepo = new SystemAccessesRepo(db);
            tempCoursesRepo    = new TempCoursesRepo(db);
            slideCheckingsRepo = new SlideCheckingsRepo(db);

            telegramSecret = WebConfigurationManager.AppSettings["ulearn.telegram.webhook.secret"] ?? "";
        }
Esempio n. 3
0
 public CourseController()
 {
     slideCheckingsRepo = new SlideCheckingsRepo(db);
     visitsRepo         = new VisitsRepo(db);
     unitsRepo          = new UnitsRepo(db);
     slideRateRepo      = new SlideRateRepo(db);
     solutionsRepo      = new UserSolutionsRepo(db, courseManager);
     ltiRequestsRepo    = new LtiRequestsRepo(db);
     groupsRepo         = new GroupsRepo(db, courseManager);
     userQuizzesRepo    = new UserQuizzesRepo(db);
     coursesRepo        = new CoursesRepo(db);
     tempCoursesRepo    = new TempCoursesRepo(db);
     userRolesRepo      = new UserRolesRepo(db);
 }
Esempio n. 4
0
        private void TryCheckTempCoursesAndReloadIfNecessary(string courseIdToUpdate = null)
        {
            try
            {
                if (new DateTime(tempCoursesUpdateTime) > DateTime.Now.Subtract(tempCourseUpdateEvery))
                {
                    return;
                }
                if (courseIdToUpdate != null && IsTempCourseUpdatedRecent(courseIdToUpdate))
                {
                    return;
                }
                if (courseIdToUpdate == null)
                {
                    Interlocked.Exchange(ref tempCoursesUpdateTime, DateTime.Now.Ticks);
                }

                var tempCoursesRepo = new TempCoursesRepo();
                var tempCourses     = tempCoursesRepo.GetTempCourses();
                foreach (var tempCourse in tempCourses)
                {
                    var    courseId = tempCourse.CourseId;
                    Course course   = null;
                    try
                    {
                        course = base.GetCourse(courseId);                         // Не используется FindCourse, иначе бесконечная рекурсия
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                    }
                    if (course == null || course.GetSlides(true).Count == 0 ||
                        courseId == courseIdToUpdate && tempCourse.LastUpdateTime < tempCourse.LoadingTime)
                    {
                        TryReloadCourse(courseId);
                        tempCoursesRepo.UpdateTempCourseLastUpdateTimeAsync(courseId).Wait();
                        courseVersionFetchTime[courseId] = DateTime.Now;
                    }
                    else if (tempCourse.LastUpdateTime > tempCourse.LoadingTime)
                    {
                        courseVersionFetchTime[courseId] = DateTime.Now;
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
        }
Esempio n. 5
0
        private void TryCheckTempCoursesAndReloadIfNecessary()
        {
            try
            {
                if (new DateTime(allTempCoursesUpdateTime) > DateTime.Now.Subtract(allTempCoursesUpdateEvery))
                {
                    return;
                }
                Interlocked.Exchange(ref allTempCoursesUpdateTime, DateTime.Now.Ticks);

                var tempCourses = GetTempCoursesWithCache();
                foreach (var tempCourse in tempCourses)
                {
                    var courseId = tempCourse.CourseId;
                    if (CourseIsBroken(courseId))
                    {
                        continue;
                    }
                    Course course = null;
                    try
                    {
                        course = base.GetCourse(courseId);                         // Не используется FindCourse, иначе бесконечная рекурсия
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                    }
                    if (course == null || course.GetSlides(true).Count == 0)
                    {
                        TryReloadCourse(courseId);
                        var tempCoursesRepo = new TempCoursesRepo();
                        tempCoursesRepo.UpdateTempCourseLastUpdateTime(courseId);
                        courseVersionFetchTime[courseId] = DateTime.Now;
                    }
                    else if (tempCourse.LastUpdateTime > tempCourse.LoadingTime)
                    {
                        courseVersionFetchTime[courseId] = DateTime.Now;
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
        }
Esempio n. 6
0
        private void TryReloadTempCourseIfNecessary([NotNull] string courseId)
        {
            try
            {
                if (CourseIsBroken(courseId))
                {
                    return;
                }
                if (IsTempCourseUpdatedRecent(courseId))
                {
                    return;
                }

                var tempCourses = GetTempCoursesWithCache();
                var tempCourse  = tempCourses.FirstOrDefault(tc => string.Equals(tc.CourseId, courseId, StringComparison.OrdinalIgnoreCase));
                if (tempCourse == null)
                {
                    return;
                }
                Course course = null;
                try
                {
                    course = base.GetCourse(courseId);                     // Не используется FindCourse, иначе бесконечная рекурсия
                }
                catch (Exception ex)
                {
                    log.Error(ex);
                }
                if (course == null || tempCourse.LastUpdateTime < tempCourse.LoadingTime)
                {
                    TryReloadCourse(courseId);
                    var tempCoursesRepo = new TempCoursesRepo();
                    tempCoursesRepo.UpdateTempCourseLastUpdateTime(courseId);
                    courseVersionFetchTime[courseId] = DateTime.Now;
                }
                else if (tempCourse.LastUpdateTime > tempCourse.LoadingTime)
                {
                    courseVersionFetchTime[courseId] = DateTime.Now;
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
        }