ElwigData: Fail more gracefully when single files may not be processed
All checks were successful
Test / Run tests (push) Successful in 1m47s
All checks were successful
Test / Run tests (push) Successful in 1m47s
This commit is contained in:
@@ -77,6 +77,14 @@ namespace Elwig.Helpers.Export {
|
|||||||
int? DeliveryNum, string? DeliveryFilters)>();
|
int? DeliveryNum, string? DeliveryFilters)>();
|
||||||
|
|
||||||
foreach (var filename in filenames) {
|
foreach (var filename in filenames) {
|
||||||
|
try {
|
||||||
|
data.Add(new([], [], [], [], [], [], [], new([], [], [], [], new() {
|
||||||
|
["member"] = [],
|
||||||
|
["area_commitment"] = [],
|
||||||
|
["delivery"] = [],
|
||||||
|
})));
|
||||||
|
var r = data[^1];
|
||||||
|
|
||||||
// TODO read encrypted files
|
// TODO read encrypted files
|
||||||
using var zip = ZipFile.Open(filename, ZipArchiveMode.Read);
|
using var zip = ZipFile.Open(filename, ZipArchiveMode.Read);
|
||||||
await zip.CheckIntegrity();
|
await zip.CheckIntegrity();
|
||||||
@@ -84,7 +92,7 @@ namespace Elwig.Helpers.Export {
|
|||||||
var version = zip.GetEntry("version");
|
var version = zip.GetEntry("version");
|
||||||
using (var reader = new StreamReader(version!.Open(), Utils.UTF8)) {
|
using (var reader = new StreamReader(version!.Open(), Utils.UTF8)) {
|
||||||
if (await reader.ReadToEndAsync() != "elwig:1")
|
if (await reader.ReadToEndAsync() != "elwig:1")
|
||||||
throw new FileFormatException($"Ungültige Export-Datei ({filename})");
|
throw new FileFormatException($"Ungültige Elwig-Export-Datei ({filename})");
|
||||||
}
|
}
|
||||||
|
|
||||||
var metaJson = zip.GetEntry("meta.json");
|
var metaJson = zip.GetEntry("meta.json");
|
||||||
@@ -101,13 +109,6 @@ namespace Elwig.Helpers.Export {
|
|||||||
areaComCount, areaComFilters != null ? string.Join(" / ", areaComFilters) : null,
|
areaComCount, areaComFilters != null ? string.Join(" / ", areaComFilters) : null,
|
||||||
deliveryCount, deliveryFilters != null ? string.Join(" / ", deliveryFilters) : null));
|
deliveryCount, deliveryFilters != null ? string.Join(" / ", deliveryFilters) : null));
|
||||||
|
|
||||||
data.Add(new([], [], [], [], [], [], [], new([], [], [], [], new() {
|
|
||||||
["member"] = [],
|
|
||||||
["area_commitment"] = [],
|
|
||||||
["delivery"] = [],
|
|
||||||
})));
|
|
||||||
var r = data[^1];
|
|
||||||
|
|
||||||
var wbKgsJson = zip.GetEntry("wb_kgs.json");
|
var wbKgsJson = zip.GetEntry("wb_kgs.json");
|
||||||
if (wbKgsJson != null) {
|
if (wbKgsJson != null) {
|
||||||
using var reader = new StreamReader(wbKgsJson.Open(), Utils.UTF8);
|
using var reader = new StreamReader(wbKgsJson.Open(), Utils.UTF8);
|
||||||
@@ -170,6 +171,25 @@ namespace Elwig.Helpers.Export {
|
|||||||
r.Timestamps["delivery"].Add((d.Year, d.DId, timestamps.Value.CreatedAt, timestamps.Value.ModifiedAt));
|
r.Timestamps["delivery"].Add((d.Year, d.DId, timestamps.Value.CreatedAt, timestamps.Value.ModifiedAt));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (Exception exc) when (
|
||||||
|
exc is InvalidDataException ||
|
||||||
|
exc is FileFormatException ||
|
||||||
|
exc is FileNotFoundException ||
|
||||||
|
exc is IOException) {
|
||||||
|
data.RemoveAt(data.Count - 1);
|
||||||
|
var str = $"Die Elwig-Export-Datei '{Path.GetFileName(filename)}' konnte nicht verarbeitet werden und wird übersprungen.\n\n" + exc.Message;
|
||||||
|
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||||
|
MessageBox.Show(str, "Fehler beim Importieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
await AddImportedFiles(Path.GetFileName(filename));
|
||||||
|
} catch (Exception exc) {
|
||||||
|
data.RemoveAt(data.Count - 1);
|
||||||
|
var str = $"Die Elwig-Export-Datei '{Path.GetFileName(filename)}' konnte nicht verarbeitet werden. Soll sie in Zukunft übersprungen werden?\n\n" + exc.Message;
|
||||||
|
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||||
|
var r = MessageBox.Show(str, "Fehler beim Importieren", MessageBoxButton.YesNo, MessageBoxImage.Error, MessageBoxResult.No);
|
||||||
|
if (r == MessageBoxResult.Yes) {
|
||||||
|
await AddImportedFiles(Path.GetFileName(filename));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var importedMembers = new List<(string FileName, string ZwstId, string Device, int New, int Overwritten, int NotImported, string Filters)>();
|
var importedMembers = new List<(string FileName, string ZwstId, string Device, int New, int Overwritten, int NotImported, string Filters)>();
|
||||||
|
|||||||
Reference in New Issue
Block a user