Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
97725ac92d |
@@ -48,8 +48,6 @@ jobs:
|
||||
|
||||
- name: Setup .NET Core
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 9.0.203
|
||||
|
||||
- name: Clean
|
||||
run: dotnet clean --configuration Release && dotnet nuget locals all --clear
|
||||
@@ -73,8 +71,8 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
sed -i '' '/Scanner/d' ErsatzTV/ErsatzTV.csproj
|
||||
dotnet publish ErsatzTV.Scanner/ErsatzTV.Scanner.csproj --framework net9.0 --runtime "${{ matrix.target }}" -c Release -o publish -p:RestoreEnablePackagePruning=true -p:InformationalVersion="${{ inputs.release_version }}-${{ matrix.target }}" -p:EnableCompressionInSingleFile=false -p:DebugType=Embedded -p:PublishSingleFile=true --self-contained true
|
||||
dotnet publish ErsatzTV/ErsatzTV.csproj --framework net9.0 --runtime "${{ matrix.target }}" -c Release -o publish -p:RestoreEnablePackagePruning=true -p:InformationalVersion="${{ inputs.release_version }}-${{ matrix.target }}" -p:EnableCompressionInSingleFile=false -p:DebugType=Embedded -p:PublishSingleFile=true --self-contained true
|
||||
dotnet publish ErsatzTV.Scanner/ErsatzTV.Scanner.csproj --framework net8.0 --runtime "${{ matrix.target }}" -c Release -o publish -p:InformationalVersion="${{ inputs.release_version }}-${{ matrix.target }}" -p:EnableCompressionInSingleFile=false -p:DebugType=Embedded -p:PublishSingleFile=true --self-contained true
|
||||
dotnet publish ErsatzTV/ErsatzTV.csproj --framework net8.0 --runtime "${{ matrix.target }}" -c Release -o publish -p:InformationalVersion="${{ inputs.release_version }}-${{ matrix.target }}" -p:EnableCompressionInSingleFile=false -p:DebugType=Embedded -p:PublishSingleFile=true --self-contained true
|
||||
|
||||
- name: Bundle
|
||||
shell: bash
|
||||
@@ -168,8 +166,6 @@ jobs:
|
||||
|
||||
- name: Setup .NET Core
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 9.0.203
|
||||
|
||||
- name: Clean
|
||||
run: dotnet clean --configuration Release && dotnet nuget locals all --clear
|
||||
@@ -194,8 +190,8 @@ jobs:
|
||||
|
||||
# Build everything
|
||||
sed -i '/Scanner/d' ErsatzTV/ErsatzTV.csproj
|
||||
dotnet publish ErsatzTV.Scanner/ErsatzTV.Scanner.csproj --framework net9.0 --runtime "${{ matrix.target }}" -c Release -o "scanner" -p:RestoreEnablePackagePruning=true -p:InformationalVersion="${{ inputs.release_version }}-${{ matrix.target }}" -p:EnableCompressionInSingleFile=true -p:DebugType=Embedded -p:PublishSingleFile=true --self-contained true
|
||||
dotnet publish ErsatzTV/ErsatzTV.csproj --framework net9.0 --runtime "${{ matrix.target }}" -c Release -o "main" -p:RestoreEnablePackagePruning=true -p:InformationalVersion="${{ inputs.release_version }}-${{ matrix.target }}" -p:EnableCompressionInSingleFile=true -p:DebugType=Embedded -p:PublishSingleFile=true --self-contained true
|
||||
dotnet publish ErsatzTV.Scanner/ErsatzTV.Scanner.csproj --framework net8.0 --runtime "${{ matrix.target }}" -c Release -o "scanner" -p:InformationalVersion="${{ inputs.release_version }}-${{ matrix.target }}" -p:EnableCompressionInSingleFile=true -p:DebugType=Embedded -p:PublishSingleFile=true --self-contained true
|
||||
dotnet publish ErsatzTV/ErsatzTV.csproj --framework net8.0 --runtime "${{ matrix.target }}" -c Release -o "main" -p:InformationalVersion="${{ inputs.release_version }}-${{ matrix.target }}" -p:EnableCompressionInSingleFile=true -p:DebugType=Embedded -p:PublishSingleFile=true --self-contained true
|
||||
mkdir "$release_name"
|
||||
mv scanner/* "$release_name/"
|
||||
mv main/* "$release_name/"
|
||||
|
||||
@@ -10,8 +10,6 @@ jobs:
|
||||
|
||||
- name: Setup .NET Core
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 9.0.203
|
||||
|
||||
- name: Clean
|
||||
run: dotnet clean --configuration Release && dotnet nuget locals all --clear
|
||||
@@ -40,20 +38,18 @@ jobs:
|
||||
|
||||
- name: Setup .NET Core
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 9.0.203
|
||||
|
||||
- name: Clean
|
||||
run: dotnet clean --configuration Release && dotnet nuget locals all --clear
|
||||
|
||||
- name: Install dependencies
|
||||
run: dotnet restore -p:RestoreEnablePackagePruning=true -r linux-x64
|
||||
run: dotnet restore
|
||||
|
||||
- name: Prep project file
|
||||
run: sed -i '/Scanner/d' ErsatzTV/ErsatzTV.csproj
|
||||
|
||||
- name: Build
|
||||
run: dotnet build ErsatzTV/ErsatzTV.csproj --runtime linux-x64 --configuration Release --no-restore && dotnet build --configuration Release --no-restore
|
||||
run: dotnet build --configuration Release --no-restore
|
||||
|
||||
- name: Test
|
||||
run: dotnet test --blame-hang-timeout "2m" --no-restore --verbosity normal
|
||||
@@ -68,8 +64,6 @@ jobs:
|
||||
|
||||
- name: Setup .NET Core
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 9.0.203
|
||||
|
||||
- name: Clean
|
||||
run: dotnet clean --configuration Release && dotnet nuget locals all --clear
|
||||
|
||||
+2
-38
@@ -4,8 +4,6 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [25.2.0] - 2025-06-24
|
||||
### Added
|
||||
- Add `linux-musl-x64` artifact for users running Alpine x64
|
||||
- Add API endpoint to empty trash (POST to `/api/maintenance/empty_trash`)
|
||||
@@ -28,31 +26,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
- VAAPI may use hardware-accelerated tone mapping (when opencl accel is also available)
|
||||
- NVIDIA may use hardware-accelerated tone mapping (when vulkan accel and libplacebo filter are also available)
|
||||
- QSV may use hardware-accelerated tone mapping (when hardware decoding is used)
|
||||
- In all other cases, HDR content will use a software pipeline
|
||||
- The tonemap algorithm can be configured in the ffmpeg profile
|
||||
- In all other cases, HDR content will use a software pipeline and the clip algorithm
|
||||
- Use hardware-accelerated padding with VAAPI
|
||||
- Add environment variable `ETV_DISABLE_VULKAN`
|
||||
- Any non-empty value will disable use of Vulkan acceleration and force software tonemapping
|
||||
- This may be needed with misbehaving NVIDIA drivers on Windows
|
||||
- Add health check error when invalid VAAPI device and VAAPI driver combination is used in an active ffmpeg profile
|
||||
- This makes it obvious when hardware acceleration will not work as configured
|
||||
- Add button in schedule editor to clone schedule item
|
||||
- Allow YAML playout sequence definitions to reference other sequences
|
||||
- Cycles will be detected and logged, and sequences with cycles will prevent the playout from building
|
||||
- Add `repeat` property to YAML sequence instruction
|
||||
- This tells the playout builder how many times this sequence should repeat
|
||||
- Omitting this value is the same as setting it to `1`
|
||||
- Add `collection` (name) to search index for manual collections created within ETV
|
||||
- Collections synchronized from media servers are still indexed as `tag`
|
||||
- Allow searching by `smart_collection` (name)
|
||||
- Quotes are *always* required when using this feature
|
||||
- e.g. `smart_collection:"one" NOT smart_collection:"two"`
|
||||
- Cycles will be detected and logged, and searches with cycles will not work as expected
|
||||
- Add all `ETV_*` environment variables to Troubleshooting > General info
|
||||
- Add `External Logo URL` field to channel editor
|
||||
- Using external (public) logos should fix channel logo display for clients that don't proxy artwork (such as Plex)
|
||||
- Users who have customized the XMLTV channel template `channel.sbntxt` will need to update their templates again
|
||||
- This is because the templates require different logic for external URLs vs ETV-hosted URLs
|
||||
|
||||
### Changed
|
||||
- Start to make UI minimally responsive (functional on smaller screens)
|
||||
@@ -64,13 +39,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
- Remove requirement to have Jellyfin admin user; user id is no longer required on requests to latest Jellyfin server
|
||||
- Upgrade bundled ffmpeg on Windows from 6.1 to 7.1.1
|
||||
- Upgrade VAAPI docker image Ubuntu base from 22 to 24; bundled ffmpeg from 6.1 to 7.1.1
|
||||
- Upgrade NVIDIA docker image Ubuntu base from 20 to 24; bundled ffmpeg from 6.1 to 7.1.1
|
||||
- Upgrade base, arm, arm64 docker images bundled ffmpeg from 6.1 to 7.1.1
|
||||
- Unify all hardware acceleration methods in base docker images (`latest` and `develop`)
|
||||
- VAAPI, QSV and NVIDIA are now all supported in the base docker image
|
||||
- Other docker image tags are deprecated and will receive no new updates after the next release
|
||||
- A health check has been added to notify users (on `-vaapi` or `-nvidia` tags) of this change
|
||||
- Schedule items editor: show currently selected row using background color instead of font weight
|
||||
|
||||
### Fixed
|
||||
- Fix error message about synchronizing Plex collections from a Plex server that has zero collections
|
||||
@@ -81,9 +50,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
- Use cache busting to avoid UI errors after upgrading the MudBlazor library
|
||||
- Fix multi-variant playlist to report more accurate `BANDWIDTH` value based on ffmpeg profile
|
||||
- Fix detecting NVIDIA capabilities on Blackwell GPUs
|
||||
- Fix decoder selection in NVIDIA pipeline
|
||||
- Prevent playback order `Shuffle In Order` from being used with `Fill With Group Mode` as they are incompatible
|
||||
- Fix XMLTV items not grouping properly (guide mode: `Filler`) due to post-roll filler
|
||||
|
||||
## [25.1.0] - 2025-01-10
|
||||
### Added
|
||||
@@ -2253,9 +2219,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
- Initial release to facilitate testing outside of Docker.
|
||||
|
||||
|
||||
[Unreleased]: https://github.com/ErsatzTV/ErsatzTV/compare/v25.2.0...HEAD
|
||||
[25.2.0]: https://github.com/ErsatzTV/ErsatzTV/compare/v25.1.0...v25.2.0
|
||||
[25.1.0]: https://github.com/ErsatzTV/ErsatzTV/compare/v0.8.8-beta...v25.1.0
|
||||
[Unreleased]: https://github.com/ErsatzTV/ErsatzTV/compare/v0.8.8-beta...HEAD
|
||||
[0.8.8-beta]: https://github.com/ErsatzTV/ErsatzTV/compare/v0.8.7-beta...v0.8.8-beta
|
||||
[0.8.7-beta]: https://github.com/ErsatzTV/ErsatzTV/compare/v0.8.6-beta...v0.8.7-beta
|
||||
[0.8.6-beta]: https://github.com/ErsatzTV/ErsatzTV/compare/v0.8.5-beta...v0.8.6-beta
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#![windows_subsystem = "windows"]
|
||||
|
||||
use special_folder::SpecialFolder;
|
||||
use std::env;
|
||||
use std::fs;
|
||||
use std::os::windows::process::CommandExt;
|
||||
use std::process::Child;
|
||||
@@ -22,16 +21,11 @@ fn main() {
|
||||
let (tx, rx) = mpsc::channel();
|
||||
|
||||
tray.add_menu_item("Launch Web UI", || {
|
||||
let ui_port = env::var("ETV_UI_PORT")
|
||||
.ok()
|
||||
.and_then(|val| val.parse::<u16>().ok())
|
||||
.unwrap_or(8409);
|
||||
|
||||
let _ = Command::new("cmd")
|
||||
.creation_flags(CREATE_NO_WINDOW)
|
||||
.arg("/C")
|
||||
.arg("start")
|
||||
.arg(format!("http://localhost:{}", ui_port))
|
||||
.arg("http://localhost:8409")
|
||||
.stdin(Stdio::null())
|
||||
.stdout(Stdio::null())
|
||||
.stderr(Stdio::null())
|
||||
|
||||
+1
-1
Submodule ErsatzTV-macOS updated: d4dd985fd6...bf18a5e4a4
@@ -51,16 +51,10 @@ public class CreateChannelHandler(
|
||||
var artwork = new List<Artwork>();
|
||||
if (!string.IsNullOrWhiteSpace(request.Logo))
|
||||
{
|
||||
string logo = request.Logo;
|
||||
if (logo.StartsWith("iptv/logos/", StringComparison.Ordinal))
|
||||
{
|
||||
logo = logo.Replace("iptv/logos/", string.Empty);
|
||||
}
|
||||
|
||||
artwork.Add(
|
||||
new Artwork
|
||||
{
|
||||
Path = logo,
|
||||
Path = request.Logo,
|
||||
ArtworkKind = ArtworkKind.Logo,
|
||||
DateAdded = DateTime.UtcNow,
|
||||
DateUpdated = DateTime.UtcNow
|
||||
|
||||
@@ -287,11 +287,24 @@ public class RefreshChannelDataHandler : IRequestHandler<RefreshChannelData>
|
||||
int finishIndex = j;
|
||||
while (finishIndex + 1 < sorted.Count && (sorted[finishIndex + 1].GuideGroup == startItem.GuideGroup
|
||||
|| sorted[finishIndex + 1].FillerKind is FillerKind.GuideMode
|
||||
or FillerKind.PostRoll or FillerKind.Tail or FillerKind.Fallback or FillerKind.DecoDefault))
|
||||
or FillerKind.Tail or FillerKind.Fallback or FillerKind.DecoDefault))
|
||||
{
|
||||
finishIndex++;
|
||||
}
|
||||
|
||||
int customShowId = -1;
|
||||
if (displayItem.MediaItem is Episode ep)
|
||||
{
|
||||
customShowId = ep.Season.ShowId;
|
||||
}
|
||||
|
||||
bool isSameCustomShow = hasCustomTitle;
|
||||
for (int x = j; x <= finishIndex; x++)
|
||||
{
|
||||
isSameCustomShow = isSameCustomShow && sorted[x].MediaItem is Episode e &&
|
||||
customShowId == e.Season.ShowId;
|
||||
}
|
||||
|
||||
PlayoutItem finishItem = sorted[finishIndex];
|
||||
i = finishIndex;
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ using System.Net;
|
||||
using System.Xml;
|
||||
using Dapper;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Metadata;
|
||||
using ErsatzTV.Core.Iptv;
|
||||
using ErsatzTV.Infrastructure.Data;
|
||||
@@ -78,9 +77,6 @@ public class RefreshChannelListHandler : IRequestHandler<RefreshChannelList>
|
||||
|
||||
await foreach (ChannelResult channel in GetChannels(dbContext).WithCancellation(cancellationToken))
|
||||
{
|
||||
bool hasLogo = !string.IsNullOrWhiteSpace(channel.ArtworkPath);
|
||||
bool hasExternalLogo = hasLogo && Artwork.IsExternalUrl(channel.ArtworkPath);
|
||||
|
||||
var data = new
|
||||
{
|
||||
ChannelId = ChannelIdentifier.FromNumber(channel.Number),
|
||||
@@ -88,8 +84,7 @@ public class RefreshChannelListHandler : IRequestHandler<RefreshChannelList>
|
||||
ChannelNumber = channel.Number,
|
||||
ChannelName = channel.Name,
|
||||
ChannelCategories = GetCategories(channel.Categories),
|
||||
ChannelHasExternalArtwork = hasExternalLogo,
|
||||
ChannelHasArtwork = hasLogo,
|
||||
ChannelHasArtwork = !string.IsNullOrWhiteSpace(channel.ArtworkPath),
|
||||
ChannelArtworkPath = channel.ArtworkPath,
|
||||
ChannelNameEncoded = WebUtility.UrlEncode(channel.Name)
|
||||
};
|
||||
|
||||
@@ -42,46 +42,30 @@ public class UpdateChannelHandler(
|
||||
c.MusicVideoCreditsMode = update.MusicVideoCreditsMode;
|
||||
c.MusicVideoCreditsTemplate = update.MusicVideoCreditsTemplate;
|
||||
c.SongVideoMode = update.SongVideoMode;
|
||||
c.Artwork ??= [];
|
||||
c.Artwork ??= new List<Artwork>();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(update.Logo))
|
||||
{
|
||||
string logo = update.Logo;
|
||||
if (logo.StartsWith("iptv/logos/", StringComparison.Ordinal))
|
||||
{
|
||||
logo = logo.Replace("iptv/logos/", string.Empty);
|
||||
}
|
||||
Option<Artwork> maybeLogo =
|
||||
Optional(c.Artwork).Flatten().FirstOrDefault(a => a.ArtworkKind == ArtworkKind.Logo);
|
||||
|
||||
Option<Artwork> maybeLogo = c.Artwork.Where(a => a.ArtworkKind == ArtworkKind.Logo).HeadOrNone();
|
||||
foreach (Artwork artwork in maybeLogo)
|
||||
{
|
||||
artwork.Path = logo;
|
||||
artwork.DateUpdated = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
if (maybeLogo.IsNone)
|
||||
{
|
||||
var artwork = new Artwork
|
||||
maybeLogo.Match(
|
||||
artwork =>
|
||||
{
|
||||
Path = logo,
|
||||
DateAdded = DateTime.UtcNow,
|
||||
DateUpdated = DateTime.UtcNow,
|
||||
ArtworkKind = ArtworkKind.Logo
|
||||
};
|
||||
c.Artwork.Add(artwork);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await dbContext.Entry(c)
|
||||
.Collection(channel => channel.Artwork)
|
||||
.LoadAsync();
|
||||
|
||||
foreach (Artwork artwork in c.Artwork.Where(x => x.ArtworkKind is ArtworkKind.Logo).ToList())
|
||||
{
|
||||
c.Artwork.Remove(artwork);
|
||||
dbContext.Artwork.Remove(artwork);
|
||||
}
|
||||
artwork.Path = update.Logo;
|
||||
artwork.DateUpdated = DateTime.UtcNow;
|
||||
},
|
||||
() =>
|
||||
{
|
||||
var artwork = new Artwork
|
||||
{
|
||||
Path = update.Logo,
|
||||
DateAdded = DateTime.UtcNow,
|
||||
DateUpdated = DateTime.UtcNow,
|
||||
ArtworkKind = ArtworkKind.Logo
|
||||
};
|
||||
c.Artwork.Add(artwork);
|
||||
});
|
||||
}
|
||||
|
||||
c.ProgressMode = update.ProgressMode;
|
||||
|
||||
@@ -42,19 +42,9 @@ internal static class Mapper
|
||||
internal static ResolutionAndBitrateViewModel ProjectToViewModel(Resolution resolution, int bitrate) =>
|
||||
new(resolution.Height, resolution.Width, bitrate);
|
||||
|
||||
private static string GetLogo(Channel channel)
|
||||
{
|
||||
Option<Artwork> maybeArtwork = channel.Artwork
|
||||
.Where(a => a.ArtworkKind == ArtworkKind.Logo)
|
||||
.HeadOrNone();
|
||||
|
||||
foreach (Artwork artwork in maybeArtwork)
|
||||
{
|
||||
return artwork.IsExternalUrl() ? artwork.Path : $"iptv/logos/{artwork.Path}";
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
private static string GetLogo(Channel channel) =>
|
||||
Optional(channel.Artwork.FirstOrDefault(a => a.ArtworkKind == ArtworkKind.Logo))
|
||||
.Match(a => a.Path, string.Empty);
|
||||
|
||||
private static string GetStreamingMode(Channel channel) =>
|
||||
channel.StreamingMode switch
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<NoWarn>VSTHRD200</NoWarn>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<AnalysisLevel>latest-Recommended</AnalysisLevel>
|
||||
@@ -10,18 +10,18 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Bugsnag" Version="4.0.0" />
|
||||
<PackageReference Include="CliWrap" Version="3.9.0" />
|
||||
<PackageReference Include="CliWrap" Version="3.8.2" />
|
||||
<PackageReference Include="Humanizer.Core" Version="2.14.1" />
|
||||
<PackageReference Include="MediatR" Version="12.5.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.6" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.6" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.14.15">
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.13.61">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Serilog.Formatting.Compact.Reader" Version="4.0.0" />
|
||||
<PackageReference Include="WebMarkupMin.Core" Version="2.19.0" />
|
||||
<PackageReference Include="WebMarkupMin.Core" Version="2.17.0" />
|
||||
<PackageReference Include="Winista.MimeDetect" Version="1.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ public record CreateFFmpegProfile(
|
||||
FFmpegProfileBitDepth BitDepth,
|
||||
int VideoBitrate,
|
||||
int VideoBufferSize,
|
||||
FFmpegProfileTonemapAlgorithm TonemapAlgorithm,
|
||||
FFmpegProfileAudioFormat AudioFormat,
|
||||
int AudioBitrate,
|
||||
int AudioBufferSize,
|
||||
|
||||
@@ -60,7 +60,6 @@ public class CreateFFmpegProfileHandler :
|
||||
BitDepth = request.BitDepth,
|
||||
VideoBitrate = request.VideoBitrate,
|
||||
VideoBufferSize = request.VideoBufferSize,
|
||||
TonemapAlgorithm = request.TonemapAlgorithm,
|
||||
AudioFormat = request.AudioFormat,
|
||||
AudioBitrate = request.AudioBitrate,
|
||||
AudioBufferSize = request.AudioBufferSize,
|
||||
|
||||
@@ -22,7 +22,6 @@ public record UpdateFFmpegProfile(
|
||||
FFmpegProfileBitDepth BitDepth,
|
||||
int VideoBitrate,
|
||||
int VideoBufferSize,
|
||||
FFmpegProfileTonemapAlgorithm TonemapAlgorithm,
|
||||
FFmpegProfileAudioFormat AudioFormat,
|
||||
int AudioBitrate,
|
||||
int AudioBufferSize,
|
||||
|
||||
@@ -54,7 +54,6 @@ public class
|
||||
|
||||
p.VideoBitrate = update.VideoBitrate;
|
||||
p.VideoBufferSize = update.VideoBufferSize;
|
||||
p.TonemapAlgorithm = update.TonemapAlgorithm;
|
||||
p.AudioFormat = update.AudioFormat;
|
||||
p.AudioBitrate = update.AudioBitrate;
|
||||
p.AudioBufferSize = update.AudioBufferSize;
|
||||
|
||||
@@ -22,7 +22,6 @@ public record FFmpegProfileViewModel(
|
||||
FFmpegProfileBitDepth BitDepth,
|
||||
int VideoBitrate,
|
||||
int VideoBufferSize,
|
||||
FFmpegProfileTonemapAlgorithm TonemapAlgorithm,
|
||||
FFmpegProfileAudioFormat AudioFormat,
|
||||
int AudioBitrate,
|
||||
int AudioBufferSize,
|
||||
|
||||
@@ -24,7 +24,6 @@ internal static class Mapper
|
||||
profile.BitDepth,
|
||||
profile.VideoBitrate,
|
||||
profile.VideoBufferSize,
|
||||
profile.TonemapAlgorithm,
|
||||
profile.AudioFormat,
|
||||
profile.AudioBitrate,
|
||||
profile.AudioBufferSize,
|
||||
@@ -55,7 +54,6 @@ internal static class Mapper
|
||||
(int)ffmpegProfile.VideoFormat,
|
||||
ffmpegProfile.VideoBitrate,
|
||||
ffmpegProfile.VideoBufferSize,
|
||||
(int)ffmpegProfile.TonemapAlgorithm,
|
||||
(int)ffmpegProfile.AudioFormat,
|
||||
ffmpegProfile.AudioBitrate,
|
||||
ffmpegProfile.AudioBufferSize,
|
||||
|
||||
@@ -26,7 +26,7 @@ public class EmptyTrashHandler : IRequestHandler<EmptyTrash, Either<BaseError, U
|
||||
EmptyTrash request,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
SearchResult result = await _searchIndex.Search(_client, "state:FileNotFound", string.Empty, 0, 10_000);
|
||||
SearchResult result = await _searchIndex.Search(_client, "state:FileNotFound", 0, 10_000);
|
||||
var ids = result.Items.Map(i => i.Id).ToList();
|
||||
|
||||
// ElasticSearch remove items may fail, so do that first
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Threading.Channels;
|
||||
using ErsatzTV.Application.Playouts;
|
||||
using ErsatzTV.Application.Search;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
@@ -15,20 +14,17 @@ public class AddArtistToCollectionHandler :
|
||||
IRequestHandler<AddArtistToCollection, Either<BaseError, Unit>>
|
||||
{
|
||||
private readonly ChannelWriter<IBackgroundServiceRequest> _channel;
|
||||
private readonly ChannelWriter<ISearchIndexBackgroundServiceRequest> _searchChannel;
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
|
||||
public AddArtistToCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ChannelWriter<ISearchIndexBackgroundServiceRequest> searchChannel)
|
||||
ChannelWriter<IBackgroundServiceRequest> channel)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_channel = channel;
|
||||
_searchChannel = searchChannel;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -45,8 +41,6 @@ public class AddArtistToCollectionHandler :
|
||||
parameters.Collection.MediaItems.Add(parameters.Artist);
|
||||
if (await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
await _searchChannel.WriteAsync(new ReindexMediaItems([parameters.Artist.Id]));
|
||||
|
||||
// refresh all playouts that use this collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository
|
||||
.PlayoutIdsUsingCollection(parameters.Collection.Id))
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Threading.Channels;
|
||||
using ErsatzTV.Application.Playouts;
|
||||
using ErsatzTV.Application.Search;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
@@ -15,20 +14,17 @@ public class AddEpisodeToCollectionHandler :
|
||||
IRequestHandler<AddEpisodeToCollection, Either<BaseError, Unit>>
|
||||
{
|
||||
private readonly ChannelWriter<IBackgroundServiceRequest> _channel;
|
||||
private readonly ChannelWriter<ISearchIndexBackgroundServiceRequest> _searchChannel;
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
|
||||
public AddEpisodeToCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ChannelWriter<ISearchIndexBackgroundServiceRequest> searchChannel)
|
||||
ChannelWriter<IBackgroundServiceRequest> channel)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_channel = channel;
|
||||
_searchChannel = searchChannel;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -47,8 +43,6 @@ public class AddEpisodeToCollectionHandler :
|
||||
parameters.Collection.MediaItems.Add(parameters.Episode);
|
||||
if (await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
await _searchChannel.WriteAsync(new ReindexMediaItems([parameters.Episode.Id]));
|
||||
|
||||
// refresh all playouts that use this collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository
|
||||
.PlayoutIdsUsingCollection(parameters.Collection.Id))
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Threading.Channels;
|
||||
using ErsatzTV.Application.Playouts;
|
||||
using ErsatzTV.Application.Search;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
@@ -14,20 +13,17 @@ namespace ErsatzTV.Application.MediaCollections;
|
||||
public class AddImageToCollectionHandler : IRequestHandler<AddImageToCollection, Either<BaseError, Unit>>
|
||||
{
|
||||
private readonly ChannelWriter<IBackgroundServiceRequest> _channel;
|
||||
private readonly ChannelWriter<ISearchIndexBackgroundServiceRequest> _searchChannel;
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
|
||||
public AddImageToCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ChannelWriter<ISearchIndexBackgroundServiceRequest> searchChannel)
|
||||
ChannelWriter<IBackgroundServiceRequest> channel)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_channel = channel;
|
||||
_searchChannel = searchChannel;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -44,8 +40,6 @@ public class AddImageToCollectionHandler : IRequestHandler<AddImageToCollection,
|
||||
parameters.Collection.MediaItems.Add(parameters.Image);
|
||||
if (await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
await _searchChannel.WriteAsync(new ReindexMediaItems([parameters.Image.Id]));
|
||||
|
||||
// refresh all playouts that use this collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository
|
||||
.PlayoutIdsUsingCollection(parameters.Collection.Id))
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Threading.Channels;
|
||||
using ErsatzTV.Application.Playouts;
|
||||
using ErsatzTV.Application.Search;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
@@ -15,7 +14,6 @@ public class AddItemsToCollectionHandler :
|
||||
IRequestHandler<AddItemsToCollection, Either<BaseError, Unit>>
|
||||
{
|
||||
private readonly ChannelWriter<IBackgroundServiceRequest> _channel;
|
||||
private readonly ChannelWriter<ISearchIndexBackgroundServiceRequest> _searchChannel;
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
private readonly IMovieRepository _movieRepository;
|
||||
@@ -26,15 +24,13 @@ public class AddItemsToCollectionHandler :
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
IMovieRepository movieRepository,
|
||||
ITelevisionRepository televisionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ChannelWriter<ISearchIndexBackgroundServiceRequest> searchChannel)
|
||||
ChannelWriter<IBackgroundServiceRequest> channel)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_movieRepository = movieRepository;
|
||||
_televisionRepository = televisionRepository;
|
||||
_channel = channel;
|
||||
_searchChannel = searchChannel;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -71,8 +67,6 @@ public class AddItemsToCollectionHandler :
|
||||
|
||||
if (await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
await _searchChannel.WriteAsync(new ReindexMediaItems(toAddIds.ToArray()));
|
||||
|
||||
// refresh all playouts that use this collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository
|
||||
.PlayoutIdsUsingCollection(request.CollectionId))
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Threading.Channels;
|
||||
using ErsatzTV.Application.Playouts;
|
||||
using ErsatzTV.Application.Search;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
@@ -15,20 +14,17 @@ public class AddMovieToCollectionHandler :
|
||||
IRequestHandler<AddMovieToCollection, Either<BaseError, Unit>>
|
||||
{
|
||||
private readonly ChannelWriter<IBackgroundServiceRequest> _channel;
|
||||
private readonly ChannelWriter<ISearchIndexBackgroundServiceRequest> _searchChannel;
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
|
||||
public AddMovieToCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ChannelWriter<ISearchIndexBackgroundServiceRequest> searchChannel)
|
||||
ChannelWriter<IBackgroundServiceRequest> channel)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_channel = channel;
|
||||
_searchChannel = searchChannel;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -45,8 +41,6 @@ public class AddMovieToCollectionHandler :
|
||||
parameters.Collection.MediaItems.Add(parameters.Movie);
|
||||
if (await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
await _searchChannel.WriteAsync(new ReindexMediaItems([parameters.Movie.Id]));
|
||||
|
||||
// refresh all playouts that use this collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository
|
||||
.PlayoutIdsUsingCollection(parameters.Collection.Id))
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Threading.Channels;
|
||||
using ErsatzTV.Application.Playouts;
|
||||
using ErsatzTV.Application.Search;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
@@ -15,20 +14,17 @@ public class AddMusicVideoToCollectionHandler :
|
||||
IRequestHandler<AddMusicVideoToCollection, Either<BaseError, Unit>>
|
||||
{
|
||||
private readonly ChannelWriter<IBackgroundServiceRequest> _channel;
|
||||
private readonly ChannelWriter<ISearchIndexBackgroundServiceRequest> _searchChannel;
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
|
||||
public AddMusicVideoToCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ChannelWriter<ISearchIndexBackgroundServiceRequest> searchChannel)
|
||||
ChannelWriter<IBackgroundServiceRequest> channel)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_channel = channel;
|
||||
_searchChannel = searchChannel;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -47,8 +43,6 @@ public class AddMusicVideoToCollectionHandler :
|
||||
parameters.Collection.MediaItems.Add(parameters.MusicVideo);
|
||||
if (await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
await _searchChannel.WriteAsync(new ReindexMediaItems([parameters.MusicVideo.Id]));
|
||||
|
||||
// refresh all playouts that use this collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository
|
||||
.PlayoutIdsUsingCollection(parameters.Collection.Id))
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Threading.Channels;
|
||||
using ErsatzTV.Application.Playouts;
|
||||
using ErsatzTV.Application.Search;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
@@ -15,20 +14,17 @@ public class AddOtherVideoToCollectionHandler :
|
||||
IRequestHandler<AddOtherVideoToCollection, Either<BaseError, Unit>>
|
||||
{
|
||||
private readonly ChannelWriter<IBackgroundServiceRequest> _channel;
|
||||
private readonly ChannelWriter<ISearchIndexBackgroundServiceRequest> _searchChannel;
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
|
||||
public AddOtherVideoToCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ChannelWriter<ISearchIndexBackgroundServiceRequest> searchChannel)
|
||||
ChannelWriter<IBackgroundServiceRequest> channel)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_channel = channel;
|
||||
_searchChannel = searchChannel;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -47,8 +43,6 @@ public class AddOtherVideoToCollectionHandler :
|
||||
parameters.Collection.MediaItems.Add(parameters.OtherVideo);
|
||||
if (await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
await _searchChannel.WriteAsync(new ReindexMediaItems([parameters.OtherVideo.Id]));
|
||||
|
||||
// refresh all playouts that use this collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository
|
||||
.PlayoutIdsUsingCollection(parameters.Collection.Id))
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Threading.Channels;
|
||||
using ErsatzTV.Application.Playouts;
|
||||
using ErsatzTV.Application.Search;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
@@ -15,20 +14,17 @@ public class AddSeasonToCollectionHandler :
|
||||
IRequestHandler<AddSeasonToCollection, Either<BaseError, Unit>>
|
||||
{
|
||||
private readonly ChannelWriter<IBackgroundServiceRequest> _channel;
|
||||
private readonly ChannelWriter<ISearchIndexBackgroundServiceRequest> _searchChannel;
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
|
||||
public AddSeasonToCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ChannelWriter<ISearchIndexBackgroundServiceRequest> searchChannel)
|
||||
ChannelWriter<IBackgroundServiceRequest> channel)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_channel = channel;
|
||||
_searchChannel = searchChannel;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -45,8 +41,6 @@ public class AddSeasonToCollectionHandler :
|
||||
parameters.Collection.MediaItems.Add(parameters.Season);
|
||||
if (await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
await _searchChannel.WriteAsync(new ReindexMediaItems([parameters.Season.Id]));
|
||||
|
||||
// refresh all playouts that use this collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository
|
||||
.PlayoutIdsUsingCollection(parameters.Collection.Id))
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Threading.Channels;
|
||||
using ErsatzTV.Application.Playouts;
|
||||
using ErsatzTV.Application.Search;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
@@ -15,20 +14,17 @@ public class AddShowToCollectionHandler :
|
||||
IRequestHandler<AddShowToCollection, Either<BaseError, Unit>>
|
||||
{
|
||||
private readonly ChannelWriter<IBackgroundServiceRequest> _channel;
|
||||
private readonly ChannelWriter<ISearchIndexBackgroundServiceRequest> _searchChannel;
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
|
||||
public AddShowToCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ChannelWriter<ISearchIndexBackgroundServiceRequest> searchChannel)
|
||||
ChannelWriter<IBackgroundServiceRequest> channel)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_channel = channel;
|
||||
_searchChannel = searchChannel;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -45,8 +41,6 @@ public class AddShowToCollectionHandler :
|
||||
parameters.Collection.MediaItems.Add(parameters.Show);
|
||||
if (await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
await _searchChannel.WriteAsync(new ReindexMediaItems([parameters.Show.Id]));
|
||||
|
||||
// refresh all playouts that use this collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository
|
||||
.PlayoutIdsUsingCollection(parameters.Collection.Id))
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Threading.Channels;
|
||||
using ErsatzTV.Application.Playouts;
|
||||
using ErsatzTV.Application.Search;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
@@ -15,20 +14,17 @@ public class AddSongToCollectionHandler :
|
||||
IRequestHandler<AddSongToCollection, Either<BaseError, Unit>>
|
||||
{
|
||||
private readonly ChannelWriter<IBackgroundServiceRequest> _channel;
|
||||
private readonly ChannelWriter<ISearchIndexBackgroundServiceRequest> _searchChannel;
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
|
||||
public AddSongToCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ChannelWriter<ISearchIndexBackgroundServiceRequest> searchChannel)
|
||||
ChannelWriter<IBackgroundServiceRequest> channel)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_channel = channel;
|
||||
_searchChannel = searchChannel;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -45,8 +41,6 @@ public class AddSongToCollectionHandler :
|
||||
parameters.Collection.MediaItems.Add(parameters.Song);
|
||||
if (await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
await _searchChannel.WriteAsync(new ReindexMediaItems([parameters.Song.Id]));
|
||||
|
||||
// refresh all playouts that use this collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository
|
||||
.PlayoutIdsUsingCollection(parameters.Collection.Id))
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Search;
|
||||
using ErsatzTV.Core.Search;
|
||||
using ErsatzTV.Infrastructure.Data;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using static ErsatzTV.Application.MediaCollections.Mapper;
|
||||
@@ -13,16 +12,11 @@ public class CreateSmartCollectionHandler :
|
||||
{
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly ISearchTargets _searchTargets;
|
||||
private readonly ISmartCollectionCache _smartCollectionCache;
|
||||
|
||||
public CreateSmartCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
ISearchTargets searchTargets,
|
||||
ISmartCollectionCache smartCollectionCache)
|
||||
public CreateSmartCollectionHandler(IDbContextFactory<TvContext> dbContextFactory, ISearchTargets searchTargets)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_searchTargets = searchTargets;
|
||||
_smartCollectionCache = smartCollectionCache;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, SmartCollectionViewModel>> Handle(
|
||||
@@ -41,7 +35,6 @@ public class CreateSmartCollectionHandler :
|
||||
await dbContext.SmartCollections.AddAsync(smartCollection);
|
||||
await dbContext.SaveChangesAsync();
|
||||
_searchTargets.SearchTargetsChanged();
|
||||
await _smartCollectionCache.Refresh();
|
||||
return ProjectToViewModel(smartCollection);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Search;
|
||||
using ErsatzTV.Core.Search;
|
||||
using ErsatzTV.Infrastructure.Data;
|
||||
using ErsatzTV.Infrastructure.Extensions;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
@@ -12,16 +11,11 @@ public class DeleteSmartCollectionHandler : IRequestHandler<DeleteSmartCollectio
|
||||
{
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly ISearchTargets _searchTargets;
|
||||
private readonly ISmartCollectionCache _smartCollectionCache;
|
||||
|
||||
public DeleteSmartCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
ISearchTargets searchTargets,
|
||||
ISmartCollectionCache smartCollectionCache)
|
||||
public DeleteSmartCollectionHandler(IDbContextFactory<TvContext> dbContextFactory, ISearchTargets searchTargets)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_searchTargets = searchTargets;
|
||||
_smartCollectionCache = smartCollectionCache;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -38,7 +32,6 @@ public class DeleteSmartCollectionHandler : IRequestHandler<DeleteSmartCollectio
|
||||
dbContext.SmartCollections.Remove(smartCollection);
|
||||
await dbContext.SaveChangesAsync();
|
||||
_searchTargets.SearchTargetsChanged();
|
||||
await _smartCollectionCache.Refresh();
|
||||
return Unit.Default;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Threading.Channels;
|
||||
using ErsatzTV.Application.Playouts;
|
||||
using ErsatzTV.Application.Search;
|
||||
using ErsatzTV.Core;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
@@ -14,20 +13,17 @@ namespace ErsatzTV.Application.MediaCollections;
|
||||
public class RemoveItemsFromCollectionHandler : IRequestHandler<RemoveItemsFromCollection, Either<BaseError, Unit>>
|
||||
{
|
||||
private readonly ChannelWriter<IBackgroundServiceRequest> _channel;
|
||||
private readonly ChannelWriter<ISearchIndexBackgroundServiceRequest> _searchChannel;
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
|
||||
public RemoveItemsFromCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ChannelWriter<ISearchIndexBackgroundServiceRequest> searchChannel)
|
||||
ChannelWriter<IBackgroundServiceRequest> channel)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_channel = channel;
|
||||
_searchChannel = searchChannel;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -52,8 +48,6 @@ public class RemoveItemsFromCollectionHandler : IRequestHandler<RemoveItemsFromC
|
||||
|
||||
if (itemsToRemove.Count != 0 && await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
await _searchChannel.WriteAsync(new ReindexMediaItems(itemsToRemove.Select(mi => mi.Id).ToArray()));
|
||||
|
||||
// refresh all playouts that use this collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository.PlayoutIdsUsingCollection(collection.Id))
|
||||
{
|
||||
|
||||
@@ -5,7 +5,6 @@ using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
using ErsatzTV.Core.Interfaces.Search;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using ErsatzTV.Core.Search;
|
||||
using ErsatzTV.Infrastructure.Data;
|
||||
using ErsatzTV.Infrastructure.Extensions;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
@@ -18,20 +17,17 @@ public class UpdateSmartCollectionHandler : IRequestHandler<UpdateSmartCollectio
|
||||
private readonly IDbContextFactory<TvContext> _dbContextFactory;
|
||||
private readonly IMediaCollectionRepository _mediaCollectionRepository;
|
||||
private readonly ISearchTargets _searchTargets;
|
||||
private readonly ISmartCollectionCache _smartCollectionCache;
|
||||
|
||||
public UpdateSmartCollectionHandler(
|
||||
IDbContextFactory<TvContext> dbContextFactory,
|
||||
IMediaCollectionRepository mediaCollectionRepository,
|
||||
ChannelWriter<IBackgroundServiceRequest> channel,
|
||||
ISearchTargets searchTargets,
|
||||
ISmartCollectionCache smartCollectionCache)
|
||||
ISearchTargets searchTargets)
|
||||
{
|
||||
_dbContextFactory = dbContextFactory;
|
||||
_mediaCollectionRepository = mediaCollectionRepository;
|
||||
_channel = channel;
|
||||
_searchTargets = searchTargets;
|
||||
_smartCollectionCache = smartCollectionCache;
|
||||
}
|
||||
|
||||
public async Task<Either<BaseError, Unit>> Handle(
|
||||
@@ -51,7 +47,6 @@ public class UpdateSmartCollectionHandler : IRequestHandler<UpdateSmartCollectio
|
||||
if (await dbContext.SaveChangesAsync() > 0)
|
||||
{
|
||||
_searchTargets.SearchTargetsChanged();
|
||||
await _smartCollectionCache.Refresh();
|
||||
|
||||
// refresh all playouts that use this smart collection
|
||||
foreach (int playoutId in await _mediaCollectionRepository.PlayoutIdsUsingSmartCollection(request.Id))
|
||||
|
||||
@@ -99,12 +99,6 @@ public class ReplaceProgramScheduleItemsHandler : ProgramScheduleItemCommandBase
|
||||
var keyOrders = new Dictionary<CollectionKey, System.Collections.Generic.HashSet<PlaybackOrder>>();
|
||||
foreach (ReplaceProgramScheduleItem item in request.Items)
|
||||
{
|
||||
if (item.PlaybackOrder is PlaybackOrder.ShuffleInOrder &&
|
||||
item.FillWithGroupMode is not FillWithGroupMode.None)
|
||||
{
|
||||
return new BaseError("Shuffle in Order cannot be used with Fill With Group Mode");
|
||||
}
|
||||
|
||||
var key = new CollectionKey(
|
||||
item.CollectionType,
|
||||
item.CollectionId,
|
||||
|
||||
@@ -72,11 +72,6 @@ public class GetProgramScheduleItemsHandler :
|
||||
item = item with { PlayoutMode = PlayoutMode.One };
|
||||
}
|
||||
}
|
||||
|
||||
if (item.PlaybackOrder is PlaybackOrder.ShuffleInOrder)
|
||||
{
|
||||
item = item with { FillWithGroupMode = FillWithGroupMode.None };
|
||||
}
|
||||
}
|
||||
|
||||
return item;
|
||||
|
||||
@@ -30,5 +30,5 @@ public class QuerySearchIndexAllItemsHandler : IRequestHandler<QuerySearchIndexA
|
||||
await GetIds(LuceneSearchIndex.ImageType, request.Query));
|
||||
|
||||
private async Task<List<int>> GetIds(string type, string query) =>
|
||||
(await _searchIndex.Search(_client, $"type:{type} AND ({query})", string.Empty, 0, 0)).Items.Map(i => i.Id).ToList();
|
||||
(await _searchIndex.Search(_client, $"type:{type} AND ({query})", 0, 0)).Items.Map(i => i.Id).ToList();
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ public class QuerySearchIndexArtistsHandler : IRequestHandler<QuerySearchIndexAr
|
||||
SearchResult searchResult = await _searchIndex.Search(
|
||||
_client,
|
||||
request.Query,
|
||||
string.Empty,
|
||||
(request.PageNumber - 1) * request.PageSize,
|
||||
request.PageSize);
|
||||
|
||||
|
||||
@@ -58,7 +58,6 @@ public class
|
||||
SearchResult searchResult = await _searchIndex.Search(
|
||||
_client,
|
||||
request.Query,
|
||||
string.Empty,
|
||||
(request.PageNumber - 1) * request.PageSize,
|
||||
request.PageSize);
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ public class QuerySearchIndexImagesHandler(IClient client, ISearchIndex searchIn
|
||||
SearchResult searchResult = await searchIndex.Search(
|
||||
client,
|
||||
request.Query,
|
||||
string.Empty,
|
||||
(request.PageNumber - 1) * request.PageSize,
|
||||
request.PageSize);
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@ public class QuerySearchIndexMoviesHandler : IRequestHandler<QuerySearchIndexMov
|
||||
SearchResult searchResult = await _searchIndex.Search(
|
||||
_client,
|
||||
request.Query,
|
||||
string.Empty,
|
||||
(request.PageNumber - 1) * request.PageSize,
|
||||
request.PageSize);
|
||||
|
||||
|
||||
@@ -45,7 +45,6 @@ public class
|
||||
SearchResult searchResult = await _searchIndex.Search(
|
||||
_client,
|
||||
request.Query,
|
||||
string.Empty,
|
||||
(request.PageNumber - 1) * request.PageSize,
|
||||
request.PageSize);
|
||||
|
||||
|
||||
@@ -32,7 +32,6 @@ public class
|
||||
SearchResult searchResult = await _searchIndex.Search(
|
||||
_client,
|
||||
request.Query,
|
||||
string.Empty,
|
||||
(request.PageNumber - 1) * request.PageSize,
|
||||
request.PageSize);
|
||||
|
||||
|
||||
@@ -35,7 +35,6 @@ public class
|
||||
SearchResult searchResult = await _searchIndex.Search(
|
||||
_client,
|
||||
request.Query,
|
||||
string.Empty,
|
||||
(request.PageNumber - 1) * request.PageSize,
|
||||
request.PageSize);
|
||||
|
||||
|
||||
@@ -35,7 +35,6 @@ public class
|
||||
SearchResult searchResult = await _searchIndex.Search(
|
||||
_client,
|
||||
request.Query,
|
||||
string.Empty,
|
||||
(request.PageNumber - 1) * request.PageSize,
|
||||
request.PageSize);
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ public class QuerySearchIndexSongsHandler : IRequestHandler<QuerySearchIndexSong
|
||||
SearchResult searchResult = await _searchIndex.Search(
|
||||
_client,
|
||||
request.Query,
|
||||
string.Empty,
|
||||
(request.PageNumber - 1) * request.PageSize,
|
||||
request.PageSize);
|
||||
|
||||
|
||||
@@ -532,7 +532,7 @@ public class ExtractEmbeddedSubtitlesHandler : IRequestHandler<ExtractEmbeddedSu
|
||||
|
||||
byte[] textData = Encoding.UTF8.GetBytes(text);
|
||||
byte[] hash = MD5.HashData(textData);
|
||||
return Convert.ToHexString(hash);
|
||||
return BitConverter.ToString(hash).Replace("-", string.Empty);
|
||||
}
|
||||
|
||||
private sealed record SubtitleToExtract(Subtitle Subtitle, string OutputPath);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Immutable;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
@@ -134,18 +133,8 @@ public class GetTroubleshootingInfoHandler : IRequestHandler<GetTroubleshootingI
|
||||
}
|
||||
}
|
||||
|
||||
var environment = new Dictionary<string, string>();
|
||||
foreach (DictionaryEntry de in Environment.GetEnvironmentVariables())
|
||||
{
|
||||
if (de is { Key: string key, Value: string value } && key.StartsWith("ETV_", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
environment[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
return new TroubleshootingInfo(
|
||||
version,
|
||||
environment,
|
||||
healthCheckSummaries,
|
||||
ffmpegSettings,
|
||||
activeFFmpegProfiles,
|
||||
|
||||
@@ -5,7 +5,6 @@ namespace ErsatzTV.Application.Troubleshooting;
|
||||
|
||||
public record TroubleshootingInfo(
|
||||
string Version,
|
||||
Dictionary<string, string> Environment,
|
||||
IEnumerable<HealthCheckResultSummary> Health,
|
||||
FFmpegSettingsViewModel FFmpegSettings,
|
||||
IEnumerable<FFmpegProfile> FFmpegProfiles,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.Domain;
|
||||
@@ -18,7 +18,7 @@ public class PlayoutItemTests
|
||||
|
||||
string actual = item.GetDisplayDuration();
|
||||
|
||||
actual.ShouldBe("3:05:04");
|
||||
actual.Should().Be("3:05:04");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -32,6 +32,6 @@ public class PlayoutItemTests
|
||||
|
||||
string actual = item.GetDisplayDuration();
|
||||
|
||||
actual.ShouldBe("27:05:04");
|
||||
actual.Should().Be("27:05:04");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Emby;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
using ErsatzTV.FFmpeg.Runtime;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
@@ -42,7 +42,7 @@ public class EmbyPathReplacementServiceTests
|
||||
0,
|
||||
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -74,7 +74,7 @@ public class EmbyPathReplacementServiceTests
|
||||
0,
|
||||
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -98,7 +98,7 @@ public class EmbyPathReplacementServiceTests
|
||||
@"\\192.168.1.100\Something\Some Shared Folder",
|
||||
@"C:\mnt\something else\Some Shared Folder");
|
||||
|
||||
result.ShouldBe(@"C:\mnt\something else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
result.Should().Be(@"C:\mnt\something else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -130,7 +130,7 @@ public class EmbyPathReplacementServiceTests
|
||||
0,
|
||||
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -162,7 +162,7 @@ public class EmbyPathReplacementServiceTests
|
||||
0,
|
||||
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -194,7 +194,7 @@ public class EmbyPathReplacementServiceTests
|
||||
0,
|
||||
@"\\SERVERNAME\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -226,7 +226,7 @@ public class EmbyPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -258,7 +258,7 @@ public class EmbyPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -290,7 +290,7 @@ public class EmbyPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -322,6 +322,6 @@ public class EmbyPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +1,32 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<NoWarn>VSTHRD200</NoWarn>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Bugsnag" Version="4.0.0" />
|
||||
<PackageReference Include="CliWrap" Version="3.9.0" />
|
||||
<PackageReference Include="CliWrap" Version="3.8.2" />
|
||||
<PackageReference Include="FluentAssertions" Version="8.2.0" />
|
||||
<PackageReference Include="LanguageExt.Core" Version="4.4.9" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="9.0.6" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.6" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.6" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.6" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="9.0.6" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.14.15">
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.13.61">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="NSubstitute" Version="5.3.0" />
|
||||
<PackageReference Include="NUnit" Version="4.3.2" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
|
||||
<PackageReference Include="Serilog" Version="4.3.0" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging" Version="9.0.2" />
|
||||
<PackageReference Include="Serilog" Version="4.2.0" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Debug" Version="3.0.0" />
|
||||
<PackageReference Include="Shouldly" Version="4.3.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.FFmpeg;
|
||||
using ErsatzTV.Core.Interfaces.FFmpeg;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.FFmpeg;
|
||||
@@ -32,7 +32,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.FormatFlags.ShouldNotContain("+genpts");
|
||||
actual.FormatFlags.Should().NotContain("+genpts");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -57,7 +57,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ThreadCount.ShouldBe(7);
|
||||
actual.ThreadCount.Should().Be(7);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -78,7 +78,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ThreadCount.ShouldBe(7);
|
||||
actual.ThreadCount.Should().Be(7);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -100,8 +100,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
None);
|
||||
|
||||
string[] expected = { "+genpts", "+discardcorrupt", "+igndts" };
|
||||
actual.FormatFlags.Count.ShouldBe(expected.Length);
|
||||
expected.ShouldBeSubsetOf(actual.FormatFlags);
|
||||
actual.FormatFlags.Count.Should().Be(expected.Length);
|
||||
actual.FormatFlags.Should().Contain(expected);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -123,8 +123,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
None);
|
||||
|
||||
string[] expected = { "+genpts", "+discardcorrupt", "+igndts" };
|
||||
actual.FormatFlags.Count.ShouldBe(expected.Length);
|
||||
expected.ShouldBeSubsetOf(actual.FormatFlags);
|
||||
actual.FormatFlags.Count.Should().Be(expected.Length);
|
||||
actual.FormatFlags.Should().Contain(expected);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -145,7 +145,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.RealtimeOutput.ShouldBeTrue();
|
||||
actual.RealtimeOutput.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -166,7 +166,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.RealtimeOutput.ShouldBeTrue();
|
||||
actual.RealtimeOutput.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -189,8 +189,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.StreamSeek.IsSome.ShouldBeTrue();
|
||||
actual.StreamSeek.IfNone(TimeSpan.Zero).ShouldBe(TimeSpan.FromMinutes(5));
|
||||
actual.StreamSeek.IsSome.Should().BeTrue();
|
||||
actual.StreamSeek.IfNone(TimeSpan.Zero).Should().Be(TimeSpan.FromMinutes(5));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -213,8 +213,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.StreamSeek.IsSome.ShouldBeTrue();
|
||||
actual.StreamSeek.IfNone(TimeSpan.Zero).ShouldBe(TimeSpan.FromMinutes(5));
|
||||
actual.StreamSeek.IsSome.Should().BeTrue();
|
||||
actual.StreamSeek.IfNone(TimeSpan.Zero).Should().Be(TimeSpan.FromMinutes(5));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -241,7 +241,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -268,7 +268,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -295,8 +295,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.PadToDesiredResolution.ShouldBeFalse();
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
actual.PadToDesiredResolution.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -323,8 +323,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.PadToDesiredResolution.ShouldBeTrue();
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
actual.PadToDesiredResolution.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -351,9 +351,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
None);
|
||||
|
||||
IDisplaySize scaledSize = actual.ScaledSize.IfNone(new MediaVersion { Width = 0, Height = 0 });
|
||||
scaledSize.Width.ShouldBe(1280);
|
||||
scaledSize.Height.ShouldBe(554);
|
||||
actual.PadToDesiredResolution.ShouldBeTrue();
|
||||
scaledSize.Width.Should().Be(1280);
|
||||
scaledSize.Height.Should().Be(554);
|
||||
actual.PadToDesiredResolution.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -381,9 +381,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
None);
|
||||
|
||||
IDisplaySize scaledSize = actual.ScaledSize.IfNone(new MediaVersion { Width = 0, Height = 0 });
|
||||
scaledSize.Width.ShouldBe(1280);
|
||||
scaledSize.Height.ShouldBe(976);
|
||||
actual.PadToDesiredResolution.ShouldBeFalse();
|
||||
scaledSize.Width.Should().Be(1280);
|
||||
scaledSize.Height.Should().Be(976);
|
||||
actual.PadToDesiredResolution.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -411,9 +411,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
None);
|
||||
|
||||
IDisplaySize scaledSize = actual.ScaledSize.IfNone(new MediaVersion { Width = 0, Height = 0 });
|
||||
scaledSize.Width.ShouldBe(1694);
|
||||
scaledSize.Height.ShouldBe(720);
|
||||
actual.PadToDesiredResolution.ShouldBeFalse();
|
||||
scaledSize.Width.Should().Be(1694);
|
||||
scaledSize.Height.Should().Be(720);
|
||||
actual.PadToDesiredResolution.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -440,8 +440,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.PadToDesiredResolution.ShouldBeFalse();
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
actual.PadToDesiredResolution.Should().BeFalse();
|
||||
}
|
||||
|
||||
|
||||
@@ -470,9 +470,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.PadToDesiredResolution.ShouldBeTrue();
|
||||
actual.VideoFormat.ShouldBe(FFmpegProfileVideoFormat.H264);
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
actual.PadToDesiredResolution.Should().BeTrue();
|
||||
actual.VideoFormat.Should().Be(FFmpegProfileVideoFormat.H264);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -502,9 +502,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.PadToDesiredResolution.ShouldBeFalse();
|
||||
actual.VideoFormat.ShouldBe(FFmpegProfileVideoFormat.H264);
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
actual.PadToDesiredResolution.Should().BeFalse();
|
||||
actual.VideoFormat.Should().Be(FFmpegProfileVideoFormat.H264);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -533,9 +533,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.PadToDesiredResolution.ShouldBeFalse();
|
||||
actual.VideoFormat.ShouldBe(FFmpegProfileVideoFormat.Copy);
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
actual.PadToDesiredResolution.Should().BeFalse();
|
||||
actual.VideoFormat.Should().Be(FFmpegProfileVideoFormat.Copy);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -564,9 +564,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.PadToDesiredResolution.ShouldBeFalse();
|
||||
actual.VideoFormat.ShouldBe(FFmpegProfileVideoFormat.H264);
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
actual.PadToDesiredResolution.Should().BeFalse();
|
||||
actual.VideoFormat.Should().Be(FFmpegProfileVideoFormat.H264);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -594,9 +594,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.PadToDesiredResolution.ShouldBeTrue();
|
||||
actual.VideoBitrate.IfNone(0).ShouldBe(2525);
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
actual.PadToDesiredResolution.Should().BeTrue();
|
||||
actual.VideoBitrate.IfNone(0).Should().Be(2525);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -625,9 +625,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.PadToDesiredResolution.ShouldBeFalse();
|
||||
actual.VideoBitrate.IfNone(0).ShouldBe(2525);
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
actual.PadToDesiredResolution.Should().BeFalse();
|
||||
actual.VideoBitrate.IfNone(0).Should().Be(2525);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -655,9 +655,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.PadToDesiredResolution.ShouldBeTrue();
|
||||
actual.VideoBufferSize.IfNone(0).ShouldBe(2525);
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
actual.PadToDesiredResolution.Should().BeTrue();
|
||||
actual.VideoBufferSize.IfNone(0).Should().Be(2525);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -686,9 +686,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.ScaledSize.IsNone.ShouldBeTrue();
|
||||
actual.PadToDesiredResolution.ShouldBeFalse();
|
||||
actual.VideoBufferSize.IfNone(0).ShouldBe(2525);
|
||||
actual.ScaledSize.IsNone.Should().BeTrue();
|
||||
actual.PadToDesiredResolution.Should().BeFalse();
|
||||
actual.VideoBufferSize.IfNone(0).Should().Be(2525);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -712,7 +712,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.AudioFormat.ShouldBe(FFmpegProfileAudioFormat.Aac);
|
||||
actual.AudioFormat.Should().Be(FFmpegProfileAudioFormat.Aac);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -736,7 +736,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.AudioFormat.ShouldBe(FFmpegProfileAudioFormat.Aac);
|
||||
actual.AudioFormat.Should().Be(FFmpegProfileAudioFormat.Aac);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -760,7 +760,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.AudioFormat.ShouldBe(FFmpegProfileAudioFormat.Copy);
|
||||
actual.AudioFormat.Should().Be(FFmpegProfileAudioFormat.Copy);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -785,7 +785,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.AudioBitrate.IfNone(0).ShouldBe(2424);
|
||||
actual.AudioBitrate.IfNone(0).Should().Be(2424);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -810,7 +810,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.AudioBufferSize.IfNone(0).ShouldBe(2424);
|
||||
actual.AudioBufferSize.IfNone(0).Should().Be(2424);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -835,7 +835,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.AudioChannels.IfNone(0).ShouldBe(6);
|
||||
actual.AudioChannels.IfNone(0).Should().Be(6);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -860,7 +860,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.AudioSampleRate.IfNone(0).ShouldBe(48);
|
||||
actual.AudioSampleRate.IfNone(0).Should().Be(48);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -884,7 +884,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.AudioChannels.IfNone(0).ShouldBe(6);
|
||||
actual.AudioChannels.IfNone(0).Should().Be(6);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -908,7 +908,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.AudioSampleRate.IfNone(0).ShouldBe(48);
|
||||
actual.AudioSampleRate.IfNone(0).Should().Be(48);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -938,7 +938,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.AudioDuration.IfNone(TimeSpan.MinValue).ShouldBe(TimeSpan.FromMinutes(2));
|
||||
actual.AudioDuration.IfNone(TimeSpan.MinValue).Should().Be(TimeSpan.FromMinutes(2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -962,7 +962,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.NormalizeLoudnessMode.ShouldBe(NormalizeLoudnessMode.LoudNorm);
|
||||
actual.NormalizeLoudnessMode.Should().Be(NormalizeLoudnessMode.LoudNorm);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -988,7 +988,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
|
||||
false,
|
||||
None);
|
||||
|
||||
actual.HardwareAcceleration.ShouldBe(HardwareAccelerationKind.Qsv);
|
||||
actual.HardwareAcceleration.Should().Be(HardwareAccelerationKind.Qsv);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ using ErsatzTV.Core.FFmpeg;
|
||||
using ErsatzTV.Core.Interfaces.Metadata;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
using ErsatzTV.Infrastructure.Scripting;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
@@ -64,10 +64,10 @@ public class FFmpegStreamSelectorTests
|
||||
Substitute.For<ILogger<FFmpegStreamSelector>>());
|
||||
|
||||
Option<MediaStream> selectedStream = await selector.SelectAudioStream(audioVersion, StreamingMode.TransportStream, channel, "jpn", "Whatever");
|
||||
selectedStream.IsSome.ShouldBeTrue();
|
||||
selectedStream.IsSome.Should().BeTrue();
|
||||
foreach (MediaStream stream in selectedStream)
|
||||
{
|
||||
stream.Language.ShouldBe("ja");
|
||||
stream.Language.Should().Be("ja");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,10 +119,10 @@ public class FFmpegStreamSelectorTests
|
||||
Substitute.For<ILogger<FFmpegStreamSelector>>());
|
||||
|
||||
Option<MediaStream> selectedStream = await selector.SelectAudioStream(audioVersion, StreamingMode.TransportStream, channel, null, channel.PreferredAudioTitle);
|
||||
selectedStream.IsSome.ShouldBeTrue();
|
||||
selectedStream.IsSome.Should().BeTrue();
|
||||
foreach (MediaStream stream in selectedStream)
|
||||
{
|
||||
stream.Language.ShouldBe("ja");
|
||||
stream.Language.Should().Be("ja");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,10 +166,10 @@ public class FFmpegStreamSelectorTests
|
||||
channel,
|
||||
"heb",
|
||||
ChannelSubtitleMode.Any);
|
||||
selectedStream.IsSome.ShouldBeTrue();
|
||||
selectedStream.IsSome.Should().BeTrue();
|
||||
foreach (Subtitle stream in selectedStream)
|
||||
{
|
||||
stream.Language.ShouldBe("he");
|
||||
stream.Language.Should().Be("he");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using ErsatzTV.Core.FFmpeg;
|
||||
using ErsatzTV.Core.Interfaces.FFmpeg;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
@@ -42,9 +42,9 @@ live001139.ts").Split(Environment.NewLine);
|
||||
|
||||
TrimPlaylistResult result = _hlsPlaylistFilter.TrimPlaylist(start, start.AddSeconds(-30), input);
|
||||
|
||||
result.PlaylistStart.ShouldBe(start);
|
||||
result.Sequence.ShouldBe(1137);
|
||||
result.Playlist.ShouldBe(
|
||||
result.PlaylistStart.Should().Be(start);
|
||||
result.Sequence.Should().Be(1137);
|
||||
result.Playlist.Should().Be(
|
||||
NormalizeLineEndings(
|
||||
@"#EXTM3U
|
||||
#EXT-X-VERSION:6
|
||||
@@ -87,9 +87,9 @@ live001139.ts").Split(Environment.NewLine);
|
||||
|
||||
TrimPlaylistResult result = _hlsPlaylistFilter.TrimPlaylist(start, start.AddSeconds(-30), input, 2);
|
||||
|
||||
result.PlaylistStart.ShouldBe(start);
|
||||
result.Sequence.ShouldBe(1137);
|
||||
result.Playlist.ShouldBe(
|
||||
result.PlaylistStart.Should().Be(start);
|
||||
result.Sequence.Should().Be(1137);
|
||||
result.Playlist.Should().Be(
|
||||
NormalizeLineEndings(
|
||||
@"#EXTM3U
|
||||
#EXT-X-VERSION:6
|
||||
@@ -134,9 +134,9 @@ live001139.ts").Split(Environment.NewLine);
|
||||
int.MaxValue,
|
||||
true);
|
||||
|
||||
result.PlaylistStart.ShouldBe(start);
|
||||
result.Sequence.ShouldBe(1137);
|
||||
result.Playlist.ShouldBe(
|
||||
result.PlaylistStart.Should().Be(start);
|
||||
result.Sequence.Should().Be(1137);
|
||||
result.Playlist.Should().Be(
|
||||
NormalizeLineEndings(
|
||||
@"#EXTM3U
|
||||
#EXT-X-VERSION:6
|
||||
@@ -180,9 +180,9 @@ live001139.ts").Split(Environment.NewLine);
|
||||
|
||||
TrimPlaylistResult result = _hlsPlaylistFilter.TrimPlaylist(start, start.AddSeconds(6), input, 1);
|
||||
|
||||
result.PlaylistStart.ShouldBe(start.AddSeconds(8));
|
||||
result.Sequence.ShouldBe(1139);
|
||||
result.Playlist.ShouldBe(
|
||||
result.PlaylistStart.Should().Be(start.AddSeconds(8));
|
||||
result.Sequence.Should().Be(1139);
|
||||
result.Playlist.Should().Be(
|
||||
NormalizeLineEndings(
|
||||
@"#EXTM3U
|
||||
#EXT-X-VERSION:6
|
||||
@@ -220,9 +220,9 @@ live001139.ts").Split(Environment.NewLine);
|
||||
|
||||
TrimPlaylistResult result = _hlsPlaylistFilter.TrimPlaylist(start, start.AddSeconds(6), input);
|
||||
|
||||
result.PlaylistStart.ShouldBe(start);
|
||||
result.Sequence.ShouldBe(1137);
|
||||
result.Playlist.ShouldBe(
|
||||
result.PlaylistStart.Should().Be(start);
|
||||
result.Sequence.Should().Be(1137);
|
||||
result.Playlist.Should().Be(
|
||||
NormalizeLineEndings(
|
||||
@"#EXTM3U
|
||||
#EXT-X-VERSION:6
|
||||
@@ -508,9 +508,9 @@ live000082.ts").Split(Environment.NewLine);
|
||||
|
||||
TrimPlaylistResult result = _hlsPlaylistFilter.TrimPlaylist(start, start.AddSeconds(220), input);
|
||||
|
||||
// result.PlaylistStart.ShouldBe(start);
|
||||
result.Sequence.ShouldBe(56);
|
||||
result.Playlist.ShouldBe(
|
||||
// result.PlaylistStart.Should().Be(start);
|
||||
result.Sequence.Should().Be(56);
|
||||
result.Playlist.Should().Be(
|
||||
NormalizeLineEndings(
|
||||
@"#EXTM3U
|
||||
#EXT-X-VERSION:6
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using ErsatzTV.Core.FFmpeg;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.FFmpeg;
|
||||
@@ -18,6 +18,6 @@ public class WatermarkCalculatorTests
|
||||
15,
|
||||
10);
|
||||
|
||||
actual.Count.ShouldBe(0);
|
||||
actual.Should().HaveCount(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public class FakeMediaCollectionRepository : IMediaCollectionRepository
|
||||
public Task<List<MediaItem>> GetMultiCollectionItemsByName(string name) => throw new NotSupportedException();
|
||||
public Task<List<MediaItem>> GetSmartCollectionItems(int id) => _data[id].ToList().AsTask();
|
||||
public Task<List<MediaItem>> GetSmartCollectionItemsByName(string name) => throw new NotSupportedException();
|
||||
public Task<List<MediaItem>> GetSmartCollectionItems(string query, string smartCollectionName) => throw new NotSupportedException();
|
||||
public Task<List<MediaItem>> GetSmartCollectionItems(string query) => throw new NotSupportedException();
|
||||
public Task<List<MediaItem>> GetShowItemsByShowGuids(List<string> guids) => throw new NotSupportedException();
|
||||
public Task<List<MediaItem>> GetPlaylistItems(int id) => throw new NotSupportedException();
|
||||
public Task<List<Movie>> GetMovie(int id) => throw new NotSupportedException();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using ErsatzTV.Core.Iptv;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.Iptv;
|
||||
@@ -16,7 +16,7 @@ public class ChannelIdentifierTests
|
||||
public void TestLegacy(string channelNumber, string expected)
|
||||
{
|
||||
string actual = ChannelIdentifier.LegacyFromNumber(channelNumber);
|
||||
actual.ShouldBe(expected);
|
||||
actual.Should().Be(expected);
|
||||
}
|
||||
|
||||
[TestCase("1.23", "C1.23.150.ersatztv.org")]
|
||||
@@ -28,6 +28,6 @@ public class ChannelIdentifierTests
|
||||
public void TestNew(string channelNumber, string expected)
|
||||
{
|
||||
string actual = ChannelIdentifier.FromNumber(channelNumber);
|
||||
actual.ShouldBe(expected);
|
||||
actual.Should().Be(expected);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
using ErsatzTV.Core.Jellyfin;
|
||||
using ErsatzTV.FFmpeg.Runtime;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
@@ -42,7 +42,7 @@ public class JellyfinPathReplacementServiceTests
|
||||
0,
|
||||
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -74,7 +74,7 @@ public class JellyfinPathReplacementServiceTests
|
||||
0,
|
||||
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -98,7 +98,7 @@ public class JellyfinPathReplacementServiceTests
|
||||
@"\\192.168.1.100\Something\Some Shared Folder",
|
||||
@"C:\mnt\something else\Some Shared Folder");
|
||||
|
||||
result.ShouldBe(@"C:\mnt\something else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
result.Should().Be(@"C:\mnt\something else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -130,7 +130,7 @@ public class JellyfinPathReplacementServiceTests
|
||||
0,
|
||||
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -162,7 +162,7 @@ public class JellyfinPathReplacementServiceTests
|
||||
0,
|
||||
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -194,7 +194,7 @@ public class JellyfinPathReplacementServiceTests
|
||||
0,
|
||||
@"\\SERVERNAME\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -226,7 +226,7 @@ public class JellyfinPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -258,7 +258,7 @@ public class JellyfinPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -290,7 +290,7 @@ public class JellyfinPathReplacementServiceTests
|
||||
0,
|
||||
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -322,7 +322,7 @@ public class JellyfinPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -354,6 +354,6 @@ public class JellyfinPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Jellyfin;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Flurl;
|
||||
using NUnit.Framework;
|
||||
|
||||
@@ -23,7 +23,7 @@ public class JellyfinUrlTests
|
||||
|
||||
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
|
||||
|
||||
url.ToString().ShouldBe("https://some.jellyfin.server/Items/2/Images/3?tag=4");
|
||||
url.ToString().Should().Be("https://some.jellyfin.server/Items/2/Images/3?tag=4");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -41,7 +41,7 @@ public class JellyfinUrlTests
|
||||
|
||||
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
|
||||
|
||||
url.ToString().ShouldBe("https://some.jellyfin.server/Items/2/Images/3?tag=4");
|
||||
url.ToString().Should().Be("https://some.jellyfin.server/Items/2/Images/3?tag=4");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -59,7 +59,7 @@ public class JellyfinUrlTests
|
||||
|
||||
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
|
||||
|
||||
url.ToString().ShouldBe("https://some.jellyfin.server:1000/Items/2/Images/3?tag=4");
|
||||
url.ToString().Should().Be("https://some.jellyfin.server:1000/Items/2/Images/3?tag=4");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -77,7 +77,7 @@ public class JellyfinUrlTests
|
||||
|
||||
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
|
||||
|
||||
url.ToString().ShouldBe("https://some.jellyfin.server:1000/Items/2/Images/3?tag=4");
|
||||
url.ToString().Should().Be("https://some.jellyfin.server:1000/Items/2/Images/3?tag=4");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -95,7 +95,7 @@ public class JellyfinUrlTests
|
||||
|
||||
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
|
||||
|
||||
url.ToString().ShouldBe("https://some.jellyfin.server/jellyfin/Items/2/Images/3?tag=4");
|
||||
url.ToString().Should().Be("https://some.jellyfin.server/jellyfin/Items/2/Images/3?tag=4");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -113,6 +113,6 @@ public class JellyfinUrlTests
|
||||
|
||||
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
|
||||
|
||||
url.ToString().ShouldBe("https://some.jellyfin.server/jellyfin/Items/2/Images/3?tag=4");
|
||||
url.ToString().Should().Be("https://some.jellyfin.server/jellyfin/Items/2/Images/3?tag=4");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Bugsnag;
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Metadata;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
|
||||
@@ -65,10 +65,10 @@ public class FallbackMetadataProviderTests
|
||||
}
|
||||
});
|
||||
|
||||
metadata.Count.ShouldBe(1);
|
||||
metadata.Count.Should().Be(1);
|
||||
// TODO: how can we test season number? do we need to?
|
||||
// metadata.Season.ShouldBe(season);
|
||||
metadata.Head().EpisodeNumber.ShouldBe(episode);
|
||||
// metadata.Season.Should().Be(season);
|
||||
metadata.Head().EpisodeNumber.Should().Be(episode);
|
||||
}
|
||||
|
||||
[TestCase("Awesome Show - S01_BLAH.mkv", 0)]
|
||||
@@ -91,8 +91,8 @@ public class FallbackMetadataProviderTests
|
||||
}
|
||||
});
|
||||
|
||||
metadata.Count.ShouldBe(1);
|
||||
metadata.Head().EpisodeNumber.ShouldBe(episode);
|
||||
metadata.Count.Should().Be(1);
|
||||
metadata.Head().EpisodeNumber.Should().Be(episode);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -122,8 +122,8 @@ public class FallbackMetadataProviderTests
|
||||
}
|
||||
});
|
||||
|
||||
metadata.Count.ShouldBe(2);
|
||||
metadata.Map(m => m.EpisodeNumber).ShouldBe([episode1, episode2]);
|
||||
metadata.Count.Should().Be(2);
|
||||
metadata.Map(m => m.EpisodeNumber).Should().BeEquivalentTo(new[] { episode1, episode2 });
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -147,8 +147,8 @@ public class FallbackMetadataProviderTests
|
||||
}
|
||||
});
|
||||
|
||||
metadata.ShouldNotBeNull();
|
||||
metadata.Title.ShouldBe(expectedTitle);
|
||||
metadata.Should().NotBeNull();
|
||||
metadata.Title.Should().Be(expectedTitle);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -172,6 +172,6 @@ public class FallbackMetadataProviderTests
|
||||
public void GetSeasonNumberForFolder_ShouldHandleVariousFormats(string folder, int? season)
|
||||
{
|
||||
Option<int> actual = _fallbackMetadataProvider.GetSeasonNumberForFolder(folder);
|
||||
actual.ShouldBe(Optional(season));
|
||||
actual.Should<Option<int>>().Be(Optional(season));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
using ErsatzTV.Core.Plex;
|
||||
using ErsatzTV.FFmpeg.Runtime;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
@@ -42,7 +42,7 @@ public class PlexPathReplacementServiceTests
|
||||
0,
|
||||
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -74,7 +74,7 @@ public class PlexPathReplacementServiceTests
|
||||
0,
|
||||
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -106,7 +106,7 @@ public class PlexPathReplacementServiceTests
|
||||
0,
|
||||
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -138,7 +138,7 @@ public class PlexPathReplacementServiceTests
|
||||
0,
|
||||
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -170,7 +170,7 @@ public class PlexPathReplacementServiceTests
|
||||
0,
|
||||
@"\\SERVERNAME\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -202,7 +202,7 @@ public class PlexPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -234,7 +234,7 @@ public class PlexPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -266,7 +266,7 @@ public class PlexPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -298,6 +298,6 @@ public class PlexPathReplacementServiceTests
|
||||
0,
|
||||
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
|
||||
|
||||
result.ShouldBe(@"/Some Movie/Some Movie.mkv");
|
||||
result.Should().Be(@"/Some Movie/Some Movie.mkv");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Domain.Scheduling;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using ErsatzTV.Core.Scheduling.BlockScheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Newtonsoft.Json;
|
||||
using NUnit.Framework;
|
||||
|
||||
@@ -21,7 +21,7 @@ public static class BlockPlayoutChangeDetectionTests
|
||||
// test case: block has moved from one time to another time, nothing after
|
||||
// test case: block has moved from one time to another time, same block after
|
||||
// test case: block has moved from one time to another time, different block with same collection after
|
||||
// test case: block was moved from one time to another time, different block with different collection after
|
||||
// test case: block was moved from one time to another time, different block with different collection after
|
||||
|
||||
// test case: block was removed, nothing after
|
||||
// test case: block was removed, same block after
|
||||
@@ -79,10 +79,10 @@ public static class BlockPlayoutChangeDetectionTests
|
||||
collectionEtags);
|
||||
|
||||
// nothing to schedule
|
||||
result.Item1.Count.ShouldBe(0);
|
||||
result.Item1.Should().HaveCount(0);
|
||||
|
||||
// do not need to remove any playout items or history
|
||||
result.Item2.Count.ShouldBe(0);
|
||||
result.Item2.Should().HaveCount(0);
|
||||
}
|
||||
|
||||
private static List<Block> Blocks(DateTimeOffset dateUpdated)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using ErsatzTV.Core.Domain.Scheduling;
|
||||
using ErsatzTV.Core.Scheduling.BlockScheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.Scheduling.BlockScheduling;
|
||||
@@ -64,7 +64,7 @@ public static class EffectiveBlockTests
|
||||
|
||||
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, start, 5);
|
||||
|
||||
result.Count.ShouldBe(0);
|
||||
result.Should().HaveCount(0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -89,16 +89,16 @@ public static class EffectiveBlockTests
|
||||
|
||||
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, start, 5);
|
||||
|
||||
result.Count.ShouldBe(3);
|
||||
result.Should().HaveCount(3);
|
||||
|
||||
result[0].Start.DayOfWeek.ShouldBe(DayOfWeek.Monday);
|
||||
result[0].Start.Date.ShouldBe(GetLocalDate(2024, 1, 15).Date);
|
||||
result[0].Start.DayOfWeek.Should().Be(DayOfWeek.Monday);
|
||||
result[0].Start.Date.Should().Be(GetLocalDate(2024, 1, 15).Date);
|
||||
|
||||
result[1].Start.DayOfWeek.ShouldBe(DayOfWeek.Wednesday);
|
||||
result[1].Start.Date.ShouldBe(GetLocalDate(2024, 1, 17).Date);
|
||||
result[1].Start.DayOfWeek.Should().Be(DayOfWeek.Wednesday);
|
||||
result[1].Start.Date.Should().Be(GetLocalDate(2024, 1, 17).Date);
|
||||
|
||||
result[2].Start.DayOfWeek.ShouldBe(DayOfWeek.Friday);
|
||||
result[2].Start.Date.ShouldBe(GetLocalDate(2024, 1, 19).Date);
|
||||
result[2].Start.DayOfWeek.Should().Be(DayOfWeek.Friday);
|
||||
result[2].Start.Date.Should().Be(GetLocalDate(2024, 1, 19).Date);
|
||||
}
|
||||
|
||||
// TODO: test when clocks spring forward
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.Scheduling;
|
||||
@@ -23,8 +23,8 @@ public class ChronologicalContentTests
|
||||
|
||||
for (var i = 1; i <= 10; i++)
|
||||
{
|
||||
chronologicalContent.Current.IsSome.ShouldBeTrue();
|
||||
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
|
||||
chronologicalContent.Current.IsSome.Should().BeTrue();
|
||||
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
|
||||
chronologicalContent.MoveNext();
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,7 @@ public class ChronologicalContentTests
|
||||
|
||||
for (var i = 0; i < 10; i++)
|
||||
{
|
||||
chronologicalContent.State.Index.ShouldBe(i % 10);
|
||||
chronologicalContent.State.Index.Should().Be(i % 10);
|
||||
chronologicalContent.MoveNext();
|
||||
}
|
||||
}
|
||||
@@ -54,9 +54,9 @@ public class ChronologicalContentTests
|
||||
|
||||
for (var i = 6; i <= 10; i++)
|
||||
{
|
||||
chronologicalContent.Current.IsSome.ShouldBeTrue();
|
||||
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
|
||||
chronologicalContent.State.Index.ShouldBe(i - 1);
|
||||
chronologicalContent.Current.IsSome.Should().BeTrue();
|
||||
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
|
||||
chronologicalContent.State.Index.Should().Be(i - 1);
|
||||
chronologicalContent.MoveNext();
|
||||
}
|
||||
}
|
||||
@@ -69,8 +69,8 @@ public class ChronologicalContentTests
|
||||
|
||||
var chronologicalContent = new ChronologicalMediaCollectionEnumerator(contents, state);
|
||||
|
||||
chronologicalContent.State.Index.ShouldBe(0);
|
||||
chronologicalContent.State.Seed.ShouldBe(0);
|
||||
chronologicalContent.State.Index.Should().Be(0);
|
||||
chronologicalContent.State.Seed.Should().Be(0);
|
||||
}
|
||||
|
||||
private static List<MediaItem> Episodes(int count) =>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.Scheduling;
|
||||
@@ -23,8 +23,8 @@ public class CustomOrderContentTests
|
||||
|
||||
for (var i = 10; i >= 1; i--)
|
||||
{
|
||||
customOrderContent.Current.IsSome.ShouldBeTrue();
|
||||
customOrderContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
|
||||
customOrderContent.Current.IsSome.Should().BeTrue();
|
||||
customOrderContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
|
||||
customOrderContent.MoveNext();
|
||||
}
|
||||
}
|
||||
@@ -40,7 +40,7 @@ public class CustomOrderContentTests
|
||||
|
||||
for (var i = 0; i < 10; i++)
|
||||
{
|
||||
customOrderContent.State.Index.ShouldBe(i % 10);
|
||||
customOrderContent.State.Index.Should().Be(i % 10);
|
||||
customOrderContent.MoveNext();
|
||||
}
|
||||
}
|
||||
@@ -56,9 +56,9 @@ public class CustomOrderContentTests
|
||||
|
||||
for (var i = 5; i >= 1; i--)
|
||||
{
|
||||
customOrderContent.Current.IsSome.ShouldBeTrue();
|
||||
customOrderContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
|
||||
customOrderContent.State.Index.ShouldBe(5 - i + 5); // 5 through 10
|
||||
customOrderContent.Current.IsSome.Should().BeTrue();
|
||||
customOrderContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
|
||||
customOrderContent.State.Index.Should().Be(5 - i + 5); // 5 through 10
|
||||
customOrderContent.MoveNext();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.Scheduling;
|
||||
@@ -24,7 +24,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
|
||||
|
||||
result.Count.ShouldBe(3);
|
||||
result.Count.Should().Be(3);
|
||||
ShouldHaveOneItem(result, mediaItems[0]);
|
||||
ShouldHaveTwoItems(result, mediaItems[1], mediaItems[2]);
|
||||
ShouldHaveOneItem(result, mediaItems[3]);
|
||||
@@ -47,7 +47,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
|
||||
|
||||
result.Count.ShouldBe(2);
|
||||
result.Count.Should().Be(2);
|
||||
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]);
|
||||
ShouldHaveOneItem(result, mediaItems[2]);
|
||||
}
|
||||
@@ -68,7 +68,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
|
||||
|
||||
result.Count.ShouldBe(2);
|
||||
result.Count.Should().Be(2);
|
||||
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]);
|
||||
ShouldHaveOneItem(result, mediaItems[2]);
|
||||
}
|
||||
@@ -89,7 +89,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
|
||||
|
||||
result.Count.ShouldBe(2);
|
||||
result.Count.Should().Be(2);
|
||||
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]);
|
||||
ShouldHaveOneItem(result, mediaItems[2]);
|
||||
}
|
||||
@@ -117,7 +117,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
|
||||
|
||||
result.Count.ShouldBe(3);
|
||||
result.Count.Should().Be(3);
|
||||
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]);
|
||||
ShouldHaveOneItem(result, mediaItems[2]);
|
||||
ShouldHaveTwoItems(result, mediaItems[3], mediaItems[4]);
|
||||
@@ -140,7 +140,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
|
||||
|
||||
result.Count.ShouldBe(2);
|
||||
result.Count.Should().Be(2);
|
||||
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]);
|
||||
ShouldHaveTwoItems(result, mediaItems[2], mediaItems[3]);
|
||||
}
|
||||
@@ -162,7 +162,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
|
||||
|
||||
result.Count.ShouldBe(3);
|
||||
result.Count.Should().Be(3);
|
||||
ShouldHaveOneItem(result, mediaItems[0]);
|
||||
ShouldHaveOneItem(result, mediaItems[1]);
|
||||
ShouldHaveTwoItems(result, mediaItems[2], mediaItems[3]);
|
||||
@@ -185,7 +185,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
|
||||
|
||||
result.Count.ShouldBe(3);
|
||||
result.Count.Should().Be(3);
|
||||
ShouldHaveOneItem(result, mediaItems[0]);
|
||||
ShouldHaveTwoItems(result, mediaItems[1], mediaItems[2]);
|
||||
ShouldHaveOneItem(result, mediaItems[3]);
|
||||
@@ -208,7 +208,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
|
||||
|
||||
result.Count.ShouldBe(4);
|
||||
result.Count.Should().Be(4);
|
||||
ShouldHaveOneItem(result, mediaItems[0]);
|
||||
ShouldHaveOneItem(result, mediaItems[1]);
|
||||
ShouldHaveOneItem(result, mediaItems[2]);
|
||||
@@ -232,7 +232,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
|
||||
|
||||
result.Count.ShouldBe(3);
|
||||
result.Count.Should().Be(3);
|
||||
ShouldHaveOneItem(result, mediaItems[0]);
|
||||
ShouldHaveTwoItems(result, mediaItems[1], mediaItems[2]);
|
||||
ShouldHaveOneItem(result, mediaItems[3]);
|
||||
@@ -259,7 +259,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
|
||||
|
||||
result.Count.ShouldBe(3);
|
||||
result.Count.Should().Be(3);
|
||||
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[2]);
|
||||
ShouldHaveOneItem(result, mediaItems[1]);
|
||||
ShouldHaveOneItem(result, mediaItems[3]);
|
||||
@@ -286,7 +286,7 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, true);
|
||||
|
||||
result.Count.ShouldBe(2);
|
||||
result.Count.Should().Be(2);
|
||||
ShouldHaveMultipleItems(result, mediaItems[0], new List<MediaItem> { mediaItems[1], mediaItems[2] });
|
||||
ShouldHaveOneItem(result, mediaItems[3]);
|
||||
}
|
||||
@@ -313,14 +313,14 @@ public class MultiPartEpisodeGrouperTests
|
||||
|
||||
private static void ShouldHaveOneItem(IEnumerable<GroupedMediaItem> result, MediaItem item) =>
|
||||
result.Filter(g => g.First == item && Optional(g.Additional).Flatten().HeadOrNone() == None)
|
||||
.Count().ShouldBe(1);
|
||||
.Should().HaveCount(1);
|
||||
|
||||
private static void ShouldHaveTwoItems(
|
||||
IEnumerable<GroupedMediaItem> result,
|
||||
MediaItem first,
|
||||
MediaItem additional) =>
|
||||
result.Filter(g => g.First == first && Optional(g.Additional).Flatten().HeadOrNone() == Some(additional))
|
||||
.Count().ShouldBe(1);
|
||||
.Should().HaveCount(1);
|
||||
|
||||
private static void ShouldHaveMultipleItems(
|
||||
IEnumerable<GroupedMediaItem> result,
|
||||
@@ -329,5 +329,5 @@ public class MultiPartEpisodeGrouperTests
|
||||
result.Filter(
|
||||
g => g.First == first && g.Additional != null && g.Additional.Count == additional.Count &&
|
||||
additional.ForAll(g.Additional.Contains))
|
||||
.Count().ShouldBe(1);
|
||||
.Should().HaveCount(1);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Interfaces.Repositories;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
|
||||
@@ -71,7 +71,7 @@ public class PlaylistEnumeratorTests
|
||||
totalLength += 1;
|
||||
}
|
||||
|
||||
totalLength.ShouldBe(8);
|
||||
totalLength.Should().Be(8);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -135,7 +135,7 @@ public class PlaylistEnumeratorTests
|
||||
totalLength += 1;
|
||||
}
|
||||
|
||||
totalLength.ShouldBe(8);
|
||||
totalLength.Should().Be(8);
|
||||
}
|
||||
|
||||
private static Movie FakeMovie(int id) => new()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
||||
using ErsatzTV.Core.Domain.Filler;
|
||||
using ErsatzTV.Core.Interfaces.Scheduling;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
@@ -61,7 +61,7 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
|
||||
true,
|
||||
_cancellationToken);
|
||||
|
||||
playoutItems.Count.ShouldBe(1);
|
||||
playoutItems.Count.Should().Be(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -114,7 +114,7 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
|
||||
true,
|
||||
_cancellationToken);
|
||||
|
||||
playoutItems.Count.ShouldBe(1);
|
||||
playoutItems.Count.Should().Be(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -181,13 +181,13 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
|
||||
true,
|
||||
_cancellationToken);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[1].MediaItemId.ShouldBe(3);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(6));
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(11));
|
||||
playoutItems.Count.Should().Be(3);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[1].MediaItemId.Should().Be(3);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(6));
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(11));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -273,27 +273,27 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
|
||||
true,
|
||||
_cancellationToken);
|
||||
|
||||
playoutItems.Count.ShouldBe(5);
|
||||
playoutItems.Count.Should().Be(5);
|
||||
|
||||
// content chapter 1
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
|
||||
// mid-roll 1
|
||||
playoutItems[1].MediaItemId.ShouldBe(3);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(6));
|
||||
playoutItems[1].MediaItemId.Should().Be(3);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(6));
|
||||
|
||||
// mid-roll 2
|
||||
playoutItems[2].MediaItemId.ShouldBe(4);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(11));
|
||||
playoutItems[2].MediaItemId.Should().Be(4);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(11));
|
||||
|
||||
// content chapter 2
|
||||
playoutItems[3].MediaItemId.ShouldBe(1);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(16));
|
||||
playoutItems[3].MediaItemId.Should().Be(1);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(16));
|
||||
|
||||
// post-roll
|
||||
playoutItems[4].MediaItemId.ShouldBe(5);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(55));
|
||||
playoutItems[4].MediaItemId.Should().Be(5);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(55));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -379,27 +379,27 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
|
||||
true,
|
||||
_cancellationToken);
|
||||
|
||||
playoutItems.Count.ShouldBe(5);
|
||||
playoutItems.Count.Should().Be(5);
|
||||
|
||||
// content chapter 1
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
|
||||
// mid-roll 1
|
||||
playoutItems[1].MediaItemId.ShouldBe(3);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(6));
|
||||
playoutItems[1].MediaItemId.Should().Be(3);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(6));
|
||||
|
||||
// content chapter 2
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(11));
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(11));
|
||||
|
||||
// post-roll 1
|
||||
playoutItems[3].MediaItemId.ShouldBe(5);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(50));
|
||||
playoutItems[3].MediaItemId.Should().Be(5);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(50));
|
||||
|
||||
// post-roll 2
|
||||
playoutItems[4].MediaItemId.ShouldBe(6);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(55));
|
||||
playoutItems[4].MediaItemId.Should().Be(6);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(55));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -428,7 +428,7 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
|
||||
DateTimeOffset result =
|
||||
PlayoutModeSchedulerBase<ProgramScheduleItem>.GetStartTimeAfter(state, scheduleItem);
|
||||
|
||||
result.ShouldBe(DateTime.Today.AddHours(6));
|
||||
result.Should().Be(DateTime.Today.AddHours(6));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Domain.Filler;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NUnit.Framework;
|
||||
using Serilog;
|
||||
@@ -68,40 +68,40 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2); // one guide group here because of custom title
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2); // one guide group here because of custom title
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(1);
|
||||
enumerator.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems.Count.Should().Be(3);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[0].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
|
||||
playoutItems[0].CustomTitle.Should().Be("CustomTitle");
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[1].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
|
||||
playoutItems[1].CustomTitle.Should().Be("CustomTitle");
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.ShouldBe(1);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
|
||||
playoutItems[2].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.Should().Be(1);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
|
||||
playoutItems[2].CustomTitle.Should().Be("CustomTitle");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -141,40 +141,40 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(1);
|
||||
enumerator.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems.Count.Should().Be(3);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[0].CustomTitle.ShouldBe("Custom Title");
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
|
||||
playoutItems[0].CustomTitle.Should().Be("Custom Title");
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[1].CustomTitle.ShouldBe("Custom Title");
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
|
||||
playoutItems[1].CustomTitle.Should().Be("Custom Title");
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.ShouldBe(1);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
|
||||
playoutItems[2].CustomTitle.ShouldBe("Custom Title");
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.Should().Be(1);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
|
||||
playoutItems[2].CustomTitle.Should().Be("Custom Title");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -213,37 +213,37 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(1);
|
||||
enumerator.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems.Count.Should().Be(3);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -283,39 +283,39 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
|
||||
_cancellationToken);
|
||||
|
||||
// duration block should end after exact duration, with gap
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(1);
|
||||
enumerator.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems.Count.Should().Be(3);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
// offline should not set guide finish
|
||||
playoutItems[2].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[2].GuideFinish.HasValue.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -365,44 +365,44 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(4);
|
||||
playoutItems.Count.Should().Be(4);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Fallback);
|
||||
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Fallback);
|
||||
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -452,56 +452,56 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(6);
|
||||
playoutItems.Count.Should().Be(6);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(4);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[4].GuideGroup.ShouldBe(3);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[4].MediaItemId.Should().Be(4);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[4].GuideGroup.Should().Be(3);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
|
||||
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(3);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[5].GuideGroup.ShouldBe(3);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[5].MediaItemId.Should().Be(3);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[5].GuideGroup.Should().Be(3);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
|
||||
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -551,56 +551,56 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(6);
|
||||
playoutItems.Count.Should().Be(6);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(4);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.ShouldBe(3);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[4].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[4].MediaItemId.Should().Be(4);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.Should().Be(3);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
|
||||
playoutItems[4].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(3);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.ShouldBe(3);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[5].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[5].MediaItemId.Should().Be(3);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.Should().Be(3);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
|
||||
playoutItems[5].GuideFinish.HasValue.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -667,63 +667,63 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator3.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
enumerator3.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(7);
|
||||
playoutItems.Count.Should().Be(7);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(4);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.ShouldBe(3);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[4].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[4].MediaItemId.Should().Be(4);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.Should().Be(3);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
|
||||
playoutItems[4].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(3);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.ShouldBe(3);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[5].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[5].MediaItemId.Should().Be(3);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.Should().Be(3);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
|
||||
playoutItems[5].GuideFinish.HasValue.Should().BeFalse();
|
||||
|
||||
playoutItems[6].MediaItemId.ShouldBe(5);
|
||||
playoutItems[6].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems[6].GuideGroup.ShouldBe(3);
|
||||
playoutItems[6].FillerKind.ShouldBe(FillerKind.Fallback);
|
||||
playoutItems[6].GuideFinish.HasValue.ShouldBeFalse();
|
||||
playoutItems[6].MediaItemId.Should().Be(5);
|
||||
playoutItems[6].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems[6].GuideGroup.Should().Be(3);
|
||||
playoutItems[6].FillerKind.Should().Be(FillerKind.Fallback);
|
||||
playoutItems[6].GuideFinish.HasValue.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -818,25 +818,25 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddMinutes(30));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddMinutes(30));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
// THIS IS THE KEY TEST - needs to be exactly 30 minutes
|
||||
(playoutItems.Last().FinishOffset - playoutItems.First().StartOffset).ShouldBe(TimeSpan.FromMinutes(30));
|
||||
(playoutItems.Last().FinishOffset - playoutItems.First().StartOffset).Should().Be(TimeSpan.FromMinutes(30));
|
||||
|
||||
// playoutBuilderState.NextGuideGroup.ShouldBe(3);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
// playoutBuilderState.NextGuideGroup.Should().Be(3);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator3.State.Index.ShouldBe(0);
|
||||
enumerator4.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
enumerator3.State.Index.Should().Be(0);
|
||||
enumerator4.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(12);
|
||||
playoutItems.Count.Should().Be(12);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -882,17 +882,17 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutItems.ShouldBeEmpty();
|
||||
playoutItems.Should().BeEmpty();
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(HardStop(scheduleItemsEnumerator));
|
||||
playoutBuilderState.CurrentTime.Should().Be(HardStop(scheduleItemsEnumerator));
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(1);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(1);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(0);
|
||||
enumerator.State.Index.Should().Be(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Domain.Filler;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
@@ -59,37 +59,37 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2); // one guide group here because of custom title
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(1);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2); // one guide group here because of custom title
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(1);
|
||||
|
||||
enumerator.State.Index.ShouldBe(1);
|
||||
enumerator.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems.Count.Should().Be(3);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].CustomTitle.Should().Be("CustomTitle");
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[1].CustomTitle.Should().Be("CustomTitle");
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.ShouldBe(1);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.Should().Be(1);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[2].CustomTitle.Should().Be("CustomTitle");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -134,55 +134,55 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(6));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(6));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2); // one guide group here because of custom title
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeTrue();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2); // one guide group here because of custom title
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeTrue();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(0);
|
||||
enumerator.State.Index.Should().Be(0);
|
||||
|
||||
playoutItems.Count.ShouldBe(6);
|
||||
playoutItems.Count.Should().Be(6);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].CustomTitle.Should().Be("CustomTitle");
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[1].CustomTitle.Should().Be("CustomTitle");
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.ShouldBe(1);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.Should().Be(1);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[2].CustomTitle.Should().Be("CustomTitle");
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(2);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems[3].GuideGroup.ShouldBe(1);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[3].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[3].MediaItemId.Should().Be(2);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems[3].GuideGroup.Should().Be(1);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[3].CustomTitle.Should().Be("CustomTitle");
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(1);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.AddHours(4));
|
||||
playoutItems[4].GuideGroup.ShouldBe(1);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[4].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[4].MediaItemId.Should().Be(1);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.AddHours(4));
|
||||
playoutItems[4].GuideGroup.Should().Be(1);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[4].CustomTitle.Should().Be("CustomTitle");
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(2);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.AddHours(5));
|
||||
playoutItems[5].GuideGroup.ShouldBe(1);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[5].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[5].MediaItemId.Should().Be(2);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.AddHours(5));
|
||||
playoutItems[5].GuideGroup.Should().Be(1);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[5].CustomTitle.Should().Be("CustomTitle");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -231,34 +231,34 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(1);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(1);
|
||||
|
||||
enumerator.State.Index.ShouldBe(1);
|
||||
enumerator.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems.Count.Should().Be(3);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -316,50 +316,50 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(1);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(1);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(6);
|
||||
playoutItems.Count.Should().Be(6);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(3);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.PostRoll);
|
||||
playoutItems[1].MediaItemId.Should().Be(3);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.PostRoll);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(2);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[2].GuideGroup.ShouldBe(2);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(2);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[2].GuideGroup.Should().Be(2);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(4);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 55, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(2);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.PostRoll);
|
||||
playoutItems[3].MediaItemId.Should().Be(4);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 55, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(2);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.PostRoll);
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(1);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[4].GuideGroup.ShouldBe(3);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[4].MediaItemId.Should().Be(1);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[4].GuideGroup.Should().Be(3);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(3);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[5].GuideGroup.ShouldBe(3);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.PostRoll);
|
||||
playoutItems[5].MediaItemId.Should().Be(3);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[5].GuideGroup.Should().Be(3);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.PostRoll);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -404,34 +404,34 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(1);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(1);
|
||||
|
||||
enumerator.State.Index.ShouldBe(1);
|
||||
enumerator.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems.Count.Should().Be(3);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -486,50 +486,50 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(1);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(1);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(6);
|
||||
playoutItems.Count.Should().Be(6);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(4);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[4].GuideGroup.ShouldBe(3);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[4].MediaItemId.Should().Be(4);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[4].GuideGroup.Should().Be(3);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(3);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[5].GuideGroup.ShouldBe(3);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[5].MediaItemId.Should().Be(3);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[5].GuideGroup.Should().Be(3);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -584,40 +584,40 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(1);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(1);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(4);
|
||||
playoutItems.Count.Should().Be(4);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Fallback);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Fallback);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -672,50 +672,50 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(1);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(1);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(6);
|
||||
playoutItems.Count.Should().Be(6);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(4);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.ShouldBe(3);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[4].MediaItemId.Should().Be(4);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.Should().Be(3);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(3);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.ShouldBe(3);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[5].MediaItemId.Should().Be(3);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.Should().Be(3);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -786,56 +786,56 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(1);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(1);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator3.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
enumerator3.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(7);
|
||||
playoutItems.Count.Should().Be(7);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(4);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.ShouldBe(3);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[4].MediaItemId.Should().Be(4);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.Should().Be(3);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(3);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.ShouldBe(3);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[5].MediaItemId.Should().Be(3);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.Should().Be(3);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[6].MediaItemId.ShouldBe(5);
|
||||
playoutItems[6].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems[6].GuideGroup.ShouldBe(3);
|
||||
playoutItems[6].FillerKind.ShouldBe(FillerKind.Fallback);
|
||||
playoutItems[6].MediaItemId.Should().Be(5);
|
||||
playoutItems[6].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems[6].GuideGroup.Should().Be(3);
|
||||
playoutItems[6].FillerKind.Should().Be(FillerKind.Fallback);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -898,50 +898,50 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
hardStop,
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(2));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(2));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(7);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeTrue();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(7);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeTrue();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(0);
|
||||
enumerator2.State.Index.ShouldBe(0);
|
||||
enumerator1.State.Index.Should().Be(0);
|
||||
enumerator2.State.Index.Should().Be(0);
|
||||
|
||||
playoutItems.Count.ShouldBe(6);
|
||||
playoutItems.Count.Should().Be(6);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(20));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(20));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(40));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(40));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(2);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(60));
|
||||
playoutItems[3].GuideGroup.ShouldBe(4);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[3].MediaItemId.Should().Be(2);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(60));
|
||||
playoutItems[3].GuideGroup.Should().Be(4);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(1);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(80));
|
||||
playoutItems[4].GuideGroup.ShouldBe(5);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[4].MediaItemId.Should().Be(1);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(80));
|
||||
playoutItems[4].GuideGroup.Should().Be(5);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(2);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(100));
|
||||
playoutItems[5].GuideGroup.ShouldBe(6);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[5].MediaItemId.Should().Be(2);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(100));
|
||||
playoutItems[5].GuideGroup.Should().Be(6);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.None);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -1004,50 +1004,50 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
hardStop,
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(2));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(2));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(7);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeTrue();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(7);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeTrue();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(0);
|
||||
enumerator2.State.Index.ShouldBe(0);
|
||||
enumerator1.State.Index.Should().Be(0);
|
||||
enumerator2.State.Index.Should().Be(0);
|
||||
|
||||
playoutItems.Count.ShouldBe(6);
|
||||
playoutItems.Count.Should().Be(6);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(20));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(20));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(40));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(40));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(2);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(60));
|
||||
playoutItems[3].GuideGroup.ShouldBe(4);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[3].MediaItemId.Should().Be(2);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(60));
|
||||
playoutItems[3].GuideGroup.Should().Be(4);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(1);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(80));
|
||||
playoutItems[4].GuideGroup.ShouldBe(5);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[4].MediaItemId.Should().Be(1);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(80));
|
||||
playoutItems[4].GuideGroup.Should().Be(5);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(2);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(100));
|
||||
playoutItems[5].GuideGroup.ShouldBe(6);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[5].MediaItemId.Should().Be(2);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(100));
|
||||
playoutItems[5].GuideGroup.Should().Be(6);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.None);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -1118,36 +1118,36 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(1);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(1);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(0);
|
||||
enumerator3.State.Index.ShouldBe(0);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(0);
|
||||
enumerator3.State.Index.Should().Be(0);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems.Count.Should().Be(3);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -1192,18 +1192,18 @@ public class PlayoutModeSchedulerFloodTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutItems.ShouldBeEmpty();
|
||||
playoutItems.Should().BeEmpty();
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(HardStop(scheduleItemsEnumerator));
|
||||
playoutBuilderState.CurrentTime.Should().Be(HardStop(scheduleItemsEnumerator));
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(1);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(1);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(0);
|
||||
enumerator.State.Index.Should().Be(0);
|
||||
}
|
||||
|
||||
protected override ProgramScheduleItem NextScheduleItem => new ProgramScheduleItemOne
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Domain.Filler;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
@@ -60,37 +60,37 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2); // one guide group here because of custom title
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2); // one guide group here because of custom title
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(1);
|
||||
enumerator.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems.Count.Should().Be(3);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].CustomTitle.Should().Be("CustomTitle");
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[1].CustomTitle.Should().Be("CustomTitle");
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.ShouldBe(1);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.Should().Be(1);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[2].CustomTitle.Should().Be("CustomTitle");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -135,34 +135,34 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(1);
|
||||
enumerator.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems.Count.Should().Be(3);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -218,50 +218,50 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(6);
|
||||
playoutItems.Count.Should().Be(6);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(4);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[4].GuideGroup.ShouldBe(3);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[4].MediaItemId.Should().Be(4);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[4].GuideGroup.Should().Be(3);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(3);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[5].GuideGroup.ShouldBe(3);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[5].MediaItemId.Should().Be(3);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[5].GuideGroup.Should().Be(3);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -317,40 +317,40 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(4);
|
||||
playoutItems.Count.Should().Be(4);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Fallback);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Fallback);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -406,50 +406,50 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(6);
|
||||
playoutItems.Count.Should().Be(6);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(4);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.ShouldBe(3);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[4].MediaItemId.Should().Be(4);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.Should().Be(3);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(3);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.ShouldBe(3);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[5].MediaItemId.Should().Be(3);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.Should().Be(3);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -522,56 +522,56 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator3.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
enumerator3.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(7);
|
||||
playoutItems.Count.Should().Be(7);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(3);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(3);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(4);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.ShouldBe(3);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[4].MediaItemId.Should().Be(4);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[4].GuideGroup.Should().Be(3);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[5].MediaItemId.ShouldBe(3);
|
||||
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.ShouldBe(3);
|
||||
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[5].MediaItemId.Should().Be(3);
|
||||
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[5].GuideGroup.Should().Be(3);
|
||||
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[6].MediaItemId.ShouldBe(5);
|
||||
playoutItems[6].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems[6].GuideGroup.ShouldBe(3);
|
||||
playoutItems[6].FillerKind.ShouldBe(FillerKind.Fallback);
|
||||
playoutItems[6].MediaItemId.Should().Be(5);
|
||||
playoutItems[6].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems[6].GuideGroup.Should().Be(3);
|
||||
playoutItems[6].FillerKind.Should().Be(FillerKind.Fallback);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -644,36 +644,36 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(4);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(0);
|
||||
enumerator3.State.Index.ShouldBe(0);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(0);
|
||||
enumerator3.State.Index.Should().Be(0);
|
||||
|
||||
playoutItems.Count.ShouldBe(3);
|
||||
playoutItems.Count.Should().Be(3);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(2);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.ShouldBe(2);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[1].MediaItemId.Should().Be(2);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.Should().Be(2);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(1);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.ShouldBe(3);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[2].MediaItemId.Should().Be(1);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
|
||||
playoutItems[2].GuideGroup.Should().Be(3);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -724,18 +724,18 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutItems.ShouldBeEmpty();
|
||||
playoutItems.Should().BeEmpty();
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(HardStop(scheduleItemsEnumerator));
|
||||
playoutBuilderState.CurrentTime.Should().Be(HardStop(scheduleItemsEnumerator));
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(1);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(1);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(0);
|
||||
enumerator.State.Index.Should().Be(0);
|
||||
}
|
||||
|
||||
protected override ProgramScheduleItem NextScheduleItem => new ProgramScheduleItemOne
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Domain.Filler;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
@@ -53,25 +53,25 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(1);
|
||||
enumerator.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(1);
|
||||
playoutItems.Count.Should().Be(1);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].CustomTitle.ShouldBe("CustomTitle");
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
playoutItems[0].CustomTitle.Should().Be("CustomTitle");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -136,26 +136,26 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(0);
|
||||
enumerator3.State.Index.ShouldBe(0);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(0);
|
||||
enumerator3.State.Index.Should().Be(0);
|
||||
|
||||
playoutItems.Count.ShouldBe(1);
|
||||
playoutItems.Count.Should().Be(1);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -204,40 +204,40 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(4);
|
||||
playoutItems.Count.Should().Be(4);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(3);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[1].MediaItemId.Should().Be(3);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(4);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(1);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[2].MediaItemId.Should().Be(4);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(1);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(1);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(1);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -286,30 +286,30 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(2);
|
||||
playoutItems.Count.Should().Be(2);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(3);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.Fallback);
|
||||
playoutItems[1].MediaItemId.Should().Be(3);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.Fallback);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -358,40 +358,40 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(4);
|
||||
playoutItems.Count.Should().Be(4);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(3);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[1].MediaItemId.Should().Be(3);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(4);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(1);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[2].MediaItemId.Should().Be(4);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(1);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(1);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(1);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -456,46 +456,46 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator3.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
enumerator3.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(5);
|
||||
playoutItems.Count.Should().Be(5);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(3);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[1].MediaItemId.Should().Be(3);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(4);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(1);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[2].MediaItemId.Should().Be(4);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(1);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(1);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(1);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
|
||||
|
||||
playoutItems[4].MediaItemId.ShouldBe(5);
|
||||
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems[4].GuideGroup.ShouldBe(1);
|
||||
playoutItems[4].FillerKind.ShouldBe(FillerKind.Fallback);
|
||||
playoutItems[4].MediaItemId.Should().Be(5);
|
||||
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
|
||||
playoutItems[4].GuideGroup.Should().Be(1);
|
||||
playoutItems[4].FillerKind.Should().Be(FillerKind.Fallback);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -560,26 +560,26 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(0);
|
||||
enumerator3.State.Index.ShouldBe(0);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(0);
|
||||
enumerator3.State.Index.Should().Be(0);
|
||||
|
||||
playoutItems.Count.ShouldBe(1);
|
||||
playoutItems.Count.Should().Be(1);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -646,40 +646,40 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
|
||||
playoutItems.Count.ShouldBe(4);
|
||||
playoutItems.Count.Should().Be(4);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(3);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.PostRoll);
|
||||
playoutItems[1].MediaItemId.Should().Be(3);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.PostRoll);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(4);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(1);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.PostRoll);
|
||||
playoutItems[2].MediaItemId.Should().Be(4);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(1);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.PostRoll);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(1);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.PostRoll);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(1);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.PostRoll);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -746,41 +746,41 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
|
||||
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
|
||||
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(2);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator1.State.Index.ShouldBe(1);
|
||||
enumerator2.State.Index.ShouldBe(1);
|
||||
enumerator3.State.Index.ShouldBe(0);
|
||||
enumerator1.State.Index.Should().Be(1);
|
||||
enumerator2.State.Index.Should().Be(1);
|
||||
enumerator3.State.Index.Should().Be(0);
|
||||
|
||||
playoutItems.Count.ShouldBe(4);
|
||||
playoutItems.Count.Should().Be(4);
|
||||
|
||||
playoutItems[0].MediaItemId.ShouldBe(1);
|
||||
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.ShouldBe(1);
|
||||
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
|
||||
playoutItems[0].MediaItemId.Should().Be(1);
|
||||
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
|
||||
playoutItems[0].GuideGroup.Should().Be(1);
|
||||
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
|
||||
|
||||
playoutItems[1].MediaItemId.ShouldBe(3);
|
||||
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[1].GuideGroup.ShouldBe(1);
|
||||
playoutItems[1].FillerKind.ShouldBe(FillerKind.PostRoll);
|
||||
playoutItems[1].MediaItemId.Should().Be(3);
|
||||
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
|
||||
playoutItems[1].GuideGroup.Should().Be(1);
|
||||
playoutItems[1].FillerKind.Should().Be(FillerKind.PostRoll);
|
||||
|
||||
playoutItems[2].MediaItemId.ShouldBe(4);
|
||||
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[2].GuideGroup.ShouldBe(1);
|
||||
playoutItems[2].FillerKind.ShouldBe(FillerKind.PostRoll);
|
||||
playoutItems[2].MediaItemId.Should().Be(4);
|
||||
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
|
||||
playoutItems[2].GuideGroup.Should().Be(1);
|
||||
playoutItems[2].FillerKind.Should().Be(FillerKind.PostRoll);
|
||||
|
||||
playoutItems[3].MediaItemId.ShouldBe(3);
|
||||
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[3].GuideGroup.ShouldBe(1);
|
||||
playoutItems[3].FillerKind.ShouldBe(FillerKind.PostRoll);
|
||||
playoutItems[3].MediaItemId.Should().Be(3);
|
||||
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
|
||||
playoutItems[3].GuideGroup.Should().Be(1);
|
||||
playoutItems[3].FillerKind.Should().Be(FillerKind.PostRoll);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -825,18 +825,18 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
|
||||
HardStop(scheduleItemsEnumerator),
|
||||
_cancellationToken);
|
||||
|
||||
playoutItems.ShouldBeEmpty();
|
||||
playoutItems.Should().BeEmpty();
|
||||
|
||||
playoutBuilderState.CurrentTime.ShouldBe(HardStop(scheduleItemsEnumerator));
|
||||
playoutBuilderState.CurrentTime.Should().Be(HardStop(scheduleItemsEnumerator));
|
||||
|
||||
playoutBuilderState.NextGuideGroup.ShouldBe(1);
|
||||
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InFlood.ShouldBeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
|
||||
playoutBuilderState.InDurationFiller.ShouldBeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
|
||||
playoutBuilderState.NextGuideGroup.Should().Be(1);
|
||||
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InFlood.Should().BeFalse();
|
||||
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
|
||||
playoutBuilderState.InDurationFiller.Should().BeFalse();
|
||||
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
|
||||
|
||||
enumerator.State.Index.ShouldBe(0);
|
||||
enumerator.State.Index.Should().Be(0);
|
||||
}
|
||||
|
||||
protected override ProgramScheduleItem NextScheduleItem => new ProgramScheduleItemOne
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using ErsatzTV.Core.Domain.Scheduling;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.Scheduling;
|
||||
@@ -31,7 +31,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2024, 3, 31, 0, 0, 0, Offset));
|
||||
|
||||
result.IsNone.ShouldBeTrue();
|
||||
result.IsNone.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -53,7 +53,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset));
|
||||
|
||||
result.IsSome.ShouldBeTrue();
|
||||
result.IsSome.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -75,7 +75,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2024, 4, 20, 0, 0, 0, Offset));
|
||||
|
||||
result.IsSome.ShouldBeTrue();
|
||||
result.IsSome.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -97,7 +97,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset));
|
||||
|
||||
result.IsSome.ShouldBeTrue();
|
||||
result.IsSome.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -119,7 +119,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2024, 6, 16, 0, 0, 0, Offset));
|
||||
|
||||
result.IsNone.ShouldBeTrue();
|
||||
result.IsNone.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -141,7 +141,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
|
||||
|
||||
result.IsNone.ShouldBeTrue();
|
||||
result.IsNone.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -163,7 +163,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));
|
||||
|
||||
result.IsSome.ShouldBeTrue();
|
||||
result.IsSome.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -185,7 +185,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
|
||||
|
||||
result.IsSome.ShouldBeTrue();
|
||||
result.IsSome.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -207,7 +207,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));
|
||||
|
||||
result.IsNone.ShouldBeTrue();
|
||||
result.IsNone.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -229,7 +229,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2024, 6, 14, 0, 0, 0, Offset));
|
||||
|
||||
result.IsNone.ShouldBeTrue();
|
||||
result.IsNone.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -251,7 +251,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset));
|
||||
|
||||
result.IsSome.ShouldBeTrue();
|
||||
result.IsSome.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -273,7 +273,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2024, 7, 20, 0, 0, 0, Offset));
|
||||
|
||||
result.IsSome.ShouldBeTrue();
|
||||
result.IsSome.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -295,7 +295,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset));
|
||||
|
||||
result.IsSome.ShouldBeTrue();
|
||||
result.IsSome.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -317,7 +317,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2024, 4, 2, 0, 0, 0, Offset));
|
||||
|
||||
result.IsNone.ShouldBeTrue();
|
||||
result.IsNone.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -339,7 +339,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
|
||||
|
||||
result.IsNone.ShouldBeTrue();
|
||||
result.IsNone.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -361,7 +361,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));
|
||||
|
||||
result.IsSome.ShouldBeTrue();
|
||||
result.IsSome.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -383,7 +383,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
|
||||
|
||||
result.IsSome.ShouldBeTrue();
|
||||
result.IsSome.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -405,7 +405,7 @@ public static class PlayoutTemplateSelectorTests
|
||||
new List<PlayoutTemplate> { template },
|
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));
|
||||
|
||||
result.IsNone.ShouldBeTrue();
|
||||
result.IsNone.Should().BeTrue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.Scheduling;
|
||||
@@ -34,14 +34,14 @@ public class RandomizedContentTests
|
||||
var list = new List<int>();
|
||||
for (var i = 1; i <= 10; i++)
|
||||
{
|
||||
randomizedContent.Current.IsSome.ShouldBeTrue();
|
||||
randomizedContent.Current.IsSome.Should().BeTrue();
|
||||
randomizedContent.Current.Do(c => list.Add(c.Id));
|
||||
|
||||
randomizedContent.MoveNext();
|
||||
}
|
||||
|
||||
list.ShouldNotBe([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
|
||||
list.ShouldNotBe([10, 9, 8, 7, 6, 5, 4, 3, 2, 1]);
|
||||
list.Should().NotEqual(new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
|
||||
list.Should().NotEqual(new[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 });
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -54,7 +54,7 @@ public class RandomizedContentTests
|
||||
|
||||
for (var i = 1; i <= 10; i++)
|
||||
{
|
||||
randomizedContent.State.Index.ShouldBe(i);
|
||||
randomizedContent.State.Index.Should().Be(i);
|
||||
|
||||
randomizedContent.MoveNext();
|
||||
}
|
||||
@@ -70,10 +70,10 @@ public class RandomizedContentTests
|
||||
|
||||
for (var i = 6; i <= 99; i++)
|
||||
{
|
||||
randomizedContent.Current.IsSome.ShouldBeTrue();
|
||||
randomizedContent.Current.IsSome.Should().BeTrue();
|
||||
// this test data setup/expectation is confusing
|
||||
randomizedContent.Current.Map(c => c.Id).IfNone(-1).ShouldBe(_expected[i - 2]);
|
||||
randomizedContent.State.Index.ShouldBe(i);
|
||||
randomizedContent.Current.Map(c => c.Id).IfNone(-1).Should().Be(_expected[i - 2]);
|
||||
randomizedContent.State.Index.Should().Be(i);
|
||||
|
||||
randomizedContent.MoveNext();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.Scheduling;
|
||||
@@ -23,8 +23,8 @@ public class SeasonEpisodeContentTests
|
||||
|
||||
for (var i = 1; i <= 10; i++)
|
||||
{
|
||||
chronologicalContent.Current.IsSome.ShouldBeTrue();
|
||||
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
|
||||
chronologicalContent.Current.IsSome.Should().BeTrue();
|
||||
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
|
||||
chronologicalContent.MoveNext();
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,7 @@ public class SeasonEpisodeContentTests
|
||||
|
||||
for (var i = 0; i < 10; i++)
|
||||
{
|
||||
chronologicalContent.State.Index.ShouldBe(i % 10);
|
||||
chronologicalContent.State.Index.Should().Be(i % 10);
|
||||
chronologicalContent.MoveNext();
|
||||
}
|
||||
}
|
||||
@@ -54,9 +54,9 @@ public class SeasonEpisodeContentTests
|
||||
|
||||
for (var i = 6; i <= 10; i++)
|
||||
{
|
||||
chronologicalContent.Current.IsSome.ShouldBeTrue();
|
||||
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
|
||||
chronologicalContent.State.Index.ShouldBe(i - 1);
|
||||
chronologicalContent.Current.IsSome.Should().BeTrue();
|
||||
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
|
||||
chronologicalContent.State.Index.Should().Be(i - 1);
|
||||
chronologicalContent.MoveNext();
|
||||
}
|
||||
}
|
||||
@@ -69,8 +69,8 @@ public class SeasonEpisodeContentTests
|
||||
|
||||
var chronologicalContent = new SeasonEpisodeMediaCollectionEnumerator(contents, state);
|
||||
|
||||
chronologicalContent.State.Index.ShouldBe(0);
|
||||
chronologicalContent.State.Seed.ShouldBe(0);
|
||||
chronologicalContent.State.Index.Should().Be(0);
|
||||
chronologicalContent.State.Seed.Should().Be(0);
|
||||
}
|
||||
|
||||
private static List<MediaItem> Episodes(int count) =>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using ErsatzTV.Core.Domain;
|
||||
using ErsatzTV.Core.Scheduling;
|
||||
using Shouldly;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace ErsatzTV.Core.Tests.Scheduling;
|
||||
@@ -30,7 +30,7 @@ public class ShuffledContentTests
|
||||
var list = new List<int>();
|
||||
for (var i = 1; i <= 1000; i++)
|
||||
{
|
||||
shuffledContent.Current.IsSome.ShouldBeTrue();
|
||||
shuffledContent.Current.IsSome.Should().BeTrue();
|
||||
shuffledContent.Current.Do(x => list.Add(x.Id));
|
||||
shuffledContent.MoveNext();
|
||||
}
|
||||
@@ -57,12 +57,12 @@ public class ShuffledContentTests
|
||||
var list = new List<int>();
|
||||
for (var i = 1; i <= 10; i++)
|
||||
{
|
||||
shuffledContent.Current.IsSome.ShouldBeTrue();
|
||||
shuffledContent.Current.IsSome.Should().BeTrue();
|
||||
shuffledContent.Current.Do(x => list.Add(x.Id));
|
||||
shuffledContent.MoveNext();
|
||||
}
|
||||
|
||||
list.ShouldBe([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
|
||||
list.Should().Equal(1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -78,13 +78,13 @@ public class ShuffledContentTests
|
||||
var list = new List<int>();
|
||||
for (var i = 1; i <= 10; i++)
|
||||
{
|
||||
shuffledContent.Current.IsSome.ShouldBeTrue();
|
||||
shuffledContent.Current.IsSome.Should().BeTrue();
|
||||
shuffledContent.Current.Do(x => list.Add(x.Id));
|
||||
shuffledContent.MoveNext();
|
||||
}
|
||||
|
||||
list.ShouldNotBe([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
|
||||
list.ShouldBe([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], ignoreOrder: true);
|
||||
list.Should().NotEqual(new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
|
||||
list.Should().BeEquivalentTo(new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -98,7 +98,7 @@ public class ShuffledContentTests
|
||||
|
||||
for (var i = 0; i < 10; i++)
|
||||
{
|
||||
shuffledContent.State.Index.ShouldBe(i);
|
||||
shuffledContent.State.Index.Should().Be(i);
|
||||
shuffledContent.MoveNext();
|
||||
}
|
||||
}
|
||||
@@ -114,9 +114,9 @@ public class ShuffledContentTests
|
||||
|
||||
for (var i = 6; i <= 10; i++)
|
||||
{
|
||||
shuffledContent.Current.IsSome.ShouldBeTrue();
|
||||
shuffledContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
|
||||
shuffledContent.State.Index.ShouldBe(i - 1);
|
||||
shuffledContent.Current.IsSome.Should().BeTrue();
|
||||
shuffledContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
|
||||
shuffledContent.State.Index.Should().Be(i - 1);
|
||||
shuffledContent.MoveNext();
|
||||
}
|
||||
}
|
||||
@@ -130,8 +130,8 @@ public class ShuffledContentTests
|
||||
var groupedMediaItems = contents.Map(mi => new GroupedMediaItem(mi, null)).ToList();
|
||||
var shuffledContent = new ShuffledMediaCollectionEnumerator(groupedMediaItems, state, _cancellationToken);
|
||||
|
||||
shuffledContent.State.Index.ShouldBe(0);
|
||||
shuffledContent.State.Seed.ShouldNotBe(MagicSeed);
|
||||
shuffledContent.State.Index.Should().Be(0);
|
||||
shuffledContent.State.Seed.Should().NotBe(MagicSeed);
|
||||
}
|
||||
|
||||
private static List<MediaItem> Episodes(int count) =>
|
||||
|
||||
@@ -12,7 +12,6 @@ public record FFmpegFullProfileResponseModel(
|
||||
int VideoFormat,
|
||||
int VideoBitrate,
|
||||
int VideoBufferSize,
|
||||
int TonemapAlgorithm,
|
||||
int AudioFormat,
|
||||
int AudioBitrate,
|
||||
int AudioBufferSize,
|
||||
|
||||
@@ -22,7 +22,6 @@ public record FFmpegProfile
|
||||
public FFmpegProfileBitDepth BitDepth { get; set; }
|
||||
public int VideoBitrate { get; set; }
|
||||
public int VideoBufferSize { get; set; }
|
||||
public FFmpegProfileTonemapAlgorithm TonemapAlgorithm { get; set; }
|
||||
public FFmpegProfileAudioFormat AudioFormat { get; set; }
|
||||
public int AudioBitrate { get; set; }
|
||||
public int AudioBufferSize { get; set; }
|
||||
@@ -46,7 +45,6 @@ public record FFmpegProfile
|
||||
AudioFormat = FFmpegProfileAudioFormat.Aac,
|
||||
VideoBitrate = 2000,
|
||||
VideoBufferSize = 4000,
|
||||
TonemapAlgorithm = FFmpegProfileTonemapAlgorithm.Linear,
|
||||
AudioBitrate = 192,
|
||||
AudioBufferSize = 384,
|
||||
NormalizeLoudnessMode = NormalizeLoudnessMode.Off,
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
namespace ErsatzTV.Core.Domain;
|
||||
|
||||
public enum FFmpegProfileTonemapAlgorithm
|
||||
{
|
||||
Linear = 0,
|
||||
Clip = 1,
|
||||
Gamma = 2,
|
||||
Reinhard = 3,
|
||||
Mobius = 4,
|
||||
Hable = 5
|
||||
}
|
||||
@@ -11,10 +11,4 @@ public class Artwork
|
||||
public ArtworkKind ArtworkKind { get; set; }
|
||||
public DateTime DateAdded { get; set; }
|
||||
public DateTime DateUpdated { get; set; }
|
||||
|
||||
public bool IsExternalUrl() => IsExternalUrl(Path);
|
||||
|
||||
public static bool IsExternalUrl(string path) =>
|
||||
Uri.TryCreate(path ?? string.Empty, UriKind.Absolute, out Uri uriResult)
|
||||
&& (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<NoWarn>VSTHRD200</NoWarn>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<AnalysisLevel>latest-Recommended</AnalysisLevel>
|
||||
@@ -15,22 +15,25 @@
|
||||
<PackageReference Include="LanguageExt.Core" Version="4.4.9" />
|
||||
<PackageReference Include="LanguageExt.Transformers" Version="4.4.8" />
|
||||
<PackageReference Include="MediatR" Version="12.5.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.6" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.6" />
|
||||
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.6" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.6" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.2" />
|
||||
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.1" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.14.15">
|
||||
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.13.61">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Serilog" Version="4.3.0" />
|
||||
<PackageReference Include="Serilog" Version="4.2.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
|
||||
<PackageReference Include="SkiaSharp" Version="3.119.0" />
|
||||
<PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="3.119.0" />
|
||||
<PackageReference Include="SkiaSharp" Version="2.88.9" />
|
||||
<PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.88.9" />
|
||||
<PackageReference Include="TimeSpanParserUtil" Version="1.2.0" />
|
||||
<PackageReference Include="YamlDotNet" Version="16.3.0" />
|
||||
|
||||
<!-- transitive; upgrading due to vuln -->
|
||||
<PackageReference Include="System.Net.Http" Version="4.3.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -399,8 +399,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
|
||||
playbackSettings.ThreadCount,
|
||||
qsvExtraHardwareFrames,
|
||||
videoVersion is BackgroundImageMediaVersion { IsSongWithProgress: true },
|
||||
IsHdrTonemap: false,
|
||||
GetTonemapAlgorithm(playbackSettings));
|
||||
IsHdrTonemap: false);
|
||||
|
||||
_logger.LogDebug("FFmpeg desired state {FrameState}", desiredState);
|
||||
|
||||
@@ -442,7 +441,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
|
||||
channel.FFmpegProfile,
|
||||
hlsRealtime);
|
||||
|
||||
Resolution desiredResolution = channel.FFmpegProfile.Resolution;
|
||||
IDisplaySize desiredResolution = channel.FFmpegProfile.Resolution;
|
||||
|
||||
var fontSize = (int)Math.Round(channel.FFmpegProfile.Resolution.Height / 20.0);
|
||||
var margin = (int)Math.Round(channel.FFmpegProfile.Resolution.Height * 0.05);
|
||||
@@ -555,8 +554,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
|
||||
Option<int>.None,
|
||||
qsvExtraHardwareFrames,
|
||||
IsSongWithProgress: false,
|
||||
IsHdrTonemap: false,
|
||||
GetTonemapAlgorithm(playbackSettings));
|
||||
IsHdrTonemap: false);
|
||||
|
||||
var ffmpegSubtitleStream = new ErsatzTV.FFmpeg.MediaStream(0, "ass", StreamKind.Video);
|
||||
|
||||
@@ -751,8 +749,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
|
||||
playbackSettings.ThreadCount,
|
||||
Optional(channel.FFmpegProfile.QsvExtraHardwareFrames),
|
||||
IsSongWithProgress: false,
|
||||
IsHdrTonemap: false,
|
||||
GetTonemapAlgorithm(playbackSettings));
|
||||
IsHdrTonemap: false);
|
||||
|
||||
_logger.LogDebug("FFmpeg desired state {FrameState}", desiredState);
|
||||
|
||||
@@ -1042,18 +1039,6 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
|
||||
_ => throw new ArgumentOutOfRangeException($"unexpected video format {playbackSettings.VideoFormat}")
|
||||
};
|
||||
|
||||
private static string GetTonemapAlgorithm(FFmpegPlaybackSettings playbackSettings) =>
|
||||
playbackSettings.TonemapAlgorithm switch
|
||||
{
|
||||
FFmpegProfileTonemapAlgorithm.Linear => TonemapAlgorithm.Linear,
|
||||
FFmpegProfileTonemapAlgorithm.Clip => TonemapAlgorithm.Clip,
|
||||
FFmpegProfileTonemapAlgorithm.Gamma => TonemapAlgorithm.Gamma,
|
||||
FFmpegProfileTonemapAlgorithm.Reinhard => TonemapAlgorithm.Reinhard,
|
||||
FFmpegProfileTonemapAlgorithm.Mobius => TonemapAlgorithm.Mobius,
|
||||
FFmpegProfileTonemapAlgorithm.Hable => TonemapAlgorithm.Hable,
|
||||
_ => throw new ArgumentOutOfRangeException($"unexpected tonemap algorithm {playbackSettings.TonemapAlgorithm}")
|
||||
};
|
||||
|
||||
private static Option<string> GetVideoProfile(string videoFormat, string videoProfile) =>
|
||||
(videoFormat, (videoProfile ?? string.Empty).ToLowerInvariant()) switch
|
||||
{
|
||||
|
||||
@@ -18,7 +18,6 @@ public class FFmpegPlaybackSettings
|
||||
public IPixelFormat PixelFormat { get; set; }
|
||||
public Option<int> VideoBitrate { get; set; }
|
||||
public Option<int> VideoBufferSize { get; set; }
|
||||
public FFmpegProfileTonemapAlgorithm TonemapAlgorithm { get; set; }
|
||||
public Option<int> AudioBitrate { get; set; }
|
||||
public Option<int> AudioBufferSize { get; set; }
|
||||
public Option<int> AudioChannels { get; set; }
|
||||
|
||||
@@ -89,7 +89,7 @@ public static class FFmpegPlaybackSettingsCalculator
|
||||
|
||||
if (NeedToScale(ffmpegProfile, videoVersion) && videoVersion.SampleAspectRatio != "0:0")
|
||||
{
|
||||
DisplaySize scaledSize = CalculateScaledSize(ffmpegProfile, videoVersion);
|
||||
IDisplaySize scaledSize = CalculateScaledSize(ffmpegProfile, videoVersion);
|
||||
if (!scaledSize.IsSameSizeAs(videoVersion))
|
||||
{
|
||||
int fixedHeight = scaledSize.Height + scaledSize.Height % 2;
|
||||
@@ -116,7 +116,6 @@ public static class FFmpegPlaybackSettingsCalculator
|
||||
result.VideoFormat = ffmpegProfile.VideoFormat;
|
||||
result.VideoBitrate = ffmpegProfile.VideoBitrate;
|
||||
result.VideoBufferSize = ffmpegProfile.VideoBufferSize;
|
||||
result.TonemapAlgorithm = ffmpegProfile.TonemapAlgorithm;
|
||||
|
||||
result.VideoDecoder =
|
||||
(result.HardwareAcceleration, stream.Codec, stream.PixelFormat) switch
|
||||
@@ -185,7 +184,6 @@ public static class FFmpegPlaybackSettingsCalculator
|
||||
VideoFormat = ffmpegProfile.VideoFormat,
|
||||
VideoBitrate = ffmpegProfile.VideoBitrate,
|
||||
VideoBufferSize = ffmpegProfile.VideoBufferSize,
|
||||
TonemapAlgorithm = ffmpegProfile.TonemapAlgorithm,
|
||||
VideoDecoder = null,
|
||||
PixelFormat = ffmpegProfile.BitDepth switch
|
||||
{
|
||||
@@ -234,14 +232,14 @@ public static class FFmpegPlaybackSettingsCalculator
|
||||
IsOddSize(version) ||
|
||||
TooSmallToCrop(ffmpegProfile, version);
|
||||
|
||||
private static bool IsIncorrectSize(Resolution desiredResolution, MediaVersion version) =>
|
||||
private static bool IsIncorrectSize(IDisplaySize desiredResolution, MediaVersion version) =>
|
||||
IsAnamorphic(version) ||
|
||||
version.Width != desiredResolution.Width ||
|
||||
version.Height != desiredResolution.Height;
|
||||
|
||||
private static bool IsTooLarge(Resolution desiredResolution, MediaVersion version) =>
|
||||
version.Height > desiredResolution.Height ||
|
||||
version.Width > desiredResolution.Width;
|
||||
private static bool IsTooLarge(IDisplaySize desiredResolution, IDisplaySize displaySize) =>
|
||||
displaySize.Height > desiredResolution.Height ||
|
||||
displaySize.Width > desiredResolution.Width;
|
||||
|
||||
private static bool IsOddSize(MediaVersion version) =>
|
||||
version.Height % 2 == 1 || version.Width % 2 == 1;
|
||||
@@ -258,13 +256,13 @@ public static class FFmpegPlaybackSettingsCalculator
|
||||
|
||||
private static DisplaySize CalculateScaledSize(FFmpegProfile ffmpegProfile, MediaVersion version)
|
||||
{
|
||||
DisplaySize sarSize = SARSize(version);
|
||||
IDisplaySize sarSize = SARSize(version);
|
||||
int p = version.Width * sarSize.Width;
|
||||
int q = version.Height * sarSize.Height;
|
||||
int g = Gcd(q, p);
|
||||
p = p / g;
|
||||
q = q / g;
|
||||
Resolution targetSize = ffmpegProfile.Resolution;
|
||||
IDisplaySize targetSize = ffmpegProfile.Resolution;
|
||||
int hw1 = targetSize.Width;
|
||||
int hh1 = hw1 * q / p;
|
||||
int hh2 = targetSize.Height;
|
||||
|
||||
@@ -151,7 +151,7 @@ public class FFmpegProcessService
|
||||
}
|
||||
}
|
||||
|
||||
private static bool NeedToPad(Resolution target, IDisplaySize displaySize) =>
|
||||
private static bool NeedToPad(IDisplaySize target, IDisplaySize displaySize) =>
|
||||
displaySize.Width != target.Width || displaySize.Height != target.Height;
|
||||
|
||||
internal async Task<WatermarkOptions> GetWatermarkOptions(
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace ErsatzTV.Core.Health.Checks;
|
||||
|
||||
public interface IUnifiedDockerHealthCheck : IHealthCheck
|
||||
{
|
||||
}
|
||||
@@ -41,34 +41,32 @@ public class ChannelLogoGenerator : IChannelLogoGenerator
|
||||
//Custom Font
|
||||
string fontPath = Path.Combine(FileSystemLayout.ResourcesCacheFolder, "Sen.ttf");
|
||||
using SKTypeface fontTypeface = SKTypeface.FromFile(fontPath);
|
||||
var fontSize = 30;
|
||||
var font = new SKFont
|
||||
int fontSize = 30;
|
||||
SKPaint paint = new SKPaint
|
||||
{
|
||||
Typeface = fontTypeface,
|
||||
Size = fontSize
|
||||
};
|
||||
|
||||
var paint = new SKPaint
|
||||
{
|
||||
TextSize = fontSize,
|
||||
IsAntialias = true,
|
||||
Color = SKColors.White,
|
||||
Style = SKPaintStyle.Fill
|
||||
Style = SKPaintStyle.Fill,
|
||||
TextAlign = SKTextAlign.Center
|
||||
};
|
||||
|
||||
font.MeasureText(text, out SKRect textBounds, paint);
|
||||
SKRect textBounds = new SKRect();
|
||||
paint.MeasureText(text, ref textBounds);
|
||||
|
||||
// Ajuster la taille de la police si nécessaire
|
||||
while (textBounds.Width > logoWidth - 10 && fontSize > 16)
|
||||
{
|
||||
fontSize -= 2;
|
||||
font.Size = fontSize;
|
||||
font.MeasureText(text, out textBounds, paint);
|
||||
paint.TextSize = fontSize;
|
||||
paint.MeasureText(text, ref textBounds);
|
||||
}
|
||||
|
||||
// Dessiner le texte
|
||||
float x = logoWidth / 2f;
|
||||
float y = logoHeight / 2f - textBounds.MidY;
|
||||
canvas.DrawText(text, x, y, SKTextAlign.Center, font, paint);
|
||||
canvas.DrawText(text, x, y, paint);
|
||||
|
||||
using SKImage image = surface.Snapshot();
|
||||
using MemoryStream ms = new MemoryStream();
|
||||
|
||||
@@ -15,7 +15,7 @@ public interface IMediaCollectionRepository
|
||||
Task<List<MediaItem>> GetMultiCollectionItemsByName(string name);
|
||||
Task<List<MediaItem>> GetSmartCollectionItems(int id);
|
||||
Task<List<MediaItem>> GetSmartCollectionItemsByName(string name);
|
||||
Task<List<MediaItem>> GetSmartCollectionItems(string query, string smartCollectionName);
|
||||
Task<List<MediaItem>> GetSmartCollectionItems(string query);
|
||||
Task<List<MediaItem>> GetShowItemsByShowGuids(List<string> guids);
|
||||
Task<List<MediaItem>> GetPlaylistItems(int id);
|
||||
Task<List<Movie>> GetMovie(int id);
|
||||
|
||||
@@ -25,6 +25,6 @@ public interface ISearchIndex : IDisposable
|
||||
List<MediaItem> items);
|
||||
|
||||
Task<bool> RemoveItems(IEnumerable<int> ids);
|
||||
Task<SearchResult> Search(IClient client, string query, string smartCollectionName, int skip, int limit);
|
||||
Task<SearchResult> Search(IClient client, string query, int skip, int limit);
|
||||
void Commit();
|
||||
}
|
||||
|
||||
@@ -60,16 +60,12 @@ public class ChannelPlaylist
|
||||
sb.AppendLine("#KODIPROP:inputstream.ffmpegdirect.open_mode=ffmpeg");
|
||||
}
|
||||
|
||||
Option<Artwork> maybeArtwork = Optional(channel.Artwork).Flatten()
|
||||
string logo = Optional(channel.Artwork).Flatten()
|
||||
.Filter(a => a.ArtworkKind == ArtworkKind.Logo)
|
||||
.HeadOrNone();
|
||||
var logo = $"{_scheme}://{_host}{_baseUrl}/iptv/logos/gen?text={channel.WebEncodedName}{accessTokenUriAmp}";
|
||||
foreach (Artwork artwork in maybeArtwork)
|
||||
{
|
||||
logo = artwork.IsExternalUrl()
|
||||
? artwork.Path
|
||||
: $"{_scheme}://{_host}{_baseUrl}/iptv/logos/{artwork.Path}.jpg{accessTokenUri}";
|
||||
}
|
||||
.HeadOrNone()
|
||||
.Match(
|
||||
artwork => $"{_scheme}://{_host}{_baseUrl}/iptv/logos/{artwork.Path}.jpg{accessTokenUri}",
|
||||
() => $"{_scheme}://{_host}{_baseUrl}/iptv/logos/gen?text={channel.WebEncodedName}{accessTokenUriAmp}");
|
||||
|
||||
string shortUniqueId = Convert.ToBase64String(channel.UniqueId.ToByteArray())
|
||||
.TrimEnd('=')
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace ErsatzTV.Core.Scheduling;
|
||||
public sealed class ChronologicalMediaCollectionEnumerator : IMediaCollectionEnumerator
|
||||
{
|
||||
private readonly Lazy<Option<TimeSpan>> _lazyMinimumDuration;
|
||||
private readonly List<MediaItem> _sortedMediaItems;
|
||||
private readonly IList<MediaItem> _sortedMediaItems;
|
||||
|
||||
public ChronologicalMediaCollectionEnumerator(
|
||||
IEnumerable<MediaItem> mediaItems,
|
||||
@@ -39,7 +39,7 @@ public sealed class ChronologicalMediaCollectionEnumerator : IMediaCollectionEnu
|
||||
|
||||
public CollectionEnumeratorState State { get; }
|
||||
|
||||
public Option<MediaItem> Current => _sortedMediaItems.Count != 0 ? _sortedMediaItems[State.Index] : None;
|
||||
public Option<MediaItem> Current => _sortedMediaItems.Any() ? _sortedMediaItems[State.Index] : None;
|
||||
public Option<bool> CurrentIncludeInProgramGuide { get; }
|
||||
|
||||
public void MoveNext() => State.Index = (State.Index + 1) % _sortedMediaItems.Count;
|
||||
|
||||
@@ -8,7 +8,7 @@ public class CustomOrderCollectionEnumerator : IMediaCollectionEnumerator
|
||||
{
|
||||
private readonly Lazy<Option<TimeSpan>> _lazyMinimumDuration;
|
||||
|
||||
private readonly List<MediaItem> _sortedMediaItems;
|
||||
private readonly IList<MediaItem> _sortedMediaItems;
|
||||
|
||||
public CustomOrderCollectionEnumerator(
|
||||
Collection collection,
|
||||
@@ -38,7 +38,7 @@ public class CustomOrderCollectionEnumerator : IMediaCollectionEnumerator
|
||||
|
||||
public CollectionEnumeratorState State { get; }
|
||||
|
||||
public Option<MediaItem> Current => _sortedMediaItems.Count != 0 ? _sortedMediaItems[State.Index] : None;
|
||||
public Option<MediaItem> Current => _sortedMediaItems.Any() ? _sortedMediaItems[State.Index] : None;
|
||||
public Option<bool> CurrentIncludeInProgramGuide { get; }
|
||||
|
||||
public void MoveNext() => State.Index = (State.Index + 1) % _sortedMediaItems.Count;
|
||||
|
||||
@@ -5,7 +5,7 @@ namespace ErsatzTV.Core.Scheduling;
|
||||
|
||||
public class OrderedScheduleItemsEnumerator : IScheduleItemsEnumerator
|
||||
{
|
||||
private readonly List<ProgramScheduleItem> _sortedScheduleItems;
|
||||
private readonly IList<ProgramScheduleItem> _sortedScheduleItems;
|
||||
|
||||
public OrderedScheduleItemsEnumerator(
|
||||
IEnumerable<ProgramScheduleItem> scheduleItems,
|
||||
|
||||
@@ -308,7 +308,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
e1,
|
||||
filler.Duration.Value,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.PreRoll,
|
||||
FillerKind.PreRoll,
|
||||
filler.AllowWatermarks,
|
||||
log,
|
||||
cancellationToken));
|
||||
@@ -320,7 +320,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
e2,
|
||||
filler.Count.Value,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.PreRoll,
|
||||
FillerKind.PreRoll,
|
||||
filler.AllowWatermarks,
|
||||
cancellationToken));
|
||||
break;
|
||||
@@ -331,7 +331,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
e3,
|
||||
filler.Count.Value,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.PreRoll,
|
||||
FillerKind.PreRoll,
|
||||
filler.AllowWatermarks,
|
||||
cancellationToken));
|
||||
break;
|
||||
@@ -361,7 +361,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
e1,
|
||||
filler.Duration.Value,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.MidRoll,
|
||||
FillerKind.MidRoll,
|
||||
filler.AllowWatermarks,
|
||||
log,
|
||||
cancellationToken));
|
||||
@@ -381,7 +381,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
e2,
|
||||
filler.Count.Value,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.MidRoll,
|
||||
FillerKind.MidRoll,
|
||||
filler.AllowWatermarks,
|
||||
cancellationToken));
|
||||
}
|
||||
@@ -400,7 +400,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
e3,
|
||||
filler.Count.Value,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.MidRoll,
|
||||
FillerKind.MidRoll,
|
||||
filler.AllowWatermarks,
|
||||
cancellationToken));
|
||||
}
|
||||
@@ -423,7 +423,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
e1,
|
||||
filler.Duration.Value,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.PostRoll,
|
||||
FillerKind.PostRoll,
|
||||
filler.AllowWatermarks,
|
||||
log,
|
||||
cancellationToken));
|
||||
@@ -435,7 +435,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
e2,
|
||||
filler.Count.Value,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.PostRoll,
|
||||
FillerKind.PostRoll,
|
||||
filler.AllowWatermarks,
|
||||
cancellationToken));
|
||||
break;
|
||||
@@ -446,7 +446,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
e3,
|
||||
filler.Count.Value,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.PostRoll,
|
||||
FillerKind.PostRoll,
|
||||
filler.AllowWatermarks,
|
||||
cancellationToken));
|
||||
break;
|
||||
@@ -506,7 +506,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
pre1,
|
||||
remainingToFill,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.PreRoll,
|
||||
FillerKind.PreRoll,
|
||||
padFiller.AllowWatermarks,
|
||||
log,
|
||||
cancellationToken));
|
||||
@@ -532,7 +532,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
mid1,
|
||||
remainingToFill,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.MidRoll,
|
||||
FillerKind.MidRoll,
|
||||
padFiller.AllowWatermarks,
|
||||
log,
|
||||
cancellationToken));
|
||||
@@ -596,7 +596,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
|
||||
playoutBuilderState,
|
||||
post1,
|
||||
remainingToFill,
|
||||
scheduleItem.GuideMode == GuideMode.Filler ? FillerKind.GuideMode : FillerKind.PostRoll,
|
||||
FillerKind.PostRoll,
|
||||
padFiller.AllowWatermarks,
|
||||
log,
|
||||
cancellationToken));
|
||||
|
||||
@@ -69,7 +69,7 @@ public class PlayoutModeSchedulerFlood : PlayoutModeSchedulerBase<ProgramSchedul
|
||||
SubtitleMode = scheduleItem.SubtitleMode
|
||||
};
|
||||
|
||||
// never block scheduling when there is only one schedule item (with fixed start and flood)
|
||||
// never block scheduling when there is only one schedule item (with fixed start and flood)
|
||||
DateTimeOffset peekScheduleItemStart =
|
||||
scheduleItem.Id != peekScheduleItem.Id && peekScheduleItem.StartType == StartType.Fixed
|
||||
? GetStartTimeAfter(nextState with { InFlood = false }, peekScheduleItem)
|
||||
|
||||
@@ -65,7 +65,7 @@ public class RandomizedRotatingMediaCollectionEnumerator : IMediaCollectionEnume
|
||||
|
||||
public void MoveNext()
|
||||
{
|
||||
var groups = _groupMedia.Keys.ToList();
|
||||
IList<int> groups = _groupMedia.Keys.ToList();
|
||||
int nextRandom = _random.Next();
|
||||
|
||||
int groupNumber = nextRandom % groups.Count;
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace ErsatzTV.Core.Scheduling;
|
||||
public sealed class SeasonEpisodeMediaCollectionEnumerator : IMediaCollectionEnumerator
|
||||
{
|
||||
private readonly Lazy<Option<TimeSpan>> _lazyMinimumDuration;
|
||||
private readonly List<MediaItem> _sortedMediaItems;
|
||||
private readonly IList<MediaItem> _sortedMediaItems;
|
||||
|
||||
public SeasonEpisodeMediaCollectionEnumerator(
|
||||
IEnumerable<MediaItem> mediaItems,
|
||||
@@ -39,7 +39,7 @@ public sealed class SeasonEpisodeMediaCollectionEnumerator : IMediaCollectionEnu
|
||||
|
||||
public CollectionEnumeratorState State { get; }
|
||||
|
||||
public Option<MediaItem> Current => _sortedMediaItems.Count != 0 ? _sortedMediaItems[State.Index] : None;
|
||||
public Option<MediaItem> Current => _sortedMediaItems.Any() ? _sortedMediaItems[State.Index] : None;
|
||||
public Option<bool> CurrentIncludeInProgramGuide { get; }
|
||||
|
||||
public void MoveNext() => State.Index = (State.Index + 1) % _sortedMediaItems.Count;
|
||||
|
||||
@@ -12,7 +12,7 @@ public class ShuffleInOrderCollectionEnumerator : IMediaCollectionEnumerator
|
||||
private readonly int _mediaItemCount;
|
||||
private readonly bool _randomStartPoint;
|
||||
private Random _random;
|
||||
private MediaItem[] _shuffled;
|
||||
private IList<MediaItem> _shuffled;
|
||||
|
||||
public ShuffleInOrderCollectionEnumerator(
|
||||
IList<CollectionWithItems> collections,
|
||||
@@ -60,12 +60,12 @@ public class ShuffleInOrderCollectionEnumerator : IMediaCollectionEnumerator
|
||||
|
||||
public CollectionEnumeratorState State { get; }
|
||||
|
||||
public Option<MediaItem> Current => _shuffled.Length != 0 ? _shuffled[State.Index % _mediaItemCount] : None;
|
||||
public Option<MediaItem> Current => _shuffled.Any() ? _shuffled[State.Index % _mediaItemCount] : None;
|
||||
public Option<bool> CurrentIncludeInProgramGuide { get; }
|
||||
|
||||
public void MoveNext()
|
||||
{
|
||||
if ((State.Index + 1) % _shuffled.Length == 0)
|
||||
if ((State.Index + 1) % _shuffled.Count == 0)
|
||||
{
|
||||
Option<MediaItem> tail = Current;
|
||||
|
||||
@@ -83,12 +83,12 @@ public class ShuffleInOrderCollectionEnumerator : IMediaCollectionEnumerator
|
||||
State.Index++;
|
||||
}
|
||||
|
||||
State.Index %= _shuffled.Length;
|
||||
State.Index %= _shuffled.Count;
|
||||
}
|
||||
|
||||
public Option<TimeSpan> MinimumDuration => _lazyMinimumDuration.Value;
|
||||
|
||||
public int Count => _shuffled.Length;
|
||||
public int Count => _shuffled.Count;
|
||||
|
||||
private MediaItem[] Shuffle(IList<CollectionWithItems> collections, Random random)
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@ public class ShuffledScheduleItemsEnumerator : IScheduleItemsEnumerator
|
||||
private readonly IList<ProgramScheduleItem> _scheduleItems;
|
||||
private readonly int _scheduleItemsCount;
|
||||
private CloneableRandom _random;
|
||||
private ProgramScheduleItem[] _shuffled;
|
||||
private IList<ProgramScheduleItem> _shuffled;
|
||||
|
||||
public ShuffledScheduleItemsEnumerator(
|
||||
IList<ProgramScheduleItem> scheduleItems,
|
||||
@@ -68,7 +68,7 @@ public class ShuffledScheduleItemsEnumerator : IScheduleItemsEnumerator
|
||||
|
||||
if ((State.Index + offset) % _scheduleItemsCount == 0)
|
||||
{
|
||||
ProgramScheduleItem[] shuffled;
|
||||
IList<ProgramScheduleItem> shuffled;
|
||||
ProgramScheduleItem tail = Current;
|
||||
|
||||
// clone the random
|
||||
|
||||
@@ -64,7 +64,7 @@ public class EnumeratorCache(IMediaCollectionRepository mediaCollectionRepositor
|
||||
switch (content)
|
||||
{
|
||||
case YamlPlayoutContentSearchItem search:
|
||||
items = await mediaCollectionRepository.GetSmartCollectionItems(search.Query, string.Empty);
|
||||
items = await mediaCollectionRepository.GetSmartCollectionItems(search.Query);
|
||||
break;
|
||||
case YamlPlayoutContentShowItem show:
|
||||
items = await mediaCollectionRepository.GetShowItemsByShowGuids(
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user