Browse Source

allow block items to disable watermarks (#2139)

* allow block items to disable watermarks

* fix test
pull/2142/head
Jason Dove 1 year ago committed by GitHub
parent
commit
451c534062
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      CHANGELOG.md
  2. 3
      ErsatzTV.Application/Scheduling/BlockItemViewModel.cs
  3. 3
      ErsatzTV.Application/Scheduling/Commands/ReplaceBlockItem.cs
  4. 3
      ErsatzTV.Application/Scheduling/Commands/ReplaceBlockItemsHandler.cs
  5. 3
      ErsatzTV.Application/Scheduling/Mapper.cs
  6. 5
      ErsatzTV.Application/Streaming/Queries/GetPlayoutItemProcessByChannelNumberHandler.cs
  7. 2
      ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerBaseTests.cs
  8. 1
      ErsatzTV.Core/Domain/Scheduling/BlockItem.cs
  9. 1
      ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs
  10. 5917
      ErsatzTV.Infrastructure.MySql/Migrations/20250712033216_Add_BlockItemDisableWatermarks.Designer.cs
  11. 29
      ErsatzTV.Infrastructure.MySql/Migrations/20250712033216_Add_BlockItemDisableWatermarks.cs
  12. 3
      ErsatzTV.Infrastructure.MySql/Migrations/TvContextModelSnapshot.cs
  13. 5756
      ErsatzTV.Infrastructure.Sqlite/Migrations/20250712033117_Add_BlockItemDisableWatermarks.Designer.cs
  14. 29
      ErsatzTV.Infrastructure.Sqlite/Migrations/20250712033117_Add_BlockItemDisableWatermarks.cs
  15. 3
      ErsatzTV.Infrastructure.Sqlite/Migrations/TvContextModelSnapshot.cs
  16. 6
      ErsatzTV.Infrastructure/Search/LuceneSearchIndex.cs
  17. 15
      ErsatzTV/Pages/BlockEditor.razor
  18. 2
      ErsatzTV/ViewModels/BlockItemEditViewModel.cs

2
CHANGELOG.md

@ -72,6 +72,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -72,6 +72,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- `remaining_duration`: duration of the content after this mid-roll point, in seconds
- `point`: the position of the mid-roll point, in seconds
- `num`: the mid-roll point number, starting with 1
- Add `Disable Watermarks` checkbox to block items
- Block items that have this checked will never display a watermark, even with Deco set to override watermark
### Changed
- Allow `Other Video` libraries and `Image` libraries to use the same folders

3
ErsatzTV.Application/Scheduling/BlockItemViewModel.cs

@ -13,4 +13,5 @@ public record BlockItemViewModel( @@ -13,4 +13,5 @@ public record BlockItemViewModel(
SmartCollectionViewModel SmartCollection,
NamedMediaItemViewModel MediaItem,
PlaybackOrder PlaybackOrder,
bool IncludeInProgramGuide);
bool IncludeInProgramGuide,
bool DisableWatermarks);

3
ErsatzTV.Application/Scheduling/Commands/ReplaceBlockItem.cs

@ -10,4 +10,5 @@ public record ReplaceBlockItem( @@ -10,4 +10,5 @@ public record ReplaceBlockItem(
int? SmartCollectionId,
int? MediaItemId,
PlaybackOrder PlaybackOrder,
bool IncludeInProgramGuide);
bool IncludeInProgramGuide,
bool DisableWatermarks);

3
ErsatzTV.Application/Scheduling/Commands/ReplaceBlockItemsHandler.cs

@ -54,7 +54,8 @@ public class ReplaceBlockItemsHandler(IDbContextFactory<TvContext> dbContextFact @@ -54,7 +54,8 @@ public class ReplaceBlockItemsHandler(IDbContextFactory<TvContext> dbContextFact
SmartCollectionId = item.SmartCollectionId,
MediaItemId = item.MediaItemId,
PlaybackOrder = item.PlaybackOrder,
IncludeInProgramGuide = item.IncludeInProgramGuide
IncludeInProgramGuide = item.IncludeInProgramGuide,
DisableWatermarks = item.DisableWatermarks
};
private static Task<Validation<BaseError, Block>> Validate(TvContext dbContext, ReplaceBlockItems request) =>

3
ErsatzTV.Application/Scheduling/Mapper.cs

@ -31,7 +31,8 @@ internal static class Mapper @@ -31,7 +31,8 @@ internal static class Mapper
_ => null
},
blockItem.PlaybackOrder,
blockItem.IncludeInProgramGuide);
blockItem.IncludeInProgramGuide,
blockItem.DisableWatermarks);
internal static TemplateGroupViewModel ProjectToViewModel(TemplateGroup templateGroup) =>
new(templateGroup.Id, templateGroup.Name, templateGroup.Templates.Count);

