add loading progress to hours window

This commit is contained in:
2025-12-17 12:23:21 +01:00
parent b68c43af38
commit a86ad23774

View File

@@ -2,7 +2,6 @@
using Blueberry.Redmine.Dto; using Blueberry.Redmine.Dto;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Threading.Tasks;
using System.Windows; using System.Windows;
using Wpf.Ui.Controls; using Wpf.Ui.Controls;
@@ -28,11 +27,15 @@ namespace Blueberry
_config = config; _config = config;
} }
private async void FluentWindow_Loaded(object sender, System.Windows.RoutedEventArgs e) private async void FluentWindow_Loaded(object sender, RoutedEventArgs e)
{ {
var u = await _manager.GetUsersAsync(); userComboBox.IsEnabled =
searchButton.IsEnabled =
dateButton.IsEnabled = false;
var u = await _manager.GetUsersAsync(progress: UpdateProgress());
var current = await _manager.GetCurrentUserAsync(); var current = await _manager.GetCurrentUserAsync();
hoursProgress.Visibility = Visibility.Hidden; hoursProgress.Visibility = Visibility.Hidden;
hoursProgress.IsIndeterminate = true;
_users.Clear(); _users.Clear();
_users.AddRange(u); _users.AddRange(u);
userComboBox.Items.Clear(); userComboBox.Items.Clear();
@@ -40,14 +43,63 @@ namespace Blueberry
userComboBox.Items.Add(user); userComboBox.Items.Add(user);
userComboBox.SelectedItem = current; userComboBox.SelectedItem = current;
userComboBox.IsEnabled =
searchButton.IsEnabled =
dateButton.IsEnabled = true;
} }
private void dateButton_Click(object sender, System.Windows.RoutedEventArgs e) private IProgress<(int, int)> UpdateProgress()
{
var p = new Progress<(int current, int total)>((x) =>
{
Dispatcher.Invoke(() =>
{
hoursProgress.IsIndeterminate = false;
var percent = (int)((double)x.current / x.total * 100);
hoursProgress.Progress = percent;
});
});
return p;
}
private void dateButton_Click(object sender, RoutedEventArgs e)
{ {
calendarFlyout.IsOpen = true; calendarFlyout.IsOpen = true;
} }
private async void searchButton_Click(object sender, System.Windows.RoutedEventArgs e) private void UpdateProgressI()
{
Dispatcher.Invoke(() =>
{
var percent = (int)((double)loadI / totalI * 100);
lock (_lock)
{
hoursProgress.Progress = percent;
}
});
}
private int loadInternalI = 0;
private object _lock = new();
private int loadI { get
{
var result = 0;
lock(_lock)
{
result = loadInternalI;
}
return result;
}
set
{
lock (_lock)
{
loadInternalI = value;
}
}
}
private int totalI = 0;
private async void searchButton_Click(object sender, RoutedEventArgs e)
{ {
var user = userComboBox.SelectedItem as UserInfo.User; var user = userComboBox.SelectedItem as UserInfo.User;
if(user is null) if(user is null)
@@ -64,6 +116,8 @@ namespace Blueberry
for (int i = 0; i < selectedDates.Count; i++) for (int i = 0; i < selectedDates.Count; i++)
{ {
hoursProgress.IsIndeterminate = false;
totalI = selectedDates.Count;
var date = selectedDates[i]; var date = selectedDates[i];
tasks[i] = Task.Run(async () => tasks[i] = Task.Run(async () =>
{ {
@@ -83,12 +137,16 @@ namespace Blueberry
}; };
hours.Add(dh); hours.Add(dh);
} }
loadI++;
UpdateProgressI();
}); });
await Task.Delay(10); await Task.Delay(10);
} }
await Task.WhenAll(tasks); await Task.WhenAll(tasks);
hoursProgress.IsIndeterminate = true;
var newTickets = await _manager.GetIssuesAsync(user.Id, createdFrom: selectedDates.First(), createdTo: selectedDates.Last()); var newTickets = await _manager.GetIssuesAsync(user.Id, createdFrom: selectedDates.First(), createdTo: selectedDates.Last());
var closedTickets = await _manager.GetIssuesAsync(user.Id, isOpen: false, updatedFrom: selectedDates.First(), updatedTo: selectedDates.Last()); var closedTickets = await _manager.GetIssuesAsync(user.Id, isOpen: false, updatedFrom: selectedDates.First(), updatedTo: selectedDates.Last());
var currentTickets = await _manager.GetUserOpenIssuesAsync(user.Id); var currentTickets = await _manager.GetUserOpenIssuesAsync(user.Id);