diff --git a/Wino.Core.Domain/Entities/AccountSignature.cs b/Wino.Core.Domain/Entities/AccountSignature.cs index 6c3c6841..b00f2a84 100644 --- a/Wino.Core.Domain/Entities/AccountSignature.cs +++ b/Wino.Core.Domain/Entities/AccountSignature.cs @@ -8,6 +8,10 @@ namespace Wino.Core.Domain.Entities [PrimaryKey] public Guid Id { get; set; } + public string Name { get; set; } + public string HtmlBody { get; set; } + + public Guid MailAccountId { get; set; } } } diff --git a/Wino.Core.Domain/Entities/MailAccount.cs b/Wino.Core.Domain/Entities/MailAccount.cs index c8f39c1d..67340c02 100644 --- a/Wino.Core.Domain/Entities/MailAccount.cs +++ b/Wino.Core.Domain/Entities/MailAccount.cs @@ -44,12 +44,6 @@ namespace Wino.Core.Domain.Entities /// public string AccountColorHex { get; set; } - /// - /// Gets or sets the signature to be used for this account. - /// Null if no signature should be used. - /// - public Guid? SignatureId { 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/Entities/MailAccountPreferences.cs b/Wino.Core.Domain/Entities/MailAccountPreferences.cs index 122dff67..ba14a98d 100644 --- a/Wino.Core.Domain/Entities/MailAccountPreferences.cs +++ b/Wino.Core.Domain/Entities/MailAccountPreferences.cs @@ -30,5 +30,20 @@ namespace Wino.Core.Domain.Entities /// Null if the account provider type doesn't support Focused inbox. /// public bool? IsFocusedInboxEnabled { get; set; } + + /// + /// Gets or sets whether signature should be appended automatically. + /// + public bool IsSignatureEnabled { get; set; } + + /// + /// Gets or sets signature for new messages. Null if signature is not needed. + /// + public Guid? SignatureIdForNewMessages { get; set; } + + /// + /// Gets or sets signature for following messages. Null if signature is not needed. + /// + public Guid? SignatureIdForFollowingMessages { get; set; } } } diff --git a/Wino.Core.Domain/Interfaces/IDialogService.cs b/Wino.Core.Domain/Interfaces/IDialogService.cs index af54f79f..5d181bef 100644 --- a/Wino.Core.Domain/Interfaces/IDialogService.cs +++ b/Wino.Core.Domain/Interfaces/IDialogService.cs @@ -39,5 +39,11 @@ namespace Wino.Core.Domain.Interfaces /// The reason behind the picking operation /// Selected folder structure. Null if none. Task PickFolderAsync(Guid accountId, PickFolderReason reason, IFolderService folderService); + + /// + /// Presents a dialog to the user for signature creation/modification. + /// + /// Signature information. Null if canceled. + Task ShowSignatureEditorDialog(AccountSignature signatureModel = null); } } diff --git a/Wino.Core.Domain/Interfaces/ISignatureService.cs b/Wino.Core.Domain/Interfaces/ISignatureService.cs index 14f7f75c..f3d30131 100644 --- a/Wino.Core.Domain/Interfaces/ISignatureService.cs +++ b/Wino.Core.Domain/Interfaces/ISignatureService.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using Wino.Core.Domain.Entities; @@ -7,27 +8,40 @@ namespace Wino.Core.Domain.Interfaces public interface ISignatureService { /// - /// Returns the assigned account signature for the account. + /// Get one signature by Id. /// - /// - /// - Task GetAccountSignatureAsync(Guid accountId); + /// Signature Id. + Task GetSignatureAsync(Guid signatureId); /// - /// Creates the initial signature for new created accounts. + /// Returns all signatures for specified account. /// - /// - /// + /// Account id + Task> GetSignaturesAsync(Guid accountId); + + /// + /// Creates a new signature for the account. + /// + /// Signature that should be created. It should contain ID and account to which it belongs. + Task CreateSignatureAsync(AccountSignature signature); + + /// + /// Creates a default Wino signature for the account. + /// Needed only for initial account setup. + /// + /// Account Id. Task CreateDefaultSignatureAsync(Guid accountId); /// - /// Updates account's existing signature with the given HTML signature. + /// Updates existing signature. /// - Task UpdateAccountSignatureAsync(Guid accountId, string htmlBody); + /// Signature that should be updated. It should contain ID and account to which it belongs. + Task UpdateSignatureAsync(AccountSignature signature); /// - /// Disabled signature for the account and deletes existing signature. + /// Deletes existing signature. /// - Task DeleteAccountSignatureAssignment(Guid accountId); + /// Signature that should be deleted. + Task DeleteSignatureAsync(AccountSignature signature); } } diff --git a/Wino.Core.Domain/Translations/en_US/resources.json b/Wino.Core.Domain/Translations/en_US/resources.json index ee59438a..7ea1957a 100644 --- a/Wino.Core.Domain/Translations/en_US/resources.json +++ b/Wino.Core.Domain/Translations/en_US/resources.json @@ -28,6 +28,7 @@ "Buttons_Create": "Create", "Buttons_CreateAccount": "Create Account", "Buttons_Delete": "Delete", + "Buttons_Edit": "Edit", "Buttons_Discard": "Discard", "Buttons_EnableImageRendering": "Enable", "Buttons_No": "No", @@ -450,7 +451,7 @@ "SettingsShowSenderPictures_Title": "Show Sender Avatars", "SettingsPrefer24HourClock_Title": "Display Clock Format in 24 Hours", "SettingsPrefer24HourClock_Description": "Mail recieve times will be displayed in 24 hour format instead of 12 (AM/PM)", - "SettingsSignature_Description": "Edit or remove account signature", + "SettingsSignature_Description": "Manage account signatures", "SettingsSignature_Title": "Signature", "SettingsStartupItem_Description": "Primary account item to load Inbox at startup.", "SettingsStartupItem_Title": "Startup Item", @@ -493,5 +494,21 @@ "WinoUpgradeDescription": "Wino offers 3 accounts to start with for free. If you need more than 3 accounts, please upgrade", "WinoUpgradeMessage": "Upgrade to Unlimited Accounts", "WinoUpgradeRemainingAccountsMessage": "{0} out of {1} free accounts used.", - "Yesterday": "Yesterday" + "Yesterday": "Yesterday", + "SignatureEditorDialog_Title": "Signature Editor", + "SignatureEditorDialog_SignatureName_Placeholder": "Name your signature", + "SignatureEditorDialog_SignatureName_TitleNew": "Signature name", + "SignatureEditorDialog_SignatureName_TitleEdit": "Current signature name: {0}", + "SignatureDeleteDialog_Title": "Delete signature", + "SignatureDeleteDialog_Message": "Are you sure you want to delete \"{0}\" signature?", + "SettingsSignature_ForNewMessages_Title": "For New Messages", + "SettingsSignature_ForFollowingMessages_Title": "For Replies/Forwards", + "SettingsSignature_SignatureDefaults": "Signature defaults", + "SettingsSignature_Signatures": "Signatures", + "SettingsSignature_AddCustomSignature_Title": "Add custom signature", + "SettingsSignature_AddCustomSignature_Button": "Add signature", + "SettingsSignature_EditSignature_Title": "Edit signature", + "SettingsSignature_DeleteSignature_Title": "Delete signature", + "SettingsSignature_NoneSignatureName": "None" + } diff --git a/Wino.Core.Domain/Translator.Designer.cs b/Wino.Core.Domain/Translator.Designer.cs index ee2312c1..2e18069c 100644 --- a/Wino.Core.Domain/Translator.Designer.cs +++ b/Wino.Core.Domain/Translator.Designer.cs @@ -1,18 +1,4 @@  - - - - - - - - - - - - - - namespace Wino.Core.Domain { public class Translator @@ -32,2975 +18,2559 @@ 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"); - /// /// Sender Display Name /// public static string AccountSettingsDialog_AccountName => Resources.GetTranslatedString(@"AccountSettingsDialog_AccountName"); - /// /// eg. John Doe /// public static string AccountSettingsDialog_AccountNamePlaceholder => Resources.GetTranslatedString(@"AccountSettingsDialog_AccountNamePlaceholder"); - /// /// 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"); - + /// + /// Edit + /// + public static string Buttons_Edit => Resources.GetTranslatedString(@"Buttons_Edit"); + /// /// 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"); - /// /// 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 + /// Manage account signatures /// 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"); -} + /// + /// Signature Editor + /// + public static string SignatureEditorDialog_Title => Resources.GetTranslatedString(@"SignatureEditorDialog_Title"); + + /// + /// Name your signature + /// + public static string SignatureEditorDialog_SignatureName_Placeholder => Resources.GetTranslatedString(@"SignatureEditorDialog_SignatureName_Placeholder"); + + /// + /// Signature name + /// + public static string SignatureEditorDialog_SignatureName_TitleNew => Resources.GetTranslatedString(@"SignatureEditorDialog_SignatureName_TitleNew"); + + /// + /// Current signature name: {0} + /// + public static string SignatureEditorDialog_SignatureName_TitleEdit => Resources.GetTranslatedString(@"SignatureEditorDialog_SignatureName_TitleEdit"); + + /// + /// Delete signature + /// + public static string SignatureDeleteDialog_Title => Resources.GetTranslatedString(@"SignatureDeleteDialog_Title"); + + /// + /// Are you sure you want to delete "{0}" signature? + /// + public static string SignatureDeleteDialog_Message => Resources.GetTranslatedString(@"SignatureDeleteDialog_Message"); + + /// + /// For New Messages + /// + public static string SettingsSignature_ForNewMessages_Title => Resources.GetTranslatedString(@"SettingsSignature_ForNewMessages_Title"); + + /// + /// For Replies/Forwards + /// + public static string SettingsSignature_ForFollowingMessages_Title => Resources.GetTranslatedString(@"SettingsSignature_ForFollowingMessages_Title"); + + /// + /// Signature defaults + /// + public static string SettingsSignature_SignatureDefaults => Resources.GetTranslatedString(@"SettingsSignature_SignatureDefaults"); + + /// + /// Signatures + /// + public static string SettingsSignature_Signatures => Resources.GetTranslatedString(@"SettingsSignature_Signatures"); + + /// + /// Add custom signature + /// + public static string SettingsSignature_AddCustomSignature_Title => Resources.GetTranslatedString(@"SettingsSignature_AddCustomSignature_Title"); + + /// + /// Add signature + /// + public static string SettingsSignature_AddCustomSignature_Button => Resources.GetTranslatedString(@"SettingsSignature_AddCustomSignature_Button"); + + /// + /// Edit signature + /// + public static string SettingsSignature_EditSignature_Title => Resources.GetTranslatedString(@"SettingsSignature_EditSignature_Title"); + + /// + /// Delete signature + /// + public static string SettingsSignature_DeleteSignature_Title => Resources.GetTranslatedString(@"SettingsSignature_DeleteSignature_Title"); + + /// + /// None + /// + public static string SettingsSignature_NoneSignatureName => Resources.GetTranslatedString(@"SettingsSignature_NoneSignatureName"); + } } diff --git a/Wino.Core/Services/AccountService.cs b/Wino.Core/Services/AccountService.cs index 850139f2..9a3d14be 100644 --- a/Wino.Core/Services/AccountService.cs +++ b/Wino.Core/Services/AccountService.cs @@ -244,9 +244,7 @@ namespace Wino.Core.Services await Connection.Table().Where(a => a.AccountId == account.Id).DeleteAsync(); await Connection.Table().DeleteAsync(a => a.MailAccountId == account.Id); - - if (account.SignatureId != null) - await Connection.Table().DeleteAsync(a => a.Id == account.SignatureId); + await Connection.Table().DeleteAsync(a => a.MailAccountId == account.Id); // Account belongs to a merged inbox. // In case of there'll be a single account in the merged inbox, remove the merged inbox as well. @@ -355,12 +353,14 @@ namespace Wino.Core.Services if (isMicrosoftProvider) account.Preferences.IsFocusedInboxEnabled = true; - await Connection.InsertAsync(preferences); - - // Create default signature. + // Setup default signature. var defaultSignature = await _signatureService.CreateDefaultSignatureAsync(account.Id); - account.SignatureId = defaultSignature.Id; + account.Preferences.SignatureIdForNewMessages = defaultSignature.Id; + account.Preferences.SignatureIdForFollowingMessages = defaultSignature.Id; + account.Preferences.IsSignatureEnabled = true; + + await Connection.InsertAsync(preferences); if (customServerInformation != null) await Connection.InsertAsync(customServerInformation); @@ -397,7 +397,5 @@ namespace Wino.Core.Services return account.SynchronizationDeltaIdentifier; } - - } } diff --git a/Wino.Core/Services/MailService.cs b/Wino.Core/Services/MailService.cs index 9ebdbe3a..6d1be99f 100644 --- a/Wino.Core/Services/MailService.cs +++ b/Wino.Core/Services/MailService.cs @@ -673,16 +673,26 @@ namespace Wino.Core.Services builder.HtmlBody = visitor.HtmlBody; } - else + + // Append signatures if needed. + if (account.Preferences.IsSignatureEnabled) { - // Add signature if any. - var accountSignature = await _signatureService.GetAccountSignatureAsync(account.Id); + var signatureId = reason == DraftCreationReason.Empty ? + account.Preferences.SignatureIdForNewMessages : + account.Preferences.SignatureIdForFollowingMessages; - if (accountSignature != null) + if (signatureId != null) { - // Leave some space for new mail content. + var signature = await _signatureService.GetSignatureAsync(signatureId.Value); - builder.HtmlBody = @$"