5
ErsatzTV.Application/Streaming/Queries/GetPlayoutItemProcessByChannelNumberHandler.cs

@ -689,6 +689,11 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler< @@ -689,6 +689,11 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler<
private WatermarkResult GetPlayoutItemWatermark(PlayoutItem playoutItem, DateTimeOffset now)
{
if (playoutItem.DisableWatermarks)
{
return new DisableWatermark();
}
DecoEntries decoEntries = GetDecoEntries(playoutItem.Playout, now);
// first, check deco template / active deco

2
ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerBaseTests.cs

@ -432,7 +432,7 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase @@ -432,7 +432,7 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
PadToNearestMinute = 60,
CollectionId = 2,
Collection = collectionTwo,
Expression = "chapter_num % 2 == 0"
Expression = "num % 2 == 0"
},
PostRollFiller = new FillerPreset
{

1
ErsatzTV.Core/Domain/Scheduling/BlockItem.cs

@ -17,4 +17,5 @@ public class BlockItem @@ -17,4 +17,5 @@ public class BlockItem
public SmartCollection SmartCollection { get; set; }
public PlaybackOrder PlaybackOrder { get; set; }
public bool IncludeInProgramGuide { get; set; }
public bool DisableWatermarks { get; set; }
}

1
ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs

@ -167,6 +167,7 @@ public class BlockPlayoutBuilder( @@ -167,6 +167,7 @@ public class BlockPlayoutBuilder(
InPoint = TimeSpan.Zero,
OutPoint = itemDuration,
FillerKind = blockItem.IncludeInProgramGuide ? FillerKind.None : FillerKind.GuideMode,
DisableWatermarks = blockItem.DisableWatermarks,
//CustomTitle = scheduleItem.CustomTitle,
//WatermarkId = scheduleItem.WatermarkId,
//PreferredAudioLanguageCode = scheduleItem.PreferredAudioLanguageCode,

5917
ErsatzTV.Infrastructure.MySql/Migrations/20250712033216_Add_BlockItemDisableWatermarks.Designer.cs generated

File diff suppressed because it is too large Load Diff

29
ErsatzTV.Infrastructure.MySql/Migrations/20250712033216_Add_BlockItemDisableWatermarks.cs

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ErsatzTV.Infrastructure.MySql.Migrations
{
/// <inheritdoc />
public partial class Add_BlockItemDisableWatermarks : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "DisableWatermarks",
table: "BlockItem",
type: "tinyint(1)",
nullable: false,
defaultValue: false);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "DisableWatermarks",
table: "BlockItem");
}
}
}

3
ErsatzTV.Infrastructure.MySql/Migrations/TvContextModelSnapshot.cs

@ -2259,6 +2259,9 @@ namespace ErsatzTV.Infrastructure.MySql.Migrations @@ -2259,6 +2259,9 @@ namespace ErsatzTV.Infrastructure.MySql.Migrations
b.Property<int>("CollectionType")
.HasColumnType("int");
b.Property<bool>("DisableWatermarks")
.HasColumnType("tinyint(1)");
b.Property<bool>("IncludeInProgramGuide")
.HasColumnType("tinyint(1)");

5756
ErsatzTV.Infrastructure.Sqlite/Migrations/20250712033117_Add_BlockItemDisableWatermarks.Designer.cs generated

File diff suppressed because it is too large Load Diff

29
ErsatzTV.Infrastructure.Sqlite/Migrations/20250712033117_Add_BlockItemDisableWatermarks.cs

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ErsatzTV.Infrastructure.Sqlite.Migrations
{
/// <inheritdoc />
public partial class Add_BlockItemDisableWatermarks : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "DisableWatermarks",
table: "BlockItem",
type: "INTEGER",
nullable: false,
defaultValue: false);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "DisableWatermarks",
table: "BlockItem");
}
}
}

3
ErsatzTV.Infrastructure.Sqlite/Migrations/TvContextModelSnapshot.cs

@ -2146,6 +2146,9 @@ namespace ErsatzTV.Infrastructure.Sqlite.Migrations @@ -2146,6 +2146,9 @@ namespace ErsatzTV.Infrastructure.Sqlite.Migrations
b.Property<int>("CollectionType")
.HasColumnType("INTEGER");
b.Property<bool>("DisableWatermarks")
.HasColumnType("INTEGER");
b.Property<bool>("IncludeInProgramGuide")
.HasColumnType("INTEGER");

6
ErsatzTV.Infrastructure/Search/LuceneSearchIndex.cs

