95 lines
3.6 KiB
C#
95 lines
3.6 KiB
C#
using System.Reflection;
|
|
using ErsatzTV.Core;
|
|
|
|
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, "song_background_1.png", cancellationToken);
|
|
await ExtractResource(assembly, "song_background_2.png", cancellationToken);
|
|
await ExtractResource(assembly, "song_background_3.png", cancellationToken);
|
|
await ExtractResource(assembly, "ErsatzTV.png", cancellationToken);
|
|
|
|
await ExtractFontResource(assembly, "Roboto-Regular.ttf", cancellationToken);
|
|
await ExtractFontResource(assembly, "OPTIKabel-Heavy.otf", cancellationToken);
|
|
|
|
await ExtractTemplateResource(
|
|
assembly,
|
|
"_default.ass.sbntxt",
|
|
FileSystemLayout.MusicVideoCreditsTemplatesFolder,
|
|
cancellationToken);
|
|
|
|
await ExtractScriptResource(
|
|
assembly,
|
|
"_threePartEpisodes.lua",
|
|
FileSystemLayout.MultiEpisodeShuffleTemplatesFolder,
|
|
cancellationToken);
|
|
}
|
|
|
|
public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
|
|
|
|
private static 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);
|
|
}
|
|
}
|
|
|
|
private static async Task ExtractFontResource(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);
|
|
|
|
resource.Position = 0;
|
|
|
|
await using FileStream fontCacheFileStream =
|
|
File.Create(Path.Combine(FileSystemLayout.FontsCacheFolder, name));
|
|
await resource.CopyToAsync(fontCacheFileStream, cancellationToken);
|
|
}
|
|
}
|
|
|
|
private static async Task ExtractTemplateResource(
|
|
Assembly assembly,
|
|
string name,
|
|
string targetFolder,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
await using Stream resource = assembly.GetManifestResourceStream($"ErsatzTV.Resources.Templates.{name}");
|
|
if (resource != null)
|
|
{
|
|
await using FileStream fs = File.Create(Path.Combine(targetFolder, name));
|
|
await resource.CopyToAsync(fs, cancellationToken);
|
|
}
|
|
}
|
|
|
|
private static async Task ExtractScriptResource(
|
|
Assembly assembly,
|
|
string name,
|
|
string targetFolder,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
await using Stream resource = assembly.GetManifestResourceStream($"ErsatzTV.Resources.Scripts.{name}");
|
|
if (resource != null)
|
|
{
|
|
await using FileStream fs = File.Create(Path.Combine(targetFolder, name));
|
|
await resource.CopyToAsync(fs, cancellationToken);
|
|
}
|
|
}
|
|
}
|