Compare commits

..

4 Commits

Author SHA1 Message Date
8c23f974c3 commented protobuf compilation 2025-05-23 03:06:29 +05:00
36d39b524c moved data to public dir 2025-05-23 01:24:22 +05:00
9415c60287 invalid data deletion fix 2025-05-23 01:22:11 +05:00
4d7fbeae42 updated dependencies 2025-05-22 21:44:21 +05:00
10 changed files with 42 additions and 42 deletions

View File

@@ -1,9 +1,4 @@
using System.IO; using Path = DTLib.Filesystem.Path;
using System.IO.Compression;
using System.Linq;
using System.Text.Json;
using ParadoxSaveParser.Lib;
using Path = DTLib.Filesystem.Path;
namespace ParadoxSaveParser.CLI; namespace ParadoxSaveParser.CLI;

View File

@@ -14,6 +14,6 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="DTLib" Version="1.7.1"/> <PackageReference Include="DTLib" Version="1.7.4" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -23,8 +23,8 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="DTLib" Version="1.7.1"/> <PackageReference Include="DTLib" Version="1.7.4" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
<PackageReference Include="NUnit" Version="4.3.2" /> <PackageReference Include="NUnit" Version="4.3.2" />
<PackageReference Include="NUnit.Analyzers" Version="4.7.0"> <PackageReference Include="NUnit.Analyzers" Version="4.7.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>

View File

