2025-05-02 20:06:33 +03:00
|
|
|
using Nebula.Shared.FileApis;
|
|
|
|
|
using Nebula.Shared.Models;
|
|
|
|
|
|
|
|
|
|
namespace Nebula.Shared.Services;
|
|
|
|
|
|
|
|
|
|
public partial class ContentService
|
|
|
|
|
{
|
|
|
|
|
public bool CheckMigration(ILoadingHandler loadingHandler)
|
|
|
|
|
{
|
2025-05-05 20:43:28 +03:00
|
|
|
_logger.Log("Checking migration...");
|
2025-05-02 20:06:33 +03:00
|
|
|
|
2025-07-02 21:32:51 +03:00
|
|
|
var migrationList = ContentFileApi.AllFiles.Where(f => !f.Contains('\\')).ToList();
|
2025-05-02 20:06:33 +03:00
|
|
|
if(migrationList.Count == 0) return false;
|
|
|
|
|
|
2025-05-05 20:43:28 +03:00
|
|
|
_logger.Log($"Found {migrationList.Count} migration files. Starting migration...");
|
2025-05-02 20:06:33 +03:00
|
|
|
Task.Run(() => DoMigration(loadingHandler, migrationList));
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DoMigration(ILoadingHandler loadingHandler, List<string> migrationList)
|
|
|
|
|
{
|
|
|
|
|
loadingHandler.SetJobsCount(migrationList.Count);
|
|
|
|
|
|
|
|
|
|
Parallel.ForEach(migrationList, (f,_)=>MigrateFile(f,loadingHandler));
|
|
|
|
|
|
|
|
|
|
if (loadingHandler is IDisposable disposable)
|
|
|
|
|
{
|
|
|
|
|
disposable.Dispose();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void MigrateFile(string file, ILoadingHandler loadingHandler)
|
|
|
|
|
{
|
|
|
|
|
if(!ContentFileApi.TryOpen(file, out var stream))
|
|
|
|
|
{
|
|
|
|
|
loadingHandler.AppendResolvedJob();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ContentFileApi.Save(HashApi.GetManifestPath(file), stream);
|
|
|
|
|
stream.Dispose();
|
|
|
|
|
ContentFileApi.Remove(file);
|
|
|
|
|
loadingHandler.AppendResolvedJob();
|
|
|
|
|
}
|
|
|
|
|
}
|