LANCommander/LANCommander.Server.Data.SQLite/Migrations/20240220154307_CalculateMediaChecksum.cs

58 lines
1.7 KiB
C#

using Force.Crc32;
using LANCommander.Server.Services;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace LANCommander.Migrations
{
/// <inheritdoc />
public partial class CalculateMediaChecksum : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
var settings = SettingService.GetSettings();
if (Directory.Exists("Media"))
{
var files = Directory.EnumerateFiles("Media");
foreach (var file in files)
{
try
{
uint crc = 0;
using (FileStream fs = File.Open(file, FileMode.Open))
{
var buffer = new byte[4096];
while (true)
{
var count = fs.Read(buffer, 0, buffer.Length);
if (count == 0)
break;
crc = Crc32Algorithm.Append(crc, buffer, 0, count);
}
}
migrationBuilder.Sql($"UPDATE Media SET Crc32 = '{crc.ToString("X")}' WHERE FileId = '{file.Replace("Media" + Path.DirectorySeparatorChar, "").ToUpper()}'");
}
catch (Exception ex)
{
}
}
}
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}