Skip to content

Develop - New Version#5

Merged
TheMysteriousStranger90 merged 19 commits into
masterfrom
develop
Dec 18, 2025
Merged

Develop - New Version#5
TheMysteriousStranger90 merged 19 commits into
masterfrom
develop

Conversation

@TheMysteriousStranger90

Copy link
Copy Markdown
Owner

This pull request introduces significant improvements to both the application's infrastructure and user experience. The main changes include enhanced database configuration and portability, major updates to the CI/CD workflow and release notes, new and improved dependency management, and substantial UI/UX enhancements such as tray icon support and startup behavior options.

Infrastructure & Database Improvements:

  • Database storage location has been moved to a per-user application data folder for better portability and separation from user documents. The DbContextConfig class now ensures the directory exists and provides the path, and the database context is updated to use dependency injection and a new design-time factory for tooling support. [1] [2] [3]

CI/CD Workflow & Release Process:

  • The GitHub Actions workflow (.github/workflows/dotnet-desktop.yml) has been extensively updated:
    • Artifact and executable names are now consistent with the new branding (AzioEventLogAnalyzer).
    • Code formatting is enforced and auto-fixed during CI.
    • Build artifacts are uploaded for each configuration.
    • Build and release notes now include more detailed and user-friendly information, including new features, requirements, and usage tips.
    • The versioning scheme and changelog links have been updated. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

Dependency & Security Enhancements:

  • Added LiveChartsCore.SkiaSharpView.Avalonia for advanced charting and System.Security.Cryptography.ProtectedData for encrypted credential storage, replacing DotNetEnv. [1] [2]

UI/UX and Application Behavior:

  • Introduced tray icon support with minimize-to-tray and start-minimized options, configurable via settings. The main window now opens centered with default size, and single-instance activation is handled via the tray icon. [1] [2]
  • The service registration is reorganized to support new features, including settings, dialogs, and tray icon services, and new view models are registered for dependency injection.

Code Quality & Analysis:

  • Updated .editorconfig to adjust code analysis rule severities, suppressing or warning on specific diagnostics to improve code quality and maintainability.

Copilot AI review requested due to automatic review settings December 18, 2025 03:39
@TheMysteriousStranger90 TheMysteriousStranger90 added the enhancement New feature or request label Dec 18, 2025
@TheMysteriousStranger90 TheMysteriousStranger90 merged commit db24e7c into master Dec 18, 2025
10 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request introduces "AzioEventLog Analyzer" as a major version update with significant infrastructure improvements, enhanced UI/UX features, and new functionality for Windows Event Log monitoring and analysis.

Key Changes

  • Database Migration: Moved database storage from user documents to application data folder for better portability
  • Tray Icon & Single Instance: Added system tray support with minimize-to-tray functionality and single instance enforcement
  • Settings Management: Implemented comprehensive settings UI with encrypted credential storage and SMTP configuration
  • Dashboard Visualization: Added interactive dashboard with LiveCharts for event statistics and analysis
  • Enhanced Filtering: Improved database mode with search, event ID, and source filtering capabilities

Reviewed changes

Copilot reviewed 45 out of 56 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
Screenshots/Screen5.png New screenshot added for documentation
README.md Updated branding, features list, and added Microsoft Store badge
app.manifest Added administrator privileges requirement and DPI awareness settings
SettingsWindow.axaml/cs New settings dialog for SMTP, startup, and tray configuration
DashboardView.axaml/cs New dashboard view with interactive charts for log analysis
SettingsViewModel.cs View model for settings management with encryption support
PaginationViewModel.cs Enhanced with search and filtering capabilities
MainWindowViewModel.cs Updated with dashboard integration and settings dialog support
DashboardViewModel.cs New view model for dashboard data visualization
Styles.axaml Added accent button styles
TrayIconService.cs New service for system tray icon management
SingleInstanceService.cs New service to enforce single application instance
SettingsService.cs New service for encrypted settings persistence
EmailService.cs Refactored to use settings service instead of environment variables
DialogService.cs New service for showing modal dialogs
Program.cs Updated with single instance enforcement
TimeSeriesPoint.cs New model for time series chart data
MainWindow.axaml Restructured with tab control for monitoring and dashboard views
Files not reviewed (1)
  • LogAnalyzerForWindows/Migrations/20251216114637_InitialCreate.Designer.cs: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

_monitor.MonitoringStarted += OnMonitoringStateChanged;
_monitor.MonitoringStopped += OnMonitoringStateChanged;

OpenSettingsCommand = new RelayCommand(async () => await OpenSettingsAsync().ConfigureAwait(false));

Copilot AI Dec 18, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ConfigureAwait(false) call after an async lambda is unnecessary and has no effect. The ConfigureAwait applies to the Task returned by the lambda, not to the command execution itself. Consider removing it for clarity.

Copilot uses AI. Check for mistakes.

LoadAvailableLogSources();

DashboardViewModel = new DashboardViewModel(logRepository);

Copilot AI Dec 18, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing disposal of _dashboardViewModel. The DashboardViewModel is created but never disposed. If it implements IDisposable or holds disposable resources, it should be properly disposed in the Dispose method.

Copilot uses AI. Check for mistakes.
_emailService = emailService ?? throw new ArgumentNullException(nameof(emailService));

SaveCommand = new RelayCommand(
async () => await SaveSettingsAsync().ConfigureAwait(false),

Copilot AI Dec 18, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ConfigureAwait(false) call after an async lambda is unnecessary and has no effect. The ConfigureAwait applies to the Task returned by the lambda, not to the command execution itself. Consider removing it for clarity.

Copilot uses AI. Check for mistakes.
() => !IsSaving && !IsTesting);

TestSmtpCommand = new RelayCommand(
async () => await TestSmtpConnectionAsync().ConfigureAwait(false),

Copilot AI Dec 18, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ConfigureAwait(false) call after an async lambda is unnecessary and has no effect. The ConfigureAwait applies to the Task returned by the lambda, not to the command execution itself. Consider removing it for clarity.

Copilot uses AI. Check for mistakes.

Task.Run(async () =>
{
while (!_disposed)

Copilot AI Dec 18, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Potential race condition: The _disposed field is accessed from multiple threads (main thread and Task.Run thread) without proper synchronization. Consider using a volatile field or lock to ensure thread-safe access.

Copilot uses AI. Check for mistakes.
desktop.MainWindow is not null)
{
var settingsWindow = new SettingsWindow(viewModel);
await settingsWindow.ShowDialog(desktop.MainWindow).ConfigureAwait(true);

Copilot AI Dec 18, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing ConfigureAwait(false) in async method. This can lead to potential deadlocks in certain contexts. Add .ConfigureAwait(false) to the async call for consistency with other async methods in the codebase.

Copilot uses AI. Check for mistakes.
_repository = repository ?? throw new ArgumentNullException(nameof(repository));

RefreshCommand = new RelayCommand(
async () => await LoadDashboardDataAsync().ConfigureAwait(false),

Copilot AI Dec 18, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ConfigureAwait(false) call after an async lambda is unnecessary and has no effect. The ConfigureAwait applies to the Task returned by the lambda, not to the command execution itself. Consider removing it for clarity.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants