Browse Source

fix search index updates for local libraries (#111)

pull/112/head
Jason Dove 5 years ago committed by GitHub
parent
commit
f06a04ed0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 92
      ErsatzTV.Core/Metadata/LocalMetadataProvider.cs

92
ErsatzTV.Core/Metadata/LocalMetadataProvider.cs

@ -113,7 +113,12 @@ namespace ErsatzTV.Core.Metadata
existing.Plot = metadata.Plot; existing.Plot = metadata.Plot;
existing.Tagline = metadata.Tagline; existing.Tagline = metadata.Tagline;
existing.Title = metadata.Title; existing.Title = metadata.Title;
existing.DateAdded = metadata.DateAdded;
if (existing.DateAdded == DateTime.MinValue)
{
existing.DateAdded = metadata.DateAdded;
}
existing.DateUpdated = metadata.DateUpdated; existing.DateUpdated = metadata.DateUpdated;
existing.MetadataKind = metadata.MetadataKind; existing.MetadataKind = metadata.MetadataKind;
existing.OriginalTitle = metadata.OriginalTitle; existing.OriginalTitle = metadata.OriginalTitle;
@ -143,11 +148,18 @@ namespace ErsatzTV.Core.Metadata
Optional(movie.MovieMetadata).Flatten().HeadOrNone().Match( Optional(movie.MovieMetadata).Flatten().HeadOrNone().Match(
async existing => async existing =>
{ {
var updated = false;
existing.Outline = metadata.Outline; existing.Outline = metadata.Outline;
existing.Plot = metadata.Plot; existing.Plot = metadata.Plot;
existing.Tagline = metadata.Tagline; existing.Tagline = metadata.Tagline;
existing.Title = metadata.Title; existing.Title = metadata.Title;
existing.DateAdded = metadata.DateAdded;
if (existing.DateAdded == DateTime.MinValue)
{
existing.DateAdded = metadata.DateAdded;
}
existing.DateUpdated = metadata.DateUpdated; existing.DateUpdated = metadata.DateUpdated;
existing.MetadataKind = metadata.MetadataKind; existing.MetadataKind = metadata.MetadataKind;
existing.OriginalTitle = metadata.OriginalTitle; existing.OriginalTitle = metadata.OriginalTitle;
@ -161,28 +173,40 @@ namespace ErsatzTV.Core.Metadata
.ToList()) .ToList())
{ {
existing.Genres.Remove(genre); existing.Genres.Remove(genre);
await _metadataRepository.RemoveGenre(genre); if (await _metadataRepository.RemoveGenre(genre))
{
updated = true;
}
} }
foreach (Genre genre in metadata.Genres.Filter(g => existing.Genres.All(g2 => g2.Name != g.Name)) foreach (Genre genre in metadata.Genres.Filter(g => existing.Genres.All(g2 => g2.Name != g.Name))
.ToList()) .ToList())
{ {
existing.Genres.Add(genre); existing.Genres.Add(genre);
await _movieRepository.AddGenre(existing, genre); if (await _movieRepository.AddGenre(existing, genre))
{
updated = true;
}
} }
foreach (Tag tag in existing.Tags.Filter(t => metadata.Tags.All(t2 => t2.Name != t.Name)) foreach (Tag tag in existing.Tags.Filter(t => metadata.Tags.All(t2 => t2.Name != t.Name))
.ToList()) .ToList())
{ {
existing.Tags.Remove(tag); existing.Tags.Remove(tag);
await _metadataRepository.RemoveTag(tag); if (await _metadataRepository.RemoveTag(tag))
{
updated = true;
}
} }
foreach (Tag tag in metadata.Tags.Filter(t => existing.Tags.All(t2 => t2.Name != t.Name)) foreach (Tag tag in metadata.Tags.Filter(t => existing.Tags.All(t2 => t2.Name != t.Name))
.ToList()) .ToList())
{ {
existing.Tags.Add(tag); existing.Tags.Add(tag);
await _movieRepository.AddTag(existing, tag); if (await _movieRepository.AddTag(existing, tag))
{
updated = true;
}
} }
foreach (Studio studio in existing.Studios foreach (Studio studio in existing.Studios
@ -190,7 +214,10 @@ namespace ErsatzTV.Core.Metadata
.ToList()) .ToList())
{ {
existing.Studios.Remove(studio); existing.Studios.Remove(studio);
await _metadataRepository.RemoveStudio(studio); if (await _metadataRepository.RemoveStudio(studio))
{
updated = true;
}
} }
foreach (Studio studio in metadata.Studios foreach (Studio studio in metadata.Studios
@ -198,10 +225,13 @@ namespace ErsatzTV.Core.Metadata
.ToList()) .ToList())
{ {
existing.Studios.Add(studio); existing.Studios.Add(studio);
await _movieRepository.AddStudio(existing, studio); if (await _movieRepository.AddStudio(existing, studio))
{
updated = true;
}
} }
return await _metadataRepository.Update(existing); return await _metadataRepository.Update(existing) || updated;
}, },
async () => async () =>
{ {
@ -218,11 +248,18 @@ namespace ErsatzTV.Core.Metadata
Optional(show.ShowMetadata).Flatten().HeadOrNone().Match( Optional(show.ShowMetadata).Flatten().HeadOrNone().Match(
async existing => async existing =>
{ {
var updated = false;
existing.Outline = metadata.Outline; existing.Outline = metadata.Outline;
existing.Plot = metadata.Plot; existing.Plot = metadata.Plot;
existing.Tagline = metadata.Tagline; existing.Tagline = metadata.Tagline;
existing.Title = metadata.Title; existing.Title = metadata.Title;
existing.DateAdded = metadata.DateAdded;
if (existing.DateAdded == DateTime.MinValue)
{
existing.DateAdded = metadata.DateAdded;
}
existing.DateUpdated = metadata.DateUpdated; existing.DateUpdated = metadata.DateUpdated;
existing.MetadataKind = metadata.MetadataKind; existing.MetadataKind = metadata.MetadataKind;
existing.OriginalTitle = metadata.OriginalTitle; existing.OriginalTitle = metadata.OriginalTitle;
@ -236,28 +273,40 @@ namespace ErsatzTV.Core.Metadata
.ToList()) .ToList())
{ {
existing.Genres.Remove(genre); existing.Genres.Remove(genre);
await _metadataRepository.RemoveGenre(genre); if (await _metadataRepository.RemoveGenre(genre))
{
updated = true;
}
} }
foreach (Genre genre in metadata.Genres.Filter(g => existing.Genres.All(g2 => g2.Name != g.Name)) foreach (Genre genre in metadata.Genres.Filter(g => existing.Genres.All(g2 => g2.Name != g.Name))
.ToList()) .ToList())
{ {
existing.Genres.Add(genre); existing.Genres.Add(genre);
await _televisionRepository.AddGenre(existing, genre); if (await _televisionRepository.AddGenre(existing, genre))
{
updated = true;
}
} }
foreach (Tag tag in existing.Tags.Filter(t => metadata.Tags.All(t2 => t2.Name != t.Name)) foreach (Tag tag in existing.Tags.Filter(t => metadata.Tags.All(t2 => t2.Name != t.Name))
.ToList()) .ToList())
{ {
existing.Tags.Remove(tag); existing.Tags.Remove(tag);
await _metadataRepository.RemoveTag(tag); if (await _metadataRepository.RemoveTag(tag))
{
updated = true;
}
} }
foreach (Tag tag in metadata.Tags.Filter(t => existing.Tags.All(t2 => t2.Name != t.Name)) foreach (Tag tag in metadata.Tags.Filter(t => existing.Tags.All(t2 => t2.Name != t.Name))
.ToList()) .ToList())
{ {
existing.Tags.Add(tag); existing.Tags.Add(tag);
await _televisionRepository.AddTag(existing, tag); if (await _televisionRepository.AddTag(existing, tag))
{
updated = true;
}
} }
foreach (Studio studio in existing.Studios foreach (Studio studio in existing.Studios
@ -265,7 +314,10 @@ namespace ErsatzTV.Core.Metadata
.ToList()) .ToList())
{ {
existing.Studios.Remove(studio); existing.Studios.Remove(studio);
await _metadataRepository.RemoveStudio(studio); if (await _metadataRepository.RemoveStudio(studio))
{
updated = true;
}
} }
foreach (Studio studio in metadata.Studios foreach (Studio studio in metadata.Studios
@ -273,10 +325,13 @@ namespace ErsatzTV.Core.Metadata
.ToList()) .ToList())
{ {
existing.Studios.Add(studio); existing.Studios.Add(studio);
await _televisionRepository.AddStudio(existing, studio); if (await _televisionRepository.AddStudio(existing, studio))
{
updated = true;
}
} }
return await _metadataRepository.Update(existing); return await _metadataRepository.Update(existing) || updated;
}, },
async () => async () =>
{ {
@ -332,6 +387,7 @@ namespace ErsatzTV.Core.Metadata
nfo => new ShowMetadata nfo => new ShowMetadata
{ {
MetadataKind = MetadataKind.Sidecar, MetadataKind = MetadataKind.Sidecar,
DateAdded = DateTime.UtcNow,
DateUpdated = File.GetLastWriteTimeUtc(nfoFileName), DateUpdated = File.GetLastWriteTimeUtc(nfoFileName),
Title = nfo.Title, Title = nfo.Title,
Plot = nfo.Plot, Plot = nfo.Plot,
@ -364,6 +420,7 @@ namespace ErsatzTV.Core.Metadata
var metadata = new EpisodeMetadata var metadata = new EpisodeMetadata
{ {
MetadataKind = MetadataKind.Sidecar, MetadataKind = MetadataKind.Sidecar,
DateAdded = DateTime.UtcNow,
DateUpdated = File.GetLastWriteTimeUtc(nfoFileName), DateUpdated = File.GetLastWriteTimeUtc(nfoFileName),
Title = nfo.Title, Title = nfo.Title,
ReleaseDate = GetAired(0, nfo.Aired), ReleaseDate = GetAired(0, nfo.Aired),
@ -390,6 +447,7 @@ namespace ErsatzTV.Core.Metadata
nfo => new MovieMetadata nfo => new MovieMetadata
{ {
MetadataKind = MetadataKind.Sidecar, MetadataKind = MetadataKind.Sidecar,
DateAdded = DateTime.UtcNow,
DateUpdated = File.GetLastWriteTimeUtc(nfoFileName), DateUpdated = File.GetLastWriteTimeUtc(nfoFileName),
Title = nfo.Title, Title = nfo.Title,
Year = nfo.Year, Year = nfo.Year,

Loading…
Cancel
Save