mirror of https://github.com/ErsatzTV/ErsatzTV.git
				
				
			
			
			
				Browse Source
			
			
			
			
				
		* remove unused code * fix relative queries with elasticsearch * fix some double page loads * simplify language modelpull/1374/head
				 39 changed files with 383 additions and 294 deletions
			
			
		@ -0,0 +1,4 @@ | 
				
			|||||||
 | 
					namespace ErsatzTV.Application.MediaItems; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ReSharper disable once InconsistentNaming
 | 
				
			||||||
 | 
					public record LanguageCodeViewModel(string ThreeLetterISOLanguageName, string EnglishName); | 
				
			||||||
@ -1,5 +1,3 @@ | 
				
			|||||||
using System.Globalization; | 
					namespace ErsatzTV.Application.MediaItems; | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace ErsatzTV.Application.MediaItems; | 
					public record GetAllLanguageCodes : IRequest<List<LanguageCodeViewModel>>; | 
				
			||||||
 | 
					 | 
				
			||||||
public record GetAllLanguageCodes : IRequest<List<CultureInfo>>; | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,159 +0,0 @@ | 
				
			|||||||
using ErsatzTV.Core; | 
					 | 
				
			||||||
using Lucene.Net.Analysis; | 
					 | 
				
			||||||
using Lucene.Net.Index; | 
					 | 
				
			||||||
using Lucene.Net.QueryParsers.Classic; | 
					 | 
				
			||||||
using Lucene.Net.Search; | 
					 | 
				
			||||||
using Lucene.Net.Util; | 
					 | 
				
			||||||
