Random Changes and Enhancements (#1819)
* When skipping over folders in a scan, inform the ui * Try out new backout condition for library watcher. * Tweaked the code for folder watching to be more intense on killing if stuck in inotify loop. * Streamlined my implementation of enhanced LibraryWatcher * Added new extension method to make complex where statements cleaner. * Added an implementation to flatten series and not show them if they have relationships defined. Only the parent would show. Currently disabled until i figure out how to apply it. * Added the ability to collapse series that are not the primary entry point to reading. Configurable in library settings, only applies when all libraries in a filter have the property to true. * Exclude from parsing .@_thumb directories, a QNAP system folder. Show number of items a JumpKey has * Refactored some time reading to display in days, months, years or minutes.
This commit is contained in:
parent
8a62d54c0b
commit
df68c50256
23 changed files with 2038 additions and 48 deletions
|
@ -5,6 +5,7 @@ using System.IO;
|
|||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using API.Data;
|
||||
using API.Entities.Enums;
|
||||
using Hangfire;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
@ -55,6 +56,8 @@ public class LibraryWatcher : ILibraryWatcher
|
|||
/// Counts within a time frame how many times the buffer became full. Is used to reschedule LibraryWatcher to start monitoring much later rather than instantly
|
||||
/// </summary>
|
||||
private int _bufferFullCounter;
|
||||
private int _restartCounter;
|
||||
private DateTime _lastErrorTime = DateTime.MinValue;
|
||||
/// <summary>
|
||||
/// Used to lock buffer Full Counter
|
||||
/// </summary>
|
||||
|
@ -180,12 +183,21 @@ public class LibraryWatcher : ILibraryWatcher
|
|||
lock (Lock)
|
||||
{
|
||||
_bufferFullCounter += 1;
|
||||
condition = _bufferFullCounter >= 3;
|
||||
_lastErrorTime = DateTime.Now;
|
||||
condition = _bufferFullCounter >= 3 && (DateTime.Now - _lastErrorTime).TotalMinutes <= 10;
|
||||
}
|
||||
|
||||
if (_restartCounter >= 3)
|
||||
{
|
||||
_logger.LogInformation("[LibraryWatcher] Too many restarts occured, you either have limited inotify or an OS constraint. Kavita will turn off folder watching to prevent high utilization of resources");
|
||||
Task.Run(TurnOffWatching);
|
||||
return;
|
||||
}
|
||||
|
||||
if (condition)
|
||||
{
|
||||
_logger.LogInformation("[LibraryWatcher] Internal buffer has been overflown multiple times in past 10 minutes. Suspending file watching for an hour");
|
||||
_logger.LogInformation("[LibraryWatcher] Internal buffer has been overflown multiple times in past 10 minutes. Suspending file watching for an hour. Restart count: {RestartCount}", _restartCounter);
|
||||
_restartCounter++;
|
||||
StopWatching();
|
||||
BackgroundJob.Schedule(() => RestartWatching(), TimeSpan.FromHours(1));
|
||||
return;
|
||||
|
@ -194,6 +206,16 @@ public class LibraryWatcher : ILibraryWatcher
|
|||
BackgroundJob.Schedule(() => UpdateLastBufferOverflow(), TimeSpan.FromMinutes(10));
|
||||
}
|
||||
|
||||
private async Task TurnOffWatching()
|
||||
{
|
||||
var setting = await _unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.EnableFolderWatching);
|
||||
setting.Value = "false";
|
||||
_unitOfWork.SettingsRepository.Update(setting);
|
||||
await _unitOfWork.CommitAsync();
|
||||
StopWatching();
|
||||
_logger.LogInformation("[LibraryWatcher] Folder watching has been disabled");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Processes the file or folder change. If the change is a file change and not from a supported extension, it will be ignored.
|
||||
|
|
|
@ -289,6 +289,8 @@ public class ParseScannedFiles
|
|||
}).ToList();
|
||||
await processSeriesInfos.Invoke(new Tuple<bool, IList<ParserInfo>>(true, parsedInfos));
|
||||
_logger.LogDebug("[ScannerService] Skipped File Scan for {Folder} as it hasn't changed since last scan", folder);
|
||||
await _eventHub.SendMessageAsync(MessageFactory.NotificationProgress,
|
||||
MessageFactory.FileScanProgressEvent("Skipped " + normalizedFolder, libraryName, ProgressEventType.Updated));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue