Whats new implementation.

This commit is contained in:
Burak Kaan Köse
2026-03-02 00:44:29 +01:00
parent e816e87f61
commit d45d3faa89
21 changed files with 496 additions and 9 deletions
@@ -0,0 +1,15 @@
using System.Threading.Tasks;
namespace Wino.Core.Domain.Interfaces;
/// <summary>
/// Represents a one-time app or data migration that runs when a user updates to a new version.
/// </summary>
public interface IAppMigration
{
/// <summary>Gets the unique identifier for this migration, used to track completion in local settings.</summary>
string MigrationId { get; }
/// <summary>Executes the migration logic.</summary>
Task ExecuteAsync();
}
@@ -5,6 +5,7 @@ using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Accounts;
using Wino.Core.Domain.Models.Common;
using Wino.Core.Domain.Models.Printing;
using Wino.Core.Domain.Models.Updates;
namespace Wino.Core.Domain.Interfaces;
@@ -30,4 +31,10 @@ public interface IDialogServiceBase
Task<List<SharedFile>> PickFilesAsync(params object[] typeFilters);
Task<string> PickFilePathAsync(string saveFileName);
Task<WebView2PrintSettingsModel> ShowPrintDialogAsync(WebView2PrintSettingsModel initialSettings = null);
/// <summary>
/// Presents the "What's New" dialog for the current version.
/// This dialog is undismissable and runs any pending migrations when the user clicks "Get Started".
/// </summary>
Task ShowWhatIsNewDialogAsync(UpdateNotes notes);
}
@@ -40,4 +40,10 @@ public interface INotificationBuilder
/// Creates a calendar reminder toast for the specified calendar item.
/// </summary>
Task CreateCalendarReminderNotificationAsync(CalendarItem calendarItem, long reminderDurationInSeconds);
/// <summary>
/// Shows a notification that a migration is required for the new app version.
/// Synchronization is stopped and the user is prompted to open the app.
/// </summary>
void CreateMigrationRequiredNotification();
}
@@ -0,0 +1,26 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Wino.Core.Domain.Models.Updates;
namespace Wino.Core.Domain.Interfaces;
public interface IUpdateManager
{
/// <summary>Loads and parses the update notes for the current version from the bundled asset file.</summary>
Task<UpdateNotes> GetLatestUpdateNotesAsync();
/// <summary>Returns true if the current version's update notes have not yet been shown to the user.</summary>
bool ShouldShowUpdateNotes();
/// <summary>Stores a flag in local settings indicating the update notes for the current version have been seen.</summary>
void MarkUpdateNotesAsSeen();
/// <summary>Returns true if any registered migration has not yet been completed.</summary>
bool HasPendingMigrations();
/// <summary>Runs all pending migrations in order and marks each as completed in local settings.</summary>
Task RunPendingMigrationsAsync();
/// <summary>Registers migrations to be tracked and executed by this manager.</summary>
void RegisterMigrations(IEnumerable<IAppMigration> migrations);
}