Browse Source

metadata stack trace improvements (#672)

* improve stack traces from local metadata provider

* more metadata line number fixes
pull/673/head
Jason Dove 4 years ago committed by GitHub
parent
commit
58697496fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 166
      ErsatzTV.Core/Metadata/LocalMetadataProvider.cs

166
ErsatzTV.Core/Metadata/LocalMetadataProvider.cs

@ -70,18 +70,15 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -70,18 +70,15 @@ public class LocalMetadataProvider : ILocalMetadataProvider
maybeMetadata = await LoadTelevisionShowMetadata(nfoFileName);
}
return maybeMetadata.Match(
metadata =>
foreach (ShowMetadata metadata in maybeMetadata)
{
metadata.SortTitle = _fallbackMetadataProvider.GetSortTitle(metadata.Title);
return metadata;
},
() =>
{
ShowMetadata metadata = _fallbackMetadataProvider.GetFallbackMetadataForShow(showFolder);
metadata.SortTitle = _fallbackMetadataProvider.GetSortTitle(metadata.Title);
return metadata;
});
}
ShowMetadata fallbackMetadata = _fallbackMetadataProvider.GetFallbackMetadataForShow(showFolder);
fallbackMetadata.SortTitle = _fallbackMetadataProvider.GetSortTitle(fallbackMetadata.Title);
return fallbackMetadata;
}
public async Task<ArtistMetadata> GetMetadataForArtist(string artistFolder)
@ -93,18 +90,15 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -93,18 +90,15 @@ public class LocalMetadataProvider : ILocalMetadataProvider
maybeMetadata = await LoadArtistMetadata(nfoFileName);
}
return maybeMetadata.Match(
metadata =>
{
metadata.SortTitle = _fallbackMetadataProvider.GetSortTitle(metadata.Title);
return metadata;
},
() =>
foreach (ArtistMetadata metadata in maybeMetadata)
{
ArtistMetadata metadata = _fallbackMetadataProvider.GetFallbackMetadataForArtist(artistFolder);
metadata.SortTitle = _fallbackMetadataProvider.GetSortTitle(metadata.Title);
return metadata;
});
}
ArtistMetadata fallbackMetadata = _fallbackMetadataProvider.GetFallbackMetadataForArtist(artistFolder);
fallbackMetadata.SortTitle = _fallbackMetadataProvider.GetSortTitle(fallbackMetadata.Title);
return fallbackMetadata;
}
public Task<bool> RefreshSidecarMetadata(Movie movie, string nfoFileName) =>
@ -173,8 +167,9 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -173,8 +167,9 @@ public class LocalMetadataProvider : ILocalMetadataProvider
{
await using FileStream fileStream = File.Open(nfoFileName, FileMode.Open, FileAccess.Read);
Option<MusicVideoNfo> maybeNfo = MusicVideoSerializer.Deserialize(fileStream) as MusicVideoNfo;
return maybeNfo.Match<Option<MusicVideoMetadata>>(
nfo => new MusicVideoMetadata
foreach (MusicVideoNfo nfo in maybeNfo)
{
return new MusicVideoMetadata
{
MetadataKind = MetadataKind.Sidecar,
DateAdded = DateTime.UtcNow,
@ -187,8 +182,10 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -187,8 +182,10 @@ public class LocalMetadataProvider : ILocalMetadataProvider
Genres = nfo.Genres.Map(g => new Genre { Name = g }).ToList(),
Tags = nfo.Tags.Map(t => new Tag { Name = t }).ToList(),
Studios = nfo.Studios.Map(s => new Studio { Name = s }).ToList()
},
None);
};
}
return None;
}
catch (Exception ex)
{
@ -207,8 +204,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -207,8 +204,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
Either<BaseError, Dictionary<string, string>> maybeTags =
await _localStatisticsProvider.GetFormatTags(ffprobePath, song);
return maybeTags.Match(
tags =>
foreach (Dictionary<string, string> tags in maybeTags.RightToSeq())
{
Option<SongMetadata> maybeFallbackMetadata =
_fallbackMetadataProvider.GetFallbackMetadata(song);
@ -273,8 +269,9 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -273,8 +269,9 @@ public class LocalMetadataProvider : ILocalMetadataProvider
}
return result;
},
_ => Option<SongMetadata>.None);
}
return Option<SongMetadata>.None;
}
catch (Exception ex)
{
@ -320,8 +317,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -320,8 +317,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
{
Option<EpisodeMetadata> maybeIncoming =
episodeMetadata.Find(em => em.EpisodeNumber == existing.EpisodeNumber);
updated = await maybeIncoming.Match(
async metadata =>
foreach (EpisodeMetadata metadata in maybeIncoming)
{
existing.Outline = metadata.Outline;
existing.Plot = metadata.Plot;
@ -411,16 +407,16 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -411,16 +407,16 @@ public class LocalMetadataProvider : ILocalMetadataProvider
}
return await _metadataRepository.Update(existing) || updated;
},
() => Task.FromResult(updated)) || updated;
}
}
return updated;
}
private Task<bool> ApplyMetadataUpdate(Movie movie, MovieMetadata metadata) =>
Optional(movie.MovieMetadata).Flatten().HeadOrNone().Match(
async existing =>
private async Task<bool> ApplyMetadataUpdate(Movie movie, MovieMetadata metadata)
{
Option<MovieMetadata> maybeMetadata = Optional(movie.MovieMetadata).Flatten().HeadOrNone();
foreach (MovieMetadata existing in maybeMetadata)
{
existing.ContentRating = metadata.ContentRating;
existing.Outline = metadata.Outline;
@ -511,9 +507,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -511,9 +507,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
}
return await _metadataRepository.Update(existing) || updated;
},
async () =>
{
}
metadata.SortTitle = string.IsNullOrWhiteSpace(metadata.SortTitle)
? _fallbackMetadataProvider.GetSortTitle(metadata.Title)
: metadata.SortTitle;
@ -521,11 +516,12 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -521,11 +516,12 @@ public class LocalMetadataProvider : ILocalMetadataProvider
movie.MovieMetadata = new List<MovieMetadata> { metadata };
return await _metadataRepository.Add(metadata);
});
}
private Task<bool> ApplyMetadataUpdate(Show show, ShowMetadata metadata) =>
Optional(show.ShowMetadata).Flatten().HeadOrNone().Match(
async existing =>
private async Task<bool> ApplyMetadataUpdate(Show show, ShowMetadata metadata)
{
Option<ShowMetadata> maybeMetadata = Optional(show.ShowMetadata).Flatten().HeadOrNone();
foreach (ShowMetadata existing in maybeMetadata)
{
existing.ContentRating = metadata.ContentRating;
existing.Outline = metadata.Outline;
@ -576,9 +572,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -576,9 +572,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
}
return await _metadataRepository.Update(existing) || updated;
},
async () =>
{
}
metadata.SortTitle = string.IsNullOrWhiteSpace(metadata.SortTitle)
? _fallbackMetadataProvider.GetSortTitle(metadata.Title)
: metadata.SortTitle;
@ -586,11 +581,12 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -586,11 +581,12 @@ public class LocalMetadataProvider : ILocalMetadataProvider
show.ShowMetadata = new List<ShowMetadata> { metadata };
return await _metadataRepository.Add(metadata);
});
}
private Task<bool> ApplyMetadataUpdate(Artist artist, ArtistMetadata metadata) =>
Optional(artist.ArtistMetadata).Flatten().HeadOrNone().Match(
async existing =>
private async Task<bool> ApplyMetadataUpdate(Artist artist, ArtistMetadata metadata)
{
Option<ArtistMetadata> maybeMetadata = Optional(artist.ArtistMetadata).Flatten().HeadOrNone();
foreach (ArtistMetadata existing in maybeMetadata)
{
existing.Title = metadata.Title;
existing.Disambiguation = metadata.Disambiguation;
@ -670,9 +666,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -670,9 +666,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
}
return await _metadataRepository.Update(existing) || updated;
},
async () =>
{
}
metadata.SortTitle = string.IsNullOrWhiteSpace(metadata.SortTitle)
? _fallbackMetadataProvider.GetSortTitle(metadata.Title)
: metadata.SortTitle;
@ -680,11 +675,12 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -680,11 +675,12 @@ public class LocalMetadataProvider : ILocalMetadataProvider
artist.ArtistMetadata = new List<ArtistMetadata> { metadata };
return await _metadataRepository.Add(metadata);
});
}
private Task<bool> ApplyMetadataUpdate(MusicVideo musicVideo, MusicVideoMetadata metadata) =>
Optional(musicVideo.MusicVideoMetadata).Flatten().HeadOrNone().Match(
async existing =>
private async Task<bool> ApplyMetadataUpdate(MusicVideo musicVideo, MusicVideoMetadata metadata)
{
Option<MusicVideoMetadata> maybeMetadata = Optional(musicVideo.MusicVideoMetadata).Flatten().HeadOrNone();
foreach (MusicVideoMetadata existing in maybeMetadata)
{
existing.Title = metadata.Title;
existing.Year = metadata.Year;
@ -713,9 +709,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -713,9 +709,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
(_, _) => Task.FromResult(false));
return await _metadataRepository.Update(existing) || updated;
},
async () =>
{
}
metadata.SortTitle = string.IsNullOrWhiteSpace(metadata.SortTitle)
? _fallbackMetadataProvider.GetSortTitle(metadata.Title)
: metadata.SortTitle;
@ -723,11 +718,12 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -723,11 +718,12 @@ public class LocalMetadataProvider : ILocalMetadataProvider
musicVideo.MusicVideoMetadata = new List<MusicVideoMetadata> { metadata };
return await _metadataRepository.Add(metadata);
});
}
private Task<bool> ApplyMetadataUpdate(OtherVideo otherVideo, OtherVideoMetadata metadata) =>
Optional(otherVideo.OtherVideoMetadata).Flatten().HeadOrNone().Match(
async existing =>
private async Task<bool> ApplyMetadataUpdate(OtherVideo otherVideo, OtherVideoMetadata metadata)
{
Option<OtherVideoMetadata> maybeMetadata = Optional(otherVideo.OtherVideoMetadata).Flatten().HeadOrNone();
foreach (OtherVideoMetadata existing in maybeMetadata)
{
existing.Title = metadata.Title;
@ -752,9 +748,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -752,9 +748,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
(_, _) => Task.FromResult(false));
return await _metadataRepository.Update(existing) || updated;
},
async () =>
{
}
metadata.SortTitle = string.IsNullOrWhiteSpace(metadata.SortTitle)
? _fallbackMetadataProvider.GetSortTitle(metadata.Title)
: metadata.SortTitle;
@ -762,11 +757,12 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -762,11 +757,12 @@ public class LocalMetadataProvider : ILocalMetadataProvider
otherVideo.OtherVideoMetadata = new List<OtherVideoMetadata> { metadata };
return await _metadataRepository.Add(metadata);
});
}
private Task<bool> ApplyMetadataUpdate(Song song, SongMetadata metadata) =>
Optional(song.SongMetadata).Flatten().HeadOrNone().Match(
async existing =>
private async Task<bool> ApplyMetadataUpdate(Song song, SongMetadata metadata)
{
Option<SongMetadata> maybeMetadata = Optional(song.SongMetadata).Flatten().HeadOrNone();
foreach (SongMetadata existing in maybeMetadata)
{
existing.Title = metadata.Title;
existing.Artist = metadata.Artist;
@ -795,9 +791,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -795,9 +791,8 @@ public class LocalMetadataProvider : ILocalMetadataProvider
(_, _) => Task.FromResult(false));
return await _metadataRepository.Update(existing) || updated;
},
async () =>
{
}
metadata.SortTitle = string.IsNullOrWhiteSpace(metadata.SortTitle)
? _fallbackMetadataProvider.GetSortTitle(metadata.Title)
: metadata.SortTitle;
@ -805,7 +800,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -805,7 +800,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
song.SongMetadata = new List<SongMetadata> { metadata };
return await _metadataRepository.Add(metadata);
});
}
private async Task<Option<ShowMetadata>> LoadTelevisionShowMetadata(string nfoFileName)
{
@ -813,8 +808,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -813,8 +808,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
{
await using FileStream fileStream = File.Open(nfoFileName, FileMode.Open, FileAccess.Read);
Option<TvShowNfo> maybeNfo = TvShowSerializer.Deserialize(fileStream) as TvShowNfo;
return maybeNfo.Match<Option<ShowMetadata>>(
nfo =>
foreach (TvShowNfo nfo in maybeNfo)
{
DateTime dateAdded = DateTime.UtcNow;
DateTime dateUpdated = File.GetLastWriteTimeUtc(nfoFileName);
@ -839,8 +833,9 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -839,8 +833,9 @@ public class LocalMetadataProvider : ILocalMetadataProvider
.Map(id => new MetadataGuid { Guid = $"{id.Type}://{id.Guid}" })
.ToList()
};
},
None);
}
return None;
}
catch (Exception ex)
{
@ -856,8 +851,9 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -856,8 +851,9 @@ public class LocalMetadataProvider : ILocalMetadataProvider
{
await using FileStream fileStream = File.Open(nfoFileName, FileMode.Open, FileAccess.Read);
Option<ArtistNfo> maybeNfo = ArtistSerializer.Deserialize(fileStream) as ArtistNfo;
return maybeNfo.Match<Option<ArtistMetadata>>(
nfo => new ArtistMetadata
foreach (ArtistNfo nfo in maybeNfo)
{
return new ArtistMetadata
{
MetadataKind = MetadataKind.Sidecar,
DateAdded = DateTime.UtcNow,
@ -868,8 +864,10 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -868,8 +864,10 @@ public class LocalMetadataProvider : ILocalMetadataProvider
Genres = nfo.Genres.Map(g => new Genre { Name = g }).ToList(),
Styles = nfo.Styles.Map(s => new Style { Name = s }).ToList(),
Moods = nfo.Moods.Map(m => new Mood { Name = m }).ToList()
},
None);
};
}
return None;
}
catch (Exception ex)
{
@ -933,8 +931,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -933,8 +931,7 @@ public class LocalMetadataProvider : ILocalMetadataProvider
{
await using FileStream fileStream = File.Open(nfoFileName, FileMode.Open, FileAccess.Read);
Option<MovieNfo> maybeNfo = MovieSerializer.Deserialize(fileStream) as MovieNfo;
return maybeNfo.Match<Option<MovieMetadata>>(
nfo =>
foreach (MovieNfo nfo in maybeNfo)
{
DateTime dateAdded = DateTime.UtcNow;
DateTime dateUpdated = File.GetLastWriteTimeUtc(nfoFileName);
@ -961,8 +958,9 @@ public class LocalMetadataProvider : ILocalMetadataProvider @@ -961,8 +958,9 @@ public class LocalMetadataProvider : ILocalMetadataProvider
.Map(id => new MetadataGuid { Guid = $"{id.Type}://{id.Guid}" })
.ToList()
};
},
None);
}
return None;
}
catch (Exception ex)
{

Loading…
Cancel
Save