[CHANGE] Library service, db migrations, ui blazor
This commit is contained in:
@@ -21,14 +21,51 @@ public class LibraryService : ILibraryService
|
||||
_logger = logger;
|
||||
_librarySettings = librarySettings.Value;
|
||||
_dbContextFactory = contextFactory;
|
||||
_libraryDirectory = Directory.CreateDirectory(Path.Combine(_librarySettings.Path, SubDirMedia));
|
||||
_libraryDirectory = Directory.CreateDirectory(Path.Combine(_librarySettings.Path, SubDirChannels));
|
||||
_libraryDirectory = Directory.CreateDirectory(_librarySettings.Path);
|
||||
logger.LogDebug("Working dir for library: {LibraryWorkingDir}", _libraryDirectory.FullName);
|
||||
Directory.CreateDirectory(Path.Combine(_librarySettings.Path, SubDirMedia));
|
||||
Directory.CreateDirectory(Path.Combine(_librarySettings.Path, SubDirChannels));
|
||||
}
|
||||
|
||||
public async Task<Result<LibraryInformation>> GetLibraryInfoAsync()
|
||||
public async Task<Result<LibraryInformation>> GetLibraryInfoAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||
//TODO: Get library info
|
||||
return ResultError.Fail("Not implemented!");
|
||||
try
|
||||
{
|
||||
await using var context = await _dbContextFactory.CreateDbContextAsync(cancellationToken);
|
||||
var libInfo = new LibraryInformation
|
||||
{
|
||||
LibraryPath = _libraryDirectory.FullName,
|
||||
CreatedAtUtc = _libraryDirectory.CreationTimeUtc,
|
||||
LastModifiedUtc = _libraryDirectory.LastWriteTimeUtc,
|
||||
TotalChannels = await context.Channels.CountAsync(cancellationToken: cancellationToken),
|
||||
TotalMedia = await context.Media.CountAsync(cancellationToken: cancellationToken),
|
||||
TotalSizeBytes = GetDirectorySize(_libraryDirectory)
|
||||
};
|
||||
return libInfo;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (e is OperationCanceledException)
|
||||
{
|
||||
return ResultError.Fail("Library service operation cancelled");
|
||||
}
|
||||
|
||||
_logger.LogError(e, "Failed to get library information");
|
||||
return ResultError.Fail("Failed to get library information");
|
||||
}
|
||||
}
|
||||
|
||||
private long GetDirectorySize(DirectoryInfo dir)
|
||||
{
|
||||
try
|
||||
{
|
||||
var size = dir.EnumerateFiles("", SearchOption.AllDirectories).Select(f => f.Length).Sum();
|
||||
return size;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "Error while getting directory size.");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user