diff --git a/API.Tests/Services/SeriesServiceTests.cs b/API.Tests/Services/SeriesServiceTests.cs index 385b63f51..3ab8b700e 100644 --- a/API.Tests/Services/SeriesServiceTests.cs +++ b/API.Tests/Services/SeriesServiceTests.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO.Abstractions; using System.Linq; using System.Threading.Tasks; @@ -2080,7 +2081,7 @@ public class SeriesServiceTests : AbstractDbTest public async Task GetEstimatedChapterCreationDate_NextChapter_ChaptersMonthApart() { await ResetDb(); - var now = DateTime.Parse("2021-01-01"); // 10/31/2024 can trigger an edge case bug + var now = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture); // 10/31/2024 can trigger an edge case bug _context.Library.Add(new LibraryBuilder("Test LIb") .WithAppUser(new AppUserBuilder("majora2007", string.Empty).Build()) diff --git a/API/Controllers/AccountController.cs b/API/Controllers/AccountController.cs index 0c5c8ac0c..4b280f2cb 100644 --- a/API/Controllers/AccountController.cs +++ b/API/Controllers/AccountController.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Reflection; using System.Threading.Tasks; diff --git a/API/Data/ManualMigrations/v0.8.2/MigrateInitialInstallData.cs b/API/Data/ManualMigrations/v0.8.2/MigrateInitialInstallData.cs index 199258240..851f4ac42 100644 --- a/API/Data/ManualMigrations/v0.8.2/MigrateInitialInstallData.cs +++ b/API/Data/ManualMigrations/v0.8.2/MigrateInitialInstallData.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -35,7 +36,7 @@ public static class MigrateInitialInstallData { var fi = directoryService.FileSystem.FileInfo.New(dbFile); var setting = settings.First(s => s.Key == ServerSettingKey.FirstInstallDate); - setting.Value = fi.CreationTimeUtc.ToString(); + setting.Value = fi.CreationTimeUtc.ToString(CultureInfo.InvariantCulture); await dataContext.SaveChangesAsync(); } diff --git a/API/Helpers/Converters/FilterFieldValueConverter.cs b/API/Helpers/Converters/FilterFieldValueConverter.cs index b0fb8fd0f..631332f5f 100644 --- a/API/Helpers/Converters/FilterFieldValueConverter.cs +++ b/API/Helpers/Converters/FilterFieldValueConverter.cs @@ -100,7 +100,7 @@ public static class FilterFieldValueConverter .ToList(), FilterField.WantToRead => bool.Parse(value), FilterField.ReadProgress => string.IsNullOrEmpty(value) ? 0f : value.AsFloat(), - FilterField.ReadingDate => DateTime.Parse(value), + FilterField.ReadingDate => DateTime.Parse(value, CultureInfo.InvariantCulture), FilterField.ReadLast => int.Parse(value), FilterField.Formats => value.Split(',') .Select(x => (MangaFormat) Enum.Parse(typeof(MangaFormat), x)) diff --git a/API/Helpers/JwtHelper.cs b/API/Helpers/JwtHelper.cs index 60bdee0af..4cdf4048d 100644 --- a/API/Helpers/JwtHelper.cs +++ b/API/Helpers/JwtHelper.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using System.IdentityModel.Tokens.Jwt; using System.Linq; @@ -19,7 +20,7 @@ public static class JwtHelper var token = jwtHandler.ReadJwtToken(jwtToken); var exp = token.Claims.FirstOrDefault(c => c.Type == "exp")?.Value; - if (long.TryParse(exp, out var expSeconds)) + if (long.TryParse(exp, CultureInfo.InvariantCulture, out var expSeconds)) { return DateTimeOffset.FromUnixTimeSeconds(expSeconds).UtcDateTime; } diff --git a/API/Helpers/PdfComicInfoExtractor.cs b/API/Helpers/PdfComicInfoExtractor.cs index aaa93428f..ce74ae97d 100644 --- a/API/Helpers/PdfComicInfoExtractor.cs +++ b/API/Helpers/PdfComicInfoExtractor.cs @@ -47,7 +47,7 @@ public class PdfComicInfoExtractor : IPdfComicInfoExtractor { if (string.IsNullOrEmpty(text)) return null; - if (float.TryParse(text, out var value)) return value; + if (float.TryParse(text, CultureInfo.InvariantCulture, out var value)) return value; return null; } @@ -58,7 +58,7 @@ public class PdfComicInfoExtractor : IPdfComicInfoExtractor // Dates stored in the XMP metadata stream (PDF Spec 14.3.2) // are stored in ISO 8601 format, which is handled by C# out of the box - if (DateTime.TryParse(text, out var date)) return date; + if (DateTime.TryParse(text, CultureInfo.InvariantCulture, out var date)) return date; // Dates stored in the document information directory (PDF Spec 14.3.3) // are stored in a proprietary format (PDF Spec 7.9.4) that needs to be @@ -71,7 +71,7 @@ public class PdfComicInfoExtractor : IPdfComicInfoExtractor foreach(var format in _pdfDateFormats) { - if (DateTime.TryParseExact(text, format, null, System.Globalization.DateTimeStyles.None, out var pdfDate)) return pdfDate; + if (DateTime.TryParseExact(text, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out var pdfDate)) return pdfDate; } return null; diff --git a/API/Program.cs b/API/Program.cs index ff6b67ef2..425b60654 100644 --- a/API/Program.cs +++ b/API/Program.cs @@ -1,5 +1,4 @@ using System; -using System.Globalization; using System.IO.Abstractions; using System.Linq; using System.Security.Cryptography; diff --git a/API/Services/BookService.cs b/API/Services/BookService.cs index 97527929c..30d40b72b 100644 --- a/API/Services/BookService.cs +++ b/API/Services/BookService.cs @@ -695,7 +695,7 @@ public class BookService : IBookService var month = 0; var day = 0; if (string.IsNullOrEmpty(publicationDate)) return (year, month, day); - switch (DateTime.TryParse(publicationDate, out var date)) + switch (DateTime.TryParse(publicationDate, CultureInfo.InvariantCulture, out var date)) { case true: year = date.Year; diff --git a/API/Services/FileService.cs b/API/Services/FileService.cs index 37222655a..2cb34c601 100644 --- a/API/Services/FileService.cs +++ b/API/Services/FileService.cs @@ -70,7 +70,6 @@ public class FileService : IFileService // Compute SHA hash var checksum = SHA256.HashData(Encoding.UTF8.GetBytes(content)); - return BitConverter.ToString(checksum).Replace("-", string.Empty).Equals(sha); - + return Convert.ToHexString(checksum).Equals(sha); } } diff --git a/API/Services/Plus/ScrobblingService.cs b/API/Services/Plus/ScrobblingService.cs index 8d1e2d85a..fd3c331ef 100644 --- a/API/Services/Plus/ScrobblingService.cs +++ b/API/Services/Plus/ScrobblingService.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; +using System.Globalization; using System.Linq; using System.Net.Http; using System.Threading.Tasks; @@ -1167,18 +1168,18 @@ public class ScrobblingService : IScrobblingService var value = tokens[index]; if (typeof(T) == typeof(int?)) { - if (int.TryParse(value, out var intValue)) + if (int.TryParse(value, CultureInfo.InvariantCulture, out var intValue)) return (T)(object)intValue; } else if (typeof(T) == typeof(int)) { - if (int.TryParse(value, out var intValue)) + if (int.TryParse(value, CultureInfo.InvariantCulture, out var intValue)) return (T)(object)intValue; return default; } else if (typeof(T) == typeof(long?)) { - if (long.TryParse(value, out var longValue)) + if (long.TryParse(value, CultureInfo.InvariantCulture, out var longValue)) return (T)(object)longValue; } else if (typeof(T) == typeof(string)) @@ -1187,7 +1188,7 @@ public class ScrobblingService : IScrobblingService } } - return default(T?); + return default; } /// diff --git a/API/Services/ReadingListService.cs b/API/Services/ReadingListService.cs index 1394b131a..25ebd2434 100644 --- a/API/Services/ReadingListService.cs +++ b/API/Services/ReadingListService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Linq; using System.Text.RegularExpressions; @@ -538,13 +539,13 @@ public class ReadingListService : IReadingListService var maxPairs = Math.Max(arcs.Length, arcNumbers.Length); for (var i = 0; i < maxPairs; i++) { - var arcNumber = int.MaxValue.ToString(); + var arcNumber = int.MaxValue.ToString(CultureInfo.InvariantCulture); if (arcNumbers.Length > i) { arcNumber = arcNumbers[i]; } - if (string.IsNullOrEmpty(arcs[i]) || !int.TryParse(arcNumber, out _)) continue; + if (string.IsNullOrEmpty(arcs[i]) || !int.TryParse(arcNumber, CultureInfo.InvariantCulture, out _)) continue; data.Add(new Tuple(arcs[i], arcNumber)); } diff --git a/API/Services/Tasks/Scanner/ProcessSeries.cs b/API/Services/Tasks/Scanner/ProcessSeries.cs index ec65e8dbd..5e1a81906 100644 --- a/API/Services/Tasks/Scanner/ProcessSeries.cs +++ b/API/Services/Tasks/Scanner/ProcessSeries.cs @@ -782,7 +782,7 @@ public class ProcessSeries : IProcessSeries chapter.SortOrder = info.IssueOrder; } - if (float.TryParse(chapter.Title, out _)) + if (float.TryParse(chapter.Title, CultureInfo.InvariantCulture, out _)) { // If we have float based chapters, first scan can have the chapter formatted as Chapter 0.2 - .2 as the title is wrong. chapter.Title = chapter.GetNumberTitle(); diff --git a/API/Services/Tasks/VersionUpdaterService.cs b/API/Services/Tasks/VersionUpdaterService.cs index fc332c4eb..c1f0cf268 100644 --- a/API/Services/Tasks/VersionUpdaterService.cs +++ b/API/Services/Tasks/VersionUpdaterService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Linq; using System.Text.Json; @@ -253,7 +254,7 @@ public partial class VersionUpdaterService : IVersionUpdaterService { Version = version, PrNumber = prNumber, - Date = DateTime.Parse(commit.Commit.Author.Date) + Date = DateTime.Parse(commit.Commit.Author.Date, CultureInfo.InvariantCulture) }); } } diff --git a/Kavita.Common/Kavita.Common.csproj b/Kavita.Common/Kavita.Common.csproj index 4a39dcd31..87bd2062d 100644 --- a/Kavita.Common/Kavita.Common.csproj +++ b/Kavita.Common/Kavita.Common.csproj @@ -5,7 +5,6 @@ Kavita 0.8.5.11 en - true true diff --git a/UI/Web/src/app/user-settings/manga-user-preferences/manage-user-preferences.component.ts b/UI/Web/src/app/user-settings/manga-user-preferences/manage-user-preferences.component.ts index c3190ce93..57e7a78f9 100644 --- a/UI/Web/src/app/user-settings/manga-user-preferences/manage-user-preferences.component.ts +++ b/UI/Web/src/app/user-settings/manga-user-preferences/manage-user-preferences.component.ts @@ -129,7 +129,7 @@ export class ManageUserPreferencesComponent implements OnInit { this.fontFamilies = this.bookService.getFontFamilies().map(f => f.title); this.cdRef.markForCheck(); - this.localizationService.locales$.subscribe(res => { + this.localizationService.getLocales().subscribe(res => { this.locales = res; this.cdRef.markForCheck();