@@ -8,6 +8,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.ObjectPool" Version="9.0.4" /> <PackageReference Include="Microsoft.Extensions.ObjectPool" Version="9.0.5" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -51,15 +51,15 @@ public class DatabaseConnector
{ {
meta.errorMessage = errorMessage; meta.errorMessage = errorMessage;
await UpdateMetadataStatus(meta, SaveFileProcessingStatus.Error); await UpdateMetadataStatus(meta, SaveFileProcessingStatus.Error);
DeleteAssociatedFiles(meta); TryDeleteAssociatedFiles(meta);
} }
public async Task DeleteMetadata(SaveFileMetadata meta) public async Task DeleteMetadata(SaveFileMetadata meta, string reason)
{ {
_logger.LogDebug($"Deleting save file (id: {meta.id} status: {meta.status} " + _logger.LogDebug($"Deleting save file (id: {meta.id} reason: {reason}" +
$"uploadDate: {meta.uploadDateTime:yyyy/MM/dd})"); $"uploadDate: {meta.uploadDateTime:yyyy/MM/dd})");
await _db.DeleteAsync(meta); await _db.DeleteAsync(meta);
DeleteAssociatedFiles(meta); TryDeleteAssociatedFiles(meta);
} }
/// <summary> /// <summary>
@@ -71,20 +71,21 @@ public class DatabaseConnector
var expirationDate = DateTime.Now.AddDays(-_uploadsLifetimeDays); var expirationDate = DateTime.Now.AddDays(-_uploadsLifetimeDays);
var metadataTable = _db.Table<SaveFileMetadata>(); var metadataTable = _db.Table<SaveFileMetadata>();
int rowCount = await metadataTable.CountAsync(); var metadataList = await metadataTable.ToListAsync();
int i = 0;
int deleteCount = 0; int deleteCount = 0;
while(i < rowCount) foreach (var meta in metadataList)
{
var meta = await metadataTable.ElementAtAsync(i)!;
if(meta.status != SaveFileProcessingStatus.Done ||
meta.uploadDateTime < expirationDate ||
!meta.AssociatedFilesExist())
{ {
string deletionReason;
if(meta.status != SaveFileProcessingStatus.Done)
deletionReason = $"invalid status ({meta.status})";
else if (meta.uploadDateTime < expirationDate)
deletionReason = "expired";
else if(!meta.AssociatedFilesExist())
deletionReason = "files not found";
else continue;
deleteCount++; deleteCount++;
await DeleteMetadata(meta); await DeleteMetadata(meta, deletionReason);
}
i++;
} }
_logger.LogInfo($"Deleted {deleteCount} invalid records"); _logger.LogInfo($"Deleted {deleteCount} invalid records");
@@ -97,7 +98,7 @@ public class DatabaseConnector
File.Delete(file); File.Delete(file);
} }
private void DeleteAssociatedFiles(SaveFileMetadata meta) private void TryDeleteAssociatedFiles(SaveFileMetadata meta)
{ {
TryDeleteFile(meta.GetSaveFilePath()); TryDeleteFile(meta.GetSaveFilePath());
TryDeleteFile(meta.GetParsedDataPath()); TryDeleteFile(meta.GetParsedDataPath());

View File

@@ -13,16 +13,16 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="DTLib.Web" Version="1.3.0"/> <PackageReference Include="DTLib.Web" Version="1.4.0" />
<PackageReference Include="Google.Protobuf" Version="3.30.2" /> <!-- <PackageReference Include="Google.Protobuf" Version="3.31.0" />-->
<PackageReference Include="sqlite-net-pcl" Version="1.9.172" /> <PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
</ItemGroup> </ItemGroup>
<ItemGroup> <!-- <ItemGroup>-->
<Compile Include="obj\Protobuf\*.g.cs" /> <!-- <Compile Include="obj\Protobuf\*.g.cs" />-->
</ItemGroup> <!-- </ItemGroup>-->
<Target Name="PreBuild" BeforeTargets="PreBuildEvent"> <!-- <Target Name="PreBuild" BeforeTargets="PreBuildEvent">-->
<Exec Command="sh -c &quot;mkdir -p obj/Protobuf &amp;&amp; protoc Protobuf/*.proto --csharp_out=obj/Protobuf --csharp_opt=file_extension=.g.cs&quot;" /> <!-- <Exec Command="sh -c &quot;mkdir -p obj/Protobuf &amp;&amp; protoc Protobuf/*.proto &#45;&#45;csharp_out=obj/Protobuf &#45;&#45;csharp_opt=file_extension=.g.cs&quot;" />-->
</Target> <!-- </Target>-->
</Project> </Project>

View File

@@ -4,7 +4,8 @@ namespace ParadoxSaveParser.WebAPI;
public static class PathHelper public static class PathHelper
{ {
public static readonly IOPath DATA_DIR = "data"; public static readonly IOPath PUBLIC_DIR = "public";
public static readonly IOPath DATA_DIR = Path.Concat(PUBLIC_DIR, "data");
public static readonly IOPath SAVES_DIR = Path.Concat(DATA_DIR, "saves"); public static readonly IOPath SAVES_DIR = Path.Concat(DATA_DIR, "saves");
public static readonly IOPath PARSED_DIR = Path.Concat(DATA_DIR, "parsed"); public static readonly IOPath PARSED_DIR = Path.Concat(DATA_DIR, "parsed");
public static readonly IOPath TEMP_DIR = "temp"; public static readonly IOPath TEMP_DIR = "temp";

View File

@@ -96,11 +96,14 @@ public static class Program
// http server // http server
var router = new SimpleRouter(loggerRoot); var router = new SimpleRouter(loggerRoot);
router.DefaultRoute = new ServeFilesRouteHandler("public"); router.DefaultRoute = new SimpleRouter.RouteWithMethod(HttpMethod.GET,
router.MapRoute("/getSaveStatus", HttpMethod.GET, new GetSaveStatusHandler(mainCancel.Token)); new ServeFilesRouteHandler(PathHelper.PUBLIC_DIR));
router.MapRoute("/uploadSave", HttpMethod.POST, new UploadSaveHandler(mainCancel.Token, router.MapRoute("/uploadSave", HttpMethod.POST,
bgJobManager, saveFilters)); new UploadSaveHandler(mainCancel.Token, bgJobManager, saveFilters));
router.MapRoute("/getSaveData", HttpMethod.GET, new GetSaveDataHandler(mainCancel.Token)); router.MapRoute("/getSaveStatus", HttpMethod.GET,
new GetSaveStatusHandler(mainCancel.Token));
router.MapRoute("/getSaveData", HttpMethod.GET,
new GetSaveDataHandler(mainCancel.Token));
var app = new WebApp(config.BaseUrl, loggerRoot, router, mainCancel.Token); var app = new WebApp(config.BaseUrl, loggerRoot, router, mainCancel.Token);
await app.Run(); await app.Run();

View File

@@ -1,6 +1,5 @@
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Reflection.Metadata;
using ParadoxSaveParser.WebAPI.BackgroundTasks; using ParadoxSaveParser.WebAPI.BackgroundTasks;
using ParadoxSaveParser.WebAPI.Database; using ParadoxSaveParser.WebAPI.Database;
using ParadoxSaveParser.WebAPI.HttpHelpers; using ParadoxSaveParser.WebAPI.HttpHelpers;

View File

@@ -1,3 +1,4 @@
## WebAPI.SaveParsingOperation: ## WebAPI.SaveParsingOperation:
Save parsed data in protobuf Save parsed data in protobuf
Re-parse if saved data was parsed with another query Re-parse if saved data was parsed with another query
Implement automatic database cleanup