diff --git a/MainWindow.axaml b/MainWindow.axaml
index d715e29..705d694 100644
--- a/MainWindow.axaml
+++ b/MainWindow.axaml
@@ -150,51 +150,69 @@
-
-
-
-
-
+
+
+
+
+
+
+
+ Speichere Unverarbeitete in neuem Verteiler
diff --git a/MainWindow.axaml.cs b/MainWindow.axaml.cs
index 564c199..ba5dbb1 100644
--- a/MainWindow.axaml.cs
+++ b/MainWindow.axaml.cs
@@ -247,10 +247,16 @@ public partial class MainWindow : Window
progressWindow.Show(_instance);
var processor = new CombineAddresses(progressWindow);
- var result = await processor.Perform(address_lists, type);
+ var result = await processor.Perform(address_lists, type, CbMergeExportUnmerged.IsChecked);
- result.owner_id = owner_id;
- Settings._instance.addressSets.addresses.Add(result);
+ if(result.Item1 != null)
+ result.Item1.owner_id = owner_id;
+ if(result.Item2 != null)
+ result.Item2.owner_id = owner_id;
+ if(result.Item1 != null)
+ Settings._instance.addressSets.addresses.Add(result.Item1);
+ if(result.Item2 != null)
+ Settings._instance.addressSets.addresses.Add(result.Item2);
Settings.Save();
progressWindow.Close();
diff --git a/Tasks/CombineAddresses.cs b/Tasks/CombineAddresses.cs
index 403b547..bddfd9b 100644
--- a/Tasks/CombineAddresses.cs
+++ b/Tasks/CombineAddresses.cs
@@ -16,14 +16,14 @@ public class CombineAddresses
_progress = progressWindow;
}
- public async Task Perform(List address_lists, string type)
+ public async Task<(KasAddressList,KasAddressList)> Perform(List address_lists, string type, bool? exportUnused)
{
var res = await Task.Run(async () =>
{
- if (type == "difference") return Difference(address_lists);
- if (type == "union") return Union(address_lists);
- if (type == "intersection") return Intersection(address_lists);
- if (type == "symdiff") return SymmetricDifference(address_lists);
+ if (type == "difference") return Difference(address_lists, exportUnused);
+ if (type == "union") return Union(address_lists, exportUnused);
+ if (type == "intersection") return Intersection(address_lists, exportUnused);
+ if (type == "symdiff") return SymmetricDifference(address_lists, exportUnused);
return null;
});
@@ -48,7 +48,7 @@ public class CombineAddresses
// }
// });
// return result;
- return null;
+ return (null,null);
}
@@ -91,11 +91,11 @@ public class CombineAddresses
return false;
}
- public async Task Difference(List address_lists,
+ public async Task<(KasAddressList,KasAddressList)> Difference(List address_lists, bool? return_unused,
Progress? progress = null)
{
if (address_lists == null || address_lists.Count == 0)
- return new KasAddressList("difference");
+ return (new KasAddressList("difference"),null);
progress ??= new Progress
{
@@ -107,14 +107,17 @@ public class CombineAddresses
var restUnion = new List();
for (var i = 1; i < address_lists.Count; i++)
restUnion.AddRange(address_lists[i].KasPersons);
-
var result = new KasAddressList("difference");
+ var second_result = new KasAddressList("difference_rest");
foreach (var person in address_lists[0].KasPersons)
{
var isDouble = restUnion.Any(p => CompareAddresses(person, p));
if (!isDouble)
result.KasPersons.Add(person);
+ else
+ second_result.KasPersons.Add(person);
+
progress.Increment();
if (progress.LogAction == null) continue;
@@ -122,17 +125,18 @@ public class CombineAddresses
$"Person mit refsid {person.refsid} verglichen mit {restUnion.Count} Personen des Restes.";
await Dispatcher.UIThread.InvokeAsync(() => progress.LogAction?.Invoke(logMessage));
}
-
- return result;
+ if(return_unused == true) return (result,second_result);
+ else return (result, null);
}
- public async Task Union(List address_lists, Progress progress = null)
+ public async Task<(KasAddressList,KasAddressList)> Union(List address_lists, bool? return_unused, Progress progress = null)
{
var result = new KasAddressList("union");
+ var second_result = new KasAddressList("union_rest");
if (address_lists == null || address_lists.Count == 0)
- return result;
+ return (result,null);
var total = address_lists.Sum(l => l.KasPersons.Count);
var processed = 0;
@@ -142,6 +146,8 @@ public class CombineAddresses
{
if (!result.KasPersons.Any(existing => CompareAddresses(existing, person)))
result.KasPersons.Add(person);
+ else
+ second_result.KasPersons.Add(person);
processed++;
var percent = processed / (double)total * 100;
@@ -155,7 +161,8 @@ public class CombineAddresses
Dispatcher.UIThread.Post(() => progress.LogAction?.Invoke(logMessage));
}
- return result;
+ if(return_unused == true) return (result,second_result);
+ else return (result, null);
}
@@ -164,12 +171,13 @@ public class CombineAddresses
return null;
}
- public async Task Intersection(List address_lists, Progress progress = null)
+ public async Task<(KasAddressList,KasAddressList)> Intersection(List address_lists, bool? return_unused, Progress progress = null)
{
var result = new KasAddressList("intersection");
+ var second_result = new KasAddressList("intersection_rest");
if (address_lists == null || address_lists.Count == 0)
- return result;
+ return (result,null);
// Nur die erste Liste als Ausgangspunkt verwenden
var baseList = address_lists[0];
@@ -186,6 +194,8 @@ public class CombineAddresses
if (isInAll)
result.KasPersons.Add(person);
+ else
+ second_result.KasPersons.Add(person);
processed++;
var percent = processed / (double)total * 100;
@@ -202,16 +212,18 @@ public class CombineAddresses
}
}
- return result;
+ if(return_unused == true) return (result,second_result);
+ else return (result, null);
}
- public async Task SymmetricDifference(List address_lists, Progress progress = null)
+ public async Task<(KasAddressList,KasAddressList)> SymmetricDifference(List address_lists, bool? return_unused, Progress progress = null)
{
var result = new KasAddressList("symmetric_difference");
+ var second_result = new KasAddressList("symmetric_rest");
if (address_lists == null || address_lists.Count == 0)
- return result;
+ return (result, null);
var total = address_lists.Sum(l => l.KasPersons.Count);
var processed = 0;
@@ -254,8 +266,11 @@ public class CombineAddresses
foreach (var (person, count) in allPersons)
if (count == 1)
result.KasPersons.Add(person);
+ else
+ second_result.KasPersons.Add(person);
- return result;
+ if(return_unused == true) return (result,second_result);
+ else return (result, null);
}