Setup CSV Fleet import and EF Fleet Entity, fix a few bugs
This commit is contained in:
77
Stars Assistant/CSV/FleetLoader.cs
Normal file
77
Stars Assistant/CSV/FleetLoader.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using CsvHelper.Configuration;
|
||||
using CsvHelper;
|
||||
using System.Globalization;
|
||||
using Splat;
|
||||
using StarsAssistant.Services;
|
||||
using Avalonia.Animation;
|
||||
|
||||
namespace StarsAssistant.CSV;
|
||||
|
||||
public class FleetLoader
|
||||
{
|
||||
/// <summary>
|
||||
/// Reference to the game metadata, retrieved by DI
|
||||
/// </summary>
|
||||
protected Services.Game Game = Locator.Current.GetService<Services.Game>()!;
|
||||
|
||||
/// <summary>
|
||||
/// CSV Configuration to use for importing Planet files.
|
||||
/// </summary>
|
||||
protected CsvConfiguration CsvConfig;
|
||||
|
||||
/// <summary>
|
||||
/// Construction
|
||||
/// </summary>
|
||||
public FleetLoader()
|
||||
{
|
||||
CreateConfig();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the CSV configuration for planets.
|
||||
/// </summary>
|
||||
[MemberNotNull(nameof(CsvConfig))]
|
||||
protected void CreateConfig()
|
||||
{
|
||||
CsvConfig = CsvConfiguration.FromAttributes<Fleet>(CultureInfo.InvariantCulture);
|
||||
CsvConfig.Delimiter = "\t";
|
||||
CsvConfig.Escape = '\0';
|
||||
CsvConfig.MissingFieldFound = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Import the fleet file for the given Race, all other records will be ignored.
|
||||
/// Since we can't update existing records, we will delete all applicable ones
|
||||
/// before inserting new Fleets.
|
||||
/// </summary>
|
||||
/// <param name="race">Import File</param>
|
||||
public void ImportForRace(Model.Race race)
|
||||
{
|
||||
using var db = Locator.Current.GetService<Model.StarsDatabase>()!;
|
||||
using var reader = new StreamReader(Game.FleetFileForRace(race), System.Text.Encoding.Latin1);
|
||||
using var csv = new CsvReader(reader, CsvConfig);
|
||||
|
||||
var oldFleetsToDelete = from flt in db.Fleet
|
||||
where flt.OwnerFileId == race.PlayerFileId
|
||||
select flt;
|
||||
db.RemoveRange(oldFleetsToDelete);
|
||||
|
||||
List<CSV.Fleet> records = csv.GetRecords<Fleet>().ToList();
|
||||
var fleetsForPlayer = from flt in records
|
||||
where flt.OwnerFileId == race.PlayerFileId
|
||||
select flt;
|
||||
|
||||
foreach (var csvFleet in fleetsForPlayer)
|
||||
{
|
||||
Model.Fleet dbFleet = new();
|
||||
csvFleet.UpdateDbFleet(dbFleet);
|
||||
dbFleet.OwnerId = race.Name;
|
||||
db.Add(dbFleet);
|
||||
}
|
||||
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user