@ -628,6 +628,8 @@ public sealed class LuceneSearchIndex : ISearchIndex @@ -628,6 +628,8 @@ public sealed class LuceneSearchIndex : ISearchIndex
List<string> subLanguages = await searchRepository.GetSubLanguagesForShow(show);
await AddSubLanguages(searchRepository, doc, subLanguages);
AddCollections(doc, show.Collections);
if (!string.IsNullOrWhiteSpace(metadata.ContentRating))
{
foreach (string contentRating in (metadata.ContentRating ?? string.Empty).Split("/")
@ -772,6 +774,8 @@ public sealed class LuceneSearchIndex : ISearchIndex @@ -772,6 +774,8 @@ public sealed class LuceneSearchIndex : ISearchIndex
List<string> subLanguages = await searchRepository.GetSubLanguagesForSeason(season);
await AddSubLanguages(searchRepository, doc, subLanguages);
AddCollections(doc, season.Collections);
if (!string.IsNullOrWhiteSpace(showMetadata.ContentRating))
{
foreach (string contentRating in (showMetadata.ContentRating ?? string.Empty).Split("/")
@ -854,6 +858,8 @@ public sealed class LuceneSearchIndex : ISearchIndex @@ -854,6 +858,8 @@ public sealed class LuceneSearchIndex : ISearchIndex
List<string> subLanguages = await searchRepository.GetSubLanguagesForArtist(artist);
await AddSubLanguages(searchRepository, doc, subLanguages);
AddCollections(doc, artist.Collections);
doc.Add(
new StringField(
AddedDateField,

15
ErsatzTV/Pages/BlockEditor.razor

@ -77,6 +77,7 @@ @@ -77,6 +77,7 @@
<MudTh>Collection</MudTh>
<MudTh>Playback Order</MudTh>
<MudTh>Show In EPG</MudTh>
<MudTh>Disable Watermarks</MudTh>
<MudTh/>
<MudTh/>
<MudTh/>
@ -96,6 +97,9 @@ @@ -96,6 +97,9 @@
<MudTd>
<MudCheckBox T="bool" Value="@context.IncludeInProgramGuide" ValueChanged="@(e => UpdateEPG(context, e))"/>
</MudTd>
<MudTd>
<MudCheckBox T="bool" Value="@context.DisableWatermarks" ValueChanged="@(e => UpdateWatermark(context, e))"/>
</MudTd>
<MudTd>
<MudIconButton Icon="@Icons.Material.Filled.ContentCopy"
OnClick="@(_ => CopyItem(context))">
@ -406,7 +410,8 @@ @@ -406,7 +410,8 @@
SmartCollection = item.SmartCollection,
MediaItem = item.MediaItem,
PlaybackOrder = item.PlaybackOrder,
IncludeInProgramGuide = item.IncludeInProgramGuide
IncludeInProgramGuide = item.IncludeInProgramGuide,
DisableWatermarks = item.DisableWatermarks
};
private void AddBlockItem()
@ -433,7 +438,8 @@ @@ -433,7 +438,8 @@
MultiCollection = item.MultiCollection,
SmartCollection = item.SmartCollection,
MediaItem = item.MediaItem,
IncludeInProgramGuide = item.IncludeInProgramGuide
IncludeInProgramGuide = item.IncludeInProgramGuide,
DisableWatermarks = item.DisableWatermarks
};
foreach (BlockItemEditViewModel i in _block.Items.Filter(bi => bi.Index >= newItem.Index))
@ -490,7 +496,8 @@ @@ -490,7 +496,8 @@
item.SmartCollection?.Id,
item.MediaItem?.MediaItemId,
item.PlaybackOrder,
item.IncludeInProgramGuide)).ToList();
item.IncludeInProgramGuide,
item.DisableWatermarks)).ToList();
_block.Minutes = _durationHours * 60 + _durationMinutes;
@ -505,4 +512,6 @@ @@ -505,4 +512,6 @@
private static void UpdateEPG(BlockItemEditViewModel context, bool includeInProgramGuide) => context.IncludeInProgramGuide = includeInProgramGuide;
private static void UpdateWatermark(BlockItemEditViewModel context, bool disableWatermarks) => context.DisableWatermarks = disableWatermarks;
}

2
ErsatzTV/ViewModels/BlockItemEditViewModel.cs

@ -60,6 +60,8 @@ public class BlockItemEditViewModel : INotifyPropertyChanged @@ -60,6 +60,8 @@ public class BlockItemEditViewModel : INotifyPropertyChanged
public bool IncludeInProgramGuide { get; set; }
public bool DisableWatermarks { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) =>

Loading…
Cancel
Save