[chore:] implemented union (combiner) and its usage
This commit is contained in:
@@ -21,6 +21,7 @@ public class CombineAddresses
|
||||
var res = await Task.Run(async () =>
|
||||
{
|
||||
if (type == "difference") return Difference(address_lists);
|
||||
if (type == "union") return Union(address_lists);
|
||||
|
||||
return null;
|
||||
});
|
||||
@@ -89,12 +90,12 @@ public class CombineAddresses
|
||||
}
|
||||
|
||||
public async Task<KasAddressList> Difference(List<KasAddressList> address_lists,
|
||||
DifferenceProgress? progress = null)
|
||||
Progress? progress = null)
|
||||
{
|
||||
if (address_lists == null || address_lists.Count == 0)
|
||||
return new KasAddressList("difference");
|
||||
|
||||
progress ??= new DifferenceProgress
|
||||
progress ??= new Progress
|
||||
{
|
||||
TotalPersons = address_lists.Sum(l => l.KasPersons.Count),
|
||||
ComparedPersons = 0
|
||||
@@ -126,11 +127,41 @@ public class CombineAddresses
|
||||
}
|
||||
|
||||
|
||||
public async Task<KasAddressList> Union()
|
||||
public async Task<KasAddressList> Union(List<KasAddressList> address_lists, Progress progress = null)
|
||||
{
|
||||
return null;
|
||||
var result = new KasAddressList("union");
|
||||
|
||||
if (address_lists == null || address_lists.Count == 0)
|
||||
return result;
|
||||
|
||||
var total = address_lists.Sum(l => l.KasPersons.Count);
|
||||
var processed = 0;
|
||||
|
||||
foreach (var list in address_lists)
|
||||
foreach (var person in list.KasPersons)
|
||||
{
|
||||
if (!result.KasPersons.Any(existing => CompareAddresses(existing, person)))
|
||||
result.KasPersons.Add(person);
|
||||
|
||||
processed++;
|
||||
var percent = processed / (double)total * 100;
|
||||
var logMessage =
|
||||
$"{percent:F1}%: Person mit {person.refsid} hinzugefügt (aktuell {result.KasPersons.Count} Einträge)";
|
||||
|
||||
// Sicher, nicht blockierend:
|
||||
if (progress != null)
|
||||
{
|
||||
if (Dispatcher.UIThread.CheckAccess())
|
||||
progress.LogAction?.Invoke(logMessage);
|
||||
else
|
||||
Dispatcher.UIThread.Post(() => progress.LogAction?.Invoke(logMessage));
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public async Task<KasAddressList> MoveDuplicatesToNew()
|
||||
{
|
||||
return null;
|
||||
@@ -207,7 +238,7 @@ public class CombineAddresses
|
||||
// }
|
||||
}
|
||||
|
||||
public class DifferenceProgress
|
||||
public class Progress
|
||||
{
|
||||
public int TotalPersons { get; set; } // Gesamtzahl der zu prüfenden Personen
|
||||
public int ComparedPersons { get; set; } // Schon verglichene Personen
|
||||
|
||||
Reference in New Issue
Block a user