diff --git a/Aaru.Server/Services/UpdateTask.cs b/Aaru.Server/Services/UpdateTask.cs index 32bfdc40..4b65251f 100644 --- a/Aaru.Server/Services/UpdateTask.cs +++ b/Aaru.Server/Services/UpdateTask.cs @@ -3,9 +3,10 @@ using System.Net; using System.Security.Cryptography; using System.Text.Json; using Aaru.CommonTypes.Enums; -using Aaru.Server.Database; using Aaru.Server.Database.Models; using HtmlAgilityPack; +using Microsoft.EntityFrameworkCore; +using DbContext = Aaru.Server.Database.DbContext; namespace Aaru.Server.Services; @@ -115,11 +116,11 @@ public class UpdateTask : IHostedService, IDisposable if(number == 0) continue; - name = line.Substring(7); + name = line[7..]; - UsbProduct product = - ctx.UsbProducts.FirstOrDefault(p => p.ProductId == number && - p.Vendor.VendorId == vendor.VendorId); + UsbProduct product = ctx.UsbProducts.Include(p => p.Vendor) + .FirstOrDefault(p => p.ProductId == number && + p.Vendor.VendorId == vendor.VendorId); if(product is null) { @@ -157,7 +158,7 @@ public class UpdateTask : IHostedService, IDisposable try { - number = Convert.ToUInt16(line.Substring(0, 4), 16); + number = Convert.ToUInt16(line[..4], 16); } catch(FormatException) { @@ -166,7 +167,7 @@ public class UpdateTask : IHostedService, IDisposable if(number == 0) continue; - name = line.Substring(6); + name = line[6..]; vendor = ctx.UsbVendors.FirstOrDefault(v => v.VendorId == number); @@ -218,7 +219,7 @@ public class UpdateTask : IHostedService, IDisposable if(vendor is null) _logger.LogError("Error, could not find vendor"); else - _logger.LogInformation("Found {Vendor}.", vendor.Vendor); + _logger.LogInformation("Found {Vendor}", vendor.Vendor); stopwatch.Stop(); _logger.LogDebug("Took {TotalSeconds:F2} seconds", stopwatch.Elapsed.TotalSeconds); @@ -232,7 +233,7 @@ public class UpdateTask : IHostedService, IDisposable if(prd is null) _logger.LogError("Error, could not find product"); else - _logger.LogInformation("Found {Product}.", prd.Product); + _logger.LogInformation("Found {Product}", prd.Product); stopwatch.Stop(); _logger.LogDebug("Took {TotalSeconds:F2} seconds", stopwatch.Elapsed.TotalSeconds); @@ -273,7 +274,7 @@ public class UpdateTask : IHostedService, IDisposable // The HTML is too malformed to process easily, so find start of table html = "
| ", StringComparison.Ordinal)); + html[html.IndexOf(" | ", StringComparison.Ordinal)..];
var doc = new HtmlDocument();
doc.LoadHtml(html);
@@ -287,10 +288,9 @@ public class UpdateTask : IHostedService, IDisposable
_logger.LogInformation("Processing offsets...");
stopwatch.Restart();
- foreach(HtmlNode row in firstTable.Descendants("tr"))
+ foreach(HtmlNode[] columns in firstTable.Descendants("tr")
+ .Select(row => row.Descendants("td").ToArray()))
{
- HtmlNode[] columns = row.Descendants("td").ToArray();
-
if(columns.Length != 4)
{
_logger.LogError("Row does not have correct number of columns...");
@@ -305,28 +305,28 @@ public class UpdateTask : IHostedService, IDisposable
if(firstRow)
{
- if(column0.ToLowerInvariant() != "cd drive")
+ if(!string.Equals(column0, "cd drive", StringComparison.InvariantCultureIgnoreCase))
{
_logger.LogError("Unexpected header \"{InnerText}\" found...", columns[0].InnerText);
break;
}
- if(column1.ToLowerInvariant() != "correction offset")
+ if(!string.Equals(column1, "correction offset", StringComparison.InvariantCultureIgnoreCase))
{
_logger.LogError("Unexpected header \"{InnerText}\" found...", columns[1].InnerText);
break;
}
- if(column2.ToLowerInvariant() != "submitted by")
+ if(!string.Equals(column2, "submitted by", StringComparison.InvariantCultureIgnoreCase))
{
_logger.LogError("Unexpected header \"{InnerText}\" found...", columns[2].InnerText);
break;
}
- if(column3.ToLowerInvariant() != "percentage agree")
+ if(!string.Equals(column3, "percentage agree", StringComparison.InvariantCultureIgnoreCase))
{
_logger.LogError("Unexpected header \"{InnerText}\" found...", columns[3].InnerText);
@@ -344,7 +344,7 @@ public class UpdateTask : IHostedService, IDisposable
if(column0[0] == '-' && column0[1] == ' ')
{
manufacturer = null;
- model = column0.Substring(2).Trim();
+ model = column0[2..].Trim();
}
else
{
@@ -357,8 +357,8 @@ public class UpdateTask : IHostedService, IDisposable
}
else
{
- manufacturer = column0.Substring(0, cutOffset).Trim();
- model = column0.Substring(cutOffset + 3).Trim();
+ manufacturer = column0[..cutOffset].Trim();
+ model = column0[(cutOffset + 3)..].Trim();
}
}
@@ -381,7 +381,7 @@ public class UpdateTask : IHostedService, IDisposable
CompactDiscOffset cdOffset =
ctx.CdOffsets.FirstOrDefault(o => o.Manufacturer == manufacturer && o.Model == model);
- if(column1.ToLowerInvariant() == "[purged]")
+ if(string.Equals(column1, "[purged]", StringComparison.InvariantCultureIgnoreCase))
{
if(cdOffset != null) ctx.CdOffsets.Remove(cdOffset);
@@ -394,7 +394,7 @@ public class UpdateTask : IHostedService, IDisposable
if(column3[^1] != '%') continue;
- column3 = column3.Substring(0, column3.Length - 1);
+ column3 = column3[..^1];
if(!float.TryParse(column3, out float percentage)) continue;
@@ -463,7 +463,7 @@ public class UpdateTask : IHostedService, IDisposable
if(File.Exists("drive_offsets.json"))
{
- var sr = new StreamReader("drive_offsets.json");
+ using var sr = new StreamReader("drive_offsets.json");
CompactDiscOffset[] offsets = JsonSerializer.Deserialize |