From 077e5f798ab1b5fa7923ddbaa8705777c961b2ed Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Sun, 7 Feb 2021 12:02:47 -0600 Subject: [PATCH] Lots of cleanup --- API.Tests/Converters/CronConverterTests.cs | 8 --- API.Tests/ParserTest.cs | 2 +- API.Tests/Services/CacheServiceTests.cs | 6 +-- API/Controllers/AccountController.cs | 1 - API/Controllers/FallbackController.cs | 1 - API/Controllers/ServerController.cs | 2 +- API/Controllers/SettingsController.cs | 12 ++++- API/DTOs/CreateLibraryDto.cs | 2 +- API/DTOs/LibraryDto.cs | 2 +- API/DTOs/MangaFileDto.cs | 2 +- API/DTOs/ServerSettingDTO.cs | 1 + API/DTOs/VolumeDto.cs | 4 ++ API/Data/Seed.cs | 10 ++-- API/Data/SettingsRepository.cs | 1 + API/Entities/Enums/LibraryType.cs | 2 +- API/Entities/Enums/MangaFormat.cs | 2 +- API/Entities/Enums/ServerSettingKey.cs | 5 +- API/Entities/Library.cs | 1 + API/Entities/MangaFile.cs | 2 + API/Entities/ServerSetting.cs | 1 + .../Converters/ServerSettingConverter.cs | 5 +- API/Interfaces/ISettingsRepository.cs | 1 + API/Parser/Parser.cs | 3 +- API/Parser/ParserInfo.cs | 3 +- API/Program.cs | 52 ++++++++++++------- API/Services/DirectoryService.cs | 1 + API/Services/ScannerService.cs | 1 + API/Services/TaskScheduler.cs | 2 +- 28 files changed, 80 insertions(+), 55 deletions(-) diff --git a/API.Tests/Converters/CronConverterTests.cs b/API.Tests/Converters/CronConverterTests.cs index df1ca6294..34efbd59e 100644 --- a/API.Tests/Converters/CronConverterTests.cs +++ b/API.Tests/Converters/CronConverterTests.cs @@ -1,18 +1,10 @@ using API.Helpers.Converters; using Xunit; -using Xunit.Abstractions; namespace API.Tests.Converters { public class CronConverterTests { - private readonly ITestOutputHelper _testOutputHelper; - - public CronConverterTests(ITestOutputHelper testOutputHelper) - { - _testOutputHelper = testOutputHelper; - } - [Theory] [InlineData("daily", "0 0 * * *")] [InlineData("disabled", "0 0 31 2 *")] diff --git a/API.Tests/ParserTest.cs b/API.Tests/ParserTest.cs index 21d73bdf2..d91e82092 100644 --- a/API.Tests/ParserTest.cs +++ b/API.Tests/ParserTest.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using API.Entities; +using API.Entities.Enums; using API.Parser; using Xunit; using static API.Parser.Parser; diff --git a/API.Tests/Services/CacheServiceTests.cs b/API.Tests/Services/CacheServiceTests.cs index 80ee0438e..fcf4b0099 100644 --- a/API.Tests/Services/CacheServiceTests.cs +++ b/API.Tests/Services/CacheServiceTests.cs @@ -1,8 +1,4 @@ -using API.Interfaces; -using API.Services; -using Microsoft.Extensions.Logging; -using NSubstitute; -using Xunit; +using Xunit; namespace API.Tests.Services { diff --git a/API/Controllers/AccountController.cs b/API/Controllers/AccountController.cs index 59fc1ed27..483f5a8eb 100644 --- a/API/Controllers/AccountController.cs +++ b/API/Controllers/AccountController.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using API.Constants; -using API.Data.Migrations; using API.DTOs; using API.Entities; using API.Extensions; diff --git a/API/Controllers/FallbackController.cs b/API/Controllers/FallbackController.cs index f8c81ffdd..36b173745 100644 --- a/API/Controllers/FallbackController.cs +++ b/API/Controllers/FallbackController.cs @@ -1,6 +1,5 @@ using System.IO; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; namespace API.Controllers { diff --git a/API/Controllers/ServerController.cs b/API/Controllers/ServerController.cs index 1e40aa585..d8176279d 100644 --- a/API/Controllers/ServerController.cs +++ b/API/Controllers/ServerController.cs @@ -18,7 +18,7 @@ namespace API.Controllers _logger = logger; } - [HttpPost] + [HttpPost("restart")] public ActionResult RestartServer() { _logger.LogInformation($"{User.GetUsername()} is restarting server from admin dashboard."); diff --git a/API/Controllers/SettingsController.cs b/API/Controllers/SettingsController.cs index eecece06c..f7e937314 100644 --- a/API/Controllers/SettingsController.cs +++ b/API/Controllers/SettingsController.cs @@ -1,8 +1,9 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using API.DTOs; -using API.Entities; +using API.Entities.Enums; using API.Extensions; using API.Helpers.Converters; using API.Interfaces; @@ -62,6 +63,13 @@ namespace API.Controllers setting.Value = updateSettingsDto.TaskScan; _unitOfWork.SettingsRepository.Update(setting); } + + if (setting.Key == ServerSettingKey.Port && updateSettingsDto.Port + "" != setting.Value) + { + setting.Value = updateSettingsDto.Port + ""; + Environment.SetEnvironmentVariable("KAVITA_PORT", setting.Value); + _unitOfWork.SettingsRepository.Update(setting); + } } if (_unitOfWork.HasChanges() && await _unitOfWork.Complete()) diff --git a/API/DTOs/CreateLibraryDto.cs b/API/DTOs/CreateLibraryDto.cs index 5dcdbf4e3..f33430a6c 100644 --- a/API/DTOs/CreateLibraryDto.cs +++ b/API/DTOs/CreateLibraryDto.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using API.Entities; +using API.Entities.Enums; namespace API.DTOs { diff --git a/API/DTOs/LibraryDto.cs b/API/DTOs/LibraryDto.cs index e23268269..ed741642c 100644 --- a/API/DTOs/LibraryDto.cs +++ b/API/DTOs/LibraryDto.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using API.Entities; +using API.Entities.Enums; namespace API.DTOs { diff --git a/API/DTOs/MangaFileDto.cs b/API/DTOs/MangaFileDto.cs index 8cf706ea8..26bed91b8 100644 --- a/API/DTOs/MangaFileDto.cs +++ b/API/DTOs/MangaFileDto.cs @@ -1,4 +1,4 @@ -using API.Entities; +using API.Entities.Enums; namespace API.DTOs { diff --git a/API/DTOs/ServerSettingDTO.cs b/API/DTOs/ServerSettingDTO.cs index e16d16506..a1617ff11 100644 --- a/API/DTOs/ServerSettingDTO.cs +++ b/API/DTOs/ServerSettingDTO.cs @@ -6,5 +6,6 @@ public string TaskScan { get; set; } public string LoggingLevel { get; set; } public string TaskBackup { get; set; } + public int Port { get; set; } } } \ No newline at end of file diff --git a/API/DTOs/VolumeDto.cs b/API/DTOs/VolumeDto.cs index 39872c05a..e9e08ec72 100644 --- a/API/DTOs/VolumeDto.cs +++ b/API/DTOs/VolumeDto.cs @@ -1,4 +1,5 @@  +using System; using System.Collections.Generic; namespace API.DTOs @@ -11,6 +12,9 @@ namespace API.DTOs public byte[] CoverImage { get; set; } public int Pages { get; set; } public int PagesRead { get; set; } + public DateTime LastModified { get; set; } + public DateTime Created { get; set; } + public bool IsSpecial { get; set; } public ICollection Chapters { get; set; } } } \ No newline at end of file diff --git a/API/Data/Seed.cs b/API/Data/Seed.cs index c7a216215..7ba7ebeda 100644 --- a/API/Data/Seed.cs +++ b/API/Data/Seed.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Threading.Tasks; using API.Constants; using API.Entities; +using API.Entities.Enums; using API.Services; using Microsoft.AspNetCore.Identity; @@ -30,12 +31,15 @@ namespace API.Data public static async Task SeedSettings(DataContext context) { - context.Database.EnsureCreated(); + await context.Database.EnsureCreatedAsync(); IList defaultSettings = new List() { new() {Key = ServerSettingKey.CacheDirectory, Value = CacheService.CacheDirectory}, - new () {Key = ServerSettingKey.TaskScan, Value = "daily"} + new () {Key = ServerSettingKey.TaskScan, Value = "daily"}, + //new () {Key = ServerSettingKey.LoggingLevel, Value = "Information"}, + //new () {Key = ServerSettingKey.TaskBackup, Value = "daily"}, + new () {Key = ServerSettingKey.Port, Value = "5000"}, }; foreach (var defaultSetting in defaultSettings) @@ -43,7 +47,7 @@ namespace API.Data var existing = context.ServerSetting.FirstOrDefault(s => s.Key == defaultSetting.Key); if (existing == null) { - context.ServerSetting.Add(defaultSetting); + await context.ServerSetting.AddAsync(defaultSetting); } } diff --git a/API/Data/SettingsRepository.cs b/API/Data/SettingsRepository.cs index 21e33deb2..ecacf0f87 100644 --- a/API/Data/SettingsRepository.cs +++ b/API/Data/SettingsRepository.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Threading.Tasks; using API.DTOs; using API.Entities; +using API.Entities.Enums; using API.Interfaces; using AutoMapper; using Microsoft.EntityFrameworkCore; diff --git a/API/Entities/Enums/LibraryType.cs b/API/Entities/Enums/LibraryType.cs index 944279a25..f1a7d0fd6 100644 --- a/API/Entities/Enums/LibraryType.cs +++ b/API/Entities/Enums/LibraryType.cs @@ -1,6 +1,6 @@ using System.ComponentModel; -namespace API.Entities +namespace API.Entities.Enums { public enum LibraryType { diff --git a/API/Entities/Enums/MangaFormat.cs b/API/Entities/Enums/MangaFormat.cs index 960f72145..31ebd5bb3 100644 --- a/API/Entities/Enums/MangaFormat.cs +++ b/API/Entities/Enums/MangaFormat.cs @@ -1,6 +1,6 @@ using System.ComponentModel; -namespace API.Entities +namespace API.Entities.Enums { public enum MangaFormat { diff --git a/API/Entities/Enums/ServerSettingKey.cs b/API/Entities/Enums/ServerSettingKey.cs index 19b2f9f9c..214e6fc22 100644 --- a/API/Entities/Enums/ServerSettingKey.cs +++ b/API/Entities/Enums/ServerSettingKey.cs @@ -1,10 +1,11 @@ -namespace API.Entities +namespace API.Entities.Enums { public enum ServerSettingKey { TaskScan = 0, CacheDirectory = 1, TaskBackup = 2, - LoggingLevel = 3 + LoggingLevel = 3, + Port = 4 } } \ No newline at end of file diff --git a/API/Entities/Library.cs b/API/Entities/Library.cs index 3c2129c37..faf95e149 100644 --- a/API/Entities/Library.cs +++ b/API/Entities/Library.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using API.Entities.Enums; using API.Entities.Interfaces; namespace API.Entities diff --git a/API/Entities/MangaFile.cs b/API/Entities/MangaFile.cs index a1e4ff81d..7d001fcb0 100644 --- a/API/Entities/MangaFile.cs +++ b/API/Entities/MangaFile.cs @@ -1,4 +1,6 @@  +using API.Entities.Enums; + namespace API.Entities { public class MangaFile diff --git a/API/Entities/ServerSetting.cs b/API/Entities/ServerSetting.cs index 148286cdf..09501c20e 100644 --- a/API/Entities/ServerSetting.cs +++ b/API/Entities/ServerSetting.cs @@ -1,4 +1,5 @@ using System.ComponentModel.DataAnnotations; +using API.Entities.Enums; using API.Entities.Interfaces; namespace API.Entities diff --git a/API/Helpers/Converters/ServerSettingConverter.cs b/API/Helpers/Converters/ServerSettingConverter.cs index 1795a9ba0..27d1cbbae 100644 --- a/API/Helpers/Converters/ServerSettingConverter.cs +++ b/API/Helpers/Converters/ServerSettingConverter.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using API.DTOs; using API.Entities; +using API.Entities.Enums; using AutoMapper; namespace API.Helpers.Converters @@ -26,7 +27,9 @@ namespace API.Helpers.Converters case ServerSettingKey.TaskBackup: destination.TaskBackup = row.Value; break; - + case ServerSettingKey.Port: + destination.Port = int.Parse(row.Value); + break; } } diff --git a/API/Interfaces/ISettingsRepository.cs b/API/Interfaces/ISettingsRepository.cs index fd9657678..5b0994d41 100644 --- a/API/Interfaces/ISettingsRepository.cs +++ b/API/Interfaces/ISettingsRepository.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using API.DTOs; using API.Entities; +using API.Entities.Enums; namespace API.Interfaces { diff --git a/API/Parser/Parser.cs b/API/Parser/Parser.cs index dc59d3b5c..dccdcf729 100644 --- a/API/Parser/Parser.cs +++ b/API/Parser/Parser.cs @@ -1,9 +1,8 @@ using System; using System.IO; using System.Linq; -using System.Reflection; using System.Text.RegularExpressions; -using API.Entities; +using API.Entities.Enums; namespace API.Parser { diff --git a/API/Parser/ParserInfo.cs b/API/Parser/ParserInfo.cs index 3288063e5..ee92ddd9f 100644 --- a/API/Parser/ParserInfo.cs +++ b/API/Parser/ParserInfo.cs @@ -1,5 +1,4 @@ - -using API.Entities; +using API.Entities.Enums; namespace API.Parser { diff --git a/API/Program.cs b/API/Program.cs index af4dc1b8e..f65bba4ff 100644 --- a/API/Program.cs +++ b/API/Program.cs @@ -4,7 +4,6 @@ using API.Data; using API.Entities; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -14,12 +13,11 @@ namespace API { public class Program { + private static readonly int HttpPort = 5000; protected Program() { } - private static readonly int HttpPort = 5000; // TODO: Get from DB - public static async Task Main(string[] args) { var host = CreateHostBuilder(args).Build(); @@ -41,7 +39,7 @@ namespace API var logger = services.GetRequiredService < ILogger>(); logger.LogError(ex, "An error occurred during migration"); } - + await host.RunAsync(); } @@ -49,26 +47,40 @@ namespace API Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { - webBuilder.UseKestrel((builderContext, opts) => + webBuilder.UseKestrel((opts) => { opts.ListenAnyIP(HttpPort); }); webBuilder.UseStartup(); }); - - private static string BuildUrl(string scheme, string bindAddress, int port) - { - return $"{scheme}://{bindAddress}:{port}"; - } - - private static void ConfigureKestrelForHttps(KestrelServerOptions options) - { - options.ListenAnyIP(HttpPort); - // options.ListenAnyIP(HttpsPort, listenOptions => - // { - // listenOptions.Protocols = HttpProtocols.Http1AndHttp2; - // //listenOptions.UseHttps(pfxFilePath, pfxPassword); - // }); - } + + // private static void StartNewInstance() + // { + // //_logger.LogInformation("Starting new instance"); + // + // var module = options.RestartPath; + // + // if (string.IsNullOrWhiteSpace(module)) + // { + // module = Environment.GetCommandLineArgs()[0]; + // } + // + // // string commandLineArgsString; + // // if (options.RestartArgs != null) + // // { + // // commandLineArgsString = options.RestartArgs ?? string.Empty; + // // } + // // else + // // { + // // commandLineArgsString = string.Join( + // // ' ', + // // Environment.GetCommandLineArgs().Skip(1).Select(NormalizeCommandLineArgument)); + // // } + // + // //_logger.LogInformation("Executable: {0}", module); + // //_logger.LogInformation("Arguments: {0}", commandLineArgsString); + // + // Process.Start(module, Array.Empty); + // } } } diff --git a/API/Services/DirectoryService.cs b/API/Services/DirectoryService.cs index 96853914f..06ce2df99 100644 --- a/API/Services/DirectoryService.cs +++ b/API/Services/DirectoryService.cs @@ -129,6 +129,7 @@ namespace API.Services try { // TODO: In future, we need to take LibraryType into consideration for what extensions to allow (RAW should allow images) // or we need to move this filtering to another area (Process) + // or we can get all files and put a check in place during Process to abandon files files = GetFilesWithCertainExtensions(currentDir, Parser.Parser.MangaFileExtensions) .ToArray(); } diff --git a/API/Services/ScannerService.cs b/API/Services/ScannerService.cs index 5f84b6e3f..8121df16f 100644 --- a/API/Services/ScannerService.cs +++ b/API/Services/ScannerService.cs @@ -7,6 +7,7 @@ using System.IO; using System.Linq; using System.Threading.Tasks; using API.Entities; +using API.Entities.Enums; using API.Interfaces; using API.Parser; using Microsoft.Extensions.Logging; diff --git a/API/Services/TaskScheduler.cs b/API/Services/TaskScheduler.cs index 0c2a143df..a5ad6f901 100644 --- a/API/Services/TaskScheduler.cs +++ b/API/Services/TaskScheduler.cs @@ -1,5 +1,5 @@ using System.Threading.Tasks; -using API.Entities; +using API.Entities.Enums; using API.Helpers.Converters; using API.Interfaces; using Hangfire;