Removed migrations. New onboarding screen and wizard like steps.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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."
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user