Esempio n. 1
0
    private async Task <UpdateProgramScheduleResult> ApplyUpdateRequest(
        TvContext dbContext,
        ProgramSchedule programSchedule,
        UpdateProgramSchedule request)
    {
        // we need to refresh playouts if the playback order or keep multi-episodes has been modified
        bool needToRefreshPlayout =
            programSchedule.KeepMultiPartEpisodesTogether != request.KeepMultiPartEpisodesTogether ||
            programSchedule.TreatCollectionsAsShows != request.TreatCollectionsAsShows ||
            programSchedule.ShuffleScheduleItems != request.ShuffleScheduleItems;

        programSchedule.Name = request.Name;
        programSchedule.KeepMultiPartEpisodesTogether = request.KeepMultiPartEpisodesTogether;
        programSchedule.TreatCollectionsAsShows       = programSchedule.KeepMultiPartEpisodesTogether &&
                                                        request.TreatCollectionsAsShows;
        programSchedule.ShuffleScheduleItems = request.ShuffleScheduleItems;

        await dbContext.SaveChangesAsync();

        if (needToRefreshPlayout)
        {
            List <int> playoutIds = await dbContext.Playouts
                                    .Filter(p => p.ProgramScheduleId == programSchedule.Id)
                                    .Map(p => p.Id)
                                    .ToListAsync();

            foreach (int playoutId in playoutIds)
            {
                await _channel.WriteAsync(new BuildPlayout(playoutId, PlayoutBuildMode.Refresh));
            }
        }

        return(new UpdateProgramScheduleResult(programSchedule.Id));
    }
Esempio n. 2
0
    public async Task <Either <BaseError, UpdateProgramScheduleResult> > Handle(
        UpdateProgramSchedule request,
        CancellationToken cancellationToken)
    {
        await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken);

        Validation <BaseError, ProgramSchedule> validation = await Validate(dbContext, request);

        return(await LanguageExtensions.Apply(validation, ps => ApplyUpdateRequest(dbContext, ps, request)));
    }
        private async Task <ProgramScheduleViewModel> ApplyUpdateRequest(
            ProgramSchedule programSchedule,
            UpdateProgramSchedule update)
        {
            // we only need to rebuild playouts if the playback order has been modified
            bool needToRebuildPlayout =
                programSchedule.MediaCollectionPlaybackOrder != update.MediaCollectionPlaybackOrder;

            programSchedule.Name = update.Name;
            programSchedule.MediaCollectionPlaybackOrder = update.MediaCollectionPlaybackOrder;
            await _programScheduleRepository.Update(programSchedule);

            if (needToRebuildPlayout)
            {
                foreach (Playout playout in programSchedule.Playouts)
                {
                    await _channel.WriteAsync(new BuildPlayout(playout.Id, true));
                }
            }

            return(ProjectToViewModel(programSchedule));
        }
 private async Task <Validation <BaseError, ProgramSchedule> > Validate(UpdateProgramSchedule request) =>
 (await ProgramScheduleMustExist(request), ValidateName(request))
 public Task <Either <BaseError, ProgramScheduleViewModel> > Handle(
     UpdateProgramSchedule request,
     CancellationToken cancellationToken) =>
 Validate(request)
 .MapT(c => ApplyUpdateRequest(c, request))
 .Bind(v => v.ToEitherAsync());
Esempio n. 6
0
 private static async Task <Validation <BaseError, ProgramSchedule> > Validate(
     TvContext dbContext,
     UpdateProgramSchedule request) =>
 (await ProgramScheduleMustExist(dbContext, request), ValidateName(request))