Browse Source

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

pull/22/head
Jason Dove 6 years ago
parent
commit
c1b1a619b3
  1. 14
      ErsatzTV.Application/MediaSources/Commands/CreateLocalMediaSourceHandler.cs
  2. 2
      ErsatzTV.Application/MediaSources/Commands/ScanLocalMediaSourceHandler.cs
  3. 10
      ErsatzTV/Pages/LocalMediaSourceEditor.razor
  4. 2
      ErsatzTV/Shared/LocalMediaSources.razor

14
ErsatzTV.Application/MediaSources/Commands/CreateLocalMediaSourceHandler.cs

@ -41,28 +41,28 @@ namespace ErsatzTV.Application.MediaSources.Commands @@ -41,28 +41,28 @@ namespace ErsatzTV.Application.MediaSources.Commands
Folder = folder
});
private async Task<Validation<BaseError, string>> ValidateName(CreateLocalMediaSource createCollection)
private async Task<Validation<BaseError, string>> ValidateName(CreateLocalMediaSource request)
{
List<string> allNames = await _mediaSourceRepository.GetAll()
.Map(list => list.Map(c => c.Name).ToList());
Validation<BaseError, string> result1 = createCollection.NotEmpty(c => c.Name)
.Bind(_ => createCollection.NotLongerThan(50)(c => c.Name));
Validation<BaseError, string> result1 = request.NotEmpty(c => c.Name)
.Bind(_ => request.NotLongerThan(50)(c => c.Name));
var result2 = Optional(createCollection.Name)
var result2 = Optional(request.Name)
.Filter(name => !allNames.Contains(name))
.ToValidation<BaseError>("Media source name must be unique");
return (result1, result2).Apply((_, _) => createCollection.Name);
return (result1, result2).Apply((_, _) => request.Name);
}
private async Task<Validation<BaseError, string>> ValidateFolder(CreateLocalMediaSource createCollection)
private async Task<Validation<BaseError, string>> ValidateFolder(CreateLocalMediaSource request)
{
List<string> allFolders = await _mediaSourceRepository.GetAll()
.Map(list => list.OfType<LocalMediaSource>().Map(c => c.Folder).ToList());
return Optional(createCollection.Folder)
return Optional(request.Folder)
.Filter(folder => allFolders.ForAll(f => !AreSubPaths(f, folder)))
.ToValidation<BaseError>("Folder must not belong to another media source");
}

2
ErsatzTV.Application/MediaSources/Commands/ScanLocalMediaSourceHandler.cs

@ -31,7 +31,7 @@ namespace ErsatzTV.Application.MediaSources.Commands @@ -31,7 +31,7 @@ namespace ErsatzTV.Application.MediaSources.Commands
Validate(request)
.MapT(
p => _localMediaScanner.ScanLocalMediaSource(p.LocalMediaSource, p.FFprobePath)
.Map(_ => p.LocalMediaSource.Name))
.Map(_ => p.LocalMediaSource.Folder))
.Bind(v => v.ToEitherAsync());
private async Task<Validation<BaseError, RequestParameters>> Validate(ScanLocalMediaSource request) =>

10
ErsatzTV/Pages/LocalMediaSourceEditor.razor

@ -67,7 +67,13 @@ @@ -67,7 +67,13 @@
_messageStore.Clear();
if (_editContext.Validate())
{
var command = new CreateLocalMediaSource(_model.Folder, _model.MediaType, _model.Folder);
var command = new CreateLocalMediaSource(
Convert.ToBase64String(Guid.NewGuid().ToByteArray())
.TrimEnd('=')
.Replace("/", "_")
.Replace("+", "-"),
_model.MediaType,
_model.Folder);
Either<BaseError, MediaSourceViewModel> result = await Mediator.Send(command);
await result.Match(
Left: error =>
@ -84,4 +90,6 @@ @@ -84,4 +90,6 @@
}
}
}

2
ErsatzTV/Shared/LocalMediaSources.razor

@ -42,7 +42,7 @@ @@ -42,7 +42,7 @@
var parameters = new DialogParameters
{
{ "EntityType", "media source" },
{ "EntityName", mediaSource.Name },
{ "EntityName", mediaSource.Folder },
{ "DetailText", $"This media source contains {count} media items." },
{ "DetailHighlight", count.ToString() }
};

Loading…
Cancel
Save