diff --git a/LightlessSync/UI/DownloadUi.cs b/LightlessSync/UI/DownloadUi.cs index 18df160..aff23ba 100644 --- a/LightlessSync/UI/DownloadUi.cs +++ b/LightlessSync/UI/DownloadUi.cs @@ -1,5 +1,7 @@ using Dalamud.Bindings.ImGui; +using Dalamud.Interface.Colors; using LightlessSync.LightlessConfiguration; +using LightlessSync.LightlessConfiguration.Models; using LightlessSync.PlayerData.Handlers; using LightlessSync.Services; using LightlessSync.Services.Mediator; @@ -103,6 +105,28 @@ public class DownloadUi : WindowMediatorSubscriberBase { if (_configService.Current.ShowTransferWindow) { + var limiterSnapshot = _pairProcessingLimiter.GetSnapshot(); + + // Check if download notifications are enabled (not set to TextOverlay) + var useNotifications = _configService.Current.UseLightlessNotifications + ? _configService.Current.LightlessDownloadNotification != NotificationLocation.TextOverlay + : _configService.Current.UseNotificationsForDownloads; + + if (useNotifications) + { + if (!_currentDownloads.IsEmpty) + { + UpdateDownloadNotificationIfChanged(limiterSnapshot); + _notificationDismissed = false; + } + else if (!_notificationDismissed) + { + Mediator.Publish(new LightlessNotificationDismissMessage("pair_download_progress")); + _notificationDismissed = true; + _lastDownloadStateHash = 0; + } + } + DrawDownloadSummaryBox(); if (_configService.Current.ShowUploading) @@ -120,10 +144,7 @@ public class DownloadUi : WindowMediatorSubscriberBase var textSize = ImGui.CalcTextSize(uploadText); var drawList = ImGui.GetBackgroundDrawList(); - UiSharedService.DrawOutlinedFont( - drawList, - uploadText, - screenPos with { X = screenPos.X - textSize.X / 2f - 1, Y = screenPos.Y - textSize.Y / 2f - 1 }, + UiSharedService.DrawOutlinedFont(drawList, uploadText, screenPos with { X = screenPos.X - textSize.X / 2f - 1, Y = screenPos.Y - textSize.Y / 2f - 1 }, UiSharedService.Color(255, 255, 0, transparency), UiSharedService.Color(0, 0, 0, transparency), 2 @@ -155,8 +176,8 @@ public class DownloadUi : WindowMediatorSubscriberBase _smoothed.Remove(transferKey); continue; } - //Smoothing out the movement and fix jitter around the position. + //Smoothing out the movement and fix jitter around the position. Vector2 screenPos = _smoothed.TryGetValue(transferKey, out var lastPos) ? (rawPos - lastPos).Length() < 4f ? lastPos : rawPos : rawPos; @@ -191,28 +212,20 @@ public class DownloadUi : WindowMediatorSubscriberBase //Shadow, background, border, bar background drawList.AddRectFilled(outerStart + shadowOffset, outerEnd + shadowOffset, UiSharedService.Color(0, 0, 0, transparency / 2), rounding + 2); drawList.AddRectFilled(outerStart, outerEnd, UiSharedService.Color(0, 0, 0, transparency), rounding + 2); - drawList.AddRectFilled(borderStart, borderEnd, UiSharedService.Color(220, 220, 220, transparency), rounding); + drawList.AddRectFilled(borderStart, borderEnd, UiSharedService.Color(ImGuiColors.DalamudGrey), rounding); drawList.AddRectFilled(dlBarStart, dlBarEnd, UiSharedService.Color(0, 0, 0, transparency), rounding); var dlProgressPercent = transferredBytes / (double)totalBytes; var progressEndX = dlBarStart.X + (float)(dlProgressPercent * dlBarWidth); var progressEnd = new Vector2(progressEndX, dlBarEnd.Y); - drawList.AddRectFilled( - dlBarStart, - progressEnd, - UiSharedService.Color(UIColors.Get("LightlessPurple")), - rounding - ); + drawList.AddRectFilled(dlBarStart, progressEnd, UiSharedService.Color(UIColors.Get("LightlessPurple")), rounding); if (_configService.Current.TransferBarsShowText) { var downloadText = $"{UiSharedService.ByteToString(transferredBytes, addSuffix: false)}/{UiSharedService.ByteToString(totalBytes)}"; - UiSharedService.DrawOutlinedFont( - drawList, - downloadText, - screenPos with { X = screenPos.X - textSize.X / 2f - 1, Y = screenPos.Y - textSize.Y / 2f - 1 }, - UiSharedService.Color(255, 255, 255, transparency), + UiSharedService.DrawOutlinedFont(drawList, downloadText, screenPos with { X = screenPos.X - textSize.X / 2f - 1, Y = screenPos.Y - textSize.Y / 2f - 1 }, + UiSharedService.Color(ImGuiColors.DalamudGrey), UiSharedService.Color(0, 0, 0, transparency), 1 ); @@ -234,11 +247,8 @@ public class DownloadUi : WindowMediatorSubscriberBase var textSize = ImGui.CalcTextSize(uploadText); var drawList = ImGui.GetBackgroundDrawList(); - UiSharedService.DrawOutlinedFont( - drawList, - uploadText, - screenPos with { X = screenPos.X - textSize.X / 2f - 1, Y = screenPos.Y - textSize.Y / 2f - 1 }, - UiSharedService.Color(255, 255, 0, transparency), + UiSharedService.DrawOutlinedFont(drawList, uploadText, screenPos with { X = screenPos.X - textSize.X / 2f - 1, Y = screenPos.Y - textSize.Y / 2f - 1 }, + UiSharedService.Color(ImGuiColors.DalamudYellow), UiSharedService.Color(0, 0, 0, transparency), 2 ); @@ -384,7 +394,7 @@ public class DownloadUi : WindowMediatorSubscriberBase var boxMax = origin + new Vector2(boxWidth, boxHeight); drawList.AddRectFilled(boxMin, boxMax, UiSharedService.Color(0, 0, 0, transparency), 5f); - drawList.AddRect(boxMin, boxMax, UiSharedService.Color(220, 220, 220, transparency), 5f); + drawList.AddRect(boxMin, boxMax, UiSharedService.Color(ImGuiColors.DalamudGrey), 5f); // Progress bar var cursor = boxMin + new Vector2(padding, padding); @@ -393,25 +403,20 @@ public class DownloadUi : WindowMediatorSubscriberBase var progress = (float)transferredBytes / totalBytes; drawList.AddRectFilled(barMin, barMax, UiSharedService.Color(40, 40, 40, transparency), 3f); - drawList.AddRectFilled( - barMin, - new Vector2(barMin.X + (barMax.X - barMin.X) * progress, barMax.Y), - UiSharedService.Color(UIColors.Get("LightlessPurple")), - 3f - ); + drawList.AddRectFilled(barMin, new Vector2(barMin.X + (barMax.X - barMin.X) * progress, barMax.Y), UiSharedService.Color(UIColors.Get("LightlessPurple")), 3f); cursor.Y = barMax.Y + padding; // Header - UiSharedService.DrawOutlinedFont(drawList, headerText, cursor, UiSharedService.Color(255, 255, 255, transparency), UiSharedService.Color(0, 0, 0, transparency), 1); + UiSharedService.DrawOutlinedFont(drawList, headerText, cursor, UiSharedService.Color(ImGuiColors.DalamudWhite), UiSharedService.Color(0, 0, 0, transparency), 1); cursor.Y += lineHeight + spacingY; // Bytes - UiSharedService.DrawOutlinedFont(drawList, bytesText, cursor, UiSharedService.Color(255, 255, 255, transparency), UiSharedService.Color(0, 0, 0, transparency), 1); + UiSharedService.DrawOutlinedFont(drawList, bytesText, cursor, UiSharedService.Color(ImGuiColors.DalamudWhite), UiSharedService.Color(0, 0, 0, transparency), 1); cursor.Y += lineHeight + spacingY; // Total speed WIP - UiSharedService.DrawOutlinedFont(drawList, speedText, cursor, UiSharedService.Color(200, 255, 200, transparency), UiSharedService.Color(0, 0, 0, transparency), 1); + UiSharedService.DrawOutlinedFont(drawList, speedText, cursor, UiSharedService.Color(UIColors.Get("LightlessPurple")), UiSharedService.Color(0, 0, 0, transparency), 1); cursor.Y += lineHeight * 1.4f; // Per-player lines @@ -425,7 +430,7 @@ public class DownloadUi : WindowMediatorSubscriberBase $"({UiSharedService.ByteToString(p.TransferredBytes, addSuffix: false)}/{UiSharedService.ByteToString(p.TotalBytes)}) " + $"@ {playerSpeedText}"; - UiSharedService.DrawOutlinedFont(drawList, line, cursor, UiSharedService.Color(255, 255, 255, transparency), UiSharedService.Color(0, 0, 0, transparency), 1); + UiSharedService.DrawOutlinedFont(drawList, line, cursor, UiSharedService.Color(ImGuiColors.DalamudWhite), UiSharedService.Color(0, 0, 0, transparency), 1); cursor.Y += lineHeight + spacingY; } @@ -435,7 +440,7 @@ public class DownloadUi : WindowMediatorSubscriberBase { if (_uiShared.EditTrackerPosition) return true; if (!_configService.Current.ShowTransferWindow && !_configService.Current.ShowTransferBars) return false; - if (!_currentDownloads.Any() && !_fileTransferManager.IsUploading && !_uploadingPlayers.Any()) return false; + if (_currentDownloads.IsEmpty && !_fileTransferManager.IsUploading && _uploadingPlayers.IsEmpty) return false; if (!IsOpen) return false; return true; }