{accountSignature.HtmlBody}"; + if (string.IsNullOrWhiteSpace(builder.HtmlBody)) + { + builder.HtmlBody = @$"

{signature.HtmlBody}"; + } + else + { + builder.HtmlBody += @$"{signature.HtmlBody}"; + } } } @@ -726,7 +736,7 @@ namespace Wino.Core.Services message.Body = builder.ToMessageBody(); } - InternetAddressList ExtractRecipients(string parameterValue) + static InternetAddressList ExtractRecipients(string parameterValue) { var list = new InternetAddressList(); diff --git a/Wino.Core/Services/SignatureService.cs b/Wino.Core/Services/SignatureService.cs index 064b9df1..cdb40468 100644 --- a/Wino.Core/Services/SignatureService.cs +++ b/Wino.Core/Services/SignatureService.cs @@ -1,91 +1,58 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using Wino.Core.Domain.Entities; using Wino.Core.Domain.Interfaces; namespace Wino.Core.Services { - public class SignatureService : BaseDatabaseService, ISignatureService + public class SignatureService(IDatabaseService databaseService) : BaseDatabaseService(databaseService), ISignatureService { - public SignatureService(IDatabaseService databaseService) : base(databaseService) { } - - public async Task CreateDefaultSignatureAsync(Guid accountId) + public async Task GetSignatureAsync(Guid signatureId) { - var account = await Connection.Table().FirstOrDefaultAsync(a => a.Id == accountId); - - var defaultSignature = GetDefaultSignature(); - - await Connection.InsertAsync(defaultSignature); - - account.SignatureId = defaultSignature.Id; - - await Connection.UpdateAsync(account); - - return defaultSignature; + return await Connection.Table().FirstAsync(s => s.Id == signatureId); } - public async Task DeleteAccountSignatureAssignment(Guid accountId) + public async Task> GetSignaturesAsync(Guid accountId) { - var existingSignature = await GetAccountSignatureAsync(accountId); - - if (existingSignature != null) - { - await Connection.DeleteAsync(existingSignature); - - var account = await Connection.Table().FirstOrDefaultAsync(a => a.Id == accountId); - - account.SignatureId = null; - - await Connection.UpdateAsync(account); - } + return await Connection.Table().Where(s => s.MailAccountId == accountId).ToListAsync(); } - public async Task GetAccountSignatureAsync(Guid accountId) + public async Task CreateSignatureAsync(AccountSignature signature) { - var account = await Connection.Table().FirstOrDefaultAsync(a => a.Id == accountId); - - if (account?.SignatureId == null) - return null; - - return await Connection.Table().FirstOrDefaultAsync(a => a.Id == account.SignatureId); - } - - public async Task UpdateAccountSignatureAsync(Guid accountId, string htmlBody) - { - var signature = await GetAccountSignatureAsync(accountId); - var account = await Connection.Table().FirstOrDefaultAsync(a => a.Id == accountId); - - if (signature == null) - { - signature = new AccountSignature() - { - Id = Guid.NewGuid(), - HtmlBody = htmlBody - }; - - await Connection.InsertAsync(signature); - } - else - { - signature.HtmlBody = htmlBody; - - await Connection.UpdateAsync(signature); - } - - account.SignatureId = signature.Id; - - await Connection.UpdateAsync(account); + await Connection.InsertAsync(signature); return signature; } - private AccountSignature GetDefaultSignature() + public async Task CreateDefaultSignatureAsync(Guid accountId) { - return new AccountSignature() + var defaultSignature = new AccountSignature() { Id = Guid.NewGuid(), + MailAccountId = accountId, + // TODO: Should be translated? + Name = "Wino Default Signature", HtmlBody = @"

