From ef196c384c5b74833ad3399b113c624fe992c162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Thu, 30 May 2024 02:34:54 +0200 Subject: [PATCH 1/3] Initial setup for account ordering. --- Wino.Core.Domain/Entities/MailAccount.cs | 5 + .../Interfaces/IAccountService.cs | 25 + .../Translations/en_US/resources.json | 2 + Wino.Core.Domain/Translator.Designer.cs | 522 +++++++++++++++++- Wino.Core/Services/AccountService.cs | 43 +- .../AccountManagementViewModel.cs | 10 + .../Views/Account/AccountManagementPage.xaml | 12 + 7 files changed, 613 insertions(+), 6 deletions(-) diff --git a/Wino.Core.Domain/Entities/MailAccount.cs b/Wino.Core.Domain/Entities/MailAccount.cs index 2ca32057..f75b5828 100644 --- a/Wino.Core.Domain/Entities/MailAccount.cs +++ b/Wino.Core.Domain/Entities/MailAccount.cs @@ -45,6 +45,11 @@ namespace Wino.Core.Domain.Entities /// public Guid? SignatureId { get; set; } + /// + /// Gets or sets the listing order of the account in the accounts list. + /// + public int Order { get; set; } + /// /// Gets or sets whether the account has any reason for an interactive user action to fix continue operating. /// diff --git a/Wino.Core.Domain/Interfaces/IAccountService.cs b/Wino.Core.Domain/Interfaces/IAccountService.cs index 99190af3..78682cda 100644 --- a/Wino.Core.Domain/Interfaces/IAccountService.cs +++ b/Wino.Core.Domain/Interfaces/IAccountService.cs @@ -68,12 +68,37 @@ namespace Wino.Core.Domain.Interfaces /// Current account synchronization modifier. Task UpdateSynchronizationIdentifierAsync(Guid accountId, string newIdentifier); + /// + /// Renames the merged inbox with the given id. + /// + /// Merged Inbox id + /// New name for the merged/linked inbox. Task RenameMergedAccountAsync(Guid mergedInboxId, string newName); + /// + /// Creates a new merged inbox with the given accounts. + /// + /// Merged inbox properties. + /// List of accounts to merge together. Task CreateMergeAccountsAsync(MergedInbox mergedInbox, IEnumerable accountsToMerge); + /// + /// Updates the merged inbox with the given id with the new linked accounts. + /// + /// Updating merged inbox id. + /// List of linked account ids. Task UpdateMergedInboxAsync(Guid mergedInboxId, IEnumerable linkedAccountIds); + /// + /// Destroys the merged inbox with the given id. + /// + /// Merged inbox id to destroy. Task UnlinkMergedInboxAsync(Guid mergedInboxId); + + /// + /// Updates the account listing orders. + /// + /// AccountId-OrderNumber pair for all accounts. + Task UpdateAccountOrdersAsync(Dictionary accountIdOrderPair); } } diff --git a/Wino.Core.Domain/Translations/en_US/resources.json b/Wino.Core.Domain/Translations/en_US/resources.json index 2359418a..246b5863 100644 --- a/Wino.Core.Domain/Translations/en_US/resources.json +++ b/Wino.Core.Domain/Translations/en_US/resources.json @@ -405,6 +405,8 @@ "SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail", "SettingsManageAccountSettings_Description": "Notifications, signatures, synchronization and other settings per account.", "SettingsManageAccountSettings_Title": "Manage Account Settings", + "SettingsReorderAccounts_Title": "Reorder Accounts", + "SettingsReorderAccounts_Description": "Change the order of accounts in the account list.", "SettingsManageLink_Description": "Move items to add new link or remove existing link.", "SettingsManageLink_Title": "Manage Link", "SettingsMarkAsRead_Description": "Change what should happen to the selected item.", diff --git a/Wino.Core.Domain/Translator.Designer.cs b/Wino.Core.Domain/Translator.Designer.cs index ff5289a7..68673631 100644 --- a/Wino.Core.Domain/Translator.Designer.cs +++ b/Wino.Core.Domain/Translator.Designer.cs @@ -1,4 +1,18 @@  + + + + + + + + + + + + + + namespace Wino.Core.Domain { public class Translator @@ -18,2469 +32,2975 @@ namespace Wino.Core.Domain } } + /// /// all done /// public static string AccountCreationDialog_Completed => Resources.GetTranslatedString(@"AccountCreationDialog_Completed"); + /// /// initializing /// public static string AccountCreationDialog_Initializing => Resources.GetTranslatedString(@"AccountCreationDialog_Initializing"); + /// /// We are getting folder information at the moment. /// public static string AccountCreationDialog_PreparingFolders => Resources.GetTranslatedString(@"AccountCreationDialog_PreparingFolders"); + /// /// Account information is being saved. /// public static string AccountCreationDialog_SigninIn => Resources.GetTranslatedString(@"AccountCreationDialog_SigninIn"); + /// /// Account Name /// public static string AccountEditDialog_Message => Resources.GetTranslatedString(@"AccountEditDialog_Message"); + /// /// Edit Account /// public static string AccountEditDialog_Title => Resources.GetTranslatedString(@"AccountEditDialog_Title"); + /// /// Pick an account /// public static string AccountPickerDialog_Title => Resources.GetTranslatedString(@"AccountPickerDialog_Title"); + /// /// Add /// public static string AddHyperlink => Resources.GetTranslatedString(@"AddHyperlink"); + /// /// Searching for mail settings... /// public static string AutoDiscoveryProgressMessage => Resources.GetTranslatedString(@"AutoDiscoveryProgressMessage"); + /// /// Advanced Configuration /// public static string BasicIMAPSetupDialog_AdvancedConfiguration => Resources.GetTranslatedString(@"BasicIMAPSetupDialog_AdvancedConfiguration"); + /// /// Your credentials will only be stored locally on your computer. /// public static string BasicIMAPSetupDialog_CredentialLocalMessage => Resources.GetTranslatedString(@"BasicIMAPSetupDialog_CredentialLocalMessage"); + /// /// Some accounts require additional steps to sign in /// public static string BasicIMAPSetupDialog_Description => Resources.GetTranslatedString(@"BasicIMAPSetupDialog_Description"); + /// /// Display Name /// public static string BasicIMAPSetupDialog_DisplayName => Resources.GetTranslatedString(@"BasicIMAPSetupDialog_DisplayName"); + /// /// eg. John Doe /// public static string BasicIMAPSetupDialog_DisplayNamePlaceholder => Resources.GetTranslatedString(@"BasicIMAPSetupDialog_DisplayNamePlaceholder"); + /// /// Learn more /// public static string BasicIMAPSetupDialog_LearnMore => Resources.GetTranslatedString(@"BasicIMAPSetupDialog_LearnMore"); + /// /// E-Mail Address /// public static string BasicIMAPSetupDialog_MailAddress => Resources.GetTranslatedString(@"BasicIMAPSetupDialog_MailAddress"); + /// /// johndoe@fabrikam.com /// public static string BasicIMAPSetupDialog_MailAddressPlaceholder => Resources.GetTranslatedString(@"BasicIMAPSetupDialog_MailAddressPlaceholder"); + /// /// Password /// public static string BasicIMAPSetupDialog_Password => Resources.GetTranslatedString(@"BasicIMAPSetupDialog_Password"); + /// /// IMAP Account /// public static string BasicIMAPSetupDialog_Title => Resources.GetTranslatedString(@"BasicIMAPSetupDialog_Title"); + /// /// Add Account /// public static string Buttons_AddAccount => Resources.GetTranslatedString(@"Buttons_AddAccount"); + /// /// Apply Theme /// public static string Buttons_ApplyTheme => Resources.GetTranslatedString(@"Buttons_ApplyTheme"); + /// /// Browse /// public static string Buttons_Browse => Resources.GetTranslatedString(@"Buttons_Browse"); + /// /// Cancel /// public static string Buttons_Cancel => Resources.GetTranslatedString(@"Buttons_Cancel"); + /// /// Close /// public static string Buttons_Close => Resources.GetTranslatedString(@"Buttons_Close"); + /// /// Create /// public static string Buttons_Create => Resources.GetTranslatedString(@"Buttons_Create"); + /// /// Create Account /// public static string Buttons_CreateAccount => Resources.GetTranslatedString(@"Buttons_CreateAccount"); + /// /// Delete /// public static string Buttons_Delete => Resources.GetTranslatedString(@"Buttons_Delete"); + /// /// Discard /// public static string Buttons_Discard => Resources.GetTranslatedString(@"Buttons_Discard"); + /// /// Enable /// public static string Buttons_EnableImageRendering => Resources.GetTranslatedString(@"Buttons_EnableImageRendering"); + /// /// No /// public static string Buttons_No => Resources.GetTranslatedString(@"Buttons_No"); + /// /// Open /// public static string Buttons_Open => Resources.GetTranslatedString(@"Buttons_Open"); + /// /// Purchase /// public static string Buttons_Purchase => Resources.GetTranslatedString(@"Buttons_Purchase"); + /// /// Rate Wino /// public static string Buttons_RateWino => Resources.GetTranslatedString(@"Buttons_RateWino"); + /// /// Save /// public static string Buttons_Save => Resources.GetTranslatedString(@"Buttons_Save"); + /// /// Save Configuration /// public static string Buttons_SaveConfiguration => Resources.GetTranslatedString(@"Buttons_SaveConfiguration"); + /// /// Share /// public static string Buttons_Share => Resources.GetTranslatedString(@"Buttons_Share"); + /// /// Sign In /// public static string Buttons_SignIn => Resources.GetTranslatedString(@"Buttons_SignIn"); + /// /// Yes /// public static string Buttons_Yes => Resources.GetTranslatedString(@"Buttons_Yes"); + /// /// Center /// public static string Center => Resources.GetTranslatedString(@"Center"); + /// /// Coming soon... /// public static string ComingSoon => Resources.GetTranslatedString(@"ComingSoon"); + /// /// From: /// public static string ComposerFrom => Resources.GetTranslatedString(@"ComposerFrom"); + /// /// Subject: /// public static string ComposerSubject => Resources.GetTranslatedString(@"ComposerSubject"); + /// /// To: /// public static string ComposerTo => Resources.GetTranslatedString(@"ComposerTo"); + /// /// {0} copied to clipboard. /// public static string ClipboardTextCopied_Message => Resources.GetTranslatedString(@"ClipboardTextCopied_Message"); + /// /// Copied /// public static string ClipboardTextCopied_Title => Resources.GetTranslatedString(@"ClipboardTextCopied_Title"); + /// /// Failed to copy {0} to clipboard. /// public static string ClipboardTextCopyFailed_Message => Resources.GetTranslatedString(@"ClipboardTextCopyFailed_Message"); + /// /// click enter to input addresses /// public static string ComposerToPlaceholder => Resources.GetTranslatedString(@"ComposerToPlaceholder"); + /// /// Drop your files here /// public static string ComposerAttachmentsDropZone_Message => Resources.GetTranslatedString(@"ComposerAttachmentsDropZone_Message"); + /// /// Attach /// public static string ComposerAttachmentsDragDropAttach_Message => Resources.GetTranslatedString(@"ComposerAttachmentsDragDropAttach_Message"); + /// /// Set custom accent color if you wish. Not selecting a color will use your Windows accent color. /// public static string CustomThemeBuilder_AccentColorDescription => Resources.GetTranslatedString(@"CustomThemeBuilder_AccentColorDescription"); + /// /// Accent color /// public static string CustomThemeBuilder_AccentColorTitle => Resources.GetTranslatedString(@"CustomThemeBuilder_AccentColorTitle"); + /// /// Pick /// public static string CustomThemeBuilder_PickColor => Resources.GetTranslatedString(@"CustomThemeBuilder_PickColor"); + /// /// Unique name for your custom theme. /// public static string CustomThemeBuilder_ThemeNameDescription => Resources.GetTranslatedString(@"CustomThemeBuilder_ThemeNameDescription"); + /// /// Theme name /// public static string CustomThemeBuilder_ThemeNameTitle => Resources.GetTranslatedString(@"CustomThemeBuilder_ThemeNameTitle"); + /// /// Custom Theme Builder /// public static string CustomThemeBuilder_Title => Resources.GetTranslatedString(@"CustomThemeBuilder_Title"); + /// /// Set a custom wallpaper for Wino /// public static string CustomThemeBuilder_WallpaperDescription => Resources.GetTranslatedString(@"CustomThemeBuilder_WallpaperDescription"); + /// /// Set custom wallpaper /// public static string CustomThemeBuilder_WallpaperTitle => Resources.GetTranslatedString(@"CustomThemeBuilder_WallpaperTitle"); + /// /// You have reached the account creation limit. Would you like to purchase 'Unlimited Account' add-on to continue? /// public static string DialogMessage_AccountLimitMessage => Resources.GetTranslatedString(@"DialogMessage_AccountLimitMessage"); + /// /// Account Limit Reached /// public static string DialogMessage_AccountLimitTitle => Resources.GetTranslatedString(@"DialogMessage_AccountLimitTitle"); + /// /// Do you want to permanently delete all the mails in this folder? /// public static string DialogMessage_CleanupFolderMessage => Resources.GetTranslatedString(@"DialogMessage_CleanupFolderMessage"); + /// /// Cleanup Folder /// public static string DialogMessage_CleanupFolderTitle => Resources.GetTranslatedString(@"DialogMessage_CleanupFolderTitle"); + /// /// Message has no recipient. /// public static string DialogMessage_ComposerMissingRecipientMessage => Resources.GetTranslatedString(@"DialogMessage_ComposerMissingRecipientMessage"); + /// /// Validation Failed /// public static string DialogMessage_ComposerValidationFailedTitle => Resources.GetTranslatedString(@"DialogMessage_ComposerValidationFailedTitle"); + /// /// Give this new link a name. Accounts will be merged under this name. /// public static string DialogMessage_CreateLinkedAccountMessage => Resources.GetTranslatedString(@"DialogMessage_CreateLinkedAccountMessage"); + /// /// Account Link Name /// public static string DialogMessage_CreateLinkedAccountTitle => Resources.GetTranslatedString(@"DialogMessage_CreateLinkedAccountTitle"); + /// /// Delete {0}? /// public static string DialogMessage_DeleteAccountConfirmationMessage => Resources.GetTranslatedString(@"DialogMessage_DeleteAccountConfirmationMessage"); + /// /// All data associated with this account will be deleted from disk permanently. /// public static string DialogMessage_DeleteAccountConfirmationTitle => Resources.GetTranslatedString(@"DialogMessage_DeleteAccountConfirmationTitle"); + /// /// This draft will be discarded. Do you want to continue? /// public static string DialogMessage_DiscardDraftConfirmationMessage => Resources.GetTranslatedString(@"DialogMessage_DiscardDraftConfirmationMessage"); + /// /// Discard Draft /// public static string DialogMessage_DiscardDraftConfirmationTitle => Resources.GetTranslatedString(@"DialogMessage_DiscardDraftConfirmationTitle"); + /// /// Permanent Delete /// public static string DialogMessage_HardDeleteConfirmationMessage => Resources.GetTranslatedString(@"DialogMessage_HardDeleteConfirmationMessage"); + /// /// Message(s) will be permanently deleted. Do you want to continue? /// public static string DialogMessage_HardDeleteConfirmationTitle => Resources.GetTranslatedString(@"DialogMessage_HardDeleteConfirmationTitle"); + /// /// You don't have any accounts to create message from. /// public static string DialogMessage_NoAccountsForCreateMailMessage => Resources.GetTranslatedString(@"DialogMessage_NoAccountsForCreateMailMessage"); + /// /// Account Missing /// public static string DialogMessage_NoAccountsForCreateMailTitle => Resources.GetTranslatedString(@"DialogMessage_NoAccountsForCreateMailTitle"); + /// /// Enter new name for linked account /// public static string DialogMessage_RenameLinkedAccountsMessage => Resources.GetTranslatedString(@"DialogMessage_RenameLinkedAccountsMessage"); + /// /// Rename Linked Account /// public static string DialogMessage_RenameLinkedAccountsTitle => Resources.GetTranslatedString(@"DialogMessage_RenameLinkedAccountsTitle"); + /// /// This operation will not delete your accounts but only break the link for shared folder connections. Do you want to continue? /// public static string DialogMessage_UnlinkAccountsConfirmationMessage => Resources.GetTranslatedString(@"DialogMessage_UnlinkAccountsConfirmationMessage"); + /// /// Unlink Accounts /// public static string DialogMessage_UnlinkAccountsConfirmationTitle => Resources.GetTranslatedString(@"DialogMessage_UnlinkAccountsConfirmationTitle"); + /// /// Missin Subject /// public static string DialogMessage_EmptySubjectConfirmation => Resources.GetTranslatedString(@"DialogMessage_EmptySubjectConfirmation"); + /// /// Message has no subject. Do you want to continue? /// public static string DialogMessage_EmptySubjectConfirmationMessage => Resources.GetTranslatedString(@"DialogMessage_EmptySubjectConfirmationMessage"); + /// /// Unsubscribe /// public static string DialogMessage_UnsubscribeConfirmationTitle => Resources.GetTranslatedString(@"DialogMessage_UnsubscribeConfirmationTitle"); + /// /// Do you want to stop getting messages from {0}? /// public static string DialogMessage_UnsubscribeConfirmationOneClickMessage => Resources.GetTranslatedString(@"DialogMessage_UnsubscribeConfirmationOneClickMessage"); + /// /// To stop getting messages from {0}, go to their website to unsubscribe. /// public static string DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage => Resources.GetTranslatedString(@"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage"); + /// /// Go to website /// public static string DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton => Resources.GetTranslatedString(@"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton"); + /// /// Do you want to stop getting messages from {0}? Wino will unsubscribe for you by sending an email from your email account to {1}. /// public static string DialogMessage_UnsubscribeConfirmationMailtoMessage => Resources.GetTranslatedString(@"DialogMessage_UnsubscribeConfirmationMailtoMessage"); + /// /// Don't ask again /// public static string Dialog_DontAskAgain => Resources.GetTranslatedString(@"Dialog_DontAskAgain"); + /// /// Wino doesn't have it's own Discord server, but special 'wino-mail' channel is hosted at 'Developer Sanctuary' server. To get the updates about Wino please join Developer Sanctuary server and follow 'wino-mail' channel under 'Community Projects' You will be directed to server URL since Discord doesn't support channel invites. /// public static string DiscordChannelDisclaimerMessage => Resources.GetTranslatedString(@"DiscordChannelDisclaimerMessage"); + /// /// Important Discord Information /// public static string DiscordChannelDisclaimerTitle => Resources.GetTranslatedString(@"DiscordChannelDisclaimerTitle"); + /// /// Draft /// public static string Draft => Resources.GetTranslatedString(@"Draft"); + /// /// Draw /// public static string EditorToolbarOption_Draw => Resources.GetTranslatedString(@"EditorToolbarOption_Draw"); + /// /// Format /// public static string EditorToolbarOption_Format => Resources.GetTranslatedString(@"EditorToolbarOption_Format"); + /// /// Insert /// public static string EditorToolbarOption_Insert => Resources.GetTranslatedString(@"EditorToolbarOption_Insert"); + /// /// None /// public static string EditorToolbarOption_None => Resources.GetTranslatedString(@"EditorToolbarOption_None"); + /// /// Options /// public static string EditorToolbarOption_Options => Resources.GetTranslatedString(@"EditorToolbarOption_Options"); + /// /// Dark mode /// public static string ElementTheme_Dark => Resources.GetTranslatedString(@"ElementTheme_Dark"); + /// /// Use system setting /// public static string ElementTheme_Default => Resources.GetTranslatedString(@"ElementTheme_Default"); + /// /// Light mode /// public static string ElementTheme_Light => Resources.GetTranslatedString(@"ElementTheme_Light"); + /// /// Emoji /// public static string Emoji => Resources.GetTranslatedString(@"Emoji"); + /// /// IMAP Client Pool failed. /// public static string Exception_ImapClientPoolFailed => Resources.GetTranslatedString(@"Exception_ImapClientPoolFailed"); + /// /// Authentication canceled /// public static string Exception_AuthenticationCanceled => Resources.GetTranslatedString(@"Exception_AuthenticationCanceled"); + /// /// This theme already exists. /// public static string Exception_CustomThemeExists => Resources.GetTranslatedString(@"Exception_CustomThemeExists"); + /// /// You must provide a name. /// public static string Exception_CustomThemeMissingName => Resources.GetTranslatedString(@"Exception_CustomThemeMissingName"); + /// /// You must provide a custom background image. /// public static string Exception_CustomThemeMissingWallpaper => Resources.GetTranslatedString(@"Exception_CustomThemeMissingWallpaper"); + /// /// Failed to synchronize folders /// public static string Exception_FailedToSynchronizeFolders => Resources.GetTranslatedString(@"Exception_FailedToSynchronizeFolders"); + /// /// Callback uri is null on activation. /// public static string Exception_GoogleAuthCallbackNull => Resources.GetTranslatedString(@"Exception_GoogleAuthCallbackNull"); + /// /// Corrupted authorization response. /// public static string Exception_GoogleAuthCorruptedCode => Resources.GetTranslatedString(@"Exception_GoogleAuthCorruptedCode"); + /// /// OAuth authorization error: {0} /// public static string Exception_GoogleAuthError => Resources.GetTranslatedString(@"Exception_GoogleAuthError"); + /// /// Received request with invalid state ({0}) /// public static string Exception_GoogleAuthInvalidResponse => Resources.GetTranslatedString(@"Exception_GoogleAuthInvalidResponse"); + /// /// Authorization code exchange failed. /// public static string Exception_GoogleAuthorizationCodeExchangeFailed => Resources.GetTranslatedString(@"Exception_GoogleAuthorizationCodeExchangeFailed"); + /// /// System folder configuration is not valid. Check configuration and try again. /// public static string Exception_InvalidSystemFolderConfiguration => Resources.GetTranslatedString(@"Exception_InvalidSystemFolderConfiguration"); + /// /// Assigned account is null /// public static string Exception_NullAssignedAccount => Resources.GetTranslatedString(@"Exception_NullAssignedAccount"); + /// /// Assigned folder is null /// public static string Exception_NullAssignedFolder => Resources.GetTranslatedString(@"Exception_NullAssignedFolder"); + /// /// Response handling failed with error HTTP code {0} /// public static string Exception_SynchronizerFailureHTTP => Resources.GetTranslatedString(@"Exception_SynchronizerFailureHTTP"); + /// /// Token generation failed /// public static string Exception_TokenGenerationFailed => Resources.GetTranslatedString(@"Exception_TokenGenerationFailed"); + /// /// Failed to get token information. /// public static string Exception_TokenInfoRetrivalFailed => Resources.GetTranslatedString(@"Exception_TokenInfoRetrivalFailed"); + /// /// Unknown error occurred during authentication /// public static string Exception_UnknowErrorDuringAuthentication => Resources.GetTranslatedString(@"Exception_UnknowErrorDuringAuthentication"); + /// /// Action {0} is not implemented in request processor /// public static string Exception_UnsupportedAction => Resources.GetTranslatedString(@"Exception_UnsupportedAction"); + /// /// This provider is not supported. /// public static string Exception_UnsupportedProvider => Resources.GetTranslatedString(@"Exception_UnsupportedProvider"); + /// /// This operation is not supported for {0} /// public static string Exception_UnsupportedSynchronizerOperation => Resources.GetTranslatedString(@"Exception_UnsupportedSynchronizerOperation"); + /// /// User canceled system folder config dialog. /// public static string Exception_UserCancelSystemFolderSetupDialog => Resources.GetTranslatedString(@"Exception_UserCancelSystemFolderSetupDialog"); + /// /// Couldn't setup account folders. /// public static string Exception_InboxNotAvailable => Resources.GetTranslatedString(@"Exception_InboxNotAvailable"); + /// /// Files /// public static string Files => Resources.GetTranslatedString(@"Files"); + /// /// All /// public static string FilteringOption_All => Resources.GetTranslatedString(@"FilteringOption_All"); + /// /// Flagged /// public static string FilteringOption_Flagged => Resources.GetTranslatedString(@"FilteringOption_Flagged"); + /// /// Unread /// public static string FilteringOption_Unread => Resources.GetTranslatedString(@"FilteringOption_Unread"); + /// /// Has files /// public static string FilteringOption_Files => Resources.GetTranslatedString(@"FilteringOption_Files"); + /// /// Focused /// public static string Focused => Resources.GetTranslatedString(@"Focused"); + /// /// Create sub folder /// public static string FolderOperation_CreateSubFolder => Resources.GetTranslatedString(@"FolderOperation_CreateSubFolder"); + /// /// Delete /// public static string FolderOperation_Delete => Resources.GetTranslatedString(@"FolderOperation_Delete"); + /// /// Don't sync this folder /// public static string FolderOperation_DontSync => Resources.GetTranslatedString(@"FolderOperation_DontSync"); + /// /// Empty this folder /// public static string FolderOperation_Empty => Resources.GetTranslatedString(@"FolderOperation_Empty"); + /// /// Mark all as read /// public static string FolderOperation_MarkAllAsRead => Resources.GetTranslatedString(@"FolderOperation_MarkAllAsRead"); + /// /// Move /// public static string FolderOperation_Move => Resources.GetTranslatedString(@"FolderOperation_Move"); + /// /// Move to {0} /// public static string DragMoveToFolderCaption => Resources.GetTranslatedString(@"DragMoveToFolderCaption"); + /// /// None /// public static string FolderOperation_None => Resources.GetTranslatedString(@"FolderOperation_None"); + /// /// Pin /// public static string FolderOperation_Pin => Resources.GetTranslatedString(@"FolderOperation_Pin"); + /// /// Rename /// public static string FolderOperation_Rename => Resources.GetTranslatedString(@"FolderOperation_Rename"); + /// /// Unpin /// public static string FolderOperation_Unpin => Resources.GetTranslatedString(@"FolderOperation_Unpin"); + /// /// Archive /// public static string HoverActionOption_Archive => Resources.GetTranslatedString(@"HoverActionOption_Archive"); + /// /// Delete /// public static string HoverActionOption_Delete => Resources.GetTranslatedString(@"HoverActionOption_Delete"); + /// /// Move to Junk /// public static string HoverActionOption_MoveJunk => Resources.GetTranslatedString(@"HoverActionOption_MoveJunk"); + /// /// Flag / Unflag /// public static string HoverActionOption_ToggleFlag => Resources.GetTranslatedString(@"HoverActionOption_ToggleFlag"); + /// /// Read / Unread /// public static string HoverActionOption_ToggleRead => Resources.GetTranslatedString(@"HoverActionOption_ToggleRead"); + /// /// Inbox /// public static string MergedAccountCommonFolderInbox => Resources.GetTranslatedString(@"MergedAccountCommonFolderInbox"); + /// /// Sent /// public static string MergedAccountCommonFolderSent => Resources.GetTranslatedString(@"MergedAccountCommonFolderSent"); + /// /// Draft /// public static string MergedAccountCommonFolderDraft => Resources.GetTranslatedString(@"MergedAccountCommonFolderDraft"); + /// /// Junk /// public static string MergedAccountCommonFolderJunk => Resources.GetTranslatedString(@"MergedAccountCommonFolderJunk"); + /// /// Deleted /// public static string MergedAccountCommonFolderTrash => Resources.GetTranslatedString(@"MergedAccountCommonFolderTrash"); + /// /// Archive /// public static string MergedAccountCommonFolderArchive => Resources.GetTranslatedString(@"MergedAccountCommonFolderArchive"); + /// /// Account type /// public static string IMAPSetupDialog_AccountType => Resources.GetTranslatedString(@"IMAPSetupDialog_AccountType"); + /// /// Display Name /// public static string IMAPSetupDialog_DisplayName => Resources.GetTranslatedString(@"IMAPSetupDialog_DisplayName"); + /// /// eg. John Doe /// public static string IMAPSetupDialog_DisplayNamePlaceholder => Resources.GetTranslatedString(@"IMAPSetupDialog_DisplayNamePlaceholder"); + /// /// Incoming mail server /// public static string IMAPSetupDialog_IncomingMailServer => Resources.GetTranslatedString(@"IMAPSetupDialog_IncomingMailServer"); + /// /// Port /// public static string IMAPSetupDialog_IncomingMailServerPort => Resources.GetTranslatedString(@"IMAPSetupDialog_IncomingMailServerPort"); + /// /// Email address /// public static string IMAPSetupDialog_MailAddress => Resources.GetTranslatedString(@"IMAPSetupDialog_MailAddress"); + /// /// someone@example.com /// public static string IMAPSetupDialog_MailAddressPlaceholder => Resources.GetTranslatedString(@"IMAPSetupDialog_MailAddressPlaceholder"); + /// /// Outgoing (SMTP) mail server /// public static string IMAPSetupDialog_OutgoingMailServer => Resources.GetTranslatedString(@"IMAPSetupDialog_OutgoingMailServer"); + /// /// Outgoing server password /// public static string IMAPSetupDialog_OutgoingMailServerPassword => Resources.GetTranslatedString(@"IMAPSetupDialog_OutgoingMailServerPassword"); + /// /// Port /// public static string IMAPSetupDialog_OutgoingMailServerPort => Resources.GetTranslatedString(@"IMAPSetupDialog_OutgoingMailServerPort"); + /// /// Outgoing server requires authentication /// public static string IMAPSetupDialog_OutgoingMailServerRequireAuthentication => Resources.GetTranslatedString(@"IMAPSetupDialog_OutgoingMailServerRequireAuthentication"); + /// /// Outgoing server user name /// public static string IMAPSetupDialog_OutgoingMailServerUsername => Resources.GetTranslatedString(@"IMAPSetupDialog_OutgoingMailServerUsername"); + /// /// Password /// public static string IMAPSetupDialog_Password => Resources.GetTranslatedString(@"IMAPSetupDialog_Password"); + /// /// Require SSL for incoming email /// public static string IMAPSetupDialog_RequireSSLForIncomingMail => Resources.GetTranslatedString(@"IMAPSetupDialog_RequireSSLForIncomingMail"); + /// /// Require SSL for outgoing email /// public static string IMAPSetupDialog_RequireSSLForOutgoingMail => Resources.GetTranslatedString(@"IMAPSetupDialog_RequireSSLForOutgoingMail"); + /// /// Advanced IMAP Configuration /// public static string IMAPSetupDialog_Title => Resources.GetTranslatedString(@"IMAPSetupDialog_Title"); + /// /// Use the same username and password for sending email /// public static string IMAPSetupDialog_UseSameConfig => Resources.GetTranslatedString(@"IMAPSetupDialog_UseSameConfig"); + /// /// Username /// public static string IMAPSetupDialog_Username => Resources.GetTranslatedString(@"IMAPSetupDialog_Username"); + /// /// johndoe, johndoe@fabrikam.com, domain/johndoe /// public static string IMAPSetupDialog_UsernamePlaceholder => Resources.GetTranslatedString(@"IMAPSetupDialog_UsernamePlaceholder"); + /// /// Image rendering is disabled for this message. /// public static string ImageRenderingDisabled => Resources.GetTranslatedString(@"ImageRenderingDisabled"); + /// /// Enable /// public static string InfoBarAction_Enable => Resources.GetTranslatedString(@"InfoBarAction_Enable"); + /// /// This folder is disabled for synchronization. /// public static string InfoBarMessage_SynchronizationDisabledFolder => Resources.GetTranslatedString(@"InfoBarMessage_SynchronizationDisabledFolder"); + /// /// Disabled Folder /// public static string InfoBarTitle_SynchronizationDisabledFolder => Resources.GetTranslatedString(@"InfoBarTitle_SynchronizationDisabledFolder"); + /// /// Error /// public static string GeneralTitle_Error => Resources.GetTranslatedString(@"GeneralTitle_Error"); + /// /// Warning /// public static string GeneralTitle_Warning => Resources.GetTranslatedString(@"GeneralTitle_Warning"); + /// /// Information /// public static string GeneralTitle_Info => Resources.GetTranslatedString(@"GeneralTitle_Info"); + /// /// {0} is created /// public static string Info_AccountCreatedMessage => Resources.GetTranslatedString(@"Info_AccountCreatedMessage"); + /// /// Account Creation /// public static string Info_AccountCreatedTitle => Resources.GetTranslatedString(@"Info_AccountCreatedTitle"); + /// /// Account Creation Failed /// public static string Info_AccountCreationFailedTitle => Resources.GetTranslatedString(@"Info_AccountCreationFailedTitle"); + /// /// {0} is successfuly deleted. /// public static string Info_AccountDeletedMessage => Resources.GetTranslatedString(@"Info_AccountDeletedMessage"); + /// /// Account Deleted /// public static string Info_AccountDeletedTitle => Resources.GetTranslatedString(@"Info_AccountDeletedTitle"); + /// /// Failed /// public static string Info_AccountIssueFixFailedTitle => Resources.GetTranslatedString(@"Info_AccountIssueFixFailedTitle"); + /// /// Fixed all account issues. /// public static string Info_AccountIssueFixSuccessMessage => Resources.GetTranslatedString(@"Info_AccountIssueFixSuccessMessage"); + /// /// Success /// public static string Info_AccountIssueFixSuccessTitle => Resources.GetTranslatedString(@"Info_AccountIssueFixSuccessTitle"); + /// /// Can't open this attachment. /// public static string Info_AttachmentOpenFailedMessage => Resources.GetTranslatedString(@"Info_AttachmentOpenFailedMessage"); + /// /// Failed /// public static string Info_AttachmentOpenFailedTitle => Resources.GetTranslatedString(@"Info_AttachmentOpenFailedTitle"); + /// /// Can't save this attachment. /// public static string Info_AttachmentSaveFailedMessage => Resources.GetTranslatedString(@"Info_AttachmentSaveFailedMessage"); + /// /// Failed /// public static string Info_AttachmentSaveFailedTitle => Resources.GetTranslatedString(@"Info_AttachmentSaveFailedTitle"); + /// /// Attachment is saved. /// public static string Info_AttachmentSaveSuccessMessage => Resources.GetTranslatedString(@"Info_AttachmentSaveSuccessMessage"); + /// /// Attachment Saved /// public static string Info_AttachmentSaveSuccessTitle => Resources.GetTranslatedString(@"Info_AttachmentSaveSuccessTitle"); + /// /// Background execution for the app is denied. This may affect background synchronization and live notifications. /// public static string Info_BackgroundExecutionDeniedMessage => Resources.GetTranslatedString(@"Info_BackgroundExecutionDeniedMessage"); + /// /// Denied Background Execution /// public static string Info_BackgroundExecutionDeniedTitle => Resources.GetTranslatedString(@"Info_BackgroundExecutionDeniedTitle"); + /// /// Unknown exception occurred when registering background synchronizer. /// public static string Info_BackgroundExecutionUnknownErrorMessage => Resources.GetTranslatedString(@"Info_BackgroundExecutionUnknownErrorMessage"); + /// /// Background Execution Failure /// public static string Info_BackgroundExecutionUnknownErrorTitle => Resources.GetTranslatedString(@"Info_BackgroundExecutionUnknownErrorTitle"); + /// /// Couldn't locate the MIME file. Synchronizing may help. /// public static string Info_ComposerMissingMIMEMessage => Resources.GetTranslatedString(@"Info_ComposerMissingMIMEMessage"); + /// /// Failed /// public static string Info_ComposerMissingMIMETitle => Resources.GetTranslatedString(@"Info_ComposerMissingMIMETitle"); + /// /// This contact is already in the recipient list. /// public static string Info_ContactExistsMessage => Resources.GetTranslatedString(@"Info_ContactExistsMessage"); + /// /// Contact Exists /// public static string Info_ContactExistsTitle => Resources.GetTranslatedString(@"Info_ContactExistsTitle"); + /// /// Draft folder is missing for this account. Please check your account settings. /// public static string Info_DraftFolderMissingMessage => Resources.GetTranslatedString(@"Info_DraftFolderMissingMessage"); + /// /// Missing Draft Folder /// public static string Info_DraftFolderMissingTitle => Resources.GetTranslatedString(@"Info_DraftFolderMissingTitle"); + /// /// Failed to launch file /// public static string Info_FileLaunchFailedTitle => Resources.GetTranslatedString(@"Info_FileLaunchFailedTitle"); + /// /// '{0}' is not a valid e-mail address. /// public static string Info_InvalidAddressMessage => Resources.GetTranslatedString(@"Info_InvalidAddressMessage"); + /// /// Invalid Address /// public static string Info_InvalidAddressTitle => Resources.GetTranslatedString(@"Info_InvalidAddressTitle"); + /// /// You can't move selected mails to this folder. /// public static string Info_InvalidMoveTargetMessage => Resources.GetTranslatedString(@"Info_InvalidMoveTargetMessage"); + /// /// Invalid Move Target /// public static string Info_InvalidMoveTargetTitle => Resources.GetTranslatedString(@"Info_InvalidMoveTargetTitle"); + /// /// There are no logs to share. /// public static string Info_LogsNotFoundMessage => Resources.GetTranslatedString(@"Info_LogsNotFoundMessage"); + /// /// Logs Not Found /// public static string Info_LogsNotFoundTitle => Resources.GetTranslatedString(@"Info_LogsNotFoundTitle"); + /// /// {0} is saved to selected folder. /// public static string Info_LogsSavedMessage => Resources.GetTranslatedString(@"Info_LogsSavedMessage"); + /// /// Saved /// public static string Info_LogsSavedTitle => Resources.GetTranslatedString(@"Info_LogsSavedTitle"); + /// /// This mail is corrupted or can't be opened. {0} /// public static string Info_MailRenderingFailedMessage => Resources.GetTranslatedString(@"Info_MailRenderingFailedMessage"); + /// /// Render Failed /// public static string Info_MailRenderingFailedTitle => Resources.GetTranslatedString(@"Info_MailRenderingFailedTitle"); + /// /// This message is corrupted. /// public static string Info_MessageCorruptedMessage => Resources.GetTranslatedString(@"Info_MessageCorruptedMessage"); + /// /// Error /// public static string Info_MessageCorruptedTitle => Resources.GetTranslatedString(@"Info_MessageCorruptedTitle"); + /// /// {0} doesn't exist for this account. /// public static string Info_MissingFolderMessage => Resources.GetTranslatedString(@"Info_MissingFolderMessage"); + /// /// Missing Folder /// public static string Info_MissingFolderTitle => Resources.GetTranslatedString(@"Info_MissingFolderTitle"); + /// /// Success /// public static string Info_PDFSaveSuccessTitle => Resources.GetTranslatedString(@"Info_PDFSaveSuccessTitle"); + /// /// Failed to save PDF file /// public static string Info_PDFSaveFailedTitle => Resources.GetTranslatedString(@"Info_PDFSaveFailedTitle"); + /// /// PDF file is saved to {0} /// public static string Info_PDFSaveSuccessMessage => Resources.GetTranslatedString(@"Info_PDFSaveSuccessMessage"); + /// /// Looks like this product has already been purchased before. /// public static string Info_PurchaseExistsMessage => Resources.GetTranslatedString(@"Info_PurchaseExistsMessage"); + /// /// Existing Product /// public static string Info_PurchaseExistsTitle => Resources.GetTranslatedString(@"Info_PurchaseExistsTitle"); + /// /// Thank You /// public static string Info_PurchaseThankYouMessage => Resources.GetTranslatedString(@"Info_PurchaseThankYouMessage"); + /// /// Purchase successful /// public static string Info_PurchaseThankYouTitle => Resources.GetTranslatedString(@"Info_PurchaseThankYouTitle"); + /// /// Failed to Create Requests /// public static string Info_RequestCreationFailedTitle => Resources.GetTranslatedString(@"Info_RequestCreationFailedTitle"); + /// /// There was a network issue with your review. /// public static string Info_ReviewNetworkErrorMessage => Resources.GetTranslatedString(@"Info_ReviewNetworkErrorMessage"); + /// /// Network Issue /// public static string Info_ReviewNetworkErrorTitle => Resources.GetTranslatedString(@"Info_ReviewNetworkErrorTitle"); + /// /// All feedbacks are appreciated. Thank you for the review! /// public static string Info_ReviewNewMessage => Resources.GetTranslatedString(@"Info_ReviewNewMessage"); + /// /// Thank you /// public static string Info_ReviewSuccessTitle => Resources.GetTranslatedString(@"Info_ReviewSuccessTitle"); + /// /// There was an unknown issue with your review. ({0}) /// public static string Info_ReviewUnknownErrorMessage => Resources.GetTranslatedString(@"Info_ReviewUnknownErrorMessage"); + /// /// Unknown Error /// public static string Info_ReviewUnknownErrorTitle => Resources.GetTranslatedString(@"Info_ReviewUnknownErrorTitle"); + /// /// Thank you for the updated review. /// public static string Info_ReviewUpdatedMessage => Resources.GetTranslatedString(@"Info_ReviewUpdatedMessage"); + /// /// Disabled signature for this account /// public static string Info_SignatureDisabledMessage => Resources.GetTranslatedString(@"Info_SignatureDisabledMessage"); + /// /// Success /// public static string Info_SignatureDisabledTitle => Resources.GetTranslatedString(@"Info_SignatureDisabledTitle"); + /// /// New signature is saved /// public static string Info_SignatureSavedMessage => Resources.GetTranslatedString(@"Info_SignatureSavedMessage"); + /// /// Success /// public static string Info_SignatureSavedTitle => Resources.GetTranslatedString(@"Info_SignatureSavedTitle"); + /// /// Canceled /// public static string Info_SyncCanceledMessage => Resources.GetTranslatedString(@"Info_SyncCanceledMessage"); + /// /// Synchronization /// public static string Info_SyncCanceledTitle => Resources.GetTranslatedString(@"Info_SyncCanceledTitle"); + /// /// Synchronization Failed /// public static string Info_SyncFailedTitle => Resources.GetTranslatedString(@"Info_SyncFailedTitle"); + /// /// This functionality is not implemented yet. /// public static string Info_UnsupportedFunctionalityDescription => Resources.GetTranslatedString(@"Info_UnsupportedFunctionalityDescription"); + /// /// Unsupported /// public static string Info_UnsupportedFunctionalityTitle => Resources.GetTranslatedString(@"Info_UnsupportedFunctionalityTitle"); + /// /// Invalid Unsubscribe Uri /// public static string Info_UnsubscribeLinkInvalidTitle => Resources.GetTranslatedString(@"Info_UnsubscribeLinkInvalidTitle"); + /// /// This unsubscribe link is invalid. Failed to unsubscribe from the list. /// public static string Info_UnsubscribeLinkInvalidMessage => Resources.GetTranslatedString(@"Info_UnsubscribeLinkInvalidMessage"); + /// /// Successfully unsubscribed from {0}. /// public static string Info_UnsubscribeSuccessMessage => Resources.GetTranslatedString(@"Info_UnsubscribeSuccessMessage"); + /// /// Failed to unsubscribe /// public static string Info_UnsubscribeErrorMessage => Resources.GetTranslatedString(@"Info_UnsubscribeErrorMessage"); + /// /// Authentication method /// public static string ImapAdvancedSetupDialog_AuthenticationMethod => Resources.GetTranslatedString(@"ImapAdvancedSetupDialog_AuthenticationMethod"); + /// /// Connection security /// public static string ImapAdvancedSetupDialog_ConnectionSecurity => Resources.GetTranslatedString(@"ImapAdvancedSetupDialog_ConnectionSecurity"); + /// /// Auto /// public static string ImapAuthenticationMethod_Auto => Resources.GetTranslatedString(@"ImapAuthenticationMethod_Auto"); + /// /// CRAM-MD5 /// public static string ImapAuthenticationMethod_CramMD5 => Resources.GetTranslatedString(@"ImapAuthenticationMethod_CramMD5"); + /// /// DIGEST-MD5 /// public static string ImapAuthenticationMethod_DigestMD5 => Resources.GetTranslatedString(@"ImapAuthenticationMethod_DigestMD5"); + /// /// No authentication /// public static string ImapAuthenticationMethod_None => Resources.GetTranslatedString(@"ImapAuthenticationMethod_None"); + /// /// Normal password /// public static string ImapAuthenticationMethod_Plain => Resources.GetTranslatedString(@"ImapAuthenticationMethod_Plain"); + /// /// Encrypted password /// public static string ImapAuthenticationMethod_EncryptedPassword => Resources.GetTranslatedString(@"ImapAuthenticationMethod_EncryptedPassword"); + /// /// NTLM /// public static string ImapAuthenticationMethod_Ntlm => Resources.GetTranslatedString(@"ImapAuthenticationMethod_Ntlm"); + /// /// None /// public static string ImapConnectionSecurity_None => Resources.GetTranslatedString(@"ImapConnectionSecurity_None"); + /// /// SSL/TLS /// public static string ImapConnectionSecurity_SslTls => Resources.GetTranslatedString(@"ImapConnectionSecurity_SslTls"); + /// /// STARTTLS /// public static string ImapConnectionSecurity_StartTls => Resources.GetTranslatedString(@"ImapConnectionSecurity_StartTls"); + /// /// Auto /// public static string ImapConnectionSecurity_Auto => Resources.GetTranslatedString(@"ImapConnectionSecurity_Auto"); + /// /// Justify /// public static string Justify => Resources.GetTranslatedString(@"Justify"); + /// /// Left /// public static string Left => Resources.GetTranslatedString(@"Left"); + /// /// Link /// public static string Link => Resources.GetTranslatedString(@"Link"); + /// /// you must have at least 2 accounts to create link link will be removed on save /// public static string LinkedAccountsCreatePolicyMessage => Resources.GetTranslatedString(@"LinkedAccountsCreatePolicyMessage"); + /// /// Linked Accounts /// public static string LinkedAccountsTitle => Resources.GetTranslatedString(@"LinkedAccountsTitle"); + /// /// Always Move to Focused /// public static string MailOperation_AlwaysMoveFocused => Resources.GetTranslatedString(@"MailOperation_AlwaysMoveFocused"); + /// /// Always Move to Other /// public static string MailOperation_AlwaysMoveOther => Resources.GetTranslatedString(@"MailOperation_AlwaysMoveOther"); + /// /// Archive /// public static string MailOperation_Archive => Resources.GetTranslatedString(@"MailOperation_Archive"); + /// /// Clear flag /// public static string MailOperation_ClearFlag => Resources.GetTranslatedString(@"MailOperation_ClearFlag"); + /// /// Dark /// public static string MailOperation_DarkEditor => Resources.GetTranslatedString(@"MailOperation_DarkEditor"); + /// /// Delete /// public static string MailOperation_Delete => Resources.GetTranslatedString(@"MailOperation_Delete"); + /// /// Export to PDF /// public static string MailOperation_ExportPDF => Resources.GetTranslatedString(@"MailOperation_ExportPDF"); + /// /// Find /// public static string MailOperation_Find => Resources.GetTranslatedString(@"MailOperation_Find"); + /// /// Forward /// public static string MailOperation_Forward => Resources.GetTranslatedString(@"MailOperation_Forward"); + /// /// Ignore /// public static string MailOperation_Ignore => Resources.GetTranslatedString(@"MailOperation_Ignore"); + /// /// Light /// public static string MailOperation_LightEditor => Resources.GetTranslatedString(@"MailOperation_LightEditor"); + /// /// Mark as junk /// public static string MailOperation_MarkAsJunk => Resources.GetTranslatedString(@"MailOperation_MarkAsJunk"); + /// /// Mark as read /// public static string MailOperation_MarkAsRead => Resources.GetTranslatedString(@"MailOperation_MarkAsRead"); + /// /// Mark as unread /// public static string MailOperation_MarkAsUnread => Resources.GetTranslatedString(@"MailOperation_MarkAsUnread"); + /// /// Mark as Not Junk /// public static string MailOperation_MarkNotJunk => Resources.GetTranslatedString(@"MailOperation_MarkNotJunk"); + /// /// Move /// public static string MailOperation_Move => Resources.GetTranslatedString(@"MailOperation_Move"); + /// /// Move to Focused /// public static string MailOperation_MoveFocused => Resources.GetTranslatedString(@"MailOperation_MoveFocused"); + /// /// Move to Junk /// public static string MailOperation_MoveJunk => Resources.GetTranslatedString(@"MailOperation_MoveJunk"); + /// /// Move to Other /// public static string MailOperation_MoveOther => Resources.GetTranslatedString(@"MailOperation_MoveOther"); + /// /// Navigate /// public static string MailOperation_Navigate => Resources.GetTranslatedString(@"MailOperation_Navigate"); + /// /// Print /// public static string MailOperation_Print => Resources.GetTranslatedString(@"MailOperation_Print"); + /// /// Reply /// public static string MailOperation_Reply => Resources.GetTranslatedString(@"MailOperation_Reply"); + /// /// Reply all /// public static string MailOperation_ReplyAll => Resources.GetTranslatedString(@"MailOperation_ReplyAll"); + /// /// Save As /// public static string MailOperation_SaveAs => Resources.GetTranslatedString(@"MailOperation_SaveAs"); + /// /// Set flag /// public static string MailOperation_SetFlag => Resources.GetTranslatedString(@"MailOperation_SetFlag"); + /// /// Unarchive /// public static string MailOperation_Unarchive => Resources.GetTranslatedString(@"MailOperation_Unarchive"); + /// /// Zoom /// public static string MailOperation_Zoom => Resources.GetTranslatedString(@"MailOperation_Zoom"); + /// /// {0} item(s) selected /// public static string MailsSelected => Resources.GetTranslatedString(@"MailsSelected"); + /// /// Mark as flagged/unflagged /// public static string MarkFlagUnflag => Resources.GetTranslatedString(@"MarkFlagUnflag"); + /// /// Mark as read/unread /// public static string MarkReadUnread => Resources.GetTranslatedString(@"MarkReadUnread"); + /// /// Manage Accounts /// public static string MenuManageAccounts => Resources.GetTranslatedString(@"MenuManageAccounts"); + /// /// New Mail /// public static string MenuNewMail => Resources.GetTranslatedString(@"MenuNewMail"); + /// /// accounts /// public static string MenuMergedAccountItemAccountsSuffix => Resources.GetTranslatedString(@"MenuMergedAccountItemAccountsSuffix"); + /// /// Rate Wino /// public static string MenuRate => Resources.GetTranslatedString(@"MenuRate"); + /// /// Settings /// public static string MenuSettings => Resources.GetTranslatedString(@"MenuSettings"); + /// /// Available Accounts /// public static string MergedAccountsAvailableAccountsTitle => Resources.GetTranslatedString(@"MergedAccountsAvailableAccountsTitle"); + /// /// More /// public static string More => Resources.GetTranslatedString(@"More"); + /// /// {0} is not a valid folder for this mail. /// public static string MoveMailDialog_InvalidFolderMessage => Resources.GetTranslatedString(@"MoveMailDialog_InvalidFolderMessage"); + /// /// Pick a folder /// public static string MoveMailDialog_Title => Resources.GetTranslatedString(@"MoveMailDialog_Title"); + /// /// Account Name /// public static string NewAccountDialog_AccountName => Resources.GetTranslatedString(@"NewAccountDialog_AccountName"); + /// /// Personal /// public static string NewAccountDialog_AccountNameDefaultValue => Resources.GetTranslatedString(@"NewAccountDialog_AccountNameDefaultValue"); + /// /// eg. Personal Mail /// public static string NewAccountDialog_AccountNamePlaceholder => Resources.GetTranslatedString(@"NewAccountDialog_AccountNamePlaceholder"); + /// /// Add New Account /// public static string NewAccountDialog_Title => Resources.GetTranslatedString(@"NewAccountDialog_Title"); + /// /// No message selected /// public static string NoMailSelected => Resources.GetTranslatedString(@"NoMailSelected"); + /// /// No messages match your search criteria /// public static string NoMessageCrieteria => Resources.GetTranslatedString(@"NoMessageCrieteria"); + /// /// This folder is empty /// public static string NoMessageEmptyFolder => Resources.GetTranslatedString(@"NoMessageEmptyFolder"); + /// /// You have {0} new mails /// public static string Notifications_MultipleNotificationsMessage => Resources.GetTranslatedString(@"Notifications_MultipleNotificationsMessage"); + /// /// New Mails /// public static string Notifications_MultipleNotificationsTitle => Resources.GetTranslatedString(@"Notifications_MultipleNotificationsTitle"); + /// /// Checkout new version {0} /// public static string Notifications_WinoUpdatedMessage => Resources.GetTranslatedString(@"Notifications_WinoUpdatedMessage"); + /// /// Wino Mail has been updated. /// public static string Notifications_WinoUpdatedTitle => Resources.GetTranslatedString(@"Notifications_WinoUpdatedTitle"); + /// /// Other /// public static string Other => Resources.GetTranslatedString(@"Other"); + /// /// Default /// public static string PaneLengthOption_Default => Resources.GetTranslatedString(@"PaneLengthOption_Default"); + /// /// Extra Large /// public static string PaneLengthOption_ExtraLarge => Resources.GetTranslatedString(@"PaneLengthOption_ExtraLarge"); + /// /// Large /// public static string PaneLengthOption_Large => Resources.GetTranslatedString(@"PaneLengthOption_Large"); + /// /// Medium /// public static string PaneLengthOption_Medium => Resources.GetTranslatedString(@"PaneLengthOption_Medium"); + /// /// Micro /// public static string PaneLengthOption_Micro => Resources.GetTranslatedString(@"PaneLengthOption_Micro"); + /// /// Small /// public static string PaneLengthOption_Small => Resources.GetTranslatedString(@"PaneLengthOption_Small"); + /// /// Photos /// public static string Photos => Resources.GetTranslatedString(@"Photos"); + /// /// Preparing folders /// public static string PreparingFoldersMessage => Resources.GetTranslatedString(@"PreparingFoldersMessage"); + /// /// Google Account /// public static string ProviderDetail_Gmail_Description => Resources.GetTranslatedString(@"ProviderDetail_Gmail_Description"); + /// /// Custom IMAP/SMTP server /// public static string ProviderDetail_IMAP_Description => Resources.GetTranslatedString(@"ProviderDetail_IMAP_Description"); + /// /// IMAP Server /// public static string ProviderDetail_IMAP_Title => Resources.GetTranslatedString(@"ProviderDetail_IMAP_Title"); + /// /// Results /// public static string Results => Resources.GetTranslatedString(@"Results"); + /// /// Right /// public static string Right => Resources.GetTranslatedString(@"Right"); + /// /// up to date /// public static string SynchronizationFolderReport_Success => Resources.GetTranslatedString(@"SynchronizationFolderReport_Success"); + /// /// synchronization is failed /// public static string SynchronizationFolderReport_Failed => Resources.GetTranslatedString(@"SynchronizationFolderReport_Failed"); + /// /// Search /// public static string SearchBarPlaceholder => Resources.GetTranslatedString(@"SearchBarPlaceholder"); + /// /// Searching in /// public static string SearchingIn => Resources.GetTranslatedString(@"SearchingIn"); + /// /// Results /// public static string SearchPivotName => Resources.GetTranslatedString(@"SearchPivotName"); + /// /// Go to issue tracker GitHub repository. /// public static string SettingsAboutGithub_Description => Resources.GetTranslatedString(@"SettingsAboutGithub_Description"); + /// /// GitHub /// public static string SettingsAboutGithub_Title => Resources.GetTranslatedString(@"SettingsAboutGithub_Title"); + /// /// Append messages to Sent folder /// public static string SettingsAccountManagementAppendMessage_Title => Resources.GetTranslatedString(@"SettingsAccountManagementAppendMessage_Title"); + /// /// Create a copy of the message in Sent folder after the draft is sent. Enable this if you don't see your mails after you sent them in Sent folder. /// public static string SettingsAccountManagementAppendMessage_Description => Resources.GetTranslatedString(@"SettingsAccountManagementAppendMessage_Description"); + /// /// Edit Linked Inbox /// public static string SettingsEditLinkedInbox_Title => Resources.GetTranslatedString(@"SettingsEditLinkedInbox_Title"); + /// /// Add / remove accounts, rename or break the link between accounts. /// public static string SettingsEditLinkedInbox_Description => Resources.GetTranslatedString(@"SettingsEditLinkedInbox_Description"); + /// /// Version /// public static string SettingsAboutVersion => Resources.GetTranslatedString(@"SettingsAboutVersion"); + /// /// Lightweight mail client for Windows device families. /// public static string SettingsAboutWinoDescription => Resources.GetTranslatedString(@"SettingsAboutWinoDescription"); + /// /// Learn more about Wino. /// public static string SettingsAbout_Description => Resources.GetTranslatedString(@"SettingsAbout_Description"); + /// /// About /// public static string SettingsAbout_Title => Resources.GetTranslatedString(@"SettingsAbout_Title"); + /// /// Change application's accent color /// public static string SettingsAccentColor_Description => Resources.GetTranslatedString(@"SettingsAccentColor_Description"); + /// /// Accent Color /// public static string SettingsAccentColor_Title => Resources.GetTranslatedString(@"SettingsAccentColor_Title"); + /// /// Use my Windows accent color /// public static string SettingsAccentColor_UseWindowsAccentColor => Resources.GetTranslatedString(@"SettingsAccentColor_UseWindowsAccentColor"); + /// /// Change the name of the account. /// public static string SettingsAccountName_Description => Resources.GetTranslatedString(@"SettingsAccountName_Description"); + /// /// Account Name /// public static string SettingsAccountName_Title => Resources.GetTranslatedString(@"SettingsAccountName_Title"); + /// /// Personalize Wino with different custom application themes for your like. /// public static string SettingsApplicationTheme_Description => Resources.GetTranslatedString(@"SettingsApplicationTheme_Description"); + /// /// Application Theme /// public static string SettingsApplicationTheme_Title => Resources.GetTranslatedString(@"SettingsApplicationTheme_Title"); + /// /// Select a theme from Wino's own collection for your taste or apply your own themes. /// public static string SettingsAvailableThemes_Description => Resources.GetTranslatedString(@"SettingsAvailableThemes_Description"); + /// /// Available Themes /// public static string SettingsAvailableThemes_Title => Resources.GetTranslatedString(@"SettingsAvailableThemes_Title"); + /// /// Auto select next item /// public static string SettingsAutoSelectNextItem_Title => Resources.GetTranslatedString(@"SettingsAutoSelectNextItem_Title"); + /// /// Select the next item after you delete or move a mail. /// public static string SettingsAutoSelectNextItem_Description => Resources.GetTranslatedString(@"SettingsAutoSelectNextItem_Description"); + /// /// Create your own custom theme with custom wallpaper and accent color. /// public static string SettingsCustomTheme_Description => Resources.GetTranslatedString(@"SettingsCustomTheme_Description"); + /// /// Custom Theme /// public static string SettingsCustomTheme_Title => Resources.GetTranslatedString(@"SettingsCustomTheme_Title"); + /// /// Configure System Folders /// public static string SettingsConfigureSpecialFolders_Title => Resources.GetTranslatedString(@"SettingsConfigureSpecialFolders_Title"); + /// /// Set folders with special functions. Folders such as Archive, Inbox, and Drafts are essential for Wino to function properly. /// public static string SettingsConfigureSpecialFolders_Description => Resources.GetTranslatedString(@"SettingsConfigureSpecialFolders_Description"); + /// /// Configure /// public static string SettingConfigureSpecialFolders_Button => Resources.GetTranslatedString(@"SettingConfigureSpecialFolders_Button"); + /// /// Failed to setup system folders /// public static string Error_FailedToSetupSystemFolders_Title => Resources.GetTranslatedString(@"Error_FailedToSetupSystemFolders_Title"); + /// /// Delete all e-mails and credentials associated with this account. /// public static string SettingsDeleteAccount_Description => Resources.GetTranslatedString(@"SettingsDeleteAccount_Description"); + /// /// Delete this account /// public static string SettingsDeleteAccount_Title => Resources.GetTranslatedString(@"SettingsDeleteAccount_Title"); + /// /// Should Wino ask you for comfirmation every time you try to permanently delete a mail using Shift + Del keys? /// public static string SettingsDeleteProtection_Description => Resources.GetTranslatedString(@"SettingsDeleteProtection_Description"); + /// /// Permanent Delete Protection /// public static string SettingsDeleteProtection_Title => Resources.GetTranslatedString(@"SettingsDeleteProtection_Title"); + /// /// For developers /// public static string SettingsDiagnostics_Description => Resources.GetTranslatedString(@"SettingsDiagnostics_Description"); + /// /// Diagnostics /// public static string SettingsDiagnostics_Title => Resources.GetTranslatedString(@"SettingsDiagnostics_Title"); + /// /// Get regular development updates, join roadmap discussions and provide feedback. /// public static string SettingsDiscord_Description => Resources.GetTranslatedString(@"SettingsDiscord_Description"); + /// /// Discord Channel /// public static string SettingsDiscord_Title => Resources.GetTranslatedString(@"SettingsDiscord_Title"); + /// /// Element theme selection is disabled when application theme is selected other than Default. /// public static string SettingsElementThemeSelectionDisabled => Resources.GetTranslatedString(@"SettingsElementThemeSelectionDisabled"); + /// /// Select a Windows theme for Wino /// public static string SettingsElementTheme_Description => Resources.GetTranslatedString(@"SettingsElementTheme_Description"); + /// /// Element Theme /// public static string SettingsElementTheme_Title => Resources.GetTranslatedString(@"SettingsElementTheme_Title"); + /// /// Enable hover actions /// public static string SettingsEnableHoverActions_Title => Resources.GetTranslatedString(@"SettingsEnableHoverActions_Title"); + /// /// Enable this to provide details about IMAP connectivity issuses you had during IMAP server setup. /// public static string SettingsEnableIMAPLogs_Description => Resources.GetTranslatedString(@"SettingsEnableIMAPLogs_Description"); + /// /// Enable IMAP Protocol Logs /// public static string SettingsEnableIMAPLogs_Title => Resources.GetTranslatedString(@"SettingsEnableIMAPLogs_Title"); + /// /// I might need logs for crashes to diagnose issues you have opened in GitHub. None of the logs will expose your credentials or sensetive information to public. /// public static string SettingsEnableLogs_Description => Resources.GetTranslatedString(@"SettingsEnableLogs_Description"); + /// /// Enable Logs /// public static string SettingsEnableLogs_Title => Resources.GetTranslatedString(@"SettingsEnableLogs_Title"); + /// /// Enable Signature /// public static string SettingsEnableSignature => Resources.GetTranslatedString(@"SettingsEnableSignature"); + /// /// Set whether Wino should expand this account's folders on startup. /// public static string SettingsExpandOnStartup_Description => Resources.GetTranslatedString(@"SettingsExpandOnStartup_Description"); + /// /// Expand Menu on Startup /// public static string SettingsExpandOnStartup_Title => Resources.GetTranslatedString(@"SettingsExpandOnStartup_Title"); + /// /// Manage external content settings when rendering mails. /// public static string SettingsExternalContent_Description => Resources.GetTranslatedString(@"SettingsExternalContent_Description"); + /// /// External Content /// public static string SettingsExternalContent_Title => Resources.GetTranslatedString(@"SettingsExternalContent_Title"); + /// /// Set whether Inbox should be split into two as Focused - Other. /// public static string SettingsFocusedInbox_Description => Resources.GetTranslatedString(@"SettingsFocusedInbox_Description"); + /// /// Focused Inbox /// public static string SettingsFocusedInbox_Title => Resources.GetTranslatedString(@"SettingsFocusedInbox_Title"); + /// /// Enable or disable specific folders for synchronization. /// public static string SettingsFolderSync_Description => Resources.GetTranslatedString(@"SettingsFolderSync_Description"); + /// /// Folder Synchronization /// public static string SettingsFolderSync_Title => Resources.GetTranslatedString(@"SettingsFolderSync_Title"); + /// /// Folder Configuration /// public static string SettingsFolderOptions_Title => Resources.GetTranslatedString(@"SettingsFolderOptions_Title"); + /// /// Change individual folder settings like enable/disable sync or show/hide unread badge. /// public static string SettingsFolderOptions_Description => Resources.GetTranslatedString(@"SettingsFolderOptions_Description"); + /// /// Center Action /// public static string SettingsHoverActionCenter => Resources.GetTranslatedString(@"SettingsHoverActionCenter"); + /// /// Left Action /// public static string SettingsHoverActionLeft => Resources.GetTranslatedString(@"SettingsHoverActionLeft"); + /// /// Right Action /// public static string SettingsHoverActionRight => Resources.GetTranslatedString(@"SettingsHoverActionRight"); + /// /// Select 3 actions to show up when you hover over the mails with cursor. /// public static string SettingsHoverActions_Description => Resources.GetTranslatedString(@"SettingsHoverActions_Description"); + /// /// Hover Actions /// public static string SettingsHoverActions_Title => Resources.GetTranslatedString(@"SettingsHoverActions_Title"); + /// /// Change display language for Wino. /// public static string SettingsLanguage_Description => Resources.GetTranslatedString(@"SettingsLanguage_Description"); + /// /// Display Language /// public static string SettingsLanguage_Title => Resources.GetTranslatedString(@"SettingsLanguage_Title"); + /// /// Language & Time /// public static string SettingsLanguageTime_Title => Resources.GetTranslatedString(@"SettingsLanguageTime_Title"); + /// /// Wino display language, preferred time format. /// public static string SettingsLanguageTime_Description => Resources.GetTranslatedString(@"SettingsLanguageTime_Description"); + /// /// Categories /// public static string CategoriesFolderNameOverride => Resources.GetTranslatedString(@"CategoriesFolderNameOverride"); + /// /// More /// public static string MoreFolderNameOverride => Resources.GetTranslatedString(@"MoreFolderNameOverride"); + /// /// Settings /// public static string SettingsOptions_Title => Resources.GetTranslatedString(@"SettingsOptions_Title"); + /// /// Merge multiple accounts into one. See mails from one Inbox together. /// public static string SettingsLinkAccounts_Description => Resources.GetTranslatedString(@"SettingsLinkAccounts_Description"); + /// /// Create Linked Accounts /// public static string SettingsLinkAccounts_Title => Resources.GetTranslatedString(@"SettingsLinkAccounts_Title"); + /// /// Modify the current link with the new accounts. /// public static string SettingsLinkedAccountsSave_Description => Resources.GetTranslatedString(@"SettingsLinkedAccountsSave_Description"); + /// /// Save Changes /// public static string SettingsLinkedAccountsSave_Title => Resources.GetTranslatedString(@"SettingsLinkedAccountsSave_Title"); + /// /// Load images automatically /// public static string SettingsLoadImages_Title => Resources.GetTranslatedString(@"SettingsLoadImages_Title"); + /// /// Load styles automatically /// public static string SettingsLoadStyles_Title => Resources.GetTranslatedString(@"SettingsLoadStyles_Title"); + /// /// Adjust the spacing for listing mails. /// public static string SettingsMailSpacing_Description => Resources.GetTranslatedString(@"SettingsMailSpacing_Description"); + /// /// Mail Spacing /// public static string SettingsMailSpacing_Title => Resources.GetTranslatedString(@"SettingsMailSpacing_Title"); + /// /// Create Nested Folders /// public static string SettingsFolderMenuStyle_Title => Resources.GetTranslatedString(@"SettingsFolderMenuStyle_Title"); + /// /// Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail /// public static string SettingsFolderMenuStyle_Description => Resources.GetTranslatedString(@"SettingsFolderMenuStyle_Description"); + /// /// Notifications, signatures, synchronization and other settings per account. /// public static string SettingsManageAccountSettings_Description => Resources.GetTranslatedString(@"SettingsManageAccountSettings_Description"); + /// /// Manage Account Settings /// public static string SettingsManageAccountSettings_Title => Resources.GetTranslatedString(@"SettingsManageAccountSettings_Title"); + + /// + /// Reorder Accounts + /// + public static string SettingsReorderAccounts_Title => Resources.GetTranslatedString(@"SettingsReorderAccounts_Title"); + + + /// + /// Change the order of accounts in the account list. + /// + public static string SettingsReorderAccounts_Description => Resources.GetTranslatedString(@"SettingsReorderAccounts_Description"); + + /// /// Move items to add new link or remove existing link. /// public static string SettingsManageLink_Description => Resources.GetTranslatedString(@"SettingsManageLink_Description"); + /// /// Manage Link /// public static string SettingsManageLink_Title => Resources.GetTranslatedString(@"SettingsManageLink_Title"); + /// /// Change what should happen to the selected item. /// public static string SettingsMarkAsRead_Description => Resources.GetTranslatedString(@"SettingsMarkAsRead_Description"); + /// /// Don't automatically mark item as read /// public static string SettingsMarkAsRead_DontChange => Resources.GetTranslatedString(@"SettingsMarkAsRead_DontChange"); + /// /// Seconds to wait: /// public static string SettingsMarkAsRead_SecondsToWait => Resources.GetTranslatedString(@"SettingsMarkAsRead_SecondsToWait"); + /// /// When viewed in the reading pane /// public static string SettingsMarkAsRead_Timer => Resources.GetTranslatedString(@"SettingsMarkAsRead_Timer"); + /// /// Mark item as read /// public static string SettingsMarkAsRead_Title => Resources.GetTranslatedString(@"SettingsMarkAsRead_Title"); + /// /// When selected /// public static string SettingsMarkAsRead_WhenSelected => Resources.GetTranslatedString(@"SettingsMarkAsRead_WhenSelected"); + /// /// Change how your messages should be organized in mail list. /// public static string SettingsMessageList_Description => Resources.GetTranslatedString(@"SettingsMessageList_Description"); + /// /// Message List /// public static string SettingsMessageList_Title => Resources.GetTranslatedString(@"SettingsMessageList_Title"); + /// /// You didn't setup any accounts yet. /// public static string SettingsNoAccountSetupMessage => Resources.GetTranslatedString(@"SettingsNoAccountSetupMessage"); + /// /// Turn on or off notifications for this account. /// public static string SettingsNotifications_Description => Resources.GetTranslatedString(@"SettingsNotifications_Description"); + /// /// Notifications /// public static string SettingsNotifications_Title => Resources.GetTranslatedString(@"SettingsNotifications_Title"); + /// /// Change the width of the mail list. /// public static string SettingsPaneLength_Description => Resources.GetTranslatedString(@"SettingsPaneLength_Description"); + /// /// Mail List Pane Length /// public static string SettingsPaneLength_Title => Resources.GetTranslatedString(@"SettingsPaneLength_Title"); + /// /// Show much more love ❤️ All donations are appreciated. /// public static string SettingsPaypal_Description => Resources.GetTranslatedString(@"SettingsPaypal_Description"); + /// /// Donate via PayPal /// public static string SettingsPaypal_Title => Resources.GetTranslatedString(@"SettingsPaypal_Title"); + /// /// Compact Mode /// public static string SettingsPersonalizationMailDisplayCompactMode => Resources.GetTranslatedString(@"SettingsPersonalizationMailDisplayCompactMode"); + /// /// Medium Mode /// public static string SettingsPersonalizationMailDisplayMediumMode => Resources.GetTranslatedString(@"SettingsPersonalizationMailDisplayMediumMode"); + /// /// Spacious Mode /// public static string SettingsPersonalizationMailDisplaySpaciousMode => Resources.GetTranslatedString(@"SettingsPersonalizationMailDisplaySpaciousMode"); + /// /// Change appearance of Wino as you like. /// public static string SettingsPersonalization_Description => Resources.GetTranslatedString(@"SettingsPersonalization_Description"); + /// /// Personalization /// public static string SettingsPersonalization_Title => Resources.GetTranslatedString(@"SettingsPersonalization_Title"); + /// /// Review privacy policy. /// public static string SettingsPrivacyPolicy_Description => Resources.GetTranslatedString(@"SettingsPrivacyPolicy_Description"); + /// /// Privacy Policy /// public static string SettingsPrivacyPolicy_Title => Resources.GetTranslatedString(@"SettingsPrivacyPolicy_Title"); + /// /// Mail rendering options. /// public static string SettingsReadingPane_Description => Resources.GetTranslatedString(@"SettingsReadingPane_Description"); + /// /// Reading Pane /// public static string SettingsReadingPane_Title => Resources.GetTranslatedString(@"SettingsReadingPane_Title"); + /// /// Default Reader Font /// public static string SettingsReaderFont_Title => Resources.GetTranslatedString(@"SettingsReaderFont_Title"); + /// /// Change the default font family and font size for reading mails. /// public static string SettingsReaderFontFamily_Description => Resources.GetTranslatedString(@"SettingsReaderFontFamily_Description"); + /// /// Font Family /// public static string SettingsFontFamily_Title => Resources.GetTranslatedString(@"SettingsFontFamily_Title"); + /// /// Font Size /// public static string SettingsFontSize_Title => Resources.GetTranslatedString(@"SettingsFontSize_Title"); + /// /// Preview /// public static string SettingsFontPreview_Title => Resources.GetTranslatedString(@"SettingsFontPreview_Title"); + /// /// Default Composer Font /// public static string SettingsComposerFont_Title => Resources.GetTranslatedString(@"SettingsComposerFont_Title"); + /// /// Change the default font family and font size for composing mails. /// public static string SettingsComposerFontFamily_Description => Resources.GetTranslatedString(@"SettingsComposerFontFamily_Description"); + /// /// Change the display name of the linked accounts. /// public static string SettingsRenameMergeAccount_Description => Resources.GetTranslatedString(@"SettingsRenameMergeAccount_Description"); + /// /// Rename /// public static string SettingsRenameMergeAccount_Title => Resources.GetTranslatedString(@"SettingsRenameMergeAccount_Title"); + /// /// This will allow you to click on the headers in messages list and go to specific date /// public static string SettingsSemanticZoom_Description => Resources.GetTranslatedString(@"SettingsSemanticZoom_Description"); + /// /// Semantic Zoom for Date Headers /// public static string SettingsSemanticZoom_Title => Resources.GetTranslatedString(@"SettingsSemanticZoom_Title"); + /// /// Hide/show thepreview text. /// public static string SettingsShowPreviewText_Description => Resources.GetTranslatedString(@"SettingsShowPreviewText_Description"); + /// /// Show Preview Text /// public static string SettingsShowPreviewText_Title => Resources.GetTranslatedString(@"SettingsShowPreviewText_Title"); + /// /// Hide/show the thumbnail sender pictures. /// public static string SettingsShowSenderPictures_Description => Resources.GetTranslatedString(@"SettingsShowSenderPictures_Description"); + /// /// Show Sender Avatars /// public static string SettingsShowSenderPictures_Title => Resources.GetTranslatedString(@"SettingsShowSenderPictures_Title"); + /// /// Display Clock Format in 24 Hours /// public static string SettingsPrefer24HourClock_Title => Resources.GetTranslatedString(@"SettingsPrefer24HourClock_Title"); + /// /// Mail recieve times will be displayed in 24 hour format instead of 12 (AM/PM) /// public static string SettingsPrefer24HourClock_Description => Resources.GetTranslatedString(@"SettingsPrefer24HourClock_Description"); + /// /// Edit or remove account signature /// public static string SettingsSignature_Description => Resources.GetTranslatedString(@"SettingsSignature_Description"); + /// /// Signature /// public static string SettingsSignature_Title => Resources.GetTranslatedString(@"SettingsSignature_Title"); + /// /// Primary account item to load Inbox at startup. /// public static string SettingsStartupItem_Description => Resources.GetTranslatedString(@"SettingsStartupItem_Description"); + /// /// Startup Item /// public static string SettingsStartupItem_Title => Resources.GetTranslatedString(@"SettingsStartupItem_Title"); + /// /// Show some love ❤️ /// public static string SettingsStore_Description => Resources.GetTranslatedString(@"SettingsStore_Description"); + /// /// Rate in Store /// public static string SettingsStore_Title => Resources.GetTranslatedString(@"SettingsStore_Title"); + /// /// Organize messages into conversation threads. /// public static string SettingsThreads_Description => Resources.GetTranslatedString(@"SettingsThreads_Description"); + /// /// Conversation Threading /// public static string SettingsThreads_Title => Resources.GetTranslatedString(@"SettingsThreads_Title"); + /// /// Remove the link between accounts. This will not delete your accounts. /// public static string SettingsUnlinkAccounts_Description => Resources.GetTranslatedString(@"SettingsUnlinkAccounts_Description"); + /// /// Unlink Accounts /// public static string SettingsUnlinkAccounts_Title => Resources.GetTranslatedString(@"SettingsUnlinkAccounts_Title"); + /// /// by date /// public static string SortingOption_Date => Resources.GetTranslatedString(@"SortingOption_Date"); + /// /// by name /// public static string SortingOption_Name => Resources.GetTranslatedString(@"SortingOption_Name"); + /// /// All feedbacks are appreciated and they will make much Wino better in the future. Would you like to rate Wino in Microsoft Store? /// public static string StoreRatingDialog_MessageFirstLine => Resources.GetTranslatedString(@"StoreRatingDialog_MessageFirstLine"); + /// /// Would you like to rate Wino Mail in Microsoft Store? /// public static string StoreRatingDialog_MessageSecondLine => Resources.GetTranslatedString(@"StoreRatingDialog_MessageSecondLine"); + /// /// Enjoying Wino? /// public static string StoreRatingDialog_Title => Resources.GetTranslatedString(@"StoreRatingDialog_Title"); + /// /// Archived messages will be moved to here. /// public static string SystemFolderConfigDialog_ArchiveFolderDescription => Resources.GetTranslatedString(@"SystemFolderConfigDialog_ArchiveFolderDescription"); + /// /// Archive Folder /// public static string SystemFolderConfigDialog_ArchiveFolderHeader => Resources.GetTranslatedString(@"SystemFolderConfigDialog_ArchiveFolderHeader"); + /// /// Deleted messages will be moved to here. /// public static string SystemFolderConfigDialog_DeletedFolderDescription => Resources.GetTranslatedString(@"SystemFolderConfigDialog_DeletedFolderDescription"); + /// /// Deleted Folder /// public static string SystemFolderConfigDialog_DeletedFolderHeader => Resources.GetTranslatedString(@"SystemFolderConfigDialog_DeletedFolderHeader"); + /// /// New mails/replies will be crafted in here. /// public static string SystemFolderConfigDialog_DraftFolderDescription => Resources.GetTranslatedString(@"SystemFolderConfigDialog_DraftFolderDescription"); + /// /// Draft Folder /// public static string SystemFolderConfigDialog_DraftFolderHeader => Resources.GetTranslatedString(@"SystemFolderConfigDialog_DraftFolderHeader"); + /// /// All spam/junk mails will be here. /// public static string SystemFolderConfigDialog_JunkFolderDescription => Resources.GetTranslatedString(@"SystemFolderConfigDialog_JunkFolderDescription"); + /// /// Junk/Spam Folder /// public static string SystemFolderConfigDialog_JunkFolderHeader => Resources.GetTranslatedString(@"SystemFolderConfigDialog_JunkFolderHeader"); + /// /// This IMAP server doesn't support SPECIAL-USE extension hence Wino couldn't setup the system folders properly. /// public static string SystemFolderConfigDialog_MessageFirstLine => Resources.GetTranslatedString(@"SystemFolderConfigDialog_MessageFirstLine"); + /// /// Please select the appropriate folders for specific functionalities. /// public static string SystemFolderConfigDialog_MessageSecondLine => Resources.GetTranslatedString(@"SystemFolderConfigDialog_MessageSecondLine"); + /// /// Folder that sent messages will be stored. /// public static string SystemFolderConfigDialog_SentFolderDescription => Resources.GetTranslatedString(@"SystemFolderConfigDialog_SentFolderDescription"); + /// /// Sent Folder /// public static string SystemFolderConfigDialog_SentFolderHeader => Resources.GetTranslatedString(@"SystemFolderConfigDialog_SentFolderHeader"); + /// /// Configure System Folders /// public static string SystemFolderConfigDialog_Title => Resources.GetTranslatedString(@"SystemFolderConfigDialog_Title"); + /// /// You can't assign Inbox folder to any other system folder. /// public static string SystemFolderConfigDialogValidation_InboxSelected => Resources.GetTranslatedString(@"SystemFolderConfigDialogValidation_InboxSelected"); + /// /// Some of the system folders are used more than once in the configuration. /// public static string SystemFolderConfigDialogValidation_DuplicateSystemFolders => Resources.GetTranslatedString(@"SystemFolderConfigDialogValidation_DuplicateSystemFolders"); + /// /// System Folders Setup /// public static string SystemFolderConfigSetupSuccess_Title => Resources.GetTranslatedString(@"SystemFolderConfigSetupSuccess_Title"); + /// /// System folders are successfully configured. /// public static string SystemFolderConfigSetupSuccess_Message => Resources.GetTranslatedString(@"SystemFolderConfigSetupSuccess_Message"); + /// /// Testing server connection... /// public static string TestingImapConnectionMessage => Resources.GetTranslatedString(@"TestingImapConnectionMessage"); + /// /// Today /// public static string Today => Resources.GetTranslatedString(@"Today"); + /// /// unknown address /// public static string UnknownAddress => Resources.GetTranslatedString(@"UnknownAddress"); + /// /// Unknown Date /// public static string UnknownDateHeader => Resources.GetTranslatedString(@"UnknownDateHeader"); + /// /// unknown Mail Group Address /// public static string UnknownGroupAddress => Resources.GetTranslatedString(@"UnknownGroupAddress"); + /// /// Unknown Sender /// public static string UnknownSender => Resources.GetTranslatedString(@"UnknownSender"); + /// /// Unsubscribe /// public static string Unsubscribe => Resources.GetTranslatedString(@"Unsubscribe"); + /// /// View Details /// public static string ViewContactDetails => Resources.GetTranslatedString(@"ViewContactDetails"); + /// /// Wino offers 3 accounts to start with for free. If you need more than 3 accounts, please upgrade /// public static string WinoUpgradeDescription => Resources.GetTranslatedString(@"WinoUpgradeDescription"); + /// /// Upgrade to Unlimited Accounts /// public static string WinoUpgradeMessage => Resources.GetTranslatedString(@"WinoUpgradeMessage"); + /// /// {0} out of {1} free accounts used. /// public static string WinoUpgradeRemainingAccountsMessage => Resources.GetTranslatedString(@"WinoUpgradeRemainingAccountsMessage"); + /// /// Yesterday /// public static string Yesterday => Resources.GetTranslatedString(@"Yesterday"); - } + +} } diff --git a/Wino.Core/Services/AccountService.cs b/Wino.Core/Services/AccountService.cs index 850139f2..dd8a9f8a 100644 --- a/Wino.Core/Services/AccountService.cs +++ b/Wino.Core/Services/AccountService.cs @@ -215,7 +215,7 @@ namespace Wino.Core.Services public async Task> GetAccountsAsync() { - var accounts = await Connection.Table().ToListAsync(); + var accounts = await Connection.Table().OrderBy(a => a.Order).ToListAsync(); foreach (var account in accounts) { @@ -301,12 +301,21 @@ namespace Wino.Core.Services { var account = await Connection.Table().FirstOrDefaultAsync(a => a.Id == accountId); - if (account?.ProviderType == MailProviderType.IMAP4) - account.ServerInformation = await GetAccountCustomServerInformationAsync(account.Id); + if (account == null) + { + _logger.Error("Could not find account with id {AccountId}", accountId); + } + else + { + if (account.ProviderType == MailProviderType.IMAP4) + account.ServerInformation = await GetAccountCustomServerInformationAsync(account.Id); - account.Preferences = await GetAccountPreferencesAsync(account.Id); + account.Preferences = await GetAccountPreferencesAsync(account.Id); - return account; + return account; + } + + return null; } public Task GetAccountCustomServerInformationAsync(Guid accountId) @@ -336,6 +345,12 @@ namespace Wino.Core.Services { _preferencesService.StartupEntityId = account.Id; } + else + { + // Set the order of the account. + // This can be changed by the user later in manage accounts page. + account.Order = accountCount; + } await Connection.InsertAsync(account); @@ -352,6 +367,8 @@ namespace Wino.Core.Services // Outlook & Office 365 supports Focused inbox. Enabled by default. bool isMicrosoftProvider = account.ProviderType == MailProviderType.Outlook || account.ProviderType == MailProviderType.Office365; + // TODO: This should come from account settings API. + // Wino doesn't have MailboxSettings yet. if (isMicrosoftProvider) account.Preferences.IsFocusedInboxEnabled = true; @@ -398,6 +415,22 @@ namespace Wino.Core.Services return account.SynchronizationDeltaIdentifier; } + public async Task UpdateAccountOrdersAsync(Dictionary accountIdOrderPair) + { + foreach (var pair in accountIdOrderPair) + { + var account = await GetAccountAsync(pair.Key); + if (account == null) + { + _logger.Error("Could not find account with id {AccountId}", pair.Key); + continue; + } + + account.Order = pair.Value; + + await Connection.UpdateAsync(account); + } + } } } diff --git a/Wino.Mail.ViewModels/AccountManagementViewModel.cs b/Wino.Mail.ViewModels/AccountManagementViewModel.cs index d2f53972..b2f5c1c8 100644 --- a/Wino.Mail.ViewModels/AccountManagementViewModel.cs +++ b/Wino.Mail.ViewModels/AccountManagementViewModel.cs @@ -42,6 +42,7 @@ namespace Wino.Mail.ViewModels public bool IsPurchasePanelVisible => !HasUnlimitedAccountProduct; public bool IsAccountCreationAlmostOnLimit => Accounts != null && Accounts.Count == FREE_ACCOUNT_COUNT - 1; public bool HasAccountsDefined => Accounts != null && Accounts.Any(); + public bool CanReorderAccounts => Accounts?.Count > 1; public string UsedAccountsString => string.Format(Translator.WinoUpgradeRemainingAccountsMessage, Accounts.Count, FREE_ACCOUNT_COUNT); @@ -263,6 +264,12 @@ namespace Wino.Mail.ViewModels mergedAccountProviderDetailViewModel)); } + [RelayCommand] + private async Task ReorderAccountsAsync() + { + + } + public override void OnNavigatedFrom(NavigationMode mode, object parameters) { base.OnNavigatedFrom(mode, parameters); @@ -276,6 +283,9 @@ namespace Wino.Mail.ViewModels { OnPropertyChanged(nameof(HasAccountsDefined)); OnPropertyChanged(nameof(UsedAccountsString)); + OnPropertyChanged(nameof(IsAccountCreationAlmostOnLimit)); + + ReorderAccountsCommand.NotifyCanExecuteChanged(); } private void PagePropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) diff --git a/Wino.Mail/Views/Account/AccountManagementPage.xaml b/Wino.Mail/Views/Account/AccountManagementPage.xaml index 266d2c04..6876ae12 100644 --- a/Wino.Mail/Views/Account/AccountManagementPage.xaml +++ b/Wino.Mail/Views/Account/AccountManagementPage.xaml @@ -220,6 +220,18 @@ Description="{x:Bind domain:Translator.SettingsLinkAccounts_Description}"> + + + + + + + From bf1de8e7a4a551b32736cc7f5317f518a2b802e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Thu, 30 May 2024 02:34:54 +0200 Subject: [PATCH 2/3] Initial setup for account ordering. --- Wino.Core.Domain/Entities/MailAccount.cs | 5 +++ .../Interfaces/IAccountService.cs | 25 +++++++++++ .../Translations/en_US/resources.json | 2 + Wino.Core.Domain/Translator.Designer.cs | 12 ++++++ Wino.Core/Services/AccountService.cs | 43 ++++++++++++++++--- .../AccountManagementViewModel.cs | 10 +++++ .../Views/Account/AccountManagementPage.xaml | 12 ++++++ 7 files changed, 104 insertions(+), 5 deletions(-) diff --git a/Wino.Core.Domain/Entities/MailAccount.cs b/Wino.Core.Domain/Entities/MailAccount.cs index c8f39c1d..7d87128b 100644 --- a/Wino.Core.Domain/Entities/MailAccount.cs +++ b/Wino.Core.Domain/Entities/MailAccount.cs @@ -50,6 +50,11 @@ namespace Wino.Core.Domain.Entities /// public Guid? SignatureId { get; set; } + /// + /// Gets or sets the listing order of the account in the accounts list. + /// + public int Order { get; set; } + /// /// Gets or sets whether the account has any reason for an interactive user action to fix continue operating. /// diff --git a/Wino.Core.Domain/Interfaces/IAccountService.cs b/Wino.Core.Domain/Interfaces/IAccountService.cs index 99190af3..78682cda 100644 --- a/Wino.Core.Domain/Interfaces/IAccountService.cs +++ b/Wino.Core.Domain/Interfaces/IAccountService.cs @@ -68,12 +68,37 @@ namespace Wino.Core.Domain.Interfaces /// Current account synchronization modifier. Task UpdateSynchronizationIdentifierAsync(Guid accountId, string newIdentifier); + /// + /// Renames the merged inbox with the given id. + /// + /// Merged Inbox id + /// New name for the merged/linked inbox. Task RenameMergedAccountAsync(Guid mergedInboxId, string newName); + /// + /// Creates a new merged inbox with the given accounts. + /// + /// Merged inbox properties. + /// List of accounts to merge together. Task CreateMergeAccountsAsync(MergedInbox mergedInbox, IEnumerable accountsToMerge); + /// + /// Updates the merged inbox with the given id with the new linked accounts. + /// + /// Updating merged inbox id. + /// List of linked account ids. Task UpdateMergedInboxAsync(Guid mergedInboxId, IEnumerable linkedAccountIds); + /// + /// Destroys the merged inbox with the given id. + /// + /// Merged inbox id to destroy. Task UnlinkMergedInboxAsync(Guid mergedInboxId); + + /// + /// Updates the account listing orders. + /// + /// AccountId-OrderNumber pair for all accounts. + Task UpdateAccountOrdersAsync(Dictionary accountIdOrderPair); } } diff --git a/Wino.Core.Domain/Translations/en_US/resources.json b/Wino.Core.Domain/Translations/en_US/resources.json index ee59438a..88b8b57f 100644 --- a/Wino.Core.Domain/Translations/en_US/resources.json +++ b/Wino.Core.Domain/Translations/en_US/resources.json @@ -407,6 +407,8 @@ "SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail", "SettingsManageAccountSettings_Description": "Notifications, signatures, synchronization and other settings per account.", "SettingsManageAccountSettings_Title": "Manage Account Settings", + "SettingsReorderAccounts_Title": "Reorder Accounts", + "SettingsReorderAccounts_Description": "Change the order of accounts in the account list.", "SettingsManageLink_Description": "Move items to add new link or remove existing link.", "SettingsManageLink_Title": "Manage Link", "SettingsMarkAsRead_Description": "Change what should happen to the selected item.", diff --git a/Wino.Core.Domain/Translator.Designer.cs b/Wino.Core.Domain/Translator.Designer.cs index ee2312c1..9c83ca16 100644 --- a/Wino.Core.Domain/Translator.Designer.cs +++ b/Wino.Core.Domain/Translator.Designer.cs @@ -2481,6 +2481,18 @@ namespace Wino.Core.Domain public static string SettingsManageAccountSettings_Title => Resources.GetTranslatedString(@"SettingsManageAccountSettings_Title"); + /// + /// Reorder Accounts + /// + public static string SettingsReorderAccounts_Title => Resources.GetTranslatedString(@"SettingsReorderAccounts_Title"); + + + /// + /// Change the order of accounts in the account list. + /// + public static string SettingsReorderAccounts_Description => Resources.GetTranslatedString(@"SettingsReorderAccounts_Description"); + + /// /// Move items to add new link or remove existing link. /// diff --git a/Wino.Core/Services/AccountService.cs b/Wino.Core/Services/AccountService.cs index 850139f2..dd8a9f8a 100644 --- a/Wino.Core/Services/AccountService.cs +++ b/Wino.Core/Services/AccountService.cs @@ -215,7 +215,7 @@ namespace Wino.Core.Services public async Task> GetAccountsAsync() { - var accounts = await Connection.Table().ToListAsync(); + var accounts = await Connection.Table().OrderBy(a => a.Order).ToListAsync(); foreach (var account in accounts) { @@ -301,12 +301,21 @@ namespace Wino.Core.Services { var account = await Connection.Table().FirstOrDefaultAsync(a => a.Id == accountId); - if (account?.ProviderType == MailProviderType.IMAP4) - account.ServerInformation = await GetAccountCustomServerInformationAsync(account.Id); + if (account == null) + { + _logger.Error("Could not find account with id {AccountId}", accountId); + } + else + { + if (account.ProviderType == MailProviderType.IMAP4) + account.ServerInformation = await GetAccountCustomServerInformationAsync(account.Id); - account.Preferences = await GetAccountPreferencesAsync(account.Id); + account.Preferences = await GetAccountPreferencesAsync(account.Id); - return account; + return account; + } + + return null; } public Task GetAccountCustomServerInformationAsync(Guid accountId) @@ -336,6 +345,12 @@ namespace Wino.Core.Services { _preferencesService.StartupEntityId = account.Id; } + else + { + // Set the order of the account. + // This can be changed by the user later in manage accounts page. + account.Order = accountCount; + } await Connection.InsertAsync(account); @@ -352,6 +367,8 @@ namespace Wino.Core.Services // Outlook & Office 365 supports Focused inbox. Enabled by default. bool isMicrosoftProvider = account.ProviderType == MailProviderType.Outlook || account.ProviderType == MailProviderType.Office365; + // TODO: This should come from account settings API. + // Wino doesn't have MailboxSettings yet. if (isMicrosoftProvider) account.Preferences.IsFocusedInboxEnabled = true; @@ -398,6 +415,22 @@ namespace Wino.Core.Services return account.SynchronizationDeltaIdentifier; } + public async Task UpdateAccountOrdersAsync(Dictionary accountIdOrderPair) + { + foreach (var pair in accountIdOrderPair) + { + var account = await GetAccountAsync(pair.Key); + if (account == null) + { + _logger.Error("Could not find account with id {AccountId}", pair.Key); + continue; + } + + account.Order = pair.Value; + + await Connection.UpdateAsync(account); + } + } } } diff --git a/Wino.Mail.ViewModels/AccountManagementViewModel.cs b/Wino.Mail.ViewModels/AccountManagementViewModel.cs index e370f190..4c06374d 100644 --- a/Wino.Mail.ViewModels/AccountManagementViewModel.cs +++ b/Wino.Mail.ViewModels/AccountManagementViewModel.cs @@ -42,6 +42,7 @@ namespace Wino.Mail.ViewModels public bool IsPurchasePanelVisible => !HasUnlimitedAccountProduct; public bool IsAccountCreationAlmostOnLimit => Accounts != null && Accounts.Count == FREE_ACCOUNT_COUNT - 1; public bool HasAccountsDefined => Accounts != null && Accounts.Any(); + public bool CanReorderAccounts => Accounts?.Count > 1; public string UsedAccountsString => string.Format(Translator.WinoUpgradeRemainingAccountsMessage, Accounts.Count, FREE_ACCOUNT_COUNT); @@ -263,6 +264,12 @@ namespace Wino.Mail.ViewModels mergedAccountProviderDetailViewModel)); } + [RelayCommand] + private async Task ReorderAccountsAsync() + { + + } + public override void OnNavigatedFrom(NavigationMode mode, object parameters) { base.OnNavigatedFrom(mode, parameters); @@ -276,6 +283,9 @@ namespace Wino.Mail.ViewModels { OnPropertyChanged(nameof(HasAccountsDefined)); OnPropertyChanged(nameof(UsedAccountsString)); + OnPropertyChanged(nameof(IsAccountCreationAlmostOnLimit)); + + ReorderAccountsCommand.NotifyCanExecuteChanged(); } private void PagePropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) diff --git a/Wino.Mail/Views/Account/AccountManagementPage.xaml b/Wino.Mail/Views/Account/AccountManagementPage.xaml index 266d2c04..6876ae12 100644 --- a/Wino.Mail/Views/Account/AccountManagementPage.xaml +++ b/Wino.Mail/Views/Account/AccountManagementPage.xaml @@ -220,6 +220,18 @@ Description="{x:Bind domain:Translator.SettingsLinkAccounts_Description}"> + + + + + + + From c7781d2e7526b0edb169a4386f334f63bc68f3af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Sun, 9 Jun 2024 02:37:30 +0200 Subject: [PATCH 3/3] Implemented a new dialog for account re-ordering and required apis. --- .../IAccountProviderDetailViewModel.cs | 16 ++++ Wino.Core.Domain/Interfaces/IDialogService.cs | 8 ++ .../Accounts/AccountMenuItemsReordered.cs | 11 +++ Wino.Core/Services/AccountService.cs | 4 +- .../AccountManagementViewModel.cs | 7 +- Wino.Mail.ViewModels/AppShellViewModel.cs | 17 +++- .../Data/AccountProviderDetailViewModel.cs | 4 + .../MergedAccountProviderDetailViewModel.cs | 6 ++ Wino.Mail/Dialogs/AccountReorderDialog.xaml | 84 +++++++++++++++++++ .../Dialogs/AccountReorderDialog.xaml.cs | 52 ++++++++++++ .../AccountReorderTemplateSelector.cs | 22 +++++ Wino.Mail/Services/DialogService.cs | 9 ++ .../Views/Account/AccountManagementPage.xaml | 1 - Wino.Mail/Wino.Mail.csproj | 8 ++ 14 files changed, 241 insertions(+), 8 deletions(-) create mode 100644 Wino.Core/Messages/Accounts/AccountMenuItemsReordered.cs create mode 100644 Wino.Mail/Dialogs/AccountReorderDialog.xaml create mode 100644 Wino.Mail/Dialogs/AccountReorderDialog.xaml.cs create mode 100644 Wino.Mail/Selectors/AccountReorderTemplateSelector.cs diff --git a/Wino.Core.Domain/Interfaces/IAccountProviderDetailViewModel.cs b/Wino.Core.Domain/Interfaces/IAccountProviderDetailViewModel.cs index b535fea1..2778acd2 100644 --- a/Wino.Core.Domain/Interfaces/IAccountProviderDetailViewModel.cs +++ b/Wino.Core.Domain/Interfaces/IAccountProviderDetailViewModel.cs @@ -13,5 +13,21 @@ namespace Wino.Core.Domain.Interfaces /// Name representation of the view model that will be used to identify the startup entity on launch. /// string StartupEntityTitle { get; } + + /// + /// E-mail addresses that this account holds. + /// + + string StartupEntityAddresses { get; } + + /// + /// Represents the account order in the accounts list. + /// + int Order { get; } + + /// + /// Provider details of the account. + /// + IProviderDetail ProviderDetail { get; set; } } } diff --git a/Wino.Core.Domain/Interfaces/IDialogService.cs b/Wino.Core.Domain/Interfaces/IDialogService.cs index af54f79f..6493fcb7 100644 --- a/Wino.Core.Domain/Interfaces/IDialogService.cs +++ b/Wino.Core.Domain/Interfaces/IDialogService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Threading.Tasks; using Wino.Core.Domain.Entities; using Wino.Core.Domain.Enums; @@ -32,6 +33,13 @@ namespace Wino.Core.Domain.Interfaces Task ShowEditAccountDialogAsync(MailAccount account); Task ShowAccountPickerDialogAsync(List availableAccounts); + /// + /// Displays a dialog to the user for reordering accounts. + /// + /// Available accounts in order. + /// Result model that has dict of AccountId-AccountOrder. + Task ShowAccountReorderDialogAsync(ObservableCollection availableAccounts); + /// /// Presents a dialog to the user for selecting folder. /// diff --git a/Wino.Core/Messages/Accounts/AccountMenuItemsReordered.cs b/Wino.Core/Messages/Accounts/AccountMenuItemsReordered.cs new file mode 100644 index 00000000..d9a9d74b --- /dev/null +++ b/Wino.Core/Messages/Accounts/AccountMenuItemsReordered.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace Wino.Core.Messages.Accounts +{ + /// + /// Emitted when account menu items are reordered. + /// + /// New order info. + public record AccountMenuItemsReordered(Dictionary newOrderDictionary); +} diff --git a/Wino.Core/Services/AccountService.cs b/Wino.Core/Services/AccountService.cs index dd8a9f8a..80660e87 100644 --- a/Wino.Core/Services/AccountService.cs +++ b/Wino.Core/Services/AccountService.cs @@ -423,7 +423,7 @@ namespace Wino.Core.Services if (account == null) { - _logger.Error("Could not find account with id {AccountId}", pair.Key); + _logger.Information("Could not find account with id {Key} for reordering. It may be a linked account.", pair.Key); continue; } @@ -431,6 +431,8 @@ namespace Wino.Core.Services await Connection.UpdateAsync(account); } + + Messenger.Send(new AccountMenuItemsReordered(accountIdOrderPair)); } } } diff --git a/Wino.Mail.ViewModels/AccountManagementViewModel.cs b/Wino.Mail.ViewModels/AccountManagementViewModel.cs index 4c06374d..712ac35a 100644 --- a/Wino.Mail.ViewModels/AccountManagementViewModel.cs +++ b/Wino.Mail.ViewModels/AccountManagementViewModel.cs @@ -264,11 +264,8 @@ namespace Wino.Mail.ViewModels mergedAccountProviderDetailViewModel)); } - [RelayCommand] - private async Task ReorderAccountsAsync() - { - - } + [RelayCommand(CanExecute = nameof(CanReorderAccounts))] + private Task ReorderAccountsAsync() => DialogService.ShowAccountReorderDialogAsync(availableAccounts: Accounts); public override void OnNavigatedFrom(NavigationMode mode, object parameters) { diff --git a/Wino.Mail.ViewModels/AppShellViewModel.cs b/Wino.Mail.ViewModels/AppShellViewModel.cs index 33fb15cf..5b0a4cb5 100644 --- a/Wino.Mail.ViewModels/AppShellViewModel.cs +++ b/Wino.Mail.ViewModels/AppShellViewModel.cs @@ -39,7 +39,8 @@ namespace Wino.Mail.ViewModels IRecipient, IRecipient, IRecipient, - IRecipient + IRecipient, + IRecipient { #region Menu Items @@ -1059,5 +1060,19 @@ namespace Wino.Mail.ViewModels ChangeLoadedAccount(latestSelectedAccountMenuItem, navigateInbox: false); } + + private void ReorderAccountMenuItems(Dictionary newAccountOrder) + { + foreach (var item in newAccountOrder) + { + var menuItem = MenuItems.GetAccountMenuItem(item.Key); + + if (menuItem == null) continue; + + MenuItems.Move(MenuItems.IndexOf(menuItem), item.Value); + } + } + + public void Receive(AccountMenuItemsReordered message) => ReorderAccountMenuItems(message.newOrderDictionary); } } diff --git a/Wino.Mail.ViewModels/Data/AccountProviderDetailViewModel.cs b/Wino.Mail.ViewModels/Data/AccountProviderDetailViewModel.cs index 4f629e99..cd2d2a89 100644 --- a/Wino.Mail.ViewModels/Data/AccountProviderDetailViewModel.cs +++ b/Wino.Mail.ViewModels/Data/AccountProviderDetailViewModel.cs @@ -17,6 +17,10 @@ namespace Wino.Mail.ViewModels.Data public string StartupEntityTitle => Account.Name; + public int Order => Account.Order; + + public string StartupEntityAddresses => Account.Address; + public AccountProviderDetailViewModel(IProviderDetail providerDetail, MailAccount account) { ProviderDetail = providerDetail; diff --git a/Wino.Mail.ViewModels/Data/MergedAccountProviderDetailViewModel.cs b/Wino.Mail.ViewModels/Data/MergedAccountProviderDetailViewModel.cs index 6dda7ac3..1bd7de5b 100644 --- a/Wino.Mail.ViewModels/Data/MergedAccountProviderDetailViewModel.cs +++ b/Wino.Mail.ViewModels/Data/MergedAccountProviderDetailViewModel.cs @@ -18,6 +18,12 @@ namespace Wino.Mail.ViewModels.Data public string StartupEntityTitle => MergedInbox.Name; + public int Order => 0; + + public IProviderDetail ProviderDetail { get; set; } + + public string StartupEntityAddresses => AccountAddresses; + public MergedAccountProviderDetailViewModel(MergedInbox mergedInbox, List holdingAccounts) { MergedInbox = mergedInbox; diff --git a/Wino.Mail/Dialogs/AccountReorderDialog.xaml b/Wino.Mail/Dialogs/AccountReorderDialog.xaml new file mode 100644 index 00000000..4f733a3a --- /dev/null +++ b/Wino.Mail/Dialogs/AccountReorderDialog.xaml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Wino.Mail/Dialogs/AccountReorderDialog.xaml.cs b/Wino.Mail/Dialogs/AccountReorderDialog.xaml.cs new file mode 100644 index 00000000..c5433c7e --- /dev/null +++ b/Wino.Mail/Dialogs/AccountReorderDialog.xaml.cs @@ -0,0 +1,52 @@ +using System.Collections.ObjectModel; +using System.Linq; +using Microsoft.Extensions.DependencyInjection; +using Windows.UI.Xaml.Controls; +using Wino.Core.Domain.Interfaces; + +namespace Wino.Dialogs +{ + public sealed partial class AccountReorderDialog : ContentDialog + { + public ObservableCollection Accounts { get; } + + private int count; + private bool isOrdering = false; + + private readonly IAccountService _accountService = App.Current.Services.GetService(); + + public AccountReorderDialog(ObservableCollection accounts) + { + Accounts = accounts; + + count = accounts.Count; + + InitializeComponent(); + } + + private void DialogOpened(ContentDialog sender, ContentDialogOpenedEventArgs args) + { + Accounts.CollectionChanged -= AccountsChanged; + Accounts.CollectionChanged += AccountsChanged; + } + + private void DialogClosed(ContentDialog sender, ContentDialogClosedEventArgs args) => Accounts.CollectionChanged -= AccountsChanged; + + private async void AccountsChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) + { + if (count - 1 == Accounts.Count) + isOrdering = true; + + if (count == Accounts.Count && isOrdering) + { + // Order is completed. Apply changes. + + var dict = Accounts.ToDictionary(a => a.StartupEntityId, a => Accounts.IndexOf(a)); + + await _accountService.UpdateAccountOrdersAsync(dict); + + isOrdering = false; + } + } + } +} diff --git a/Wino.Mail/Selectors/AccountReorderTemplateSelector.cs b/Wino.Mail/Selectors/AccountReorderTemplateSelector.cs new file mode 100644 index 00000000..07574892 --- /dev/null +++ b/Wino.Mail/Selectors/AccountReorderTemplateSelector.cs @@ -0,0 +1,22 @@ +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Wino.Mail.ViewModels.Data; + +namespace Wino.Selectors +{ + public class AccountReorderTemplateSelector : DataTemplateSelector + { + public DataTemplate MergedAccountReorderTemplate { get; set; } + public DataTemplate RootAccountReorderTemplate { get; set; } + + protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) + { + if (item is MergedAccountProviderDetailViewModel) + { + return MergedAccountReorderTemplate; + } + + return RootAccountReorderTemplate; + } + } +} diff --git a/Wino.Mail/Services/DialogService.cs b/Wino.Mail/Services/DialogService.cs index e38ba569..2d751080 100644 --- a/Wino.Mail/Services/DialogService.cs +++ b/Wino.Mail/Services/DialogService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Threading; using System.Threading.Tasks; using CommunityToolkit.Mvvm.Messaging; @@ -331,6 +332,14 @@ namespace Wino.Services return accountPicker.PickedAccount; } + public async Task ShowAccountReorderDialogAsync(ObservableCollection availableAccounts) + { + var accountReorderDialog = new AccountReorderDialog(availableAccounts) + { + RequestedTheme = _themeService.RootTheme.ToWindowsElementTheme() + }; + await HandleDialogPresentationAsync(accountReorderDialog); + } } } diff --git a/Wino.Mail/Views/Account/AccountManagementPage.xaml b/Wino.Mail/Views/Account/AccountManagementPage.xaml index 6876ae12..1f79d9cd 100644 --- a/Wino.Mail/Views/Account/AccountManagementPage.xaml +++ b/Wino.Mail/Views/Account/AccountManagementPage.xaml @@ -220,7 +220,6 @@ Description="{x:Bind domain:Translator.SettingsLinkAccounts_Description}"> - diff --git a/Wino.Mail/Wino.Mail.csproj b/Wino.Mail/Wino.Mail.csproj index c27cf3d5..a0e55b3b 100644 --- a/Wino.Mail/Wino.Mail.csproj +++ b/Wino.Mail/Wino.Mail.csproj @@ -252,6 +252,9 @@ AccountPickerDialog.xaml + + AccountReorderDialog.xaml + CustomThemeBuilderDialog.xaml @@ -319,6 +322,7 @@ + @@ -484,6 +488,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile