Exemplo n.º 1
0
        public virtual async Task <OperationResultWithData <PagedResult <IMp4StatusContainer> > > GetAllMeetingRecordings([FromBody] RecordingsRequestDto input)
        {
            try
            {
                var param = Session.LtiSession.LtiParam;
                var ac    = GetAdminProvider();

                Func <IRoomTypeFactory> getRoomTypeFactory =
                    () => new RoomTypeFactory(ac, (LmsMeetingType)input.LmsMeetingType, IoC.Resolve <API.AdobeConnect.ISeminarService>());

                var publishOnly = !LmsCompany.AutoPublishRecordings && !new LmsRoleService(Settings).IsTeacher(param, LmsCompany) &&
                                  LmsCompany.GetSetting <bool>(LmsLicenseSettingNames.HidePrivateRecordingsForStudents);


                var rawRecordings = RecordingsService.GetRecordings(
                    LmsCompany,
                    ac,
                    Session.LmsCourseId,
                    input.MeetingId,
                    getRoomTypeFactory,
                    input.SortBy,
                    input.SortOder,
                    input.Search,
                    input.DateFrom,
                    input.DateTo,
                    (records) =>
                {
                    // TRICK: for API UNIR uses AutoPublishRecordings==true; So no access to Session for them.
                    if (publishOnly)
                    {
                        return(records.Where(x => x.Published));
                    }

                    return(records);
                },
                    input.Skip,
                    input.Take);

                var smap = seminarMapConfig.CreateMapper();
                var map  = mapConfig.CreateMapper();

                IEnumerable <RecordingWithMp4Dto> recordings =
                    ((LmsMeetingType)input.LmsMeetingType == LmsMeetingType.Seminar)
                    ? rawRecordings.Data.Select(x => smap.Map <SeminarRecordingWithMp4Dto>(x))
                    : rawRecordings.Data.Select(x => map.Map <RecordingWithMp4Dto>(x));

                Guid mp4;
                if (!Guid.TryParse(LmsCompany.GetSetting <string>(LmsLicenseSettingNames.Mp4ServiceLicenseKey), out mp4))
                {
                    mp4 = Guid.Empty;
                }
                Guid mp4Subtitles;
                if (!Guid.TryParse(LmsCompany.GetSetting <string>(LmsLicenseSettingNames.Mp4ServiceWithSubtitlesLicenseKey), out mp4Subtitles))
                {
                    mp4Subtitles = Guid.Empty;
                }

                IEnumerable <IMp4StatusContainer> result = await Mp4ApiUtility.ProcessMp4(recordings.Cast <IMp4StatusContainer>().ToList(),
                                                                                          mp4,
                                                                                          mp4Subtitles,
                                                                                          _mp4LinkBuilder,
                                                                                          _vttLinkBuilder,
                                                                                          Logger);

                var pagedResult = new PagedResult <IMp4StatusContainer> {
                    Data = result, Skip = rawRecordings.Skip, Take = rawRecordings.Take, Total = rawRecordings.Total
                };

                return(pagedResult.ToSuccessResult());
            }
            catch (Exception ex)
            {
                string errorMessage = GetOutputErrorMessage("MP4-GetAllMeetingRecordings", ex);
                return(OperationResultWithData <PagedResult <IMp4StatusContainer> > .Error(errorMessage));
            }
        }