using Query = Lucene.Net.Search.Query; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace ErsatzTV.Infrastructure.Search; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class CustomQueryParser : QueryParser | 
					 | 
				
			||||||
{ | 
					 | 
				
			||||||
    internal static readonly List<string> NumericFields = new() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        LuceneSearchIndex.MinutesField, | 
					 | 
				
			||||||
        LuceneSearchIndex.HeightField, | 
					 | 
				
			||||||
        LuceneSearchIndex.WidthField, | 
					 | 
				
			||||||
        LuceneSearchIndex.SeasonNumberField, | 
					 | 
				
			||||||
        LuceneSearchIndex.EpisodeNumberField, | 
					 | 
				
			||||||
        LuceneSearchIndex.VideoBitDepthField | 
					 | 
				
			||||||
    }; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public CustomQueryParser(LuceneVersion matchVersion, string f, Analyzer a) : base(matchVersion, f, a) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    protected internal CustomQueryParser(ICharStream stream) : base(stream) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    protected CustomQueryParser(QueryParserTokenManager tm) : base(tm) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    protected override Query GetFieldQuery(string field, string queryText, bool quoted) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        if (field == "released_onthisday") | 
					 | 
				
			||||||
        { | 
					 | 
				
			||||||
            var todayString = DateTime.Today.ToString("*MMdd"); | 
					 | 
				
			||||||
            return base.GetWildcardQuery(LuceneSearchIndex.ReleaseDateField, todayString); | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (NumericFields.Contains(field) && int.TryParse(queryText, out int val)) | 
					 | 
				
			||||||
        { | 
					 | 
				
			||||||
            var bytesRef = new BytesRef(); | 
					 | 
				
			||||||
            NumericUtils.Int32ToPrefixCoded(val, 0, bytesRef); | 
					 | 
				
			||||||
            return NewTermQuery(new Term(field, bytesRef)); | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return base.GetFieldQuery(field, queryText, quoted); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    protected override Query GetFieldQuery(string field, string queryText, int slop) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        if (field == "released_inthelast" && ParseStart(queryText, out DateTime start)) | 
					 | 
				
			||||||
        { | 
					 | 
				
			||||||
            var todayString = DateTime.UtcNow.ToString("yyyyMMdd"); | 
					 | 
				
			||||||
            var dateString = start.ToString("yyyyMMdd"); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return base.GetRangeQuery(LuceneSearchIndex.ReleaseDateField, dateString, todayString, true, true); | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (field == "released_notinthelast" && ParseStart(queryText, out DateTime finish)) | 
					 | 
				
			||||||
        { | 
					 | 
				
			||||||
            var dateString = finish.ToString("yyyyMMdd"); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return base.GetRangeQuery(LuceneSearchIndex.ReleaseDateField, "00000000", dateString, false, false); | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (field == "added_inthelast" && ParseStart(queryText, out DateTime addedStart)) | 
					 | 
				
			||||||
        { | 
					 | 
				
			||||||
            var todayString = DateTime.UtcNow.ToString("yyyyMMdd"); | 
					 | 
				
			||||||
            var dateString = addedStart.ToString("yyyyMMdd"); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return base.GetRangeQuery(LuceneSearchIndex.AddedDateField, dateString, todayString, true, true); | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (field == "added_notinthelast" && ParseStart(queryText, out DateTime addedFinish)) | 
					 | 
				
			||||||
        { | 
					 | 
				
			||||||
            var dateString = addedFinish.ToString("yyyyMMdd"); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return base.GetRangeQuery(LuceneSearchIndex.AddedDateField, "00000000", dateString, false, false); | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return base.GetFieldQuery(field, queryText, slop); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    protected override Query GetRangeQuery( | 
					 | 
				
			||||||
        string field, | 
					 | 
				
			||||||
        string part1, | 
					 | 
				
			||||||
        string part2, | 
					 | 
				
			||||||
        bool startInclusive, | 
					 | 
				
			||||||
        bool endInclusive) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        if (NumericFields.Contains(field)) | 
					 | 
				
			||||||
        { | 
					 | 
				
			||||||
            if (part1 is null or "*" && int.TryParse(part2, out int max1)) | 
					 | 
				
			||||||
            { | 
					 | 
				
			||||||
                return NumericRangeQuery.NewInt32Range(field, null, max1, startInclusive, endInclusive); | 
					 | 
				
			||||||
            } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (int.TryParse(part1, out int min)) | 
					 | 
				
			||||||
            { | 
					 | 
				
			||||||
                if (part2 is null or "*") | 
					 | 
				
			||||||
                { | 
					 | 
				
			||||||
                    return NumericRangeQuery.NewInt32Range(field, min, null, startInclusive, endInclusive); | 
					 | 
				
			||||||
                } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (int.TryParse(part2, out int max)) | 
					 | 
				
			||||||
                { | 
					 | 
				
			||||||
                    return NumericRangeQuery.NewInt32Range(field, min, max, startInclusive, endInclusive); | 
					 | 
				
			||||||
                } | 
					 | 
				
			||||||
            } | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return base.GetRangeQuery(field, part1, part2, startInclusive, endInclusive); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    internal static bool ParseStart(string text, out DateTime start) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        start = SystemTime.MinValueUtc; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        try | 
					 | 
				
			||||||
        { | 
					 | 
				
			||||||
            if (int.TryParse(text.Split(" ")[0], out int number)) | 
					 | 
				
			||||||
            { | 
					 | 
				
			||||||
                if (text.Contains("day")) | 
					 | 
				
			||||||
                { | 
					 | 
				
			||||||
                    start = DateTime.Today.AddDays(number * -1); | 
					 | 
				
			||||||
                    return true; | 
					 | 
				
			||||||
                } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (text.Contains("week")) | 
					 | 
				
			||||||
                { | 
					 | 
				
			||||||
                    start = DateTime.Today.AddDays(number * -7); | 
					 | 
				
			||||||
                    return true; | 
					 | 
				
			||||||
                } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (text.Contains("month")) | 
					 | 
				
			||||||
                { | 
					 | 
				
			||||||
                    start = DateTime.Today.AddMonths(number * -1); | 
					 | 
				
			||||||
                    return true; | 
					 | 
				
			||||||
                } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (text.Contains("year")) | 
					 | 
				
			||||||
                { | 
					 | 
				
			||||||
                    start = DateTime.Today.AddYears(number * -1); | 
					 | 
				
			||||||
                    return true; | 
					 | 
				
			||||||
                } | 
					 | 
				
			||||||
            } | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
        catch | 
					 | 
				
			||||||
        { | 
					 | 
				
			||||||
            // do nothing
 | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return false; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue