mirror of
				https://github.com/Kareadita/Kavita.git
				synced 2025-11-04 03:27:05 -05:00 
			
		
		
		
	* Moved libraryType into chapter info * Fixed a bug where you could not reset cover on a series * Patched in relevant changes from another polish branch * Refactored invite user setup to shift the checking for accessibility to the backend and always show the link. This will help with users who have some unique setups in docker. * Refactored invite user to always print the url to setup a new account. * Single page renderer uses canvasImage rather than re-requesting and relying on cache * Fixed a rendering issue where fit to split on single on a cover wouldn't force width scaling just for that image * Fixed a rendering bug with split image functionality * Added title to copy button * Fixed a bug in GetContinuePoint when a chapter is added to an already read volume and a new chapter is added loose leaf. The loose leaf would be prioritized over the volume chapter. Refactored 2 methods from controller into service and unit tested. * Fixed a bug on opening a volume in series detail that had a chapter added to it after the volume (0 chapter) was read would cause a loose leaf chapter to be opened. * Added mark as read/actionables on Files in volume detail modal. Fixed a bug where we were showing the wrong page count in a volume detail modal. * Removed OnDeck page and replaced it with a pre-filtered All-Series. Hooked up the ability to pass read state to the filter via query params. Fixed some spacing on filter post bootstrap update. * Fixed up some poor documentation on FilterDto. * Some string equals enhancements to reduce extra allocations * Fixed an issue when trying to download via a url, to remove query parameters to get the format * Made an optimization to Normalize method to reduce memory pressure by 100MB over the course of a scan (16k files) * Adjusted the styles on dashboard for first time setup and used a routerlink rather than href to avoid a fresh load. * Use framgment on router link * Hooked in the ability to search by release year (along with series optionally) and series will be returned back. * Fixed a bug in the filter format code where it was sending the wrong type * Only show clear all on typeahead when there are at least one selected item * Cleaned up the styles of the styles of the typeahead * Removed some dead code * Implemented the ability to filter against a series name. * Fixed filter top offset * Ensure that when we add or remove libraries, the side nav of users gets updated. * Tweaked the width on the mobile side nav * Close side nav on clicking overlay on mobile viewport * Don't show a pointer if the carousel section title is not actually selectable * Removed the User profile on the side nav so home is always first. Tweaked styles to match * Fixed up some poor documentation on FilterDto. * Fixed a bug where Latest read date wasn't being set due to an early short circuit. * When sending the chapter file, format the title of the FeedEntry more like Series Detail. * Removed dead code
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.IO;
 | 
						|
using System.Text.RegularExpressions;
 | 
						|
using BenchmarkDotNet.Attributes;
 | 
						|
using BenchmarkDotNet.Order;
 | 
						|
 | 
						|
namespace API.Benchmark
 | 
						|
{
 | 
						|
    [MemoryDiagnoser]
 | 
						|
    [Orderer(SummaryOrderPolicy.FastestToSlowest)]
 | 
						|
    [RankColumn]
 | 
						|
    public class ParserBenchmarks
 | 
						|
    {
 | 
						|
        private readonly IList<string> _names;
 | 
						|
 | 
						|
        private static readonly Regex NormalizeRegex = new Regex(@"[^a-zA-Z0-9]",
 | 
						|
            RegexOptions.IgnoreCase | RegexOptions.Compiled,
 | 
						|
            TimeSpan.FromMilliseconds(300));
 | 
						|
 | 
						|
        private static readonly Regex IsEpub = new Regex(@"\.epub",
 | 
						|
            RegexOptions.IgnoreCase | RegexOptions.Compiled,
 | 
						|
            TimeSpan.FromMilliseconds(300));
 | 
						|
 | 
						|
        public ParserBenchmarks()
 | 
						|
        {
 | 
						|
            // Read all series from SeriesNamesForNormalization.txt
 | 
						|
            _names = File.ReadAllLines("Data/SeriesNamesForNormalization.txt");
 | 
						|
            Console.WriteLine($"Performing benchmark on {_names.Count} series");
 | 
						|
        }
 | 
						|
 | 
						|
        private static string Normalize(string name)
 | 
						|
        {
 | 
						|
            // ReSharper disable once UnusedVariable
 | 
						|
            var ret = NormalizeRegex.Replace(name, string.Empty).ToLower();
 | 
						|
            var normalized = NormalizeRegex.Replace(name, string.Empty).ToLower();
 | 
						|
            return string.IsNullOrEmpty(normalized) ? name : normalized;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
        [Benchmark]
 | 
						|
        public void TestNormalizeName()
 | 
						|
        {
 | 
						|
            foreach (var name in _names)
 | 
						|
            {
 | 
						|
                Normalize(name);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        [Benchmark]
 | 
						|
        public void TestIsEpub()
 | 
						|
        {
 | 
						|
            foreach (var name in _names)
 | 
						|
            {
 | 
						|
                if ((name).ToLower() == ".epub")
 | 
						|
                {
 | 
						|
                    /* No Operation */
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Benchmark]
 | 
						|
        public void TestIsEpub_New()
 | 
						|
        {
 | 
						|
            foreach (var name in _names)
 | 
						|
            {
 | 
						|
 | 
						|
                if (Path.GetExtension(name).Equals(".epub", StringComparison.InvariantCultureIgnoreCase))
 | 
						|
                {
 | 
						|
                    /* No Operation */
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
    }
 | 
						|
}
 |