add metadata_kind to search index (#790)

* more nfo cleanup

* add metadata_kind to search index
This commit is contained in:
Jason Dove
2022-05-07 21:24:50 -05:00
committed by GitHub
parent 44dd68fe59
commit ab10f0ed81
8 changed files with 26 additions and 26 deletions
+4
View File
@@ -7,6 +7,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Fixed
- Reduce memory use due to library scan operations
### Added
- Add `metadata_kind` field to search index to allow searching for items with a particular metdata source
- Valid metadata kinds are `fallback`, `sidecar` (NFO), `external` (from a media server) and `embedded` (songs)
### Changed
- Replace invalid (control) characters in NFO metadata with replacement character `�` before parsing
- Store partial (incomplete) NFO metadata results when invalid XML is encountered
@@ -95,9 +95,7 @@ public class ArtistNfoReader : NfoReader<ArtistNfo>, IArtistNfoReader
return Optional(nfo).ToEither((BaseError)new FailedToReadNfo());
}
catch (XmlException ex) when (ex.Message.Contains(
"invalid character",
StringComparison.InvariantCultureIgnoreCase))
catch (XmlException)
{
_logger.LogWarning("Invalid XML detected; returning incomplete metadata");
return Optional(nfo).ToEither((BaseError)new FailedToReadNfo());
@@ -114,9 +114,7 @@ public class EpisodeNfoReader : NfoReader<TvShowEpisodeNfo>, IEpisodeNfoReader
return result;
}
catch (XmlException ex) when (ex.Message.Contains(
"invalid character",
StringComparison.InvariantCultureIgnoreCase))
catch (XmlException)
{
_logger.LogWarning("Invalid XML detected; returning incomplete metadata");
return result;
+1 -3
View File
@@ -126,9 +126,7 @@ public class MovieNfoReader : NfoReader<MovieNfo>, IMovieNfoReader
return Optional(nfo).ToEither((BaseError)new FailedToReadNfo());
}
catch (XmlException ex) when (ex.Message.Contains(
"invalid character",
StringComparison.InvariantCultureIgnoreCase))
catch (XmlException)
{
_logger.LogWarning("Invalid XML detected; returning incomplete metadata");
return Optional(nfo).ToEither((BaseError)new FailedToReadNfo());
@@ -108,9 +108,7 @@ public class MusicVideoNfoReader : NfoReader<MusicVideoNfo>, IMusicVideoNfoReade
return Optional(nfo).ToEither((BaseError)new FailedToReadNfo());
}
catch (XmlException ex) when (ex.Message.Contains(
"invalid character",
StringComparison.InvariantCultureIgnoreCase))
catch (XmlException)
{
_logger.LogWarning("Invalid XML detected; returning incomplete metadata");
return Optional(nfo).ToEither((BaseError)new FailedToReadNfo());
@@ -126,9 +126,7 @@ public class OtherVideoNfoReader : NfoReader<OtherVideoNfo>, IOtherVideoNfoReade
return Optional(nfo).ToEither((BaseError)new FailedToReadNfo());
}
catch (XmlException ex) when (ex.Message.Contains(
"invalid character",
StringComparison.InvariantCultureIgnoreCase))
catch (XmlException)
{
_logger.LogWarning("Invalid XML detected; returning incomplete metadata");
return Optional(nfo).ToEither((BaseError)new FailedToReadNfo());
@@ -112,9 +112,7 @@ public class TvShowNfoReader : NfoReader<TvShowNfo>, ITvShowNfoReader
return Optional(nfo).ToEither((BaseError)new FailedToReadNfo());
}
catch (XmlException ex) when (ex.Message.Contains(
"invalid character",
StringComparison.InvariantCultureIgnoreCase))
catch (XmlException)
{
_logger.LogWarning("Invalid XML detected; returning incomplete metadata");
return Optional(nfo).ToEither((BaseError)new FailedToReadNfo());
+16 -8
View File
@@ -54,6 +54,7 @@ public sealed class SearchIndex : ISearchIndex
private const string ShowTitleField = "show_title";
private const string ShowGenreField = "show_genre";
private const string ShowTagField = "show_tag";
private const string MetadataKindField = "metadata_kind";
internal const string MinutesField = "minutes";
internal const string HeightField = "height";
@@ -87,7 +88,7 @@ public sealed class SearchIndex : ISearchIndex
_initialized = false;
}
public int Version => 24;
public int Version => 25;
public async Task<bool> Initialize(
ILocalFileSystem localFileSystem,
@@ -363,7 +364,8 @@ public sealed class SearchIndex : ISearchIndex
new StringField(LibraryIdField, movie.LibraryPath.Library.Id.ToString(), Field.Store.NO),
new StringField(TitleAndYearField, GetTitleAndYear(metadata), Field.Store.NO),
new StringField(JumpLetterField, GetJumpLetter(metadata), Field.Store.YES),
new StringField(StateField, movie.State.ToString(), Field.Store.NO)
new StringField(StateField, movie.State.ToString(), Field.Store.NO),
new TextField(MetadataKindField, metadata.MetadataKind.ToString(), Field.Store.NO)
};
await AddLanguages(searchRepository, doc, movie.MediaVersions);
@@ -500,7 +502,8 @@ public sealed class SearchIndex : ISearchIndex
new StringField(LibraryIdField, show.LibraryPath.Library.Id.ToString(), Field.Store.NO),
new StringField(TitleAndYearField, GetTitleAndYear(metadata), Field.Store.NO),
new StringField(JumpLetterField, GetJumpLetter(metadata), Field.Store.YES),
new StringField(StateField, show.State.ToString(), Field.Store.NO)
new StringField(StateField, show.State.ToString(), Field.Store.NO),
new TextField(MetadataKindField, metadata.MetadataKind.ToString(), Field.Store.NO)
};
List<string> languages = await searchRepository.GetLanguagesForShow(show);
@@ -670,7 +673,8 @@ public sealed class SearchIndex : ISearchIndex
new TextField(LibraryNameField, artist.LibraryPath.Library.Name, Field.Store.NO),
new StringField(LibraryIdField, artist.LibraryPath.Library.Id.ToString(), Field.Store.NO),
new StringField(TitleAndYearField, GetTitleAndYear(metadata), Field.Store.NO),
new StringField(JumpLetterField, GetJumpLetter(metadata), Field.Store.YES)
new StringField(JumpLetterField, GetJumpLetter(metadata), Field.Store.YES),
new TextField(MetadataKindField, metadata.MetadataKind.ToString(), Field.Store.NO)
};
List<string> languages = await searchRepository.GetLanguagesForArtist(artist);
@@ -722,7 +726,8 @@ public sealed class SearchIndex : ISearchIndex
new StringField(LibraryIdField, musicVideo.LibraryPath.Library.Id.ToString(), Field.Store.NO),
new StringField(TitleAndYearField, GetTitleAndYear(metadata), Field.Store.NO),
new StringField(JumpLetterField, GetJumpLetter(metadata), Field.Store.YES),
new StringField(StateField, musicVideo.State.ToString(), Field.Store.NO)
new StringField(StateField, musicVideo.State.ToString(), Field.Store.NO),
new TextField(MetadataKindField, metadata.MetadataKind.ToString(), Field.Store.NO)
};
await AddLanguages(searchRepository, doc, musicVideo.MediaVersions);
@@ -818,7 +823,8 @@ public sealed class SearchIndex : ISearchIndex
new StringField(JumpLetterField, GetJumpLetter(metadata), Field.Store.YES),
new StringField(StateField, episode.State.ToString(), Field.Store.NO),
new Int32Field(SeasonNumberField, episode.Season?.SeasonNumber ?? 0, Field.Store.NO),
new Int32Field(EpisodeNumberField, metadata.EpisodeNumber, Field.Store.NO)
new Int32Field(EpisodeNumberField, metadata.EpisodeNumber, Field.Store.NO),
new TextField(MetadataKindField, metadata.MetadataKind.ToString(), Field.Store.NO)
};
// add some show fields to help filter episodes within a particular show
@@ -938,7 +944,8 @@ public sealed class SearchIndex : ISearchIndex
new StringField(LibraryIdField, otherVideo.LibraryPath.Library.Id.ToString(), Field.Store.NO),
new StringField(TitleAndYearField, GetTitleAndYear(metadata), Field.Store.NO),
new StringField(JumpLetterField, GetJumpLetter(metadata), Field.Store.YES),
new StringField(StateField, otherVideo.State.ToString(), Field.Store.NO)
new StringField(StateField, otherVideo.State.ToString(), Field.Store.NO),
new TextField(MetadataKindField, metadata.MetadataKind.ToString(), Field.Store.NO)
};
await AddLanguages(searchRepository, doc, otherVideo.MediaVersions);
@@ -1036,7 +1043,8 @@ public sealed class SearchIndex : ISearchIndex
new StringField(LibraryIdField, song.LibraryPath.Library.Id.ToString(), Field.Store.NO),
new StringField(TitleAndYearField, GetTitleAndYear(metadata), Field.Store.NO),
new StringField(JumpLetterField, GetJumpLetter(metadata), Field.Store.YES),
new StringField(StateField, song.State.ToString(), Field.Store.NO)
new StringField(StateField, song.State.ToString(), Field.Store.NO),
new TextField(MetadataKindField, metadata.MetadataKind.ToString(), Field.Store.NO)
};
await AddLanguages(searchRepository, doc, song.MediaVersions);