Sent from Wino Mail for Windows

" }; + + await Connection.InsertAsync(defaultSignature); + + return defaultSignature; + } + + public async Task UpdateSignatureAsync(AccountSignature signature) + { + await Connection.UpdateAsync(signature); + + return signature; + } + + public async Task DeleteSignatureAsync(AccountSignature signature) + { + await Connection.DeleteAsync(signature); + + return signature; } } } diff --git a/Wino.Mail.ViewModels/AccountDetailsPageViewModel.cs b/Wino.Mail.ViewModels/AccountDetailsPageViewModel.cs index 1a60a282..8f373065 100644 --- a/Wino.Mail.ViewModels/AccountDetailsPageViewModel.cs +++ b/Wino.Mail.ViewModels/AccountDetailsPageViewModel.cs @@ -24,7 +24,7 @@ namespace Wino.Mail.ViewModels private readonly IFolderService _folderService; public MailAccount Account { get; set; } - public ObservableCollection CurrentFolders { get; set; } = new ObservableCollection(); + public ObservableCollection CurrentFolders { get; set; } = []; [ObservableProperty] private bool isFocusedInboxEnabled; @@ -32,6 +32,9 @@ namespace Wino.Mail.ViewModels [ObservableProperty] private bool areNotificationsEnabled; + [ObservableProperty] + private bool isSignatureEnabled; + [ObservableProperty] private bool isAppendMessageSettingVisible; @@ -116,6 +119,7 @@ namespace Wino.Mail.ViewModels IsFocusedInboxEnabled = Account.Preferences.IsFocusedInboxEnabled.GetValueOrDefault(); AreNotificationsEnabled = Account.Preferences.IsNotificationsEnabled; + IsSignatureEnabled = Account.Preferences.IsSignatureEnabled; IsAppendMessageSettingVisible = Account.ProviderType == MailProviderType.IMAP4; IsAppendMessageSettinEnabled = Account.Preferences.ShouldAppendMessagesToSentFolder; @@ -135,23 +139,24 @@ namespace Wino.Mail.ViewModels { base.OnPropertyChanged(e); - if (e.PropertyName == nameof(IsFocusedInboxEnabled) && IsFocusedInboxSupportedForAccount) + switch (e.PropertyName) { - Account.Preferences.IsFocusedInboxEnabled = IsFocusedInboxEnabled; - - await _accountService.UpdateAccountAsync(Account); - } - else if (e.PropertyName == nameof(AreNotificationsEnabled)) - { - Account.Preferences.IsNotificationsEnabled = AreNotificationsEnabled; - - await _accountService.UpdateAccountAsync(Account); - } - else if (e.PropertyName == nameof(IsAppendMessageSettinEnabled)) - { - Account.Preferences.ShouldAppendMessagesToSentFolder = IsAppendMessageSettinEnabled; - - await _accountService.UpdateAccountAsync(Account); + case nameof(IsFocusedInboxEnabled) when IsFocusedInboxSupportedForAccount: + Account.Preferences.IsFocusedInboxEnabled = IsFocusedInboxEnabled; + await _accountService.UpdateAccountAsync(Account); + break; + case nameof(AreNotificationsEnabled): + Account.Preferences.IsNotificationsEnabled = AreNotificationsEnabled; + await _accountService.UpdateAccountAsync(Account); + break; + case nameof(IsAppendMessageSettinEnabled): + Account.Preferences.ShouldAppendMessagesToSentFolder = IsAppendMessageSettinEnabled; + await _accountService.UpdateAccountAsync(Account); + break; + case nameof(IsSignatureEnabled): + Account.Preferences.IsSignatureEnabled = IsSignatureEnabled; + await _accountService.UpdateAccountAsync(Account); + break; } } } diff --git a/Wino.Mail.ViewModels/SignatureManagementPageViewModel.cs b/Wino.Mail.ViewModels/SignatureManagementPageViewModel.cs index bd161bce..740999f6 100644 --- a/Wino.Mail.ViewModels/SignatureManagementPageViewModel.cs +++ b/Wino.Mail.ViewModels/SignatureManagementPageViewModel.cs @@ -1,57 +1,71 @@ using System; -using System.Collections.Generic; -using System.Text.RegularExpressions; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Linq; using System.Threading.Tasks; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using CommunityToolkit.Mvvm.Messaging; +using MoreLinq; +using MoreLinq.Extensions; using Wino.Core.Domain; using Wino.Core.Domain.Entities; -using Wino.Core.Domain.Enums; using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Navigation; -using Wino.Core.Domain.Models.Reader; -using Wino.Core.Messages.Mails; namespace Wino.Mail.ViewModels { - public partial class SignatureManagementPageViewModel : BaseViewModel + public partial class SignatureManagementPageViewModel(IDialogService dialogService, + ISignatureService signatureService, + IAccountService accountService) : BaseViewModel(dialogService) { - public Func> GetHTMLBodyFunction; - public Func> GetTextBodyFunction; - - public List ToolbarSections { get; set; } = new List() - { - new EditorToolbarSection(){ SectionType = EditorToolbarSectionType.Format }, - new EditorToolbarSection(){ SectionType = EditorToolbarSectionType.Insert }, - }; - - [ObservableProperty] - private EditorToolbarSection selectedToolbarSection; + public ObservableCollection Signatures { get; set; } = []; [ObservableProperty] private bool isSignatureEnabled; - public MailAccount Account { get; set; } + private int signatureForNewMessagesIndex; - public AsyncRelayCommand SaveSignatureCommand { get; set; } + public Guid EmptyGuid { get; } = Guid.Empty; - public INativeAppService NativeAppService { get; } - private readonly ISignatureService _signatureService; - private readonly IAccountService _accountService; - - public SignatureManagementPageViewModel(IDialogService dialogService, - INativeAppService nativeAppService, - ISignatureService signatureService, - IAccountService accountService) : base(dialogService) + public int SignatureForNewMessagesIndex { - SelectedToolbarSection = ToolbarSections[0]; - NativeAppService = nativeAppService; - _signatureService = signatureService; - _accountService = accountService; - SaveSignatureCommand = new AsyncRelayCommand(SaveSignatureAsync); + get => signatureForNewMessagesIndex; + set + { + if (value == -1) + { + SetProperty(ref signatureForNewMessagesIndex, 0); + } + else + { + SetProperty(ref signatureForNewMessagesIndex, value); + } + } } + private int signatureForFollowingMessagesIndex; + + public int SignatureForFollowingMessagesIndex + { + get => signatureForFollowingMessagesIndex; + set + { + if (value == -1) + { + SetProperty(ref signatureForFollowingMessagesIndex, 0); + } + else + { + SetProperty(ref signatureForFollowingMessagesIndex, value); + } + } + } + + private MailAccount Account { get; set; } + + private readonly ISignatureService _signatureService = signatureService; + private readonly IAccountService _accountService = accountService; + public override async void OnNavigatedTo(NavigationMode mode, object parameters) { base.OnNavigatedTo(mode, parameters); @@ -59,35 +73,89 @@ namespace Wino.Mail.ViewModels if (parameters is Guid accountId) Account = await _accountService.GetAccountAsync(accountId); - if (Account != null) + if (Account == null) return; + + var dbSignatures = await _signatureService.GetSignaturesAsync(Account.Id); + IsSignatureEnabled = Account.Preferences.IsSignatureEnabled; + + Signatures.Clear(); + Signatures.Add(new AccountSignature { Id = EmptyGuid, Name = Translator.SettingsSignature_NoneSignatureName }); + dbSignatures.ForEach(Signatures.Add); + + SignatureForNewMessagesIndex = Signatures.IndexOf(Signatures.FirstOrDefault(x => x.Id == Account.Preferences.SignatureIdForNewMessages)); + SignatureForFollowingMessagesIndex = Signatures.IndexOf(Signatures.FirstOrDefault(x => x.Id == Account.Preferences.SignatureIdForFollowingMessages)); + } + + protected override async void OnPropertyChanged(PropertyChangedEventArgs e) + { + base.OnPropertyChanged(e); + + switch (e.PropertyName) { - var accountSignature = await _signatureService.GetAccountSignatureAsync(Account.Id); - - IsSignatureEnabled = accountSignature != null; - - if (IsSignatureEnabled) - Messenger.Send(new HtmlRenderingRequested(accountSignature.HtmlBody)); - else - Messenger.Send(new HtmlRenderingRequested(string.Empty)); // To get the theme changes. Render empty html. + case nameof(IsSignatureEnabled): + Account.Preferences.IsSignatureEnabled = IsSignatureEnabled; + await _accountService.UpdateAccountAsync(Account); + break; + case nameof(SignatureForNewMessagesIndex): + Account.Preferences.SignatureIdForNewMessages = SignatureForNewMessagesIndex > -1 + && Signatures[SignatureForNewMessagesIndex].Id != EmptyGuid + ? Signatures[SignatureForNewMessagesIndex].Id : null; + await _accountService.UpdateAccountAsync(Account); + break; + case nameof(SignatureForFollowingMessagesIndex): + Account.Preferences.SignatureIdForFollowingMessages = SignatureForFollowingMessagesIndex > -1 + && Signatures[SignatureForFollowingMessagesIndex].Id != EmptyGuid + ? Signatures[SignatureForFollowingMessagesIndex].Id : null; + await _accountService.UpdateAccountAsync(Account); + break; } } - private async Task SaveSignatureAsync() + [RelayCommand] + private async Task OpenSignatureEditorCreateAsync() { - if (IsSignatureEnabled) - { - var newSignature = Regex.Unescape(await GetHTMLBodyFunction()); + var dialogResult = await DialogService.ShowSignatureEditorDialog(); - await _signatureService.UpdateAccountSignatureAsync(Account.Id, newSignature); + if (dialogResult == null) return; - DialogService.InfoBarMessage(Translator.Info_SignatureSavedTitle, Translator.Info_SignatureSavedMessage, Core.Domain.Enums.InfoBarMessageType.Success); - } - else - { - await _signatureService.DeleteAccountSignatureAssignment(Account.Id); + dialogResult.MailAccountId = Account.Id; + Signatures.Add(dialogResult); + await _signatureService.CreateSignatureAsync(dialogResult); + } - DialogService.InfoBarMessage(Translator.Info_SignatureDisabledTitle, Translator.Info_SignatureDisabledMessage, Core.Domain.Enums.InfoBarMessageType.Success); - } + [RelayCommand] + private async Task OpenSignatureEditorEditAsync(AccountSignature signatureModel) + { + var dialogResult = await DialogService.ShowSignatureEditorDialog(signatureModel); + + if (dialogResult == null) return; + + var indexOfCurrentSignature = Signatures.IndexOf(signatureModel); + var signatureNewMessagesIndex = SignatureForNewMessagesIndex; + var signatureFollowingMessagesIndex = SignatureForFollowingMessagesIndex; + + Signatures[indexOfCurrentSignature] = dialogResult; + + // Reset selection to point updated signature. + // When Item updated/removed index switches to -1. We save index that was used before and update -1 to it. + if (signatureNewMessagesIndex == indexOfCurrentSignature) + SignatureForNewMessagesIndex = indexOfCurrentSignature; + + if (signatureFollowingMessagesIndex == indexOfCurrentSignature) + SignatureForFollowingMessagesIndex = indexOfCurrentSignature; + + await _signatureService.UpdateSignatureAsync(dialogResult); + } + + [RelayCommand] + private async Task RemoveSignatureAsync(AccountSignature signatureModel) + { + var dialogResult = await DialogService.ShowConfirmationDialogAsync(string.Format(Translator.SignatureDeleteDialog_Message, signatureModel.Name), Translator.SignatureDeleteDialog_Title, Translator.Buttons_Delete); + + if (!dialogResult) return; + + Signatures.Remove(signatureModel); + await _signatureService.DeleteSignatureAsync(signatureModel); } } } diff --git a/Wino.Mail/Dialogs/SignatureEditorDialog.xaml b/Wino.Mail/Dialogs/SignatureEditorDialog.xaml new file mode 100644 index 00000000..1665a12e --- /dev/null +++ b/Wino.Mail/Dialogs/SignatureEditorDialog.xaml @@ -0,0 +1,266 @@ + + + + 1200 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +