Browse Source

fix resources (offline background and font) (#211)

pull/212/head v0.0.39-prealpha
Jason Dove 5 years ago committed by GitHub
parent
commit
c9905d0542
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs
  2. 3
      ErsatzTV.Core/FFmpeg/FFmpegProcessService.cs
  3. 1
      ErsatzTV.Core/FileSystemLayout.cs
  4. 9
      ErsatzTV/ErsatzTV.csproj
  5. 42
      ErsatzTV/Services/RunOnce/ResourceExtractorService.cs
  6. 1
      ErsatzTV/Startup.cs

5
ErsatzTV.Core/FFmpeg/FFmpegProcessBuilder.cs

@ -225,7 +225,8 @@ namespace ErsatzTV.Core.FFmpeg @@ -225,7 +225,8 @@ namespace ErsatzTV.Core.FFmpeg
public FFmpegProcessBuilder WithErrorText(IDisplaySize desiredResolution, string text)
{
const string FONT_FILE = "fontfile=Resources/Roboto-Regular.ttf";
string fontPath = Path.Combine(FileSystemLayout.ResourcesCacheFolder, "Roboto-Regular.ttf");
var fontFile = $"fontfile={fontPath}";
const string FONT_COLOR = "fontcolor=white";
const string X = "x=(w-text_w)/2";
const string Y = "y=(h-text_h)/3*2";
@ -233,7 +234,7 @@ namespace ErsatzTV.Core.FFmpeg @@ -233,7 +234,7 @@ namespace ErsatzTV.Core.FFmpeg
string fontSize = text.Length > 80 ? "fontsize=30" : text.Length > 60 ? "fontsize=40" : "fontsize=60";
return WithFilterComplex(
$"[0:0]scale={desiredResolution.Width}:{desiredResolution.Height},drawtext={FONT_FILE}:{fontSize}:{FONT_COLOR}:{X}:{Y}:text='{text}'[v]",
$"[0:0]scale={desiredResolution.Width}:{desiredResolution.Height},drawtext={fontFile}:{fontSize}:{FONT_COLOR}:{X}:{Y}:text='{text}'[v]",
"[v]",
"1:a");
}

3
ErsatzTV.Core/FFmpeg/FFmpegProcessService.cs

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.FFmpeg;
@ -110,7 +111,7 @@ namespace ErsatzTV.Core.FFmpeg @@ -110,7 +111,7 @@ namespace ErsatzTV.Core.FFmpeg
.WithQuiet()
.WithFormatFlags(playbackSettings.FormatFlags)
.WithRealtimeOutput(playbackSettings.RealtimeOutput)
.WithLoopedImage("Resources/background.png")
.WithLoopedImage(Path.Combine(FileSystemLayout.ResourcesCacheFolder, "background.png"))
.WithLibavfilter()
.WithInput("anullsrc")
.WithErrorText(desiredResolution, errorMessage)

1
ErsatzTV.Core/FileSystemLayout.cs

@ -16,6 +16,7 @@ namespace ErsatzTV.Core @@ -16,6 +16,7 @@ namespace ErsatzTV.Core
public static readonly string LogDatabasePath = Path.Combine(AppDataFolder, "logs.sqlite3");
public static readonly string LegacyImageCacheFolder = Path.Combine(AppDataFolder, "cache", "images");
public static readonly string ResourcesCacheFolder = Path.Combine(AppDataFolder, "cache", "resources");
public static readonly string PlexSecretsPath = Path.Combine(AppDataFolder, "plex-secrets.json");
public static readonly string JellyfinSecretsPath = Path.Combine(AppDataFolder, "jellyfin-secrets.json");

9
ErsatzTV/ErsatzTV.csproj

@ -51,12 +51,9 @@ @@ -51,12 +51,9 @@
</ItemGroup>
<ItemGroup>
<None Update="Resources\background.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Resources\Roboto-Regular.ttf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<EmbeddedResource Include="Resources\background.png" />
<EmbeddedResource Include="Resources\ErsatzTV.png" />
<EmbeddedResource Include="Resources\Roboto-Regular.ttf" />
</ItemGroup>
</Project>

42
ErsatzTV/Services/RunOnce/ResourceExtractorService.cs

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
using System.IO;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using ErsatzTV.Core;
using Microsoft.Extensions.Hosting;
namespace ErsatzTV.Services.RunOnce
{
public class ResourceExtractorService : IHostedService
{
public async Task StartAsync(CancellationToken cancellationToken)
{
if (!Directory.Exists(FileSystemLayout.ResourcesCacheFolder))
{
Directory.CreateDirectory(FileSystemLayout.ResourcesCacheFolder);
}
Assembly assembly = typeof(ResourceExtractorService).GetTypeInfo().Assembly;
await ExtractResource(assembly, "background.png", cancellationToken);
await ExtractResource(assembly, "ErsatzTV.png", cancellationToken);
await ExtractResource(assembly, "Roboto-Regular.ttf", cancellationToken);
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
private async Task ExtractResource(Assembly assembly, string name, CancellationToken cancellationToken)
{
await using Stream resource = assembly.GetManifestResourceStream($"ErsatzTV.Resources.{name}");
if (resource != null)
{
await using FileStream fs = File.Create(
Path.Combine(FileSystemLayout.ResourcesCacheFolder, name));
await resource.CopyToAsync(fs, cancellationToken);
}
}
}
}

1
ErsatzTV/Startup.cs

@ -255,6 +255,7 @@ namespace ErsatzTV @@ -255,6 +255,7 @@ namespace ErsatzTV
services.AddHostedService<EndpointValidatorService>();
services.AddHostedService<DatabaseMigratorService>();
services.AddHostedService<CacheCleanerService>();
services.AddHostedService<ResourceExtractorService>();
services.AddHostedService<EmbyService>();
services.AddHostedService<JellyfinService>();
services.AddHostedService<PlexService>();

Loading…
Cancel
Save