using LANCommander.SDK.Models.Manifest; using LANCommander.Server.ImportExport.Models; using LANCommander.Server.Services; using Action = LANCommander.SDK.Models.Manifest.Action; namespace LANCommander.Server.ImportExport.Exporters; public class ServerExporter(ServerService serverService) : BaseExporter { public override async Task GetExportInfoAsync(Data.Models.Server record) { var files = Directory.GetFiles(record.WorkingDirectory, "*", SearchOption.AllDirectories); long size = 0; foreach (var file in files) { var fileInfo = new FileInfo(file); size += fileInfo.Length; } return new ExportItemInfo { Id = record.Id, Name = record.Name, Size = size }; } public override bool CanExport(SDK.Models.Manifest.Server record) => true; public override async Task ExportAsync(Guid id) { var entity = await serverService.GetManifestAsync(id); var files = Directory.GetFiles(entity.WorkingDirectory, "*", SearchOption.AllDirectories); foreach (var file in files) { try { var fileInfo = new FileInfo(file); if (fileInfo.Exists) { var fileEntry = ExportContext.Archive.CreateEntry( $"Files/{fileInfo.Name.Replace(Path.DirectorySeparatorChar, '/')}"); using (var fileEntryStream = fileEntry.Open()) using (var fileStream = new FileStream(fileInfo.FullName, FileMode.Open)) { await fileStream.CopyToAsync(fileEntryStream); } } } catch (Exception ex) { // File could not be added to archive } } if (entity.Scripts is null) entity.Scripts = new List