Removed migrations. New onboarding screen and wizard like steps.

This commit is contained in:
Burak Kaan Köse
2026-03-06 03:42:08 +01:00
parent db5ecd60e4
commit aaa6e8a2c9
56 changed files with 1843 additions and 554 deletions
@@ -10,6 +10,5 @@ namespace Wino.Core.Domain;
[JsonSerializable(typeof(List<string>))]
[JsonSerializable(typeof(bool))]
[JsonSerializable(typeof(UpdateNotes))]
[JsonSerializable(typeof(UpdateMigration))]
[JsonSerializable(typeof(List<UpdateNoteSection>))]
public partial class BasicTypesJsonContext : JsonSerializerContext;
-2
View File
@@ -19,8 +19,6 @@ public static class Constants
public const string ToastModeKey = nameof(ToastModeKey);
public const string ToastModeMail = nameof(ToastModeMail);
public const string ToastModeCalendar = nameof(ToastModeCalendar);
public const string ToastMigrationRequiredKey = nameof(ToastMigrationRequiredKey);
public const string ClientLogFile = "Client_.log";
public const string ServerLogFile = "Server_.log";
public const string LogArchiveFileName = "WinoLogs.zip";
@@ -0,0 +1,9 @@
namespace Wino.Core.Domain.Enums;
public enum AccountSetupStepStatus
{
Pending,
InProgress,
Succeeded,
Failed
}
+5 -1
View File
@@ -35,5 +35,9 @@ public enum WinoPage
EventDetailsPage,
SignatureAndEncryptionPage,
StoragePage,
WelcomePageV2
WelcomePageV2,
WelcomeHostPage,
ProviderSelectionPage,
AccountSetupProgressPage,
SpecialImapCredentialsPage
}
@@ -1,15 +0,0 @@
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();
}
@@ -40,10 +40,4 @@ 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();
}
@@ -1,6 +1,6 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Wino.Core.Domain.Models.Updates;
using System.Collections.Generic;
namespace Wino.Core.Domain.Interfaces;
@@ -18,12 +18,4 @@ public interface IUpdateManager
/// <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);
}
@@ -0,0 +1,24 @@
using CommunityToolkit.Mvvm.ComponentModel;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Models.Accounts;
public partial class AccountSetupStepModel : ObservableObject
{
public string Title { get; init; }
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsPending))]
[NotifyPropertyChangedFor(nameof(IsInProgress))]
[NotifyPropertyChangedFor(nameof(IsSucceeded))]
[NotifyPropertyChangedFor(nameof(IsFailed))]
public partial AccountSetupStepStatus Status { get; set; } = AccountSetupStepStatus.Pending;
[ObservableProperty]
public partial string ErrorMessage { get; set; }
public bool IsPending => Status == AccountSetupStepStatus.Pending;
public bool IsInProgress => Status == AccountSetupStepStatus.InProgress;
public bool IsSucceeded => Status == AccountSetupStepStatus.Succeeded;
public bool IsFailed => Status == AccountSetupStepStatus.Failed;
}
@@ -1,12 +0,0 @@
using System.Text.Json.Serialization;
namespace Wino.Core.Domain.Models.Updates;
public class UpdateMigration
{
[JsonPropertyName("titleKey")]
public string TitleKey { get; set; } = string.Empty;
[JsonPropertyName("descriptionKey")]
public string DescriptionKey { get; set; } = string.Empty;
}
@@ -1,16 +1,7 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace Wino.Core.Domain.Models.Updates;
public class UpdateNotes
{
[JsonPropertyName("hasPendingMigrations")]
public bool HasPendingMigrations { get; set; }
[JsonPropertyName("migration")]
public UpdateMigration Migration { get; set; } = new();
[JsonPropertyName("sections")]
public List<UpdateNoteSection> Sections { get; set; } = [];
}
@@ -1004,5 +1004,45 @@
"WelcomeWindow_SetupSubtitle": "Choose your email provider to get started",
"WelcomeWindow_AddAccountButton": "Add account",
"WelcomeWindow_SkipForNow": "Skip for now — I'll set it up later",
"WelcomeWindow_AppDescription": "A fast, focused inbox — redesigned for Windows 11"
"WelcomeWindow_AppDescription": "A fast, focused inbox — redesigned for Windows 11",
"WelcomeWizard_Step1Title": "Welcome",
"WelcomeWizard_Step2Title": "Add Account",
"WelcomeWizard_Step3Title": "Finish Setup",
"ProviderSelection_Title": "Choose your email provider",
"ProviderSelection_Subtitle": "Select a provider below to add your email account to Wino Mail.",
"ProviderSelection_AccountNameHeader": "Account Name",
"ProviderSelection_AccountNamePlaceholder": "e.g. Personal, Work",
"ProviderSelection_DisplayNameHeader": "Display Name",
"ProviderSelection_DisplayNamePlaceholder": "e.g. John Doe",
"ProviderSelection_EmailHeader": "E-mail Address",
"ProviderSelection_EmailPlaceholder": "e.g. johndoe@example.com",
"ProviderSelection_AppPasswordHeader": "App-Specific Password",
"ProviderSelection_AppPasswordHelp": "How do I get an app-specific password?",
"ProviderSelection_CalendarModeHeader": "Calendar Integration",
"ProviderSelection_CalendarMode_DisabledTitle": "Disabled",
"ProviderSelection_CalendarMode_DisabledDescription": "No calendar integration",
"ProviderSelection_CalendarMode_CalDavTitle": "CalDAV Synchronization",
"ProviderSelection_CalendarMode_CalDavDescription_Apple": "Your calendar events are synced to Apple servers between your devices.",
"ProviderSelection_CalendarMode_CalDavDescription_Yahoo": "Your calendar events are synced to Yahoo servers between your devices.",
"ProviderSelection_CalendarMode_LocalTitle": "Local calendar",
"ProviderSelection_CalendarMode_LocalDescription": "Your events are stored only on your computer. No server connectivity.",
"ProviderSelection_ClearColor": "Clear color",
"ProviderSelection_ContinueButton": "Continue",
"ProviderSelection_SpecialImap_Subtitle": "Enter your account credentials to connect.",
"AccountSetup_Title": "Setting up your account",
"AccountSetup_Step_Authenticating": "Authenticating with {0}",
"AccountSetup_Step_TestingMailAuth": "Testing mail authentication",
"AccountSetup_Step_SyncingFolders": "Synchronizing folder metadata",
"AccountSetup_Step_FetchingProfile": "Fetching profile information",
"AccountSetup_Step_DiscoveringCalDav": "Discovering CalDAV settings",
"AccountSetup_Step_TestingCalendarAuth": "Testing calendar authentication",
"AccountSetup_Step_SavingAccount": "Saving account information",
"AccountSetup_Step_FetchingCalendarMetadata": "Fetching calendar metadata",
"AccountSetup_Step_SyncingAliases": "Synchronizing aliases",
"AccountSetup_Step_Finalizing": "Finalizing setup",
"AccountSetup_FailureMessage": "Setup failed. Go back to fix your settings, or try again later.",
"AccountSetup_SuccessMessage": "Your account has been set up successfully!",
"AccountSetup_GoBackButton": "Go Back",
"AccountSetup_TryAgainButton": "Try Again",
"ImapCalDavSettings_AutoDiscoveryFailed": "Auto-discovery failed. Please enter settings manually in the Advanced tab."
}