rework media layout (#22)

* replace media items tables with card grids

* style cleanup

* add basic paging

* sort and page in the db

* optimize sql for movies

* support movie posters

* resize movie posters and store in cache with channel logos

* fix bug preventing folders with more than 50 chars as local media sources

* support tv posters
This commit is contained in:
Jason Dove
2021-02-14 00:15:18 +00:00
committed by GitHub
parent 0b5a6f9dcd
commit 9d40caebd6
48 changed files with 2386 additions and 178 deletions
@@ -1,9 +1,7 @@
using System;
using System.IO;
using System.Security.Cryptography;
using System.Threading;
using System.Threading;
using System.Threading.Tasks;
using ErsatzTV.Core;
using ErsatzTV.Core.Interfaces.Images;
using LanguageExt;
using MediatR;
@@ -11,33 +9,12 @@ namespace ErsatzTV.Application.Images.Commands
{
public class SaveImageToDiskHandler : IRequestHandler<SaveImageToDisk, Either<BaseError, string>>
{
private static readonly SHA1CryptoServiceProvider Crypto;
private readonly IImageCache _imageCache;
static SaveImageToDiskHandler() => Crypto = new SHA1CryptoServiceProvider();
public SaveImageToDiskHandler(IImageCache imageCache) => _imageCache = imageCache;
public async Task<Either<BaseError, string>> Handle(
public Task<Either<BaseError, string>> Handle(
SaveImageToDisk request,
CancellationToken cancellationToken)
{
try
{
byte[] hash = Crypto.ComputeHash(request.Buffer);
string hex = BitConverter.ToString(hash).Replace("-", string.Empty);
string fileName = Path.Combine(FileSystemLayout.ImageCacheFolder, hex);
if (!Directory.Exists(FileSystemLayout.ImageCacheFolder))
{
Directory.CreateDirectory(FileSystemLayout.ImageCacheFolder);
}
await File.WriteAllBytesAsync(fileName, request.Buffer, cancellationToken);
return hex;
}
catch (Exception ex)
{
return BaseError.New(ex.Message);
}
}
CancellationToken cancellationToken) => _imageCache.SaveImage(request.Buffer);
}
}