remove AI integration and account limits
This commit is contained in:
@@ -1,12 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace Wino.Core.Domain.Enums;
|
||||
|
||||
[Flags]
|
||||
public enum AiActionType
|
||||
{
|
||||
None = 0,
|
||||
Translate = 1,
|
||||
Rewrite = 2,
|
||||
Summarize = 4,
|
||||
}
|
||||
@@ -2,6 +2,5 @@ namespace Wino.Core.Domain.Enums;
|
||||
|
||||
public enum WinoAddOnProductType
|
||||
{
|
||||
AI_PACK,
|
||||
UNLIMITED_ACCOUNTS
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using Wino.Core.Domain.Models.Ai;
|
||||
|
||||
namespace Wino.Core.Domain.Interfaces;
|
||||
|
||||
public interface IAiActionOptionsService
|
||||
{
|
||||
IReadOnlyList<AiTranslateLanguageOption> GetTranslateLanguageOptions();
|
||||
IReadOnlyList<AiRewriteModeOption> GetRewriteModeOptions();
|
||||
}
|
||||
@@ -3,7 +3,6 @@ using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Wino.Core.Domain.Models.Accounts;
|
||||
using Wino.Mail.Api.Contracts.Ai;
|
||||
using Wino.Mail.Api.Contracts.Auth;
|
||||
using Wino.Mail.Api.Contracts.Common;
|
||||
using Wino.Mail.Api.Contracts.Users;
|
||||
@@ -19,10 +18,6 @@ public interface IWinoAccountApiClient
|
||||
Task<ApiEnvelope<JsonElement>> ForgotPasswordAsync(string email, CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<JsonElement>> LogoutAsync(string refreshToken, CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<AuthUserDto>> GetCurrentUserAsync(CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<AiStatusResultDto>> GetAiStatusAsync(CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<AiTextResultDto>> SummarizeAsync(string html, string targetLanguage, CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<AiTextResultDto>> TranslateAsync(string html, string targetLanguage, CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<AiTextResultDto>> RewriteAsync(string html, string mode, CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<WinoStoreCollectionsIdTicketInfo>> CreateCollectionsIdTicketAsync(CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<WinoStoreCollectionsIdTicketInfo>> CreatePurchaseIdTicketAsync(CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<JsonElement>> SyncStoreEntitlementsAsync(string? storeIdKey, string? purchaseIdKey, CancellationToken cancellationToken = default);
|
||||
|
||||
@@ -5,7 +5,6 @@ using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Wino.Core.Domain.Entities.Shared;
|
||||
using Wino.Core.Domain.Models.Accounts;
|
||||
using Wino.Mail.Api.Contracts.Ai;
|
||||
using Wino.Mail.Api.Contracts.Auth;
|
||||
using Wino.Mail.Api.Contracts.Common;
|
||||
using Wino.Mail.Api.Contracts.Users;
|
||||
@@ -24,10 +23,6 @@ public interface IWinoAccountProfileService
|
||||
Task<WinoAccount?> GetAuthenticatedAccountAsync(CancellationToken cancellationToken = default);
|
||||
Task<bool> HasActiveAccountAsync();
|
||||
Task<ApiEnvelope<AuthUserDto>> GetCurrentUserAsync(CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<AiStatusResultDto>> GetAiStatusAsync(CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<AiTextResultDto>> SummarizeAsync(string html, string targetLanguage, CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<AiTextResultDto>> TranslateAsync(string html, string targetLanguage, CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<AiTextResultDto>> RewriteAsync(string html, string mode, CancellationToken cancellationToken = default);
|
||||
Task<ApiEnvelope<JsonElement>> SyncStoreEntitlementsAsync(CancellationToken cancellationToken = default);
|
||||
Task<string?> GetSettingsAsync(CancellationToken cancellationToken = default);
|
||||
Task SaveSettingsAsync(string settingsJson, CancellationToken cancellationToken = default);
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
namespace Wino.Core.Domain.Models.Ai;
|
||||
|
||||
public sealed record AiRewriteModeOption(string Mode, string Label, string Description, bool IsCustom = false);
|
||||
@@ -1,3 +0,0 @@
|
||||
namespace Wino.Core.Domain.Models.Ai;
|
||||
|
||||
public sealed record AiTranslateLanguageOption(string Code, string Label);
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Скрийте бутона за профила в заглавната лента, който отваря изскачащото меню за акаунта Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Уведомления за обновления в магазина",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Показвайте уведомления и действия в долния колонтитър, когато има налично обновление на Microsoft Store.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Скрий панела за AI действия",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Скрий AI действия в съставителя и читателя на имейли.",
|
||||
"SettingsAppPreferences_AiActions_Title": "AI действия",
|
||||
"SettingsAppPreferences_AiActions_Description": "Изберете езиците за AI по подразбиране и къде трябва да се запазват резюметата.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Език по подразбиране за превод",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Изберете език по подразбиране за превод от AI.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Език за обобщение",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Обобщи с AI",
|
||||
"Composer_AiSummarizeDescription": "Извлича ключови точки, действия и решения от този имейл.",
|
||||
"Composer_AiTranslate": "Преведи с AI",
|
||||
"Composer_AiActions": "AI действия",
|
||||
"Composer_AiRewrite": "Препиши с AI",
|
||||
"AiActions_CheckingStatus": "Проверка на достъпа до AI...",
|
||||
"AiActions_SignedOutTitle": "Разблокирайте Wino AI Pack",
|
||||
"AiActions_SignedOutDescription": "Превеждайте, преписвайте и обобщавайте имейли с AI след влизане във вашия Wino акаунт и активиране на добавката AI Pack.",
|
||||
"AiActions_NoPackTitle": "AI пакет",
|
||||
"AiActions_NoPackDescription": "Вие сте вписани, но AI Pack не е активен. Купете го, за да използвате инструментите за AI превод, преписване и обобщаване на Wino.",
|
||||
"AiActions_UsageSummary": "{0} от {1} кредити използвани този месец.",
|
||||
"Composer_AiRewritePolite": "Направи го учтиво",
|
||||
"Composer_AiRewritePoliteDescription": "Улеснява формулировката, запазвайки същия смисъл.",
|
||||
"Composer_AiRewriteAngry": "Направи го ядосано",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / месец",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1 000 кредита",
|
||||
"WinoAccount_Management_AiPackGetButton": "Вземи AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "AI-инструменти за превод, преработка и резюмиране на имейли в Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, превод, преработка, резюмиране, производителност",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Неограничени акаунти",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Премахнете ограниченията за акаунти и добавяйте толкова имейл акаунти, колкото ви трябват.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "акаунти, неограничени, премиум, добавка",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Amaga el botó de perfil de la barra de títol que obre el desplegable del compte de Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Notificacions d'actualitzacions de la Botiga",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Mostra notificacions i accions al peu de pàgina quan hi hagi una actualització disponible a Microsoft Store.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Oculta el panell d'accions d'IA",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Oculta les accions d'IA en el redactor i en el lector de correu.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Accions d'IA",
|
||||
"SettingsAppPreferences_AiActions_Description": "Trieu les llengües d'IA predeterminades i on s'han d'emmagatzemar els resums.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Idioma de traducció predeterminant",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Trieu l'idioma de destinació predeterminat utilitzat per les accions de traducció amb IA.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Idioma de resum",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Resumir amb IA",
|
||||
"Composer_AiSummarizeDescription": "Extreu punts clau, accions i decisions d'aquest correu electrònic.",
|
||||
"Composer_AiTranslate": "Tradueix amb IA",
|
||||
"Composer_AiActions": "Accions d'IA",
|
||||
"Composer_AiRewrite": "Reescriu amb IA",
|
||||
"AiActions_CheckingStatus": "Comprovant l'accés a IA...",
|
||||
"AiActions_SignedOutTitle": "Desbloqueja el paquet IA de Wino",
|
||||
"AiActions_SignedOutDescription": "Traduïu, reescriviu i resumi correus electrònics amb IA després d'iniciar sessió al teu compte Wino i activar l'extensió AI Pack.",
|
||||
"AiActions_NoPackTitle": "Cal l'AI Pack",
|
||||
"AiActions_NoPackDescription": "Estàs connectat, però l'AI Pack encara no està actiu. Adquireix-lo per utilitzar les eines de traducció, reescriptura i resum amb IA de Wino.",
|
||||
"AiActions_UsageSummary": "{0} de {1} crèdits utilitzats aquest mes.",
|
||||
"Composer_AiRewritePolite": "Fes-ho més educat",
|
||||
"Composer_AiRewritePoliteDescription": "Suavitza la redacció mantenint la mateixa intenció.",
|
||||
"Composer_AiRewriteAngry": "Fes-ho enfadat",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / mes",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1.000 crèdits",
|
||||
"WinoAccount_Management_AiPackGetButton": "Obtenir AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "Eines alimentades per IA per traduir, reformular i resumir accions a Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "IA, traducció, reescriptura, resum, productivitat",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Comptes il·limitats",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Elimina la limitació de comptes i afegeix tants comptes de correu com necessitis.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "comptes, il·limitats, premium, complement",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Skrýt tlačítko profilu v liště titulku, které otevírá nabídku účtu Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Oznámení o aktualizacích z Microsoft Store.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Zobrazovat oznámení a akce v patičce, když je k dispozici aktualizace z Microsoft Store.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Skrýt panel akcí AI",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Skrýt AI akce v editoru e-mailů a čtečce.",
|
||||
"SettingsAppPreferences_AiActions_Title": "AI akce",
|
||||
"SettingsAppPreferences_AiActions_Description": "Vyberte výchozí jazyky pro AI a kde mají být souhrny ukládány.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Výchozí jazyk překladu",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Vyberte výchozí cílový jazyk použitý při překladech AI.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Jazyk shrnutí",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Shrnout pomocí AI",
|
||||
"Composer_AiSummarizeDescription": "Z tohoto e-mailu vyextrahujte klíčové body, akční kroky a rozhodnutí.",
|
||||
"Composer_AiTranslate": "Přeložit pomocí AI",
|
||||
"Composer_AiActions": "AI akce",
|
||||
"Composer_AiRewrite": "Přepsat pomocí AI",
|
||||
"AiActions_CheckingStatus": "Ověřování přístupu k AI...",
|
||||
"AiActions_SignedOutTitle": "Odemknout Wino AI balíček",
|
||||
"AiActions_SignedOutDescription": "Překládejte, přepište a shrnujte e-maily pomocí AI po přihlášení k vašemu účtu Wino a aktivaci doplňku AI Pack.",
|
||||
"AiActions_NoPackTitle": "AI Pack vyžadován",
|
||||
"AiActions_NoPackDescription": "Jste přihlášeni, ale AI Pack ještě není aktivní. Zakupte si ho, abyste mohli používat Wino AI překlad, přepis a shrnutí.",
|
||||
"AiActions_UsageSummary": "Použito {0} z {1} kreditů tento měsíc.",
|
||||
"Composer_AiRewritePolite": "Udělej to zdvořile",
|
||||
"Composer_AiRewritePoliteDescription": "Zjemní formulaci a zachová stejný záměr.",
|
||||
"Composer_AiRewriteAngry": "Udělej to agresivně",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4,99 / měs.",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1 000 kreditů",
|
||||
"WinoAccount_Management_AiPackGetButton": "Získat AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "Nástroje poháněné AI pro překlad, přeformulování a shrnutí e-mailů ve Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, překlad, přeformulování, shrnutí, produktivita",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Neomezené účty",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Odeberte omezení počtu účtů a přidejte tolik e-mailových účtů, kolik potřebujete.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "účty, neomezené, prémiový, doplněk",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Skjul profilknappen i titelbjælken, som åbner Wino-kontoens flyout.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Meddelelser om opdateringer i Microsoft Store",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Vis notifikationer og handlinger i bunden, når der er en opdatering i Microsoft Store tilgængelig.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Skjul AI-handlingspanel",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Skjul AI-handlinger i mailkomponisten og læseren.",
|
||||
"SettingsAppPreferences_AiActions_Title": "AI-handlinger",
|
||||
"SettingsAppPreferences_AiActions_Description": "Vælg standard AI-sprog og hvor resuméer skal gemmes.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Standard oversættelsessprog",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Vælg det standardmål, der bruges af AI-oversættelseshandlinger.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Opsummeringssprog",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Sammenfat med AI",
|
||||
"Composer_AiSummarizeDescription": "Uddrag nøglepunkter, handlingspunkter og beslutninger fra denne e-mail.",
|
||||
"Composer_AiTranslate": "Oversæt med AI",
|
||||
"Composer_AiActions": "AI-handlinger",
|
||||
"Composer_AiRewrite": "Omskriv med AI",
|
||||
"AiActions_CheckingStatus": "Kontrollerer AI-adgang...",
|
||||
"AiActions_SignedOutTitle": "Få adgang til Wino AI-pakken.",
|
||||
"AiActions_SignedOutDescription": "Oversæt, omskriv og opsummer e-mails med AI, når du har logget ind på din Wino-konto og aktiveret AI Pack-tilføjelsen.",
|
||||
"AiActions_NoPackTitle": "AI-pakken kræves",
|
||||
"AiActions_NoPackDescription": "Du er logget ind, men AI Pack er ikke aktiveret endnu. Køb den for at bruge Winos AI-oversættelse, omskrivning og sammenfatningsværktøjer.",
|
||||
"AiActions_UsageSummary": "{0} ud af {1} kreditter brugt denne måned.",
|
||||
"Composer_AiRewritePolite": "Gør den høflig",
|
||||
"Composer_AiRewritePoliteDescription": "Gør formuleringen mere høflig uden at ændre intentionen.",
|
||||
"Composer_AiRewriteAngry": "Gør den vred",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / mo",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1.000 kreditter",
|
||||
"WinoAccount_Management_AiPackGetButton": "Få AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "AI-drevne værktøjer til oversættelse, omskrivning og sammenfatning af e-mails i Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, oversæt, omskriv, opsummer, produktivitet",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Ubegrænsede konti",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Fjern kontoens begrænsning og tilføj så mange mailkonti, som du har brug for.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "konti, ubegrænsede, premium, tilføjelsesmodul",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Profil-Schaltfläche in der Titelleiste ausblenden, die das Wino-Konto-Ausklappmenü öffnet.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Store-Update-Benachrichtigungen",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Zeigen Sie Benachrichtigungen und Fußzeilenaktionen, wenn ein Microsoft Store-Update verfügbar ist.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "KI-Aktionen-Panel ausblenden",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "KI-Aktionen im E-Mail-Verfassen- und -Lesen ausblenden.",
|
||||
"SettingsAppPreferences_AiActions_Title": "KI-Aktionen",
|
||||
"SettingsAppPreferences_AiActions_Description": "Standard-KI-Sprachen auswählen und Speicherort für Zusammenfassungen festlegen.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Standardsprache der Übersetzung",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Wählen Sie die Standardzielsprache, die von KI-Übersetzungsaktionen verwendet wird.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Zusammenfassungssprache",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Mit KI zusammenfassen",
|
||||
"Composer_AiSummarizeDescription": "Extrahiert zentrale Punkte, Maßnahmen und Entscheidungen aus dieser E-Mail.",
|
||||
"Composer_AiTranslate": "Mit KI übersetzen",
|
||||
"Composer_AiActions": "KI-Aktionen",
|
||||
"Composer_AiRewrite": "Mit KI umschreiben",
|
||||
"AiActions_CheckingStatus": "KI-Zugriff wird geprüft...",
|
||||
"AiActions_SignedOutTitle": "Wino AI-Paket entsperren",
|
||||
"AiActions_SignedOutDescription": "Übersetzen, Umschreiben und Zusammenfassen von E-Mails mit KI nach der Anmeldung bei Ihrem Wino-Konto und Aktivierung des AI Pack-Add-ons.",
|
||||
"AiActions_NoPackTitle": "KI-Paket erforderlich",
|
||||
"AiActions_NoPackDescription": "Sie sind angemeldet, aber das KI-Paket ist noch nicht aktiv. Kaufen Sie es, um Winos KI-Übersetzung, Umschreiben und Zusammenfassungswerkzeuge zu verwenden.",
|
||||
"AiActions_UsageSummary": "{0} von {1} Credits in diesem Monat verwendet.",
|
||||
"Composer_AiRewritePolite": "Höflicher formulieren",
|
||||
"Composer_AiRewritePoliteDescription": "Formulierung mildern, aber denselben Sinn beibehalten.",
|
||||
"Composer_AiRewriteAngry": "Wütend formulieren",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / mo",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1.000 Credits",
|
||||
"WinoAccount_Management_AiPackGetButton": "AI Pack erhalten",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "KI-gestützte Tools zum Übersetzen, Umformulieren und Zusammenfassen von Nachrichten in Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "KI, übersetzen, umschreiben, zusammenfassen, Produktivität",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Unbegrenzte Konten",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Entfernt das Kontolimit und fügt beliebig viele E-Mail-Konten hinzu.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "Konten, unbegrenzt, Premium, Add-on",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Απόκρυψη του κουμπιού προφίλ στη γραμμή τίτλου που ανοίγει το μενού λογαριασμού Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Ειδοποιήσεις ενημερώσεων Microsoft Store",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Εμφάνιση ειδοποιήσεων και ενεργειών στο υποσέλιδο όταν υπάρχει διαθέσιμη ενημέρωση του Microsoft Store.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Απόκρυψη πίνακα ενεργειών AI",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Απόκρυψη των ενεργειών AI στον συντάκτη και στον αναγνώστη ηλεκτρονικού ταχυδρομείου.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Ενέργειες AI",
|
||||
"SettingsAppPreferences_AiActions_Description": "Επιλέξτε προεπιλεγμένες γλώσσες AI και πού θα αποθηκεύονται οι περιλήψεις.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Προεπιλεγμένη γλώσσα μετάφρασης",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Επιλέξτε την προεπιλεγμένη γλώσσα-στόχο που χρησιμοποιούν οι ενέργειες μετάφρασης AI.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Γλώσσα περίληψης",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Περίληψη με AI",
|
||||
"Composer_AiSummarizeDescription": "Εξαγάγετε τα κύρια σημεία, ενέργειες και αποφάσεις από αυτό το email.",
|
||||
"Composer_AiTranslate": "Μετάφραση με AI",
|
||||
"Composer_AiActions": "Ενέργειες AI",
|
||||
"Composer_AiRewrite": "Αναδιατύπωση με AI",
|
||||
"AiActions_CheckingStatus": "Έλεγχος πρόσβασης AI…",
|
||||
"AiActions_SignedOutTitle": "Ξεκλειδώστε το Wino AI Pack",
|
||||
"AiActions_SignedOutDescription": "Μεταφράστε, επαναγράψτε και συνοψίστε τα email με τη χρήση AI αφού συνδεθείτε στον λογαριασμό σας Wino και ενεργοποιήσετε το πρόσθετο AI Pack.",
|
||||
"AiActions_NoPackTitle": "Απαιτείται το AI Pack",
|
||||
"AiActions_NoPackDescription": "Έχετε συνδεθεί, αλλά το AI Pack δεν είναι ενεργό ακόμα. Αγοράστε το για να χρησιμοποιήσετε τα εργαλεία μετάφρασης AI, επαναδιατύπωσης και περίληψης του Wino.",
|
||||
"AiActions_UsageSummary": "{0} από {1} πιστώσεις χρησιμοποιήθηκαν αυτό το μήνα.",
|
||||
"Composer_AiRewritePolite": "Κάντε το ευγενικό",
|
||||
"Composer_AiRewritePoliteDescription": "Μαλακώνει τη διατύπωση διατηρώντας τον ίδιο σκοπό.",
|
||||
"Composer_AiRewriteAngry": "Κάντε το να φανεί οργισμένο",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "4,99 $ / μήνα",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1.000 credits",
|
||||
"WinoAccount_Management_AiPackGetButton": "Λήψη AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "Εργαλεία με τεχνητή νοημοσύνη για μετάφραση, επαναγραφή και περίληψη ενέργειών στο Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, μετάφραση, επαναγραφή, περίληψη, παραγωγικότητα",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Απεριόριστοι Λογαριασμοί",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Αφαιρέστε τον περιορισμό λογαριασμών και προσθέστε όσους λογαριασμούς email χρειάζεστε.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "λογαριασμοί, απεριόριστο, premium, πρόσθετο",
|
||||
|
||||
@@ -790,10 +790,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Hide the title bar profile button that opens the Wino account flyout.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Store update notifications",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Show notifications and footer actions when a Microsoft Store update is available.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Hide AI actions panel",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Hide AI actions in the mail composer and reader.",
|
||||
"SettingsAppPreferences_AiActions_Title": "AI actions",
|
||||
"SettingsAppPreferences_AiActions_Description": "Choose default AI languages and where summaries should be saved.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Default translation language",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Pick the default target language used by AI translate actions.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Summarize language",
|
||||
@@ -1215,14 +1211,7 @@
|
||||
"Composer_AiSummarize": "Summarize with AI",
|
||||
"Composer_AiSummarizeDescription": "Extract key points, action items, and decisions from this email.",
|
||||
"Composer_AiTranslate": "Translate with AI",
|
||||
"Composer_AiActions": "AI Actions",
|
||||
"Composer_AiRewrite": "Rewrite with AI",
|
||||
"AiActions_CheckingStatus": "Checking AI access...",
|
||||
"AiActions_SignedOutTitle": "Unlock Wino AI Pack",
|
||||
"AiActions_SignedOutDescription": "Translate, rewrite, and summarize emails with AI after signing in to your Wino Account and activating the AI Pack add-on.",
|
||||
"AiActions_NoPackTitle": "AI Pack required",
|
||||
"AiActions_NoPackDescription": "You're signed in, but AI Pack is not active yet. Purchase it to use Wino's AI translation, rewrite, and summarize tools.",
|
||||
"AiActions_UsageSummary": "{0} of {1} credits used this month.",
|
||||
"Composer_AiRewritePolite": "Make it polite",
|
||||
"Composer_AiRewritePoliteDescription": "Softens the wording while keeping the same intent.",
|
||||
"Composer_AiRewriteAngry": "Make it angry",
|
||||
@@ -1403,9 +1392,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / mo",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1,000 credits",
|
||||
"WinoAccount_Management_AiPackGetButton": "Get AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "AI-powered tools for translate, rewrite, and summarize actions in Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, translate, rewrite, summarize, productivity",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Unlimited Accounts",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Remove the account limit and add as many mail accounts as you need.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "accounts, unlimited, premium, add-on",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Ocultar el botón de perfil en la barra de título que abre el panel desplegable de la cuenta de Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Notificaciones de actualizaciones de Microsoft Store",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Mostrar notificaciones y acciones en el pie de página cuando haya una actualización de Microsoft Store disponible.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Ocultar panel de acciones de IA",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Ocultar las acciones de IA en el compositor y lector de correo.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Acciones de IA",
|
||||
"SettingsAppPreferences_AiActions_Description": "Elegir los idiomas de IA predeterminados y dónde guardar los resúmenes.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Idioma de traducción predeterminado",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Seleccione el lenguaje de destino predeterminado utilizado por las acciones de traducción IA.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Idioma de resumen",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Resumir con IA",
|
||||
"Composer_AiSummarizeDescription": "Extrae puntos clave, acciones y decisiones de este correo.",
|
||||
"Composer_AiTranslate": "Traducir con IA",
|
||||
"Composer_AiActions": "Acciones de IA",
|
||||
"Composer_AiRewrite": "Reescribir con IA",
|
||||
"AiActions_CheckingStatus": "Comprobando acceso a IA...",
|
||||
"AiActions_SignedOutTitle": "Desbloquear el paquete de IA de Wino",
|
||||
"AiActions_SignedOutDescription": "Traduce, reescribe y resume correos con IA después de iniciar sesión en tu cuenta de Wino y activar el paquete IA.",
|
||||
"AiActions_NoPackTitle": "Se requiere paquete IA",
|
||||
"AiActions_NoPackDescription": "Ya has iniciado sesión, pero el paquete IA no está activo. Adquiérelo para usar las herramientas de traducción, reescritura y resumen con IA de Wino.",
|
||||
"AiActions_UsageSummary": "{0} de {1} créditos usados este mes.",
|
||||
"Composer_AiRewritePolite": "Hazlo más cortés",
|
||||
"Composer_AiRewritePoliteDescription": "Suaviza el tono manteniendo la misma intención.",
|
||||
"Composer_AiRewriteAngry": "Hazlo más enfadado",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4,99 / mes",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1.000 créditos",
|
||||
"WinoAccount_Management_AiPackGetButton": "Obtener AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "Herramientas impulsadas por IA para traducir, reescribir y resumir acciones en Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "IA, traducir, reescribir, resumir, productividad",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Cuentas ilimitadas",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Elimina el límite de cuentas y añade tantas cuentas de correo como necesites.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "cuentas, ilimitadas, premium, complemento",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Piilota otsikkorivillä oleva profiilipainike, joka avaa Wino-tilin valikon.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Store-päivitysilmoitukset",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Näytä ilmoitukset ja alatunnisteen toiminnot, kun Microsoft Store -päivitys on saatavilla.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Piilota tekoälytoimintojen paneeli",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Piilota tekoälytoiminnot sähköpostin kirjoitus- ja lukutilassa.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Tekoälytoiminnot",
|
||||
"SettingsAppPreferences_AiActions_Description": "Valitse tekoälyn oletuskielet ja mihin yhteenvetoja tallennetaan.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Oletuskäännöksen kieli",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Valitse tekoälykäännösten oletuskieli.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Tiivistämisen kieli",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Tiivistä tekoälyn avulla",
|
||||
"Composer_AiSummarizeDescription": "Tuo tämän sähköpostin keskeiset kohdat, toimenpiteet ja päätökset.",
|
||||
"Composer_AiTranslate": "Käännä tekoälyn avulla",
|
||||
"Composer_AiActions": "Tekoälyn toimet",
|
||||
"Composer_AiRewrite": "Uudelleenkirjoita tekoälyn avulla",
|
||||
"AiActions_CheckingStatus": "Tarkistetaan tekoälyyn pääsyä...",
|
||||
"AiActions_SignedOutTitle": "Poista Wino AI Packin lukitus",
|
||||
"AiActions_SignedOutDescription": "Käännä, kirjoita ja tiivistä sähköposteja tekoälyn avulla kirjautumalla Wino-tilillesi ja aktivoimalla AI Pack -lisäosan.",
|
||||
"AiActions_NoPackTitle": "AI Pack vaaditaan",
|
||||
"AiActions_NoPackDescription": "Olet kirjautuneena sisään, mutta AI Pack ei ole vielä käytössä. Osta se käyttääksesi Wino'n tekoälyn käännöksiä, uudelleenkirjoitusta ja tiivistämistyökaluja.",
|
||||
"AiActions_UsageSummary": "Tässä kuussa käytettyjen krediittien määrä: {0} / {1}",
|
||||
"Composer_AiRewritePolite": "Tee siitä kohteliaampi",
|
||||
"Composer_AiRewritePoliteDescription": "Lievittää sanamuotoa samalla säilyttäen saman tarkoituksen.",
|
||||
"Composer_AiRewriteAngry": "Tee siitä vihaisen",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / kk",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1 000 krediittiä",
|
||||
"WinoAccount_Management_AiPackGetButton": "Hae AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "AI-pohjaisia työkaluja kääntä-, uudelleenkirjoittamis- ja tiivistystoimintoja Wino Mailiin.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, kääntäminen, uudelleenkirjoittaminen, tiivistäminen, tuottavuus",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Rajoittamattomat tilit",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Poista tilirajoitus ja lisää haluamasi määrän sähköpostitilejä.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "tilit, rajoittamattomat, premium, lisäosa",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Masquer le bouton de profil dans la barre de titre qui ouvre le volet du compte Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Notifications de mise à jour du Store",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Afficher les notifications et les actions de bas de page lorsqu'une mise à jour du Microsoft Store est disponible.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Masquer le panneau des actions IA",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Masquer les actions IA dans le rédacteur et le lecteur de mails.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Actions IA",
|
||||
"SettingsAppPreferences_AiActions_Description": "Choisissez les langues IA par défaut et où les résumés doivent être enregistrés.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Langue de traduction par défaut",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Choisissez la langue cible par défaut utilisée par les actions de traduction IA.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Langue de résumé",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Résumer avec l'IA",
|
||||
"Composer_AiSummarizeDescription": "Extraire les points clés, les éléments d'action et les décisions de ce courriel.",
|
||||
"Composer_AiTranslate": "Traduire avec l'IA",
|
||||
"Composer_AiActions": "Actions IA",
|
||||
"Composer_AiRewrite": "Réécrire avec l'IA",
|
||||
"AiActions_CheckingStatus": "Vérification de l'accès à l'IA...",
|
||||
"AiActions_SignedOutTitle": "Déverrouiller le pack IA Wino",
|
||||
"AiActions_SignedOutDescription": "Traduire, réécrire et résumer les e-mails avec l'IA après vous être connecté à votre compte Wino et avoir activé l'extension AI Pack.",
|
||||
"AiActions_NoPackTitle": "Pack IA requis",
|
||||
"AiActions_NoPackDescription": "Vous êtes connecté, mais le pack IA n'est pas encore actif. Achetez-le pour utiliser les outils de traduction, réécriture et résumé de Wino.",
|
||||
"AiActions_UsageSummary": "{0} sur {1} crédits utilisés ce mois-ci.",
|
||||
"Composer_AiRewritePolite": "Rendre plus poli",
|
||||
"Composer_AiRewritePoliteDescription": "Adoucit le ton tout en conservant le même sens.",
|
||||
"Composer_AiRewriteAngry": "Rendre plus agressif",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "4,99 $ / mois",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1 000 crédits",
|
||||
"WinoAccount_Management_AiPackGetButton": "Obtenir AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "Outils IA pour traduire, réécrire et résumer les actions dans Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "IA, traduire, réécrire, résumer, productivité",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Comptes illimités",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Supprimer la limite de comptes et ajouter autant de comptes de messagerie que nécessaire.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "comptes, illimités, premium, module complémentaire",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Ocultar o botón de perfil na barra de título que abre o panel da conta de Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Notificacións de actualización da Microsoft Store.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Mostrar notificacións e accións no rodapé cando haxa unha actualización da Microsoft Store disponível.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Agochar panel de accións de IA",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Agochar as accións de IA no redactor e no lector de correo.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Accións de IA",
|
||||
"SettingsAppPreferences_AiActions_Description": "Elixa os idiomas de IA predeterminados e onde se deben gardar os resumos.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Idioma de tradución por defecto.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Selecciona o idioma de destino predeterminado utilizado polas accións de tradución da IA.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Idioma de resumo.",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Resumir con IA",
|
||||
"Composer_AiSummarizeDescription": "Extrae puntos clave, accións e decisións deste correo.",
|
||||
"Composer_AiTranslate": "Traducir con IA",
|
||||
"Composer_AiActions": "Accións IA",
|
||||
"Composer_AiRewrite": "Reescribe con IA",
|
||||
"AiActions_CheckingStatus": "Comprobando o acceso á IA...",
|
||||
"AiActions_SignedOutTitle": "Desbloquear o paquete AI de Wino",
|
||||
"AiActions_SignedOutDescription": "Traducir, reescribir e resumir correos con IA despois de iniciar sesión na túa Conta Wino e activar o complemento AI Pack.",
|
||||
"AiActions_NoPackTitle": "Precísase AI Pack",
|
||||
"AiActions_NoPackDescription": "Iniciaste sesión, pero o AI Pack non está activo aínda. Cómprao para usar as ferramentas de tradución, reescritura e resumo de IA de Wino.",
|
||||
"AiActions_UsageSummary": "{0} de {1} créditos usados este mes.",
|
||||
"Composer_AiRewritePolite": "Faino máis educado",
|
||||
"Composer_AiRewritePoliteDescription": "Ablanda a redacción mantendo o mesmo propósito.",
|
||||
"Composer_AiRewriteAngry": "Faino enfadado",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / mes",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1,000 créditos",
|
||||
"WinoAccount_Management_AiPackGetButton": "Obter Pacote IA",
|
||||
"WinoAddOn_AI_PACK_Name": "Pacote IA de Wino",
|
||||
"WinoAddOn_AI_PACK_Description": "Ferramentas alimentadas por IA para traducir, reescribir e resumir accións en Wino Mail",
|
||||
"WinoAddOn_AI_PACK_Keywords": "IA, traducir, reescribir, resumir, produtividade",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Contas ilimitadas",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Quita o límite de contas e engade as contas de correo que precises",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "contas, ilimitadas, premium, complemento",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Sembunyikan tombol profil di bilah judul yang membuka flyout akun Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Pemberitahuan pembaruan toko",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Tampilkan pemberitahuan dan tindakan footer saat pembaruan Microsoft Store tersedia.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Sembunyikan panel tindakan AI",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Sembunyikan tindakan AI di penyusun email dan pembaca email.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Tindakan AI",
|
||||
"SettingsAppPreferences_AiActions_Description": "Pilih bahasa AI bawaan dan tempat ringkasan disimpan.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Bahasa terjemahan bawaan",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Pilih bahasa target default yang digunakan oleh tindakan terjemahan AI.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Bahasa ringkasan",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Ringkas dengan AI",
|
||||
"Composer_AiSummarizeDescription": "Ekstrak poin-poin utama, item tindakan, dan keputusan dari email ini.",
|
||||
"Composer_AiTranslate": "Terjemahkan dengan AI",
|
||||
"Composer_AiActions": "Tindakan AI",
|
||||
"Composer_AiRewrite": "Tulis ulang dengan AI",
|
||||
"AiActions_CheckingStatus": "Memeriksa akses AI...",
|
||||
"AiActions_SignedOutTitle": "Buka Paket AI Wino",
|
||||
"AiActions_SignedOutDescription": "Terjemahkan, tulis ulang, dan rangkum email menggunakan AI setelah masuk ke Akun Wino Anda dan mengaktifkan add-on Paket AI.",
|
||||
"AiActions_NoPackTitle": "Diperlukan Paket AI",
|
||||
"AiActions_NoPackDescription": "Anda telah masuk, tetapi Paket AI belum aktif. Beli paketnya untuk menggunakan alat terjemahan AI, penulisan ulang, dan rangkuman AI Wino.",
|
||||
"AiActions_UsageSummary": "{0} dari {1} kredit telah digunakan bulan ini.",
|
||||
"Composer_AiRewritePolite": "Jadikan lebih sopan",
|
||||
"Composer_AiRewritePoliteDescription": "Membuat kata-kata lebih halus tanpa mengubah maksudnya.",
|
||||
"Composer_AiRewriteAngry": "Buat marah",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4,99 / bln",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1.000 kredit",
|
||||
"WinoAccount_Management_AiPackGetButton": "Dapatkan Paket AI",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "Alat bertenaga AI untuk menerjemahkan, menulis ulang, dan merangkum tindakan di Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, terjemahan, menulis ulang, merangkum, produktivitas",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Akun Tak Terbatas",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Hapus batas akun dan tambahkan sebanyak mungkin akun email yang Anda perlukan.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "akun, tak terbatas, premium, add-on",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Nascondi il pulsante profilo nella barra del titolo che apre il menu dell'account Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Notifiche di aggiornamento del Microsoft Store.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Mostra notifiche e azioni a piè di pagina quando è disponibile un aggiornamento dal Microsoft Store.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Nascondi pannello azioni IA",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Nascondi le azioni IA nel redattore di posta e nel lettore.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Azioni AI",
|
||||
"SettingsAppPreferences_AiActions_Description": "Scegli le lingue predefinite per l'IA e dove dovrebbero essere salvati i riassunti.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Lingua di traduzione predefinita",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Seleziona la lingua di destinazione predefinita utilizzata dalle azioni di traduzione AI.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Lingua di riepilogo",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Riepiloga con l'IA",
|
||||
"Composer_AiSummarizeDescription": "Estrai i punti chiave, le azioni e le decisioni da questa email.",
|
||||
"Composer_AiTranslate": "Traduci con l'IA",
|
||||
"Composer_AiActions": "Azioni IA",
|
||||
"Composer_AiRewrite": "Riformula con l'IA",
|
||||
"AiActions_CheckingStatus": "Verifica l'accesso all'IA...",
|
||||
"AiActions_SignedOutTitle": "Sblocca Wino AI Pack",
|
||||
"AiActions_SignedOutDescription": "Traduci, riscrivi e riassumi le email con l'IA dopo aver effettuato l'accesso al tuo account Wino e attivato l'add-on AI Pack.",
|
||||
"AiActions_NoPackTitle": "AI Pack richiesto",
|
||||
"AiActions_NoPackDescription": "Hai effettuato l'accesso, ma l'AI Pack non è attivo ancora. Acquistalo per utilizzare gli strumenti di traduzione, riscrittura e riassunto con IA di Wino.",
|
||||
"AiActions_UsageSummary": "{0} di {1} crediti usati questo mese.",
|
||||
"Composer_AiRewritePolite": "Rendilo più cortese",
|
||||
"Composer_AiRewritePoliteDescription": "Rende la formulazione meno rigida mantenendo lo stesso intento.",
|
||||
"Composer_AiRewriteAngry": "Rendilo arrabbiato",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4,99 / mese",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1.000 crediti",
|
||||
"WinoAccount_Management_AiPackGetButton": "Ottieni AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "Strumenti basati sull'IA per tradurre, riscrivere e riassumere azioni in Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "IA, traduci, riscrivi, riassumi, produttività",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Account illimitati",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Rimuovi il limite di account e aggiungi quanti account di posta ti servono.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "account, illimitato, premium, componente aggiuntivo",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Wino アカウントのドロップダウンを開くタイトルバーのプロフィールボタンを非表示にします。",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "ストアの更新通知",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Microsoft Store の更新が利用可能なときに通知とフッターのアクションを表示します。",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "AI アクションパネルを非表示",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "メール作成時およびメール閲覧時の AI アクションを非表示にします。",
|
||||
"SettingsAppPreferences_AiActions_Title": "AI アクション",
|
||||
"SettingsAppPreferences_AiActions_Description": "デフォルトの AI 言語と要約を保存する場所を選択します。",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "デフォルトの翻訳言語",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "AI 翻訳アクションで使用されるデフォルトのターゲット言語を選択します。",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "要約言語",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "AI で要約",
|
||||
"Composer_AiSummarizeDescription": "このメールから要点、アクション項目、決定事項を抽出します。",
|
||||
"Composer_AiTranslate": "AI で翻訳",
|
||||
"Composer_AiActions": "AI アクション",
|
||||
"Composer_AiRewrite": "AI で言い換え",
|
||||
"AiActions_CheckingStatus": "AI アクセスを確認しています...",
|
||||
"AiActions_SignedOutTitle": "Wino AI パックのロックを解除",
|
||||
"AiActions_SignedOutDescription": "Wino ア카ウントにサインインし、AI パックのアドオンを有効にした後、AI を使用してメールを翻訳・リライト・要約します。",
|
||||
"AiActions_NoPackTitle": "AI パックが必要です",
|
||||
"AiActions_NoPackDescription": "サインインしていますが、AI パックはまだ有効になっていません。Wino の AI 翻訳、リライト、要約機能を使用するには購入してください。",
|
||||
"AiActions_UsageSummary": "今月は {0} / {1} クレジットを使用しました。",
|
||||
"Composer_AiRewritePolite": "丁寧に書き直す",
|
||||
"Composer_AiRewritePoliteDescription": "意図を変えず、表現を柔らかくします。",
|
||||
"Composer_AiRewriteAngry": "怒りっぽく書く",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99/月",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1,000 クレジット",
|
||||
"WinoAccount_Management_AiPackGetButton": "AI Packを入手",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "Wino Mail で翻訳、書き換え、要約を行うAI搭載ツールです。",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI、翻訳、書き換え、要約、生産性",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "無制限アカウント",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "アカウントの上限を解除し、必要なだけメールアカウントを追加できます。",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "アカウント、無制限、プレミアム、アドオン",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Wino 계정 팝업을 여는 제목 표시줄의 프로필 버튼을 숨깁니다.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "스토어 업데이트 알림",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Microsoft Store 업데이트가 이용 가능할 때 알림 및 바닥글 작업을 표시합니다.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "AI 동작 패널 숨기기",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "메일 작성기와 읽기에서 AI 동작을 숨깁니다.",
|
||||
"SettingsAppPreferences_AiActions_Title": "AI 동작",
|
||||
"SettingsAppPreferences_AiActions_Description": "AI 번역 작업에서 사용할 기본 언어와 요약 저장 위치를 선택합니다.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "기본 번역 언어",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "AI 번역 작업에서 사용할 기본 대상 언어를 선택하세요.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "요약 언어",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "AI로 요약",
|
||||
"Composer_AiSummarizeDescription": "이 이메일에서 핵심 포인트, 실행 항목 및 의사결정을 추출합니다.",
|
||||
"Composer_AiTranslate": "AI로 번역",
|
||||
"Composer_AiActions": "AI 작업",
|
||||
"Composer_AiRewrite": "AI로 재작성",
|
||||
"AiActions_CheckingStatus": "AI 접근 권한 확인 중...",
|
||||
"AiActions_SignedOutTitle": "Wino AI 팩 잠금 해제",
|
||||
"AiActions_SignedOutDescription": "Wino 계정에 로그인하고 AI Pack 애드온을 활성화한 후 AI로 이메일을 번역, 재작성 및 요약합니다.",
|
||||
"AiActions_NoPackTitle": "AI Pack 필요",
|
||||
"AiActions_NoPackDescription": "로그인되어 있지만 AI Pack이 아직 활성화되어 있지 않습니다. Wino의 AI 번역, 재작성 및 요약 도구를 사용하려면 구매하십시오.",
|
||||
"AiActions_UsageSummary": "{0} 중 {1} 크레딧이 이번 달에 사용되었습니다.",
|
||||
"Composer_AiRewritePolite": "정중하게 다듬기",
|
||||
"Composer_AiRewritePoliteDescription": "의도는 유지하면서 표현을 부드럽게 다듬습니다.",
|
||||
"Composer_AiRewriteAngry": "화나게 다듬기",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 /월",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1,000 크레딧",
|
||||
"WinoAccount_Management_AiPackGetButton": "AI Pack 받기",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "AI 기반 도구로 Wino Mail에서 번역, 재작성 및 요약 작업을 수행합니다.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, 번역, 재작성, 요약, 생산성",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "무제한 계정",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "계정 한도를 제거하고 필요한 만큼의 메일 계정을 추가합니다.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "계정, 무제한, 프리미엄, 애드온",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Slėpti pavadinimo juostos profilio mygtuką, kuris atveria Wino paskyros išskleidžiamąjį langą.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Parduotuvės atnaujinimų pranešimai",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Rodyti pranešimus ir veiksmus apačioje, kai Microsoft Store bus prieinamas atnaujinimas.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Slėpti AI veiksmų skydelį",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Slėpti AI veiksmus el. pašto rengyklėje ir skaitytuve.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Dirbtinio intelekto veiksmai",
|
||||
"SettingsAppPreferences_AiActions_Description": "Pasirinkite numatytas AI kalbas ir kur turėtų būti saugomos santraukos.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Numatomoji vertimo kalba",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Pasirinkite numatytąją tikslinę kalbą, kuri bus naudojama AI vertimo veiksmuose.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Santraukos kalba",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Apibendrinti su AI",
|
||||
"Composer_AiSummarizeDescription": "Ištraukite pagrindines mintis, veiksmų punktus ir sprendimus iš šio el. laiško.",
|
||||
"Composer_AiTranslate": "Išversti su AI",
|
||||
"Composer_AiActions": "AI veiksmai",
|
||||
"Composer_AiRewrite": "Perrašyti su AI",
|
||||
"AiActions_CheckingStatus": "Tikrinama prieiga prie AI...",
|
||||
"AiActions_SignedOutTitle": "Atrakinkite Wino AI paketą",
|
||||
"AiActions_SignedOutDescription": "Išverskite, perrašykite ir apibendrinkite el. laiškus naudodami AI prisijungę prie savo Wino paskyros ir aktyvavę AI Pack papildinį.",
|
||||
"AiActions_NoPackTitle": "Reikia AI paketo",
|
||||
"AiActions_NoPackDescription": "Jūs esate prisijungęs, tačiau AI paketas dar neveikia. Įsigykite jį, kad naudotumėte Wino AI vertimo, perrašymo ir santraukos įrankius.",
|
||||
"AiActions_UsageSummary": "{0} iš {1} kreditų šį mėnesį panaudota.",
|
||||
"Composer_AiRewritePolite": "Padarykite mandagų toną",
|
||||
"Composer_AiRewritePoliteDescription": "Švelnina formuluotę išlaikant tą patį tikslą.",
|
||||
"Composer_AiRewriteAngry": "Padarykite piktą toną",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4,99 / mėn",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1 000 kreditų",
|
||||
"WinoAccount_Management_AiPackGetButton": "Gauti AI paketą",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "AI pagrindu veikiantys įrankiai vertimams, perrašymams ir santraukoms Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, vertimas, perrašymas, santraukos, produktyvumas",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Neribotos paskyros",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Šalina paskyrų apribojimą ir leidžia pridėti tiek el. pašto paskyrų, kiek reikia.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "paskyros, neribotos, premium, priedas",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Verberg de profielknop in de titelbalk die het Wino-account-uitklapmenu opent.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Store-updatemeldingen",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Toon meldingen en footer-acties wanneer er een Microsoft Store-update beschikbaar is.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "AI-actiespaneel verbergen",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Verberg AI-acties in de e-mailopsteller en -lezer.",
|
||||
"SettingsAppPreferences_AiActions_Title": "AI-acties",
|
||||
"SettingsAppPreferences_AiActions_Description": "Kies de standaard AI-talen en waar samenvattingen moeten worden opgeslagen.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Standaard doeltaal",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Kies de standaard doeltaal die door AI-vertalingacties wordt gebruikt.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Samenvatteltaal",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Samenvatten met AI",
|
||||
"Composer_AiSummarizeDescription": "Haal belangrijke punten, actiepunten en beslissingen uit deze e-mail.",
|
||||
"Composer_AiTranslate": "Vertaal met AI",
|
||||
"Composer_AiActions": "AI-acties",
|
||||
"Composer_AiRewrite": "Herschrijven met AI",
|
||||
"AiActions_CheckingStatus": "AI-toegang controleren...",
|
||||
"AiActions_SignedOutTitle": "Wino AI-pack ontgrendelen",
|
||||
"AiActions_SignedOutDescription": "Vertaal, herschrijf en vat e-mails samen met AI nadat u bent ingelogd op uw Wino-account en de AI Pack-add-on hebt geactiveerd.",
|
||||
"AiActions_NoPackTitle": "AI Pack vereist",
|
||||
"AiActions_NoPackDescription": "U bent ingelogd, maar AI Pack is nog niet actief. Koop het om de AI-vertaling, herschrijf- en samenvattingshulpmiddelen van Wino te gebruiken.",
|
||||
"AiActions_UsageSummary": "{0} van {1} credits deze maand gebruikt.",
|
||||
"Composer_AiRewritePolite": "Maak het beleefder",
|
||||
"Composer_AiRewritePoliteDescription": "Verzacht de formulering terwijl de bedoeling hetzelfde blijft.",
|
||||
"Composer_AiRewriteAngry": "Maak het boos",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4,99 / mnd",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1.000 credits",
|
||||
"WinoAccount_Management_AiPackGetButton": "AI Pack verkrijgen",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "AI-gedreven tools voor vertalen, herschrijven en samenvatten acties in Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, vertalen, herschrijven, samenvatten, productiviteit",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Onbeperkte accounts",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Verwijder de accountlimiet en voeg zoveel e-mailaccounts toe als je nodig hebt.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "accounts, onbeperkt, premium, add-on",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Ukryj przycisk profilu na pasku tytułu, który otwiera wysuwane menu konta Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Powiadomienia o aktualizacjach sklepu",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Pokaż powiadomienia i akcje w stopce, gdy dostępna jest aktualizacja Microsoft Store.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Ukryj panel akcji AI",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Ukryj akcje AI w komponatorze i czytniku wiadomości.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Działania AI",
|
||||
"SettingsAppPreferences_AiActions_Description": "Wybierz domyślne języki AI i miejsce zapisywania streszczeń.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Domyślny język tłumaczenia",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Wybierz domyślny język docelowy używany przez akcje tłumaczenia AI.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Język podsumowania",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Streszczaj AI",
|
||||
"Composer_AiSummarizeDescription": "Wyodrębnia kluczowe punkty, zadania do wykonania i decyzje z tej wiadomości.",
|
||||
"Composer_AiTranslate": "Tłumacz za pomocą AI",
|
||||
"Composer_AiActions": "Działania AI",
|
||||
"Composer_AiRewrite": "Przepisz za pomocą AI",
|
||||
"AiActions_CheckingStatus": "Sprawdzanie dostępu do AI...",
|
||||
"AiActions_SignedOutTitle": "Odblokuj pakiet Wino AI",
|
||||
"AiActions_SignedOutDescription": "Tłumaczenie, przepisywanie i streszczanie wiadomości za pomocą AI po zalogowaniu do konta Wino i aktywacji dodatku AI Pack.",
|
||||
"AiActions_NoPackTitle": "Wymagany pakiet AI",
|
||||
"AiActions_NoPackDescription": "Jesteś zalogowany, ale pakiet AI nie jest jeszcze aktywny. Wykup go, aby korzystać z tłumaczenia, przepisywania i streszczania AI w Wino.",
|
||||
"AiActions_UsageSummary": "{0} z {1} kredytów wykorzystano w tym miesiącu.",
|
||||
"Composer_AiRewritePolite": "Uczyń to grzeczniejszym",
|
||||
"Composer_AiRewritePoliteDescription": "Złagodza ton, zachowując ten sam sens.",
|
||||
"Composer_AiRewriteAngry": "Uczyń to agresywnym",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4,99 / mies.",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1 000 kredytów",
|
||||
"WinoAccount_Management_AiPackGetButton": "Pobierz Pakiet AI",
|
||||
"WinoAddOn_AI_PACK_Name": "Pakiet AI Wino",
|
||||
"WinoAddOn_AI_PACK_Description": "Narzędzia z AI do tłumaczenia, przepisywania i streszczania wiadomości w Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, tłumaczenie, przepisywanie, streszczanie, produktywność",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Nielimitowane konta",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Usuń ograniczenie kont i dodawaj dowolną liczbę kont pocztowych.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "konta, nieograniczony, premium, dodatek",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Ocultar o botão de perfil na barra de título que abre o menu suspenso da conta do Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Notificações de atualização da Microsoft Store",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Exibir notificações e ações no rodapé quando houver uma atualização disponível da Microsoft Store.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Ocultar painel de ações de IA",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Ocultar ações de IA no redator de e-mails e na leitura.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Ações de IA",
|
||||
"SettingsAppPreferences_AiActions_Description": "Escolha os idiomas padrão da IA e onde os resumos devem ser salvos.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Idioma de tradução padrão",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Selecione o idioma de destino padrão usado pelas ações de tradução por IA.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Idioma de resumo",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Resumir com IA",
|
||||
"Composer_AiSummarizeDescription": "Extrair pontos-chave, itens de ação e decisões deste e-mail.",
|
||||
"Composer_AiTranslate": "Traduzir com IA",
|
||||
"Composer_AiActions": "Ações de IA",
|
||||
"Composer_AiRewrite": "Reescrever com IA",
|
||||
"AiActions_CheckingStatus": "Verificando o acesso à IA...",
|
||||
"AiActions_SignedOutTitle": "Desbloquear o Pacote de IA do Wino",
|
||||
"AiActions_SignedOutDescription": "Traduza, reescreva e resuma e-mails com IA após fazer login em sua Conta Wino e ativar o complemento Pacote de IA.",
|
||||
"AiActions_NoPackTitle": "Pacote de IA necessário",
|
||||
"AiActions_NoPackDescription": "Você está conectado, mas o Pacote de IA ainda não está ativo. Compre-o para usar as ferramentas de tradução, reescrita e resumos com IA do Wino.",
|
||||
"AiActions_UsageSummary": "{0} de {1} créditos usados neste mês.",
|
||||
"Composer_AiRewritePolite": "Tornar mais polido",
|
||||
"Composer_AiRewritePoliteDescription": "Suaviza a redação mantendo a mesma intenção.",
|
||||
"Composer_AiRewriteAngry": "Tornar mais agressivo",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4,99 / mês",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1.000 créditos",
|
||||
"WinoAccount_Management_AiPackGetButton": "Obter AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "Ferramentas alimentadas por IA para traduzir, reescrever e resumir ações no Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "IA, traduzir, reescrever, resumir, produtividade",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Contas ilimitadas",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Remover o limite de contas e adicionar quantas contas de e-mail você precisar.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "contas, ilimitadas, premium, complemento",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Ascundeți butonul de profil din bara de titlu care deschide meniul contului Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Notificări despre actualizările din Microsoft Store",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Afișează notificări și acțiuni în subsol atunci când este disponibilă o actualizare din Microsoft Store.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Ascunde panoul de acțiuni AI",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Ascunde acțiunile AI în editorul de e-mail și în cititor.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Acțiuni AI",
|
||||
"SettingsAppPreferences_AiActions_Description": "Alegeți limbile AI implicite și locul în care rezumatele ar trebui să fie salvate.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Limba de traducere implicită",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Alegeți limba țintă implicită utilizată de acțiunile de traducere AI.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Limba rezumării",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Rezumă cu AI",
|
||||
"Composer_AiSummarizeDescription": "Extrage ideile principale, pașii de acțiune și deciziile din acest e-mail.",
|
||||
"Composer_AiTranslate": "Translatează cu AI",
|
||||
"Composer_AiActions": "Acțiuni AI",
|
||||
"Composer_AiRewrite": "Rescrie cu AI",
|
||||
"AiActions_CheckingStatus": "Se verifică accesul AI...",
|
||||
"AiActions_SignedOutTitle": "Deblochează pachetul Wino AI",
|
||||
"AiActions_SignedOutDescription": "Translatează, rescrie și rezumă e-mailuri cu AI după ce te autentifici în contul tău Wino și activezi pachetul AI.",
|
||||
"AiActions_NoPackTitle": "Pachetul AI este necesar",
|
||||
"AiActions_NoPackDescription": "Ești conectat, dar pachetul AI nu este încă activ. Achiziționează-l pentru a folosi instrumentele AI de traducere, rescriere și rezumare ale Wino.",
|
||||
"AiActions_UsageSummary": "{0} din {1} credite utilizate în această lună.",
|
||||
"Composer_AiRewritePolite": "Fă-l politicos",
|
||||
"Composer_AiRewritePoliteDescription": "Îmblânzește formularea păstrând același scop.",
|
||||
"Composer_AiRewriteAngry": "Fă-l furios",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / lună",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1.000 credite",
|
||||
"WinoAccount_Management_AiPackGetButton": "Obține AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "Unelte alimentate de AI pentru traducere, rescriere și rezumare acțiuni în Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, traducere, rescrie, rezumă, productivitate",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Conturi nelimitate",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Elimină limita de conturi și adaugă cât de multe conturi de e-mail ai nevoie.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "conturi, nelimitate, premium, extensie",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Скрыть кнопку профиля в панели заголовка, которая открывает выпадающее меню учетной записи Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Уведомления об обновлениях магазина",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Показывать уведомления и действия в нижнем колонтитуле, когда доступно обновление Microsoft Store.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Скрыть панель действий ИИ",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Скрыть функции ИИ в окне составления писем и в просмотре писем.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Действия ИИ",
|
||||
"SettingsAppPreferences_AiActions_Description": "Выберите языки ИИ по умолчанию и место сохранения сводок.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Язык перевода по умолчанию",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Выберите языки перевода по умолчанию, которые будут использоваться в действиях перевода ИИ.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Язык суммирования",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Сформировать резюме с помощью ИИ",
|
||||
"Composer_AiSummarizeDescription": "Извлечь ключевые моменты, задачи и принятые решения из этого письма.",
|
||||
"Composer_AiTranslate": "Перевести с помощью ИИ",
|
||||
"Composer_AiActions": "Действия ИИ",
|
||||
"Composer_AiRewrite": "Переписать с помощью ИИ",
|
||||
"AiActions_CheckingStatus": "Проверяем доступ к ИИ...",
|
||||
"AiActions_SignedOutTitle": "Разблокировать пакет Wino AI",
|
||||
"AiActions_SignedOutDescription": "Перевод, переработка и резюмирование писем с помощью искусственного интеллекта после входа в учетную запись Wino и активации дополнения AI Pack.",
|
||||
"AiActions_NoPackTitle": "Требуется пакет AI",
|
||||
"AiActions_NoPackDescription": "Вы вошли в систему, но пакет AI не активен. Приобретите его, чтобы использовать инструменты перевода, переработки и резюмирования Wino с помощью ИИ.",
|
||||
"AiActions_UsageSummary": "{0} из {1} кредитов потрачено в этом месяце.",
|
||||
"Composer_AiRewritePolite": "Сделать вежливым",
|
||||
"Composer_AiRewritePoliteDescription": "Смягчает формулировку, сохраняя тот же смысл.",
|
||||
"Composer_AiRewriteAngry": "Сделать агрессивным",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / мес",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1 000 кредитов",
|
||||
"WinoAccount_Management_AiPackGetButton": "Получить AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "AI-powered tools for translate, rewrite, and summarize actions in Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, translate, rewrite, summarize, productivity",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Unlimited Accounts",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Remove the account limit and add as many mail accounts as you need.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "accounts, unlimited, premium, add-on",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Skryť tlačidlo profilu v titulnom riadku, ktoré otvára vysúvací panel účtu Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Oznámenia o aktualizáciách obchodu",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Zobraziť upozornenia a akcie na päte stránky, keď je k dispozícii aktualizácia z obchodu Microsoft Store.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Skryť panel akcií AI",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Skryť akcie AI v tvorbe a čítaní e-mailov.",
|
||||
"SettingsAppPreferences_AiActions_Title": "AI akcie",
|
||||
"SettingsAppPreferences_AiActions_Description": "Vyberte predvolené jazyky AI a miesto, kam sa majú ukladať súhrny.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Predvolený jazyk pre preklad",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Vyberte predvolený cieľový jazyk používaný akciami prekladu AI.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Jazyk zhrnutia",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Zhrnúť pomocou AI",
|
||||
"Composer_AiSummarizeDescription": "Získajte kľúčové body, akčné úlohy a rozhodnutia z tohto e-mailu.",
|
||||
"Composer_AiTranslate": "Preložiť pomocou AI",
|
||||
"Composer_AiActions": "AI akcie",
|
||||
"Composer_AiRewrite": "Prepísať pomocou AI",
|
||||
"AiActions_CheckingStatus": "Kontrolujem prístup k AI...",
|
||||
"AiActions_SignedOutTitle": "Odomknúť Wino AI balík",
|
||||
"AiActions_SignedOutDescription": "Prekladať, prepisovať a zhrňovať e-maily pomocou AI po prihlásení do svojho účtu Wino a aktivovaní doplnku AI Pack.",
|
||||
"AiActions_NoPackTitle": "AI balík vyžadovaný",
|
||||
"AiActions_NoPackDescription": "Ste prihlásený, ale AI balík ešte nie je aktívny. Kúpte si ho, aby ste mohli používať nástroje Wino AI pre preklad, prepísanie a zhrnutie e-mailov.",
|
||||
"AiActions_UsageSummary": "{0} z {1} kreditov použitých tento mesiac.",
|
||||
"Composer_AiRewritePolite": "Urob to zdvorilé",
|
||||
"Composer_AiRewritePoliteDescription": "Zjemní formuláciu pri zachovaní rovnakého zámeru.",
|
||||
"Composer_AiRewriteAngry": "Urob to agresívne",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / mesiac",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1 000 kreditov",
|
||||
"WinoAccount_Management_AiPackGetButton": "Získať AI balík",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Balík",
|
||||
"WinoAddOn_AI_PACK_Description": "Nástroje poháňané AI na preklad, prepisovanie a zhrnutie akcií v Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, preklad, prepisovanie, zhrnutie, produktivita",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Neobmedzené účty",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Odstráňte obmedzenie účtov a pridajte toľko e-mailových účtov, koľko potrebujete.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "účty, neobmedzené, prémiové, doplnok",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Wino hesap açılır menüsünü açan başlık çubuğu profil düğmesini gizleyin.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Mağaza güncelleme bildirimleri",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Bir Microsoft Store güncellemesi mevcut olduğunda bildirimleri ve altbilgi işlemlerini gösterin.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Yapay Zeka eylemleri panelini gizle",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Posta yazımında ve okumada Yapay Zeka eylemlerini gizle.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Yapay Zeka işlemleri",
|
||||
"SettingsAppPreferences_AiActions_Description": "Yapay zeka işlemleri için varsayılan dilleri ve özetlerin nerede kaydedileceğini seçin.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Varsayılan çeviri dili",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Yapay zeka çeviri işlemlerinde kullanılacak varsayılan hedef dili seçin.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Özetleme dili",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Yapay zeka ile özetle",
|
||||
"Composer_AiSummarizeDescription": "Bu e-postadan ana noktaları, eylem adımlarını ve kararları çıkarın.",
|
||||
"Composer_AiTranslate": "Yapay zeka ile çevir",
|
||||
"Composer_AiActions": "Yapay Zeka Eylemleri",
|
||||
"Composer_AiRewrite": "Yapay zeka ile yeniden yaz",
|
||||
"AiActions_CheckingStatus": "Yapay zeka erişimi kontrol ediliyor...",
|
||||
"AiActions_SignedOutTitle": "Wino AI Paketi Kilidi Aç",
|
||||
"AiActions_SignedOutDescription": "Wino Hesabınıza giriş yapıp AI Paket eklentisini etkinleştirdikten sonra e-postaları AI ile çevirin, yeniden yazın ve özetleyin.",
|
||||
"AiActions_NoPackTitle": "AI Paketi gerekli",
|
||||
"AiActions_NoPackDescription": "Giriş yaptınız, ancak AI Paketi henüz etkin değil. Wino'nun AI çeviri, yeniden yazma ve özetleme araçlarını kullanmak için satın alın.",
|
||||
"AiActions_UsageSummary": "Bu ay kullanılan kredi: {0} / {1} kredi.",
|
||||
"Composer_AiRewritePolite": "Daha nazik hale getir",
|
||||
"Composer_AiRewritePoliteDescription": "Aynı amacı koruyarak ifadeyi yumuşatır.",
|
||||
"Composer_AiRewriteAngry": "Kızgın hale getir",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / mo",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1.000 kredi",
|
||||
"WinoAccount_Management_AiPackGetButton": "AI Paketi Al",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Paketi",
|
||||
"WinoAddOn_AI_PACK_Description": "Wino Mail için çevirmek, yeniden yazmak ve özetlemek işlemlerinde AI destekli araçlar.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, çeviri, yeniden yazma, özetleme, verimlilik",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Sınırsız Hesaplar",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "İhtiyacınız olan kadar e-posta hesabı ekleyin ve hesap sınırını kaldırın.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "hesaplar, sınırsız, premium, eklenti",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "Приховати кнопку профіля на панелі заголовка, яка відкриває випадаюче меню облікового запису Wino.",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "Сповіщення про оновлення магазину",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "Показувати сповіщення та дії внизу, коли доступне оновлення Microsoft Store.",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "Приховати панель дій ШІ",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "Приховати дії ШІ у формуванні та читанні листів.",
|
||||
"SettingsAppPreferences_AiActions_Title": "Дії ШІ",
|
||||
"SettingsAppPreferences_AiActions_Description": "Виберіть мови ШІ за замовчуванням та де зберігати підсумки.",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "Мова перекладу за замовчуванням",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "Виберіть мову перекладу за замовчуванням, яку використають дії перекладу ШІ.",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "Мова підсумовування",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "Підсумуйте за допомогою ШІ",
|
||||
"Composer_AiSummarizeDescription": "Виділити основні пункти, завдання та рішення з цього електронного листа.",
|
||||
"Composer_AiTranslate": "Перекласти за допомогою ШІ",
|
||||
"Composer_AiActions": "Дії ШІ",
|
||||
"Composer_AiRewrite": "Переписати за допомогою ШІ",
|
||||
"AiActions_CheckingStatus": "Перевіряю доступ до ШІ...",
|
||||
"AiActions_SignedOutTitle": "Розблокувати пакет Wino AI",
|
||||
"AiActions_SignedOutDescription": "Перекладайте, переписуйте та підсумовуйте електронні листи за допомогою ШІ після входу в обліковий запис Wino та активації надбудови AI Pack.",
|
||||
"AiActions_NoPackTitle": "Потрібен пакет AI",
|
||||
"AiActions_NoPackDescription": "Ви увійшли, але пакет AI ще не активний. Придбайте його, щоб користуватися інструментами перекладу, переписування та підсумовування від Wino за допомогою ШІ.",
|
||||
"AiActions_UsageSummary": "{0} з {1} кредитів використано цього місяця.",
|
||||
"Composer_AiRewritePolite": "Зробити ввічливішим",
|
||||
"Composer_AiRewritePoliteDescription": "Пом'якшує формулювання, зберігаючи той же зміст.",
|
||||
"Composer_AiRewriteAngry": "Зробити більш різким",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / міс.",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1 000 кредитів",
|
||||
"WinoAccount_Management_AiPackGetButton": "Отримати AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "Інструменти на базі штучного інтелекту для перекладу, переформулювання та стислих підсумків дій у Wino Mail.",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI, переклад, переформулювати, підсумовувати, продуктивність",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "Необмежені облікові записи",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "Видалити обмеження на облікові записи та додати стільки поштових облікових записів, скільки потрібно.",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "облікові записи, необмежені, преміум, надбудова",
|
||||
|
||||
@@ -783,10 +783,6 @@
|
||||
"SettingsAppPreferences_HideWinoAccountButton_Description": "隐藏在标题栏中用于打开 Wino 账户弹出菜单的个人资料按钮。",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Title": "商店更新通知",
|
||||
"SettingsAppPreferences_StoreUpdateNotifications_Description": "在 Microsoft Store 有更新时显示通知和页脚操作。",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Title": "隐藏 AI 操作面板",
|
||||
"SettingsAppPreferences_HideAiActionsPanel_Description": "在邮件撰写和阅读器中隐藏 AI 操作。",
|
||||
"SettingsAppPreferences_AiActions_Title": "AI 操作",
|
||||
"SettingsAppPreferences_AiActions_Description": "选择默认 AI 语言及摘要应保存的位置。",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Title": "默认翻译语言",
|
||||
"SettingsAppPreferences_AiDefaultTranslationLanguage_Description": "选择 AI 翻译操作使用的默认目标语言。",
|
||||
"SettingsAppPreferences_AiSummarizeLanguage_Title": "摘要语言",
|
||||
@@ -1208,14 +1204,7 @@
|
||||
"Composer_AiSummarize": "使用 AI 总结",
|
||||
"Composer_AiSummarizeDescription": "提取此电子邮件中的要点、行动项和决议。",
|
||||
"Composer_AiTranslate": "使用 AI 翻译",
|
||||
"Composer_AiActions": "AI 操作",
|
||||
"Composer_AiRewrite": "使用 AI 重写",
|
||||
"AiActions_CheckingStatus": "正在检查 AI 访问权限…",
|
||||
"AiActions_SignedOutTitle": "解锁 Wino AI 套件",
|
||||
"AiActions_SignedOutDescription": "在登录您的 Wino 帐户并激活 AI 套件插件后,使用 AI 翻译、重写和摘要电子邮件。",
|
||||
"AiActions_NoPackTitle": "需要 AI 套件",
|
||||
"AiActions_NoPackDescription": "您已登录,但 AI 套件尚未激活。购买后即可使用 Wino 的 AI 翻译、重写和摘要工具。",
|
||||
"AiActions_UsageSummary": "{0} / {1} 积分本月已使用。",
|
||||
"Composer_AiRewritePolite": "使其更有礼貌",
|
||||
"Composer_AiRewritePoliteDescription": "在保持相同意图的前提下软化措辞。",
|
||||
"Composer_AiRewriteAngry": "让措辞更愤怒",
|
||||
@@ -1396,9 +1385,6 @@
|
||||
"WinoAccount_Management_AiPackPromoPrice": "$4.99 / 月",
|
||||
"WinoAccount_Management_AiPackPromoRequests": "1,000 积分",
|
||||
"WinoAccount_Management_AiPackGetButton": "获取 AI Pack",
|
||||
"WinoAddOn_AI_PACK_Name": "Wino AI Pack",
|
||||
"WinoAddOn_AI_PACK_Description": "用于在 Wino Mail 中进行翻译、改写和摘要操作的 AI 驱动工具。",
|
||||
"WinoAddOn_AI_PACK_Keywords": "AI、翻译、改写、摘要、生产力",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Name": "无限账户",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Description": "移除账户数量限制,您可以添加任意数量的邮箱账户。",
|
||||
"WinoAddOn_UNLIMITED_ACCOUNTS_Keywords": "账户、无限、高级、插件",
|
||||
|
||||
@@ -7,7 +7,6 @@ using Wino.Core.Domain.Entities.Shared;
|
||||
using Wino.Core.Domain.Enums;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
using Wino.Core.Domain.Models.Accounts;
|
||||
using Wino.Mail.Api.Contracts.Ai;
|
||||
using Wino.Mail.Api.Contracts.Auth;
|
||||
using Wino.Mail.Api.Contracts.Common;
|
||||
using Wino.Services;
|
||||
@@ -222,36 +221,6 @@ public class WinoAccountProfileServiceTests : IAsyncLifetime
|
||||
_apiClient.Verify(x => x.GetCurrentUserAsync(default), Times.AtLeastOnce);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SummarizeAsync_ShouldReturnQuotaBackedResponse()
|
||||
{
|
||||
var authResult = CreateAuthResult("first@example.com");
|
||||
|
||||
_apiClient
|
||||
.Setup(x => x.LoginAsync("first@example.com", "pw", default))
|
||||
.ReturnsAsync(WinoAccountApiResult<AuthResultDto>.Success(authResult));
|
||||
|
||||
_apiClient
|
||||
.Setup(x => x.SummarizeAsync("<p>Hello</p>", "en", default))
|
||||
.ReturnsAsync(ApiEnvelope<AiTextResultDto>.Success(
|
||||
new AiTextResultDto("<p>Summary</p>"),
|
||||
new QuotaInfoDto(
|
||||
"Active",
|
||||
DateTimeOffset.UtcNow.AddDays(-1),
|
||||
DateTimeOffset.UtcNow.AddDays(29),
|
||||
1000,
|
||||
4,
|
||||
996,
|
||||
new AiPackProductInfoDto("AI_PACK", 1000, 4.99m, "USD", "month"))));
|
||||
|
||||
await _service.LoginAsync("first@example.com", "pw");
|
||||
|
||||
var response = await _service.SummarizeAsync("<p>Hello</p>", "en");
|
||||
|
||||
response.IsSuccess.Should().BeTrue();
|
||||
response.Result?.Html.Should().Be("<p>Summary</p>");
|
||||
}
|
||||
|
||||
private static AuthResultDto CreateAuthResult(string email)
|
||||
{
|
||||
return new AuthResultDto(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Threading.Tasks;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
@@ -12,7 +12,6 @@ namespace Wino.Core.ViewModels;
|
||||
|
||||
public partial class AboutPageViewModel : CoreBaseViewModel
|
||||
{
|
||||
private readonly IStoreRatingService _storeRatingService;
|
||||
private readonly IMailDialogService _dialogService;
|
||||
private readonly INativeAppService _nativeAppService;
|
||||
private readonly IApplicationConfiguration _appInitializerService;
|
||||
@@ -23,14 +22,11 @@ public partial class AboutPageViewModel : CoreBaseViewModel
|
||||
public string VersionName => _nativeAppService.GetFullAppVersion();
|
||||
public string WebsiteUrl => AppUrls.Website;
|
||||
public string DiscordChannelUrl => AppUrls.Discord;
|
||||
public string GitHubUrl => AppUrls.GitHub;
|
||||
public string PrivacyPolicyUrl => AppUrls.PrivacyPolicy;
|
||||
public string PaypalUrl => AppUrls.Paypal;
|
||||
|
||||
public IPreferencesService PreferencesService { get; }
|
||||
|
||||
public AboutPageViewModel(IStoreRatingService storeRatingService,
|
||||
IMailDialogService dialogService,
|
||||
public AboutPageViewModel(IMailDialogService dialogService,
|
||||
INativeAppService nativeAppService,
|
||||
IPreferencesService preferencesService,
|
||||
IApplicationConfiguration appInitializerService,
|
||||
@@ -38,7 +34,6 @@ public partial class AboutPageViewModel : CoreBaseViewModel
|
||||
IFileService fileService,
|
||||
IWinoLogger logInitializer)
|
||||
{
|
||||
_storeRatingService = storeRatingService;
|
||||
_dialogService = dialogService;
|
||||
_nativeAppService = nativeAppService;
|
||||
_logInitializer = logInitializer;
|
||||
@@ -111,22 +106,16 @@ public partial class AboutPageViewModel : CoreBaseViewModel
|
||||
[RelayCommand]
|
||||
private async Task Navigate(object url)
|
||||
{
|
||||
if (url is string stringUrl)
|
||||
if (url is not string stringUrl)
|
||||
return;
|
||||
|
||||
if (stringUrl == DiscordChannelUrl)
|
||||
{
|
||||
if (stringUrl == "Store")
|
||||
await ShowRateDialogAsync();
|
||||
else
|
||||
{
|
||||
// Discord disclaimer message about server.
|
||||
if (stringUrl == DiscordChannelUrl)
|
||||
await _dialogService.ShowMessageAsync(Translator.DiscordChannelDisclaimerMessage,
|
||||
Translator.DiscordChannelDisclaimerTitle,
|
||||
WinoCustomMessageDialogIcon.Warning);
|
||||
|
||||
await _nativeAppService.LaunchUriAsync(new Uri(stringUrl));
|
||||
}
|
||||
await _dialogService.ShowMessageAsync(Translator.DiscordChannelDisclaimerMessage,
|
||||
Translator.DiscordChannelDisclaimerTitle,
|
||||
WinoCustomMessageDialogIcon.Warning);
|
||||
}
|
||||
}
|
||||
|
||||
private Task ShowRateDialogAsync() => _storeRatingService.LaunchStorePageForReviewAsync();
|
||||
}
|
||||
await _nativeAppService.LaunchUriAsync(new Uri(stringUrl));
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,11 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Generic;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using CommunityToolkit.Mvvm.Messaging;
|
||||
using Wino.Core.Domain;
|
||||
using Wino.Core.Domain.Entities.Shared;
|
||||
using Wino.Core.Domain.Enums;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
using Wino.Core.Domain.Models.Navigation;
|
||||
using Wino.Core.ViewModels.Data;
|
||||
@@ -21,31 +19,16 @@ public abstract partial class AccountManagementPageViewModelBase : CoreBaseViewM
|
||||
public ObservableCollection<IAccountProviderDetailViewModel> Accounts { get; set; } = [];
|
||||
public IEnumerable<IAccountProviderDetailViewModel> StartupAccounts => Accounts.Where(IsStartupEligible);
|
||||
|
||||
public bool IsPurchasePanelVisible => !HasUnlimitedAccountProduct;
|
||||
public bool IsAccountCreationAlmostOnLimit => Accounts != null && Accounts.Count == FREE_ACCOUNT_COUNT - 1;
|
||||
public bool HasAccountsDefined => Accounts != null && Accounts.Any();
|
||||
public bool CanReorderAccounts => Accounts?.Sum(a => a.HoldingAccountCount) > 1;
|
||||
|
||||
public string UsedAccountsString => string.Format(Translator.WinoUpgradeRemainingAccountsMessage, Accounts.Count, FREE_ACCOUNT_COUNT);
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(IsPurchasePanelVisible))]
|
||||
public partial bool HasUnlimitedAccountProduct { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(IsAccountCreationAlmostOnLimit))]
|
||||
[NotifyPropertyChangedFor(nameof(IsPurchasePanelVisible))]
|
||||
public partial bool IsAccountCreationBlocked { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
public partial IAccountProviderDetailViewModel StartupAccount { get; set; }
|
||||
|
||||
public int FREE_ACCOUNT_COUNT { get; } = 3;
|
||||
protected IDialogServiceBase DialogService { get; }
|
||||
protected INavigationService NavigationService { get; }
|
||||
protected IAccountService AccountService { get; }
|
||||
protected IProviderService ProviderService { get; }
|
||||
protected IStoreManagementService StoreManagementService { get; }
|
||||
protected IWinoAccountProfileService WinoAccountProfileService { get; }
|
||||
protected IAuthenticationProvider AuthenticationProvider { get; }
|
||||
protected IPreferencesService PreferencesService { get; }
|
||||
@@ -54,7 +37,6 @@ public abstract partial class AccountManagementPageViewModelBase : CoreBaseViewM
|
||||
INavigationService navigationService,
|
||||
IAccountService accountService,
|
||||
IProviderService providerService,
|
||||
IStoreManagementService storeManagementService,
|
||||
IWinoAccountProfileService winoAccountProfileService,
|
||||
IAuthenticationProvider authenticationProvider,
|
||||
IPreferencesService preferencesService)
|
||||
@@ -63,49 +45,11 @@ public abstract partial class AccountManagementPageViewModelBase : CoreBaseViewM
|
||||
NavigationService = navigationService;
|
||||
AccountService = accountService;
|
||||
ProviderService = providerService;
|
||||
StoreManagementService = storeManagementService;
|
||||
WinoAccountProfileService = winoAccountProfileService;
|
||||
AuthenticationProvider = authenticationProvider;
|
||||
PreferencesService = preferencesService;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void NavigateAccountDetails(AccountProviderDetailViewModel accountDetails)
|
||||
{
|
||||
Messenger.Send(new BreadcrumbNavigationRequested(GetAccountDetailsTitle(accountDetails.Account),
|
||||
WinoPage.AccountDetailsPage,
|
||||
accountDetails.Account.Id));
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
public async Task PurchaseUnlimitedAccountAsync()
|
||||
{
|
||||
var purchaseResult = await StoreManagementService.PurchaseAsync(WinoAddOnProductType.UNLIMITED_ACCOUNTS);
|
||||
|
||||
if (purchaseResult == StorePurchaseResult.Succeeded)
|
||||
DialogService.InfoBarMessage(Translator.Info_PurchaseThankYouTitle, Translator.Info_PurchaseThankYouMessage, InfoBarMessageType.Success);
|
||||
else if (purchaseResult == StorePurchaseResult.AlreadyPurchased)
|
||||
DialogService.InfoBarMessage(Translator.Info_PurchaseExistsTitle, Translator.Info_PurchaseExistsMessage, InfoBarMessageType.Warning);
|
||||
|
||||
bool shouldRefreshPurchasePanel = purchaseResult == StorePurchaseResult.Succeeded || purchaseResult == StorePurchaseResult.AlreadyPurchased;
|
||||
|
||||
if (shouldRefreshPurchasePanel)
|
||||
{
|
||||
await ManageStorePurchasesAsync();
|
||||
}
|
||||
}
|
||||
|
||||
public async Task ManageStorePurchasesAsync()
|
||||
{
|
||||
var hasUnlimitedAccountProduct = await StoreManagementService.HasProductAsync(WinoAddOnProductType.UNLIMITED_ACCOUNTS).ConfigureAwait(false);
|
||||
|
||||
await ExecuteUIThread(() =>
|
||||
{
|
||||
HasUnlimitedAccountProduct = hasUnlimitedAccountProduct;
|
||||
IsAccountCreationBlocked = !hasUnlimitedAccountProduct && Accounts.Count >= FREE_ACCOUNT_COUNT;
|
||||
});
|
||||
}
|
||||
|
||||
public AccountProviderDetailViewModel GetAccountProviderDetails(MailAccount account)
|
||||
{
|
||||
var provider = ProviderService.GetProviderDetail(account.ProviderType);
|
||||
@@ -150,4 +94,4 @@ public abstract partial class AccountManagementPageViewModelBase : CoreBaseViewM
|
||||
_ => true
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,12 @@ public partial class WinoAddOnItemViewModel : ObservableObject
|
||||
|
||||
public string IconGlyph => ProductType switch
|
||||
{
|
||||
WinoAddOnProductType.AI_PACK => "\uE945",
|
||||
WinoAddOnProductType.UNLIMITED_ACCOUNTS => "\uE716",
|
||||
_ => "\uE10F"
|
||||
};
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(ShowPurchaseState))]
|
||||
[NotifyPropertyChangedFor(nameof(ShowUsageSummary))]
|
||||
public partial bool IsPurchased { get; set; }
|
||||
|
||||
public ICommand? PurchaseCommand { get; set; }
|
||||
@@ -30,7 +28,6 @@ public partial class WinoAddOnItemViewModel : ObservableObject
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(ShowLoadingState))]
|
||||
[NotifyPropertyChangedFor(nameof(ShowPurchaseState))]
|
||||
[NotifyPropertyChangedFor(nameof(ShowUsageSummary))]
|
||||
[NotifyPropertyChangedFor(nameof(ShowErrorState))]
|
||||
public partial bool IsLoading { get; set; }
|
||||
|
||||
@@ -39,43 +36,31 @@ public partial class WinoAddOnItemViewModel : ObservableObject
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(ShowErrorState))]
|
||||
[NotifyPropertyChangedFor(nameof(ShowUsageSummary))]
|
||||
public partial bool HasUsageData { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(ShowErrorState))]
|
||||
[NotifyPropertyChangedFor(nameof(ShowUsageSummary))]
|
||||
public partial string ErrorText { get; set; } = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
public partial int UsageCount { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(ShowUsageSummary))]
|
||||
public partial int UsageLimit { get; set; } = 1;
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(ShowUsageSummary))]
|
||||
public partial double UsagePercentage { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(ShowUsageSummary))]
|
||||
public partial string RenewalText { get; set; } = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(ShowUsageSummary))]
|
||||
public partial string UsageResetText { get; set; } = string.Empty;
|
||||
|
||||
public bool ShowLoadingState => IsLoading;
|
||||
|
||||
public bool ShowPurchaseState => !IsLoading && string.IsNullOrWhiteSpace(ErrorText);
|
||||
|
||||
public bool ShowUsageSummary => ProductType == WinoAddOnProductType.AI_PACK &&
|
||||
IsPurchased &&
|
||||
!IsLoading &&
|
||||
string.IsNullOrWhiteSpace(ErrorText) &&
|
||||
HasUsageData;
|
||||
|
||||
public bool ShowErrorState => !IsLoading && !string.IsNullOrWhiteSpace(ErrorText);
|
||||
|
||||
public WinoAddOnItemViewModel(WinoAddOnProductType productType)
|
||||
|
||||
@@ -26,7 +26,6 @@ public partial class SettingOptionsPageViewModel : CoreBaseViewModel
|
||||
private readonly INativeAppService _nativeAppService;
|
||||
private readonly IAccountService _accountService;
|
||||
private readonly IMimeStorageService _mimeStorageService;
|
||||
private readonly IStoreRatingService _storeRatingService;
|
||||
private readonly ITranslationService _translationService;
|
||||
private readonly INewThemeService _newThemeService;
|
||||
private readonly IPreferencesService _preferencesService;
|
||||
@@ -34,8 +33,6 @@ public partial class SettingOptionsPageViewModel : CoreBaseViewModel
|
||||
private bool _isInitializingSettings;
|
||||
private bool _isAppearanceSelectionPaused;
|
||||
|
||||
public string GitHubUrl => AppUrls.GitHub;
|
||||
public string PaypalUrl => AppUrls.Paypal;
|
||||
public string WebsiteUrl => AppUrls.Website;
|
||||
public string PrivacyPolicyUrl => AppUrls.PrivacyPolicy;
|
||||
|
||||
@@ -85,16 +82,14 @@ public partial class SettingOptionsPageViewModel : CoreBaseViewModel
|
||||
public SettingOptionsPageViewModel(INativeAppService nativeAppService,
|
||||
IAccountService accountService,
|
||||
IMimeStorageService mimeStorageService,
|
||||
IStoreRatingService storeRatingService,
|
||||
ITranslationService translationService,
|
||||
INewThemeService newThemeService,
|
||||
IPreferencesService preferencesService,
|
||||
IProviderService providerService)
|
||||
ITranslationService translationService,
|
||||
INewThemeService newThemeService,
|
||||
IPreferencesService preferencesService,
|
||||
IProviderService providerService)
|
||||
{
|
||||
_nativeAppService = nativeAppService;
|
||||
_accountService = accountService;
|
||||
_mimeStorageService = mimeStorageService;
|
||||
_storeRatingService = storeRatingService;
|
||||
_translationService = translationService;
|
||||
_newThemeService = newThemeService;
|
||||
_preferencesService = preferencesService;
|
||||
@@ -218,6 +213,19 @@ public partial class SettingOptionsPageViewModel : CoreBaseViewModel
|
||||
_isInitializingSettings = false;
|
||||
}
|
||||
|
||||
private void InitializeColors()
|
||||
{
|
||||
Colors.Clear();
|
||||
|
||||
foreach (var color in AccentColorProvider.GetAvailableColors())
|
||||
{
|
||||
Colors.Add(new AppColorViewModel(color));
|
||||
}
|
||||
|
||||
UseAccentColor = _preferencesService.IsCustomAccentColorEnabled;
|
||||
SelectedAppColor = Colors.FirstOrDefault(color => color.Hex == _preferencesService.CustomAccentColorHex) ?? Colors.FirstOrDefault();
|
||||
}
|
||||
|
||||
private void InitializeLanguageOptions()
|
||||
{
|
||||
AvailableLanguages = _translationService.GetAvailableLanguages();
|
||||
@@ -225,181 +233,77 @@ public partial class SettingOptionsPageViewModel : CoreBaseViewModel
|
||||
?? AvailableLanguages.FirstOrDefault();
|
||||
}
|
||||
|
||||
private void InitializeColors()
|
||||
{
|
||||
Colors.Clear();
|
||||
|
||||
foreach (var color in _newThemeService.GetAvailableAccountColors().Distinct(StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
Colors.Add(new AppColorViewModel(color));
|
||||
}
|
||||
|
||||
var systemAccentColor = _newThemeService.GetSystemAccentColorHex();
|
||||
|
||||
if (Colors.All(color => !string.Equals(color.Hex, systemAccentColor, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
Colors.Add(new AppColorViewModel(systemAccentColor, true));
|
||||
}
|
||||
else
|
||||
{
|
||||
var matchingAccentColor = Colors.First(color => string.Equals(color.Hex, systemAccentColor, StringComparison.OrdinalIgnoreCase));
|
||||
Colors.Remove(matchingAccentColor);
|
||||
Colors.Add(new AppColorViewModel(systemAccentColor, true));
|
||||
}
|
||||
}
|
||||
|
||||
private void InitializeAppearanceOptions()
|
||||
{
|
||||
_isAppearanceSelectionPaused = true;
|
||||
|
||||
var currentAccentColor = _newThemeService.AccentColor;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(currentAccentColor) &&
|
||||
Colors.All(color => !string.Equals(color.Hex, currentAccentColor, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
Colors.Insert(0, new AppColorViewModel(currentAccentColor));
|
||||
}
|
||||
|
||||
SelectedElementTheme = ElementThemes.FirstOrDefault(theme => theme.NativeTheme == _newThemeService.RootTheme)
|
||||
?? ElementThemes.FirstOrDefault();
|
||||
|
||||
if (string.IsNullOrWhiteSpace(currentAccentColor))
|
||||
{
|
||||
SelectedAppColor = Colors.LastOrDefault(color => color.IsAccentColor) ?? Colors.LastOrDefault();
|
||||
UseAccentColor = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
SelectedAppColor = Colors.FirstOrDefault(color => string.Equals(color.Hex, currentAccentColor, StringComparison.OrdinalIgnoreCase))
|
||||
?? Colors.FirstOrDefault();
|
||||
UseAccentColor = SelectedAppColor?.IsAccentColor == true;
|
||||
}
|
||||
|
||||
_isAppearanceSelectionPaused = false;
|
||||
}
|
||||
|
||||
private List<IAccountProviderDetailViewModel> CreateAccountItems(List<MailAccount> accounts)
|
||||
{
|
||||
var groupedAccounts = accounts
|
||||
.OrderBy(account => account.MergedInboxId == null ? 1 : 0)
|
||||
.ThenBy(account => account.Order)
|
||||
.ThenBy(account => account.Name)
|
||||
.GroupBy(account => account.MergedInboxId);
|
||||
var accountItems = new List<IAccountProviderDetailViewModel>();
|
||||
|
||||
foreach (var accountGroup in groupedAccounts)
|
||||
{
|
||||
if (accountGroup.Key == null)
|
||||
{
|
||||
accountItems.AddRange(accountGroup.Select(CreateAccountProviderDetails));
|
||||
continue;
|
||||
}
|
||||
|
||||
var mergedInbox = accountGroup.First().MergedInbox;
|
||||
var holdingAccounts = accountGroup
|
||||
.Select(CreateAccountProviderDetails)
|
||||
.ToList();
|
||||
var mergedAccount = new MergedAccountProviderDetailViewModel(mergedInbox, holdingAccounts)
|
||||
{
|
||||
ProviderDetail = holdingAccounts.FirstOrDefault()?.ProviderDetail
|
||||
};
|
||||
|
||||
accountItems.Add(mergedAccount);
|
||||
}
|
||||
|
||||
return accountItems;
|
||||
}
|
||||
|
||||
private AccountProviderDetailViewModel CreateAccountProviderDetails(MailAccount account)
|
||||
{
|
||||
var provider = _providerService.GetProviderDetail(account.ProviderType);
|
||||
return new AccountProviderDetailViewModel(provider, account);
|
||||
SelectedElementTheme = ElementThemes.FirstOrDefault(theme => theme.Theme == _preferencesService.ApplicationTheme)
|
||||
?? ElementThemes[0];
|
||||
}
|
||||
|
||||
partial void OnSelectedLanguageChanged(AppLanguageModel value)
|
||||
{
|
||||
if (_isInitializingSettings || value == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_ = ApplyLanguageAsync(value);
|
||||
_ = _translationService.InitializeLanguageAsync(value.Language);
|
||||
}
|
||||
|
||||
partial void OnSelectedElementThemeChanged(ElementThemeContainer value)
|
||||
{
|
||||
if (_isInitializingSettings || value == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_newThemeService.RootTheme = value.NativeTheme;
|
||||
_preferencesService.ApplicationTheme = value.Theme;
|
||||
}
|
||||
|
||||
partial void OnSelectedAppColorChanged(AppColorViewModel value)
|
||||
{
|
||||
if (_isInitializingSettings || _isAppearanceSelectionPaused || value == null)
|
||||
{
|
||||
return;
|
||||
|
||||
_preferencesService.CustomAccentColorHex = value.Hex;
|
||||
|
||||
if (UseAccentColor)
|
||||
{
|
||||
_newThemeService.ApplyCustomAccentColor(value.Color);
|
||||
}
|
||||
|
||||
_isAppearanceSelectionPaused = true;
|
||||
UseAccentColor = value.IsAccentColor;
|
||||
_isAppearanceSelectionPaused = false;
|
||||
|
||||
_newThemeService.AccentColor = value.Hex;
|
||||
}
|
||||
|
||||
partial void OnUseAccentColorChanged(bool value)
|
||||
{
|
||||
if (_isInitializingSettings || _isAppearanceSelectionPaused || Colors.Count == 0)
|
||||
{
|
||||
if (_isInitializingSettings)
|
||||
return;
|
||||
}
|
||||
|
||||
var accentColor = Colors.LastOrDefault(color => color.IsAccentColor);
|
||||
var fallbackColor = Colors.FirstOrDefault(color => !color.IsAccentColor) ?? Colors.FirstOrDefault();
|
||||
var targetColor = value ? accentColor : SelectedAppColor?.IsAccentColor == true ? fallbackColor : SelectedAppColor;
|
||||
|
||||
if (targetColor == null || ReferenceEquals(targetColor, SelectedAppColor))
|
||||
{
|
||||
return;
|
||||
}
|
||||
_preferencesService.IsCustomAccentColorEnabled = value;
|
||||
|
||||
_isAppearanceSelectionPaused = true;
|
||||
SelectedAppColor = targetColor;
|
||||
_isAppearanceSelectionPaused = false;
|
||||
|
||||
_newThemeService.AccentColor = targetColor.Hex;
|
||||
}
|
||||
|
||||
private async Task ApplyLanguageAsync(AppLanguageModel language)
|
||||
{
|
||||
await _translationService.InitializeLanguageAsync(language.Language);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
public void NavigateSubDetail(object type)
|
||||
{
|
||||
if (type is WinoPage pageType)
|
||||
try
|
||||
{
|
||||
var pageInfo = SettingsNavigationInfoProvider.GetInfo(pageType, AccountSummaryText);
|
||||
Messenger.Send(new BreadcrumbNavigationRequested(pageInfo.Title, pageType));
|
||||
if (value && SelectedAppColor != null)
|
||||
{
|
||||
_newThemeService.ApplyCustomAccentColor(SelectedAppColor.Color);
|
||||
}
|
||||
else
|
||||
{
|
||||
_newThemeService.ResetAccentColor();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
_isAppearanceSelectionPaused = false;
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private async Task NavigateExternalAsync(object target)
|
||||
private Task NavigateExternalAsync(string url)
|
||||
{
|
||||
if (target is not string stringTarget || string.IsNullOrWhiteSpace(stringTarget))
|
||||
return;
|
||||
if (string.IsNullOrWhiteSpace(url))
|
||||
return Task.CompletedTask;
|
||||
|
||||
if (stringTarget == "Store")
|
||||
{
|
||||
await _storeRatingService.LaunchStorePageForReviewAsync();
|
||||
return;
|
||||
}
|
||||
|
||||
await _nativeAppService.LaunchUriAsync(new Uri(stringTarget));
|
||||
return _nativeAppService.LaunchUriAsync(new Uri(url));
|
||||
}
|
||||
}
|
||||
|
||||
private static List<IAccountProviderDetailViewModel> CreateAccountItems(List<MailAccount> accounts)
|
||||
{
|
||||
return AccountProviderDetailViewModelFactory.CreateAccountItems(accounts);
|
||||
}
|
||||
}
|
||||
@@ -45,14 +45,13 @@ public partial class AccountManagementViewModel : AccountManagementPageViewModel
|
||||
INavigationService navigationService,
|
||||
IAccountService accountService,
|
||||
IProviderService providerService,
|
||||
IStoreManagementService storeManagementService,
|
||||
IWinoAccountProfileService winoAccountProfileService,
|
||||
IWinoAccountDataSyncService syncService,
|
||||
IWinoLogger winoLogger,
|
||||
ISpecialImapProviderConfigResolver specialImapProviderConfigResolver,
|
||||
ICalDavClient calDavClient,
|
||||
IAuthenticationProvider authenticationProvider,
|
||||
IPreferencesService preferencesService) : base(dialogService, navigationService, accountService, providerService, storeManagementService, winoAccountProfileService, authenticationProvider, preferencesService)
|
||||
IPreferencesService preferencesService) : base(dialogService, navigationService, accountService, providerService, winoAccountProfileService, authenticationProvider, preferencesService)
|
||||
{
|
||||
MailDialogService = dialogService;
|
||||
_syncService = syncService;
|
||||
@@ -90,23 +89,14 @@ public partial class AccountManagementViewModel : AccountManagementPageViewModel
|
||||
|
||||
|
||||
[RelayCommand]
|
||||
private async Task AddNewAccountAsync()
|
||||
private Task AddNewAccountAsync()
|
||||
{
|
||||
if (IsAccountCreationBlocked)
|
||||
{
|
||||
var isPurchaseClicked = await DialogService.ShowConfirmationDialogAsync(Translator.DialogMessage_AccountLimitMessage, Translator.DialogMessage_AccountLimitTitle, Translator.Buttons_Purchase);
|
||||
|
||||
if (!isPurchaseClicked) return;
|
||||
|
||||
await PurchaseUnlimitedAccountAsync();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Messenger.Send(new BreadcrumbNavigationRequested(
|
||||
Translator.WelcomeWizard_Step2Title,
|
||||
WinoPage.ProviderSelectionPage,
|
||||
ProviderSelectionNavigationContext.CreateForSettingsAddAccount()));
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task StartAddNewAccountAsync() => AddNewAccountAsync();
|
||||
@@ -400,7 +390,6 @@ public partial class AccountManagementViewModel : AccountManagementPageViewModel
|
||||
});
|
||||
|
||||
|
||||
await ManageStorePurchasesAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private static string BuildExportSuccessMessage(Wino.Core.Domain.Models.Accounts.WinoAccountSyncExportResult result)
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Wino.Core.Domain;
|
||||
using Wino.Core.Domain.Enums;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
using Wino.Core.Domain.Models.Ai;
|
||||
using Wino.Core.Domain.Models.Navigation;
|
||||
using Wino.Core.Domain.Models.Translations;
|
||||
|
||||
@@ -18,14 +16,12 @@ public partial class AppPreferencesPageViewModel : MailBaseViewModel
|
||||
IMailDialogService dialogService,
|
||||
IPreferencesService preferencesService,
|
||||
IStartupBehaviorService startupBehaviorService,
|
||||
ITranslationService translationService,
|
||||
IAiActionOptionsService aiActionOptionsService)
|
||||
ITranslationService translationService)
|
||||
{
|
||||
_dialogService = dialogService;
|
||||
PreferencesService = preferencesService;
|
||||
_startupBehaviorService = startupBehaviorService;
|
||||
_translationService = translationService;
|
||||
_aiActionOptionsService = aiActionOptionsService;
|
||||
|
||||
SearchModes =
|
||||
[
|
||||
@@ -44,7 +40,6 @@ public partial class AppPreferencesPageViewModel : MailBaseViewModel
|
||||
SelectedDefaultSearchMode = SearchModes[(int)PreferencesService.DefaultSearchMode];
|
||||
SelectedDefaultApplicationMode = ApplicationModes[(int)PreferencesService.DefaultApplicationMode];
|
||||
EmailSyncIntervalMinutes = PreferencesService.EmailSyncIntervalMinutes;
|
||||
SummarySavePath = PreferencesService.AiSummarySavePath;
|
||||
}
|
||||
|
||||
public IPreferencesService PreferencesService { get; }
|
||||
@@ -61,21 +56,6 @@ public partial class AppPreferencesPageViewModel : MailBaseViewModel
|
||||
[ObservableProperty]
|
||||
public partial AppLanguageModel SelectedLanguage { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
public partial List<AiTranslateLanguageOption> AvailableAiLanguages { get; set; } = [];
|
||||
|
||||
[ObservableProperty]
|
||||
public partial AiTranslateLanguageOption SelectedDefaultTranslationLanguage { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
public partial AiTranslateLanguageOption SelectedSummarizeLanguage { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
public partial string SummarySavePath { get; set; } = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
public partial bool HasInvalidSummarySavePath { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(IsStartupBehaviorDisabled))]
|
||||
[NotifyPropertyChangedFor(nameof(IsStartupBehaviorEnabled))]
|
||||
@@ -84,9 +64,7 @@ public partial class AppPreferencesPageViewModel : MailBaseViewModel
|
||||
private readonly IMailDialogService _dialogService;
|
||||
private readonly IStartupBehaviorService _startupBehaviorService;
|
||||
private readonly ITranslationService _translationService;
|
||||
private readonly IAiActionOptionsService _aiActionOptionsService;
|
||||
private bool _isLanguageInitialized;
|
||||
private bool _isAiPreferencesInitialized;
|
||||
private int _emailSyncIntervalMinutes;
|
||||
private string _selectedDefaultSearchMode;
|
||||
private string _selectedDefaultApplicationMode;
|
||||
@@ -132,31 +110,6 @@ public partial class AppPreferencesPageViewModel : MailBaseViewModel
|
||||
_ = _translationService.InitializeLanguageAsync(value.Language);
|
||||
}
|
||||
|
||||
partial void OnSelectedDefaultTranslationLanguageChanged(AiTranslateLanguageOption value)
|
||||
{
|
||||
if (!_isAiPreferencesInitialized || value == null)
|
||||
return;
|
||||
|
||||
PreferencesService.AiDefaultTranslationLanguageCode = value.Code;
|
||||
}
|
||||
|
||||
partial void OnSelectedSummarizeLanguageChanged(AiTranslateLanguageOption value)
|
||||
{
|
||||
if (!_isAiPreferencesInitialized || value == null)
|
||||
return;
|
||||
|
||||
PreferencesService.AiSummarizeLanguageCode = value.Code;
|
||||
}
|
||||
|
||||
partial void OnSummarySavePathChanged(string value)
|
||||
{
|
||||
if (!_isAiPreferencesInitialized)
|
||||
return;
|
||||
|
||||
PreferencesService.AiSummarySavePath = value ?? string.Empty;
|
||||
RefreshSummarySavePathState();
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private async Task ToggleStartupBehaviorAsync()
|
||||
{
|
||||
@@ -204,22 +157,11 @@ public partial class AppPreferencesPageViewModel : MailBaseViewModel
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private async Task BrowseSummarySavePathAsync()
|
||||
{
|
||||
var pickedPath = await _dialogService.PickWindowsFolderAsync();
|
||||
if (string.IsNullOrWhiteSpace(pickedPath))
|
||||
return;
|
||||
|
||||
await ExecuteUIThread(() => SummarySavePath = pickedPath);
|
||||
}
|
||||
|
||||
public override async void OnNavigatedTo(NavigationMode mode, object parameters)
|
||||
{
|
||||
base.OnNavigatedTo(mode, parameters);
|
||||
|
||||
var availableLanguages = _translationService.GetAvailableLanguages();
|
||||
var availableAiLanguages = new List<AiTranslateLanguageOption>(_aiActionOptionsService.GetTranslateLanguageOptions());
|
||||
var startupBehaviorResult = await _startupBehaviorService.GetCurrentStartupBehaviorAsync();
|
||||
|
||||
await ExecuteUIThread(() =>
|
||||
@@ -228,32 +170,7 @@ public partial class AppPreferencesPageViewModel : MailBaseViewModel
|
||||
SelectedLanguage = AvailableLanguages.Find(language => language.Language == PreferencesService.CurrentLanguage)
|
||||
?? (AvailableLanguages.Count > 0 ? AvailableLanguages[0] : null);
|
||||
_isLanguageInitialized = true;
|
||||
|
||||
AvailableAiLanguages = availableAiLanguages;
|
||||
SelectedDefaultTranslationLanguage = FindAiLanguageOption(PreferencesService.AiDefaultTranslationLanguageCode)
|
||||
?? FindAiLanguageOption("en-US")
|
||||
?? (AvailableAiLanguages.Count > 0 ? AvailableAiLanguages[0] : null);
|
||||
SelectedSummarizeLanguage = FindAiLanguageOption(PreferencesService.AiSummarizeLanguageCode)
|
||||
?? FindAiLanguageOption("en-US")
|
||||
?? (AvailableAiLanguages.Count > 0 ? AvailableAiLanguages[0] : null);
|
||||
SummarySavePath = PreferencesService.AiSummarySavePath;
|
||||
RefreshSummarySavePathState();
|
||||
_isAiPreferencesInitialized = true;
|
||||
|
||||
StartupBehaviorResult = startupBehaviorResult;
|
||||
});
|
||||
}
|
||||
|
||||
private AiTranslateLanguageOption FindAiLanguageOption(string languageCode)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(languageCode))
|
||||
return null;
|
||||
|
||||
return AvailableAiLanguages.Find(option => option.Code == languageCode);
|
||||
}
|
||||
|
||||
private void RefreshSummarySavePathState()
|
||||
{
|
||||
HasInvalidSummarySavePath = !string.IsNullOrWhiteSpace(SummarySavePath) && !Directory.Exists(SummarySavePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -368,7 +368,6 @@ public partial class App : WinoApplication,
|
||||
{
|
||||
services.AddSingleton<INavigationService, NavigationService>();
|
||||
services.AddSingleton<IMailDialogService, DialogService>();
|
||||
services.AddSingleton<IAiActionOptionsService, AiActionOptionsService>();
|
||||
services.AddSingleton<ReleaseLocalAccountDataCleanupService>();
|
||||
services.AddTransient<IProviderService, ProviderService>();
|
||||
services.AddSingleton<IAuthenticatorConfig, MailAuthenticatorConfiguration>();
|
||||
@@ -2037,4 +2036,3 @@ public partial class App : WinoApplication,
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Wino.Mail.WinUI.Controls;
|
||||
|
||||
public interface IAiHtmlActionHost
|
||||
{
|
||||
Task<string?> GetCurrentHtmlAsync(CancellationToken cancellationToken);
|
||||
Task ApplyHtmlResultAsync(string html, CancellationToken cancellationToken);
|
||||
Task<string?> TryGetCachedTranslationHtmlAsync(string languageCode, CancellationToken cancellationToken);
|
||||
Task SaveCachedTranslationHtmlAsync(string languageCode, string html, CancellationToken cancellationToken);
|
||||
Task<string?> TryGetCachedSummaryTextAsync(CancellationToken cancellationToken);
|
||||
Task SaveCachedSummaryTextAsync(string summary, CancellationToken cancellationToken);
|
||||
string GetSuggestedSummaryFileName();
|
||||
}
|
||||
@@ -8,7 +8,6 @@ using CommunityToolkit.WinUI;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using Microsoft.UI.Xaml.Data;
|
||||
using Wino.Core.Domain;
|
||||
using Wino.Core.Domain.Enums;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
@@ -22,7 +21,6 @@ public sealed partial class OperationCommandBar : CommandBar
|
||||
{
|
||||
private const string MailOperationTemplateKey = "OperationCommandBarMailOperationTemplate";
|
||||
private const string FolderOperationTemplateKey = "OperationCommandBarFolderOperationTemplate";
|
||||
private const string AIActionsTemplateKey = "OperationCommandBarAIActionsTemplate";
|
||||
private const string PopOutTemplateKey = "OperationCommandBarThemeToggleTemplate";
|
||||
private const string ThemeToggleTemplateKey = "OperationCommandBarThemeToggleTemplate";
|
||||
private const string SeparatorTemplateKey = "OperationCommandBarSeparatorTemplate";
|
||||
@@ -36,12 +34,6 @@ public sealed partial class OperationCommandBar : CommandBar
|
||||
[GeneratedDependencyProperty]
|
||||
public partial ICommand? ItemInvokedCommand { get; set; }
|
||||
|
||||
[GeneratedDependencyProperty]
|
||||
public partial bool IsAIActionsEnabled { get; set; }
|
||||
|
||||
[GeneratedDependencyProperty]
|
||||
public partial bool IsAIActionsPaneToggleVisible { get; set; }
|
||||
|
||||
[GeneratedDependencyProperty]
|
||||
public partial bool IsEditorThemeDark { get; set; }
|
||||
|
||||
@@ -51,7 +43,6 @@ public sealed partial class OperationCommandBar : CommandBar
|
||||
[GeneratedDependencyProperty]
|
||||
public partial bool IsPopOutButtonVisible { get; set; }
|
||||
|
||||
public event EventHandler<bool>? AIActionsEnabledChanged;
|
||||
public event EventHandler? PopOutClicked;
|
||||
|
||||
public OperationCommandBar()
|
||||
@@ -84,16 +75,6 @@ public sealed partial class OperationCommandBar : CommandBar
|
||||
RefreshCommands();
|
||||
}
|
||||
|
||||
partial void OnIsAIActionsEnabledChanged(bool newValue)
|
||||
{
|
||||
AIActionsEnabledChanged?.Invoke(this, newValue);
|
||||
}
|
||||
|
||||
partial void OnIsAIActionsPaneToggleVisibleChanged(bool newValue)
|
||||
{
|
||||
RefreshCommands();
|
||||
}
|
||||
|
||||
partial void OnIsEditorThemeDarkChanged(bool newValue)
|
||||
{
|
||||
RefreshCommands();
|
||||
@@ -215,11 +196,6 @@ public sealed partial class OperationCommandBar : CommandBar
|
||||
{
|
||||
ClearGeneratedCommands();
|
||||
|
||||
if (IsAIActionsPaneToggleVisible)
|
||||
{
|
||||
PrimaryCommands.Add(CreateAIActionsToggleButton());
|
||||
}
|
||||
|
||||
if (IsPopOutButtonVisible)
|
||||
{
|
||||
PrimaryCommands.Add(CreatePopOutButton());
|
||||
@@ -277,9 +253,6 @@ public sealed partial class OperationCommandBar : CommandBar
|
||||
button.Click -= ThemeButton_Click;
|
||||
button.Click -= PopOutButton_Click;
|
||||
break;
|
||||
case AppBarToggleButton toggleButton:
|
||||
toggleButton.ClearValue(AppBarToggleButton.IsCheckedProperty);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -337,22 +310,6 @@ public sealed partial class OperationCommandBar : CommandBar
|
||||
return null;
|
||||
}
|
||||
|
||||
private AppBarToggleButton CreateAIActionsToggleButton()
|
||||
{
|
||||
var button = (AppBarToggleButton)LoadCommandBarElementTemplate(
|
||||
AIActionsTemplateKey,
|
||||
new OperationCommandBarAIActionsItemViewModel(Translator.Composer_AiActions, "\uE945"));
|
||||
|
||||
button.SetBinding(AppBarToggleButton.IsCheckedProperty, new Binding
|
||||
{
|
||||
Mode = BindingMode.TwoWay,
|
||||
Path = new PropertyPath(nameof(IsAIActionsEnabled)),
|
||||
Source = this
|
||||
});
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
private AppBarButton CreateThemeToggleButton()
|
||||
{
|
||||
var label = IsEditorThemeDark ? Translator.Composer_LightTheme : Translator.Composer_DarkTheme;
|
||||
@@ -487,18 +444,6 @@ public sealed class OperationCommandBarMenuOperationItemViewModel
|
||||
public CommandBarLabelPosition LabelPosition { get; }
|
||||
}
|
||||
|
||||
public sealed class OperationCommandBarAIActionsItemViewModel
|
||||
{
|
||||
public OperationCommandBarAIActionsItemViewModel(string toolTip, string glyph)
|
||||
{
|
||||
ToolTip = toolTip;
|
||||
Glyph = glyph;
|
||||
}
|
||||
|
||||
public string ToolTip { get; }
|
||||
public string Glyph { get; }
|
||||
}
|
||||
|
||||
public sealed class OperationCommandBarThemeItemViewModel
|
||||
{
|
||||
public OperationCommandBarThemeItemViewModel(string toolTip, WinoIconGlyph icon)
|
||||
|
||||
@@ -9,7 +9,6 @@ namespace Wino.Selectors;
|
||||
public partial class WinoAddOnTemplateSelector : DataTemplateSelector
|
||||
{
|
||||
public DataTemplate? NotPurchasedTemplate { get; set; }
|
||||
public DataTemplate? AiPackPurchasedTemplate { get; set; }
|
||||
public DataTemplate? UnlimitedAccountsPurchasedTemplate { get; set; }
|
||||
|
||||
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
|
||||
@@ -22,7 +21,6 @@ public partial class WinoAddOnTemplateSelector : DataTemplateSelector
|
||||
|
||||
return addOn.ProductType switch
|
||||
{
|
||||
WinoAddOnProductType.AI_PACK => AiPackPurchasedTemplate ?? throw new ArgumentException(nameof(AiPackPurchasedTemplate)),
|
||||
WinoAddOnProductType.UNLIMITED_ACCOUNTS => UnlimitedAccountsPurchasedTemplate ?? throw new ArgumentException(nameof(UnlimitedAccountsPurchasedTemplate)),
|
||||
_ => NotPurchasedTemplate ?? throw new ArgumentException(nameof(NotPurchasedTemplate))
|
||||
};
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using Wino.Core.Domain;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
using Wino.Core.Domain.Models.Ai;
|
||||
|
||||
namespace Wino.Mail.WinUI.Services;
|
||||
|
||||
public sealed class AiActionOptionsService : IAiActionOptionsService
|
||||
{
|
||||
public IReadOnlyList<AiTranslateLanguageOption> GetTranslateLanguageOptions()
|
||||
{
|
||||
return
|
||||
[
|
||||
new("en-US", Translator.Composer_AiTranslateLanguageEnglish),
|
||||
new("tr-TR", Translator.Composer_AiTranslateLanguageTurkish),
|
||||
new("de-DE", Translator.Composer_AiTranslateLanguageGerman),
|
||||
new("fr-FR", Translator.Composer_AiTranslateLanguageFrench),
|
||||
new("es-ES", Translator.Composer_AiTranslateLanguageSpanish),
|
||||
new("it-IT", Translator.Composer_AiTranslateLanguageItalian),
|
||||
new("pt-BR", Translator.Composer_AiTranslateLanguagePortugueseBrazil),
|
||||
new("nl-NL", Translator.Composer_AiTranslateLanguageDutch),
|
||||
new("pl-PL", Translator.Composer_AiTranslateLanguagePolish),
|
||||
new("ru-RU", Translator.Composer_AiTranslateLanguageRussian),
|
||||
new("ja-JP", Translator.Composer_AiTranslateLanguageJapanese),
|
||||
new("ko-KR", Translator.Composer_AiTranslateLanguageKorean),
|
||||
new("zh-CN", Translator.Composer_AiTranslateLanguageChineseSimplified),
|
||||
new("ar-SA", Translator.Composer_AiTranslateLanguageArabic),
|
||||
new("hi-IN", Translator.Composer_AiTranslateLanguageHindi),
|
||||
];
|
||||
}
|
||||
|
||||
public IReadOnlyList<AiRewriteModeOption> GetRewriteModeOptions()
|
||||
{
|
||||
return
|
||||
[
|
||||
new("polite", Translator.Composer_AiRewritePolite, Translator.Composer_AiRewritePoliteDescription),
|
||||
new("angry", Translator.Composer_AiRewriteAngry, Translator.Composer_AiRewriteAngryDescription),
|
||||
new("happy", Translator.Composer_AiRewriteHappy, Translator.Composer_AiRewriteHappyDescription),
|
||||
new("formal", Translator.Composer_AiRewriteFormal, Translator.Composer_AiRewriteFormalDescription),
|
||||
new("friendly", Translator.Composer_AiRewriteFriendly, Translator.Composer_AiRewriteFriendlyDescription),
|
||||
new("shorter", Translator.Composer_AiRewriteShorter, Translator.Composer_AiRewriteShorterDescription),
|
||||
new("clearer", Translator.Composer_AiRewriteClearer, Translator.Composer_AiRewriteClearerDescription),
|
||||
new(string.Empty, Translator.Composer_AiRewriteCustom, Translator.Composer_AiRewriteCustomDescription, true),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -16,12 +16,10 @@ public class StoreManagementService : IStoreManagementService
|
||||
private readonly Dictionary<WinoAddOnProductType, string> productIds = new Dictionary<WinoAddOnProductType, string>()
|
||||
{
|
||||
{ WinoAddOnProductType.UNLIMITED_ACCOUNTS, "UnlimitedAccounts" },
|
||||
{ WinoAddOnProductType.AI_PACK, "AI_PACK" },
|
||||
};
|
||||
|
||||
private readonly Dictionary<WinoAddOnProductType, string> skuIds = new Dictionary<WinoAddOnProductType, string>()
|
||||
{
|
||||
{ WinoAddOnProductType.AI_PACK, "9N2FH734RBVS" },
|
||||
{ WinoAddOnProductType.UNLIMITED_ACCOUNTS, "9P02MXZ42GSM" }
|
||||
};
|
||||
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
using Wino.Core.Domain;
|
||||
using Wino.Mail.Api.Contracts.Common;
|
||||
|
||||
namespace Wino.Mail.WinUI.Services;
|
||||
|
||||
public static class WinoAccountAiErrorTranslator
|
||||
{
|
||||
public static string Translate(string? errorCode)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(errorCode))
|
||||
{
|
||||
return Translator.GeneralTitle_Error;
|
||||
}
|
||||
|
||||
return errorCode switch
|
||||
{
|
||||
ApiErrorCodes.AiPackRequired => Translator.WinoAccount_Error_AiPackRequired,
|
||||
ApiErrorCodes.AiQuotaExceeded => Translator.WinoAccount_Error_AiQuotaExceeded,
|
||||
ApiErrorCodes.AiHtmlEmpty => Translator.WinoAccount_Error_AiHtmlEmpty,
|
||||
ApiErrorCodes.AiHtmlTooLarge => Translator.WinoAccount_Error_AiHtmlTooLarge,
|
||||
ApiErrorCodes.AiUnsupportedLanguage => Translator.WinoAccount_Error_AiUnsupportedLanguage,
|
||||
ApiErrorCodes.Forbidden => Translator.WinoAccount_Error_Forbidden,
|
||||
ApiErrorCodes.ValidationFailed => Translator.WinoAccount_Error_ValidationFailed,
|
||||
_ => errorCode
|
||||
};
|
||||
}
|
||||
|
||||
public static string Format(string? errorCode, string? errorMessage)
|
||||
{
|
||||
var translatedCode = Translate(errorCode);
|
||||
var hasCode = !string.IsNullOrWhiteSpace(errorCode);
|
||||
var hasMessage = !string.IsNullOrWhiteSpace(errorMessage);
|
||||
|
||||
if (!hasCode && !hasMessage)
|
||||
{
|
||||
return Translator.GeneralTitle_Error;
|
||||
}
|
||||
|
||||
var formattedCode = translatedCode;
|
||||
if (hasCode && !string.Equals(translatedCode, errorCode, System.StringComparison.Ordinal))
|
||||
{
|
||||
formattedCode = $"{translatedCode} ({errorCode})";
|
||||
}
|
||||
|
||||
if (!hasMessage || string.Equals(errorMessage, translatedCode, System.StringComparison.OrdinalIgnoreCase) || string.Equals(errorMessage, errorCode, System.StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return formattedCode;
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(formattedCode))
|
||||
{
|
||||
return errorMessage!;
|
||||
}
|
||||
|
||||
return $"{formattedCode}{System.Environment.NewLine}{errorMessage}";
|
||||
}
|
||||
}
|
||||
@@ -37,17 +37,6 @@
|
||||
</AppBarButton>
|
||||
</DataTemplate>
|
||||
|
||||
<DataTemplate x:Key="OperationCommandBarAIActionsTemplate" x:DataType="controls:OperationCommandBarAIActionsItemViewModel">
|
||||
<AppBarToggleButton
|
||||
MinWidth="40"
|
||||
LabelPosition="Collapsed"
|
||||
ToolTipService.ToolTip="{x:Bind ToolTip}">
|
||||
<AppBarToggleButton.Icon>
|
||||
<FontIcon FontFamily="{StaticResource SymbolThemeFontFamily}" Glyph="{x:Bind Glyph}" />
|
||||
</AppBarToggleButton.Icon>
|
||||
</AppBarToggleButton>
|
||||
</DataTemplate>
|
||||
|
||||
<DataTemplate x:Key="OperationCommandBarThemeToggleTemplate" x:DataType="controls:OperationCommandBarThemeItemViewModel">
|
||||
<AppBarButton
|
||||
MinWidth="40"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -32,7 +32,6 @@ using Wino.Views.Abstract;
|
||||
namespace Wino.Views.Mail;
|
||||
|
||||
public sealed partial class ComposePage : ComposePageAbstract,
|
||||
IAiHtmlActionHost,
|
||||
IPopoutClient,
|
||||
IRecipient<ApplicationThemeChanged>
|
||||
{
|
||||
@@ -502,47 +501,6 @@ public sealed partial class ComposePage : ComposePageAbstract,
|
||||
DisposeDisposables();
|
||||
}
|
||||
|
||||
public async Task<string?> GetCurrentHtmlAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
var html = await WebViewEditor.GetHtmlBodyAsync();
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
return html;
|
||||
}
|
||||
|
||||
public async Task ApplyHtmlResultAsync(string html, CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
await WebViewEditor.RenderHtmlAsync(html);
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
}
|
||||
|
||||
public Task<string?> TryGetCachedTranslationHtmlAsync(string languageCode, CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
return Task.FromResult<string?>(null);
|
||||
}
|
||||
|
||||
public Task SaveCachedTranslationHtmlAsync(string languageCode, string html, CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task<string?> TryGetCachedSummaryTextAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
return Task.FromResult<string?>(null);
|
||||
}
|
||||
|
||||
public Task SaveCachedSummaryTextAsync(string summary, CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public string GetSuggestedSummaryFileName() => "email-summary.txt";
|
||||
|
||||
private void OpenAttachment_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is MenuFlyoutItem item && item.CommandParameter is MailAttachmentViewModel attachment)
|
||||
|
||||
@@ -13,7 +13,6 @@ using Microsoft.UI.Xaml.Navigation;
|
||||
using Microsoft.Web.WebView2.Core;
|
||||
using Windows.System;
|
||||
using Wino.Core.Domain;
|
||||
using Wino.Core.Domain.Enums;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
using Wino.Core.Domain.Models.Printing;
|
||||
using Wino.Mail.ViewModels.Data;
|
||||
@@ -30,14 +29,11 @@ using Wino.Views.Abstract;
|
||||
namespace Wino.Views.Mail;
|
||||
|
||||
public sealed partial class MailRenderingPage : MailRenderingPageAbstract,
|
||||
IAiHtmlActionHost,
|
||||
IPopoutClient,
|
||||
IRecipient<ApplicationThemeChanged>
|
||||
{
|
||||
private readonly IPreferencesService _preferencesService = App.Current.Services.GetService<IPreferencesService>()!;
|
||||
private readonly IMailDialogService _dialogService = App.Current.Services.GetService<IMailDialogService>()!;
|
||||
private readonly IMimeFileService _mimeFileService = App.Current.Services.GetRequiredService<IMimeFileService>();
|
||||
|
||||
private bool isRenderingInProgress = false;
|
||||
private bool? _lastAppliedDarkTheme;
|
||||
private TaskCompletionSource<bool> DOMLoadedTask = new TaskCompletionSource<bool>();
|
||||
@@ -173,107 +169,16 @@ public sealed partial class MailRenderingPage : MailRenderingPageAbstract,
|
||||
ViewModel.RenderHtmlAsyncFunc = null;
|
||||
ViewModel.ClearRenderedHtmlAsyncFunc = null;
|
||||
_currentRenderedHtml = string.Empty;
|
||||
RendererCommandBar.AIActionsEnabledChanged -= RendererCommandBar_AIActionsEnabledChanged;
|
||||
RendererCommandBar.PopOutClicked -= RendererCommandBar_PopOutClicked;
|
||||
RendererCommandBar.IsAIActionsEnabled = false;
|
||||
|
||||
DisposeWebView2();
|
||||
}
|
||||
|
||||
public Task<string?> GetCurrentHtmlAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
return Task.FromResult<string?>(_currentRenderedHtml);
|
||||
}
|
||||
|
||||
public async Task ApplyHtmlResultAsync(string html, CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
await RenderInternalAsync(html);
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
}
|
||||
|
||||
public Task RefreshMailItemAsync(MailItemViewModel mailItemViewModel)
|
||||
{
|
||||
return ViewModel.RefreshMailItemAsync(mailItemViewModel);
|
||||
}
|
||||
|
||||
private async void RendererCommandBar_AIActionsEnabledChanged(object? sender, bool isEnabled)
|
||||
{
|
||||
if (isEnabled)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<string?> TryGetCachedTranslationHtmlAsync(string languageCode, CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
if (!ViewModel.CurrentMailAccountId.HasValue || !ViewModel.CurrentMailFileId.HasValue || string.IsNullOrWhiteSpace(languageCode))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return await _mimeFileService.GetTranslatedHtmlAsync(
|
||||
ViewModel.CurrentMailAccountId.Value,
|
||||
ViewModel.CurrentMailFileId.Value,
|
||||
languageCode,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public async Task SaveCachedTranslationHtmlAsync(string languageCode, string html, CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
if (!ViewModel.CurrentMailAccountId.HasValue || !ViewModel.CurrentMailFileId.HasValue || string.IsNullOrWhiteSpace(languageCode))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
await _mimeFileService.SaveTranslatedHtmlAsync(
|
||||
ViewModel.CurrentMailAccountId.Value,
|
||||
ViewModel.CurrentMailFileId.Value,
|
||||
languageCode,
|
||||
html,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public async Task<string?> TryGetCachedSummaryTextAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
if (!ViewModel.CurrentMailAccountId.HasValue || !ViewModel.CurrentMailFileId.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return await _mimeFileService.GetSummaryTextAsync(
|
||||
ViewModel.CurrentMailAccountId.Value,
|
||||
ViewModel.CurrentMailFileId.Value,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public async Task SaveCachedSummaryTextAsync(string summary, CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
if (!ViewModel.CurrentMailAccountId.HasValue || !ViewModel.CurrentMailFileId.HasValue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
await _mimeFileService.SaveSummaryTextAsync(
|
||||
ViewModel.CurrentMailAccountId.Value,
|
||||
ViewModel.CurrentMailFileId.Value,
|
||||
summary,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public string GetSuggestedSummaryFileName()
|
||||
{
|
||||
var subject = string.IsNullOrWhiteSpace(ViewModel.Subject) ? "email-summary" : ViewModel.Subject;
|
||||
return $"{SanitizeFileNamePart(subject)}.txt";
|
||||
}
|
||||
|
||||
private void DisposeWebView2()
|
||||
{
|
||||
@@ -297,11 +202,8 @@ public sealed partial class MailRenderingPage : MailRenderingPageAbstract,
|
||||
DOMLoadedTask = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
|
||||
ViewModel.RenderHtmlAsyncFunc = RenderInternalAsync;
|
||||
ViewModel.ClearRenderedHtmlAsyncFunc = ClearRenderedContentAsync;
|
||||
RendererCommandBar.AIActionsEnabledChanged -= RendererCommandBar_AIActionsEnabledChanged;
|
||||
RendererCommandBar.AIActionsEnabledChanged += RendererCommandBar_AIActionsEnabledChanged;
|
||||
RendererCommandBar.PopOutClicked -= RendererCommandBar_PopOutClicked;
|
||||
RendererCommandBar.PopOutClicked += RendererCommandBar_PopOutClicked;
|
||||
RendererCommandBar.IsAIActionsEnabled = false;
|
||||
Chromium.CoreWebView2Initialized -= CoreWebViewInitialized;
|
||||
Chromium.CoreWebView2Initialized += CoreWebViewInitialized;
|
||||
_ = EnsureChromiumInitializedAsync();
|
||||
|
||||
@@ -120,50 +120,6 @@
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel
|
||||
Grid.Column="1"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center"
|
||||
Orientation="Horizontal"
|
||||
Spacing="12">
|
||||
<Button
|
||||
Command="{x:Bind ViewModel.NavigateExternalCommand}"
|
||||
CommandParameter="{x:Bind ViewModel.PaypalUrl, Mode=OneWay}"
|
||||
Style="{StaticResource DefaultButtonStyle}"
|
||||
ToolTipService.ToolTip="{x:Bind domain:Translator.SettingsPaypal_Title}">
|
||||
<Viewbox Width="18" Height="18">
|
||||
<Path
|
||||
Data="M385.52,51.09C363.84,26.52,324.71,16,274.63,16H129.25a20.75,20.75,0,0,0-20.54,17.48l-60.55,382a12.43,12.43,0,0,0,10.39,14.22,12.58,12.58,0,0,0,1.94.15h89.76l22.54-142.29-.7,4.46a20.67,20.67,0,0,1,20.47-17.46h42.65c83.77,0,149.36-33.86,168.54-131.8.57-2.9,1.05-5.72,1.49-8.48h0C410.94,98.06,405.19,73.41,385.52,51.09Z"
|
||||
Fill="{ThemeResource TextFillColorPrimaryBrush}"
|
||||
Stretch="Uniform" />
|
||||
</Viewbox>
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
Command="{x:Bind ViewModel.NavigateExternalCommand}"
|
||||
CommandParameter="{x:Bind ViewModel.GitHubUrl, Mode=OneWay}"
|
||||
Style="{StaticResource DefaultButtonStyle}"
|
||||
ToolTipService.ToolTip="{x:Bind domain:Translator.SettingsAboutGithub_Title}">
|
||||
<Viewbox Width="18" Height="18">
|
||||
<Path
|
||||
Data="m 12.2135 0 c -6.7538 0 -12.2135 5.5 -12.2135 12.3042 c 0 5.439 3.4983 10.043 8.3513 11.6725 c 0.6067 0.1225 0.829 -0.2647 0.829 -0.5905 c 0 -0.2853 -0.02 -1.263 -0.02 -2.2817 c -3.3975 0.7335 -4.105 -1.4668 -4.105 -1.4668 c -0.546 -1.426 -1.355 -1.7925 -1.355 -1.7925 c -1.112 -0.7538 0.081 -0.7538 0.081 -0.7538 c 1.2335 0.0815 1.8807 1.263 1.8807 1.263 c 1.0918 1.874 2.851 1.3445 3.5587 1.0185 c 0.101 -0.7945 0.4247 -1.3445 0.7685 -1.65 c -2.7097 -0.2853 -5.5607 -1.3445 -5.5607 -6.0708 c 0 -1.3445 0.485 -2.4445 1.2535 -3.3 c -0.1212 -0.3055 -0.546 -1.5687 0.1215 -3.2595 c 0 0 1.0313 -0.326 3.3565 1.263 a 11.7425 11.7425 90 0 1 3.0535 -0.4075 c 1.0313 0 2.0825 0.1428 3.0533 0.4075 c 2.3255 -1.589 3.3567 -1.263 3.3567 -1.263 c 0.6675 1.6908 0.2425 2.954 0.1212 3.2595 c 0.7888 0.8555 1.2538 1.9555 1.2538 3.3 c 0 4.7263 -2.851 5.765 -5.581 6.0708 c 0.445 0.387 0.829 1.1202 0.829 2.2815 c 0 1.65 -0.02 2.9743 -0.02 3.3815 c 0 0.326 0.2225 0.7132 0.829 0.591 c 4.853 -1.63 8.3513 -6.2338 8.3513 -11.6728 c 0.02 -6.8043 -5.4598 -12.3043 -12.1933 -12.3043 z"
|
||||
Fill="{ThemeResource TextFillColorPrimaryBrush}"
|
||||
Stretch="Uniform" />
|
||||
</Viewbox>
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
Command="{x:Bind ViewModel.NavigateExternalCommand}"
|
||||
CommandParameter="Store"
|
||||
ToolTipService.ToolTip="{x:Bind domain:Translator.SettingsStore_Title}">
|
||||
<Viewbox Width="18" Height="18">
|
||||
<Path
|
||||
Data="F1 M 19.003906 3.251953 L 19.003906 15.947266 C 19.003906 16.357422 18.920898 16.748047 18.754883 17.119141 C 18.588867 17.490234 18.367512 17.814127 18.09082 18.09082 C 17.814127 18.367514 17.490234 18.588867 17.119141 18.754883 C 16.748047 18.920898 16.357422 19.003906 15.947266 19.003906 L 3.056641 19.003906 C 2.646484 19.003906 2.255859 18.920898 1.884766 18.754883 C 1.513672 18.588867 1.189779 18.367514 0.913086 18.09082 C 0.636393 17.814127 0.415039 17.490234 0.249023 17.119141 C 0.083008 16.748047 0 16.357422 0 15.947266 L 0 3.251953 C 0 3.076172 0.032552 2.913412 0.097656 2.763672 C 0.16276 2.613934 0.252279 2.482098 0.366211 2.368164 C 0.480143 2.254232 0.611979 2.164715 0.761719 2.099609 C 0.911458 2.034506 1.074219 2.001953 1.25 2.001953 L 4.003906 2.001953 L 4.003906 0.996094 C 4.003906 0.859375 4.029948 0.730795 4.082031 0.610352 C 4.134114 0.48991 4.205729 0.384115 4.296875 0.292969 C 4.388021 0.201824 4.493815 0.130209 4.614258 0.078125 C 4.7347 0.026043 4.863281 0 5 0 L 14.003906 0 C 14.140624 0 14.269205 0.026043 14.389648 0.078125 C 14.510091 0.130209 14.615885 0.201824 14.707031 0.292969 C 14.798177 0.384115 14.869791 0.48991 14.921875 0.610352 C 14.973957 0.730795 14.999999 0.859375 15 0.996094 L 15 2.001953 L 17.753906 2.001953 C 17.923176 2.001953 18.084309 2.034506 18.237305 2.099609 C 18.390299 2.164715 18.523762 2.254232 18.637695 2.368164 C 18.751627 2.482098 18.841145 2.615561 18.90625 2.768555 C 18.971354 2.921551 19.003906 3.082684 19.003906 3.251953 Z M 14.003906 0.996094 L 5 0.996094 L 5 2.001953 L 14.003906 2.001953 Z M 5 10 L 9.003906 10 L 9.003906 5.996094 L 5 5.996094 Z M 10 10 L 14.003906 10 L 14.003906 5.996094 L 10 5.996094 Z M 5 15 L 9.003906 15 L 9.003906 10.996094 L 5 10.996094 Z M 10 15 L 14.003906 15 L 14.003906 10.996094 L 10 10.996094 Z "
|
||||
Fill="{ThemeResource TextFillColorPrimaryBrush}"
|
||||
Stretch="Uniform" />
|
||||
</Viewbox>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
|
||||
@@ -55,26 +55,6 @@
|
||||
</controls:SettingsCard.ActionIcon>
|
||||
</controls:SettingsCard>
|
||||
|
||||
<controls:SettingsCard
|
||||
Command="{x:Bind ViewModel.NavigateCommand}"
|
||||
CommandParameter="{x:Bind ViewModel.GitHubUrl}"
|
||||
Description="{x:Bind domain:Translator.SettingsAboutGithub_Description}"
|
||||
Header="{x:Bind domain:Translator.SettingsAboutGithub_Title}"
|
||||
IsClickEnabled="True">
|
||||
<controls:SettingsCard.HeaderIcon>
|
||||
<PathIcon
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Data="m 12.2135 0 c -6.7538 0 -12.2135 5.5 -12.2135 12.3042 c 0 5.439 3.4983 10.043 8.3513 11.6725 c 0.6067 0.1225 0.829 -0.2647 0.829 -0.5905 c 0 -0.2853 -0.02 -1.263 -0.02 -2.2817 c -3.3975 0.7335 -4.105 -1.4668 -4.105 -1.4668 c -0.546 -1.426 -1.355 -1.7925 -1.355 -1.7925 c -1.112 -0.7538 0.081 -0.7538 0.081 -0.7538 c 1.2335 0.0815 1.8807 1.263 1.8807 1.263 c 1.0918 1.874 2.851 1.3445 3.5587 1.0185 c 0.101 -0.7945 0.4247 -1.3445 0.7685 -1.65 c -2.7097 -0.2853 -5.5607 -1.3445 -5.5607 -6.0708 c 0 -1.3445 0.485 -2.4445 1.2535 -3.3 c -0.1212 -0.3055 -0.546 -1.5687 0.1215 -3.2595 c 0 0 1.0313 -0.326 3.3565 1.263 a 11.7425 11.7425 90 0 1 3.0535 -0.4075 c 1.0313 0 2.0825 0.1428 3.0533 0.4075 c 2.3255 -1.589 3.3567 -1.263 3.3567 -1.263 c 0.6675 1.6908 0.2425 2.954 0.1212 3.2595 c 0.7888 0.8555 1.2538 1.9555 1.2538 3.3 c 0 4.7263 -2.851 5.765 -5.581 6.0708 c 0.445 0.387 0.829 1.1202 0.829 2.2815 c 0 1.65 -0.02 2.9743 -0.02 3.3815 c 0 0.326 0.2225 0.7132 0.829 0.591 c 4.853 -1.63 8.3513 -6.2338 8.3513 -11.6728 c 0.02 -6.8043 -5.4598 -12.3043 -12.1933 -12.3043 z" />
|
||||
</controls:SettingsCard.HeaderIcon>
|
||||
<controls:SettingsCard.ActionIcon>
|
||||
<PathIcon
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Data="{StaticResource OpenInNewWindowPathIcon}" />
|
||||
</controls:SettingsCard.ActionIcon>
|
||||
</controls:SettingsCard>
|
||||
|
||||
<controls:SettingsCard
|
||||
Command="{x:Bind ViewModel.NavigateCommand}"
|
||||
CommandParameter="{x:Bind ViewModel.DiscordChannelUrl}"
|
||||
@@ -95,43 +75,6 @@
|
||||
</controls:SettingsCard.ActionIcon>
|
||||
</controls:SettingsCard>
|
||||
|
||||
<controls:SettingsCard
|
||||
Command="{x:Bind ViewModel.NavigateCommand}"
|
||||
CommandParameter="Store"
|
||||
Description="{x:Bind domain:Translator.SettingsStore_Description}"
|
||||
Header="{x:Bind domain:Translator.SettingsStore_Title}"
|
||||
IsClickEnabled="True">
|
||||
<controls:SettingsCard.HeaderIcon>
|
||||
<PathIcon
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Data="F1 M 19.003906 3.251953 L 19.003906 15.947266 C 19.003906 16.357422 18.920898 16.748047 18.754883 17.119141 C 18.588867 17.490234 18.367512 17.814127 18.09082 18.09082 C 17.814127 18.367514 17.490234 18.588867 17.119141 18.754883 C 16.748047 18.920898 16.357422 19.003906 15.947266 19.003906 L 3.056641 19.003906 C 2.646484 19.003906 2.255859 18.920898 1.884766 18.754883 C 1.513672 18.588867 1.189779 18.367514 0.913086 18.09082 C 0.636393 17.814127 0.415039 17.490234 0.249023 17.119141 C 0.083008 16.748047 0 16.357422 0 15.947266 L 0 3.251953 C 0 3.076172 0.032552 2.913412 0.097656 2.763672 C 0.16276 2.613934 0.252279 2.482098 0.366211 2.368164 C 0.480143 2.254232 0.611979 2.164715 0.761719 2.099609 C 0.911458 2.034506 1.074219 2.001953 1.25 2.001953 L 4.003906 2.001953 L 4.003906 0.996094 C 4.003906 0.859375 4.029948 0.730795 4.082031 0.610352 C 4.134114 0.48991 4.205729 0.384115 4.296875 0.292969 C 4.388021 0.201824 4.493815 0.130209 4.614258 0.078125 C 4.7347 0.026043 4.863281 0 5 0 L 14.003906 0 C 14.140624 0 14.269205 0.026043 14.389648 0.078125 C 14.510091 0.130209 14.615885 0.201824 14.707031 0.292969 C 14.798177 0.384115 14.869791 0.48991 14.921875 0.610352 C 14.973957 0.730795 14.999999 0.859375 15 0.996094 L 15 2.001953 L 17.753906 2.001953 C 17.923176 2.001953 18.084309 2.034506 18.237305 2.099609 C 18.390299 2.164715 18.523762 2.254232 18.637695 2.368164 C 18.751627 2.482098 18.841145 2.615561 18.90625 2.768555 C 18.971354 2.921551 19.003906 3.082684 19.003906 3.251953 Z M 14.003906 0.996094 L 5 0.996094 L 5 2.001953 L 14.003906 2.001953 Z M 5 10 L 9.003906 10 L 9.003906 5.996094 L 5 5.996094 Z M 10 10 L 14.003906 10 L 14.003906 5.996094 L 10 5.996094 Z M 5 15 L 9.003906 15 L 9.003906 10.996094 L 5 10.996094 Z M 10 15 L 14.003906 15 L 14.003906 10.996094 L 10 10.996094 Z " />
|
||||
</controls:SettingsCard.HeaderIcon>
|
||||
<controls:SettingsCard.ActionIcon>
|
||||
<PathIcon
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Data="{StaticResource OpenInNewWindowPathIcon}" />
|
||||
</controls:SettingsCard.ActionIcon>
|
||||
</controls:SettingsCard>
|
||||
|
||||
<controls:SettingsCard
|
||||
Command="{x:Bind ViewModel.NavigateCommand}"
|
||||
CommandParameter="{x:Bind ViewModel.PaypalUrl}"
|
||||
Description="{x:Bind domain:Translator.SettingsPaypal_Description}"
|
||||
Header="{x:Bind domain:Translator.SettingsPaypal_Title}"
|
||||
IsClickEnabled="True">
|
||||
<controls:SettingsCard.HeaderIcon>
|
||||
<PathIcon Data="M385.52,51.09C363.84,26.52,324.71,16,274.63,16H129.25a20.75,20.75,0,0,0-20.54,17.48l-60.55,382a12.43,12.43,0,0,0,10.39,14.22,12.58,12.58,0,0,0,1.94.15h89.76l22.54-142.29-.7,4.46a20.67,20.67,0,0,1,20.47-17.46h42.65c83.77,0,149.36-33.86,168.54-131.8.57-2.9,1.05-5.72,1.49-8.48h0C410.94,98.06,405.19,73.41,385.52,51.09Z" />
|
||||
</controls:SettingsCard.HeaderIcon>
|
||||
<controls:SettingsCard.ActionIcon>
|
||||
<PathIcon
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Data="{StaticResource OpenInNewWindowPathIcon}" />
|
||||
</controls:SettingsCard.ActionIcon>
|
||||
</controls:SettingsCard>
|
||||
|
||||
<controls:SettingsCard
|
||||
Command="{x:Bind ViewModel.NavigateCommand}"
|
||||
CommandParameter="{x:Bind ViewModel.PrivacyPolicyUrl}"
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:domain="using:Wino.Core.Domain"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:models="using:Wino.Core.Domain.Models.Ai"
|
||||
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
|
||||
xmlns:translations="using:Wino.Core.Domain.Models.Translations"
|
||||
mc:Ignorable="d">
|
||||
@@ -78,67 +77,6 @@
|
||||
</controls:SettingsCard.HeaderIcon>
|
||||
</controls:SettingsCard>
|
||||
|
||||
<controls:SettingsExpander
|
||||
Description="{x:Bind domain:Translator.SettingsAppPreferences_AiActions_Description}"
|
||||
Header="{x:Bind domain:Translator.SettingsAppPreferences_AiActions_Title}"
|
||||
IsExpanded="True">
|
||||
<controls:SettingsExpander.HeaderIcon>
|
||||
<FontIcon FontFamily="{StaticResource SymbolThemeFontFamily}" Glyph="" />
|
||||
</controls:SettingsExpander.HeaderIcon>
|
||||
<controls:SettingsExpander.Items>
|
||||
<controls:SettingsCard Description="{x:Bind domain:Translator.SettingsAppPreferences_AiDefaultTranslationLanguage_Description}" Header="{x:Bind domain:Translator.SettingsAppPreferences_AiDefaultTranslationLanguage_Title}">
|
||||
<ComboBox ItemsSource="{x:Bind ViewModel.AvailableAiLanguages, Mode=OneWay}" SelectedItem="{x:Bind ViewModel.SelectedDefaultTranslationLanguage, Mode=TwoWay}">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate x:DataType="models:AiTranslateLanguageOption">
|
||||
<TextBlock Text="{x:Bind Label}" />
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
</controls:SettingsCard>
|
||||
|
||||
<controls:SettingsCard Description="{x:Bind domain:Translator.SettingsAppPreferences_AiSummarizeLanguage_Description}" Header="{x:Bind domain:Translator.SettingsAppPreferences_AiSummarizeLanguage_Title}">
|
||||
<ComboBox ItemsSource="{x:Bind ViewModel.AvailableAiLanguages, Mode=OneWay}" SelectedItem="{x:Bind ViewModel.SelectedSummarizeLanguage, Mode=TwoWay}">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate x:DataType="models:AiTranslateLanguageOption">
|
||||
<TextBlock Text="{x:Bind Label}" />
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
</controls:SettingsCard>
|
||||
|
||||
<controls:SettingsCard
|
||||
HorizontalContentAlignment="Stretch"
|
||||
VerticalContentAlignment="Stretch"
|
||||
ContentAlignment="Vertical"
|
||||
Description="{x:Bind domain:Translator.SettingsAppPreferences_AiSummarySavePath_Description}"
|
||||
Header="{x:Bind domain:Translator.SettingsAppPreferences_AiSummarySavePath_Title}">
|
||||
<StackPanel Spacing="8">
|
||||
<Grid ColumnSpacing="12">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox
|
||||
Grid.Column="0"
|
||||
IsReadOnly="True"
|
||||
PlaceholderText="{x:Bind domain:Translator.SettingsAppPreferences_AiSummarySavePath_Placeholder}"
|
||||
Text="{x:Bind ViewModel.SummarySavePath, Mode=OneWay}" />
|
||||
<Button
|
||||
Grid.Column="1"
|
||||
Command="{x:Bind ViewModel.BrowseSummarySavePathCommand}"
|
||||
Content="{x:Bind domain:Translator.Buttons_Browse}" />
|
||||
</Grid>
|
||||
<TextBlock
|
||||
Foreground="{ThemeResource SystemFillColorCautionBrush}"
|
||||
Style="{StaticResource CaptionTextBlockStyle}"
|
||||
Text="{x:Bind domain:Translator.SettingsAppPreferences_AiSummarySavePath_InvalidHint}"
|
||||
TextWrapping="WrapWholeWords"
|
||||
Visibility="{x:Bind ViewModel.HasInvalidSummarySavePath, Mode=OneWay}" />
|
||||
</StackPanel>
|
||||
</controls:SettingsCard>
|
||||
|
||||
</controls:SettingsExpander.Items>
|
||||
</controls:SettingsExpander>
|
||||
</StackPanel>
|
||||
|
||||
<VisualStateManager.VisualStateGroups>
|
||||
|
||||
@@ -7,7 +7,6 @@ using System.Threading.Tasks;
|
||||
using Wino.Core.Domain.Entities.Shared;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
using Wino.Core.Domain.Models.Accounts;
|
||||
using Wino.Mail.Api.Contracts.Ai;
|
||||
using Wino.Mail.Api.Contracts.Auth;
|
||||
using Wino.Mail.Api.Contracts.Common;
|
||||
using Wino.Mail.Api.Contracts.Users;
|
||||
@@ -33,10 +32,6 @@ public sealed class LocalOnlyWinoAccountApiClient : IWinoAccountApiClient
|
||||
public Task<ApiEnvelope<JsonElement>> ForgotPasswordAsync(string email, CancellationToken cancellationToken = default) => Task.FromResult(Disabled<JsonElement>());
|
||||
public Task<ApiEnvelope<JsonElement>> LogoutAsync(string refreshToken, CancellationToken cancellationToken = default) => Task.FromResult(Disabled<JsonElement>());
|
||||
public Task<ApiEnvelope<AuthUserDto>> GetCurrentUserAsync(CancellationToken cancellationToken = default) => Task.FromResult(Disabled<AuthUserDto>());
|
||||
public Task<ApiEnvelope<AiStatusResultDto>> GetAiStatusAsync(CancellationToken cancellationToken = default) => Task.FromResult(Disabled<AiStatusResultDto>());
|
||||
public Task<ApiEnvelope<AiTextResultDto>> SummarizeAsync(string html, string targetLanguage, CancellationToken cancellationToken = default) => Task.FromResult(Disabled<AiTextResultDto>());
|
||||
public Task<ApiEnvelope<AiTextResultDto>> TranslateAsync(string html, string targetLanguage, CancellationToken cancellationToken = default) => Task.FromResult(Disabled<AiTextResultDto>());
|
||||
public Task<ApiEnvelope<AiTextResultDto>> RewriteAsync(string html, string mode, CancellationToken cancellationToken = default) => Task.FromResult(Disabled<AiTextResultDto>());
|
||||
public Task<ApiEnvelope<WinoStoreCollectionsIdTicketInfo>> CreateCollectionsIdTicketAsync(CancellationToken cancellationToken = default) => Task.FromResult(Disabled<WinoStoreCollectionsIdTicketInfo>());
|
||||
public Task<ApiEnvelope<WinoStoreCollectionsIdTicketInfo>> CreatePurchaseIdTicketAsync(CancellationToken cancellationToken = default) => Task.FromResult(Disabled<WinoStoreCollectionsIdTicketInfo>());
|
||||
public Task<ApiEnvelope<JsonElement>> SyncStoreEntitlementsAsync(string? storeIdKey, string? purchaseIdKey, CancellationToken cancellationToken = default) => Task.FromResult(Disabled<JsonElement>());
|
||||
@@ -61,10 +56,6 @@ public sealed class LocalOnlyWinoAccountProfileService : IWinoAccountProfileServ
|
||||
public Task<WinoAccount?> GetAuthenticatedAccountAsync(CancellationToken cancellationToken = default) => Task.FromResult<WinoAccount?>(null);
|
||||
public Task<bool> HasActiveAccountAsync() => Task.FromResult(false);
|
||||
public Task<ApiEnvelope<AuthUserDto>> GetCurrentUserAsync(CancellationToken cancellationToken = default) => Task.FromResult(Disabled<AuthUserDto>());
|
||||
public Task<ApiEnvelope<AiStatusResultDto>> GetAiStatusAsync(CancellationToken cancellationToken = default) => Task.FromResult(Disabled<AiStatusResultDto>());
|
||||
public Task<ApiEnvelope<AiTextResultDto>> SummarizeAsync(string html, string targetLanguage, CancellationToken cancellationToken = default) => Task.FromResult(Disabled<AiTextResultDto>());
|
||||
public Task<ApiEnvelope<AiTextResultDto>> TranslateAsync(string html, string targetLanguage, CancellationToken cancellationToken = default) => Task.FromResult(Disabled<AiTextResultDto>());
|
||||
public Task<ApiEnvelope<AiTextResultDto>> RewriteAsync(string html, string mode, CancellationToken cancellationToken = default) => Task.FromResult(Disabled<AiTextResultDto>());
|
||||
public Task<ApiEnvelope<JsonElement>> SyncStoreEntitlementsAsync(CancellationToken cancellationToken = default) => Task.FromResult(Disabled<JsonElement>());
|
||||
public Task<string?> GetSettingsAsync(CancellationToken cancellationToken = default) => Task.FromResult<string?>(null);
|
||||
public Task SaveSettingsAsync(string settingsJson, CancellationToken cancellationToken = default) => Task.CompletedTask;
|
||||
|
||||
@@ -14,7 +14,6 @@ using System.Threading.Tasks;
|
||||
using Wino.Core.Domain.Entities.Shared;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
using Wino.Core.Domain.Models.Accounts;
|
||||
using Wino.Mail.Api.Contracts.Ai;
|
||||
using Wino.Mail.Api.Contracts.Auth;
|
||||
using Wino.Mail.Api.Contracts.Common;
|
||||
using Wino.Mail.Api.Contracts.Users;
|
||||
@@ -107,36 +106,6 @@ public sealed class WinoAccountApiClient : IWinoAccountApiClient, IDisposable
|
||||
public Task<ApiEnvelope<AuthUserDto>> GetCurrentUserAsync(CancellationToken cancellationToken = default)
|
||||
=> SendAuthorizedRequestAsync("api/v1/auth/me", WinoAccountApiJsonContext.Default.ApiEnvelopeAuthUserDto, cancellationToken);
|
||||
|
||||
public Task<ApiEnvelope<AiStatusResultDto>> GetAiStatusAsync(CancellationToken cancellationToken = default)
|
||||
=> SendAuthorizedRequestAsync("api/v1/ai/status", WinoAccountApiJsonContext.Default.ApiEnvelopeAiStatusResultDto, cancellationToken);
|
||||
|
||||
public Task<ApiEnvelope<AiTextResultDto>> SummarizeAsync(string html, string targetLanguage, CancellationToken cancellationToken = default)
|
||||
=> SendAuthorizedRequestAsync(
|
||||
HttpMethod.Post,
|
||||
"api/v1/ai/summarize",
|
||||
new SummarizeRequest(html, targetLanguage),
|
||||
WinoAccountApiJsonContext.Default.SummarizeRequest,
|
||||
WinoAccountApiJsonContext.Default.ApiEnvelopeAiTextResultDto,
|
||||
cancellationToken);
|
||||
|
||||
public Task<ApiEnvelope<AiTextResultDto>> TranslateAsync(string html, string targetLanguage, CancellationToken cancellationToken = default)
|
||||
=> SendAuthorizedRequestAsync(
|
||||
HttpMethod.Post,
|
||||
"api/v1/ai/translate",
|
||||
new TranslateRequest(html, targetLanguage),
|
||||
WinoAccountApiJsonContext.Default.TranslateRequest,
|
||||
WinoAccountApiJsonContext.Default.ApiEnvelopeAiTextResultDto,
|
||||
cancellationToken);
|
||||
|
||||
public Task<ApiEnvelope<AiTextResultDto>> RewriteAsync(string html, string mode, CancellationToken cancellationToken = default)
|
||||
=> SendAuthorizedRequestAsync(
|
||||
HttpMethod.Post,
|
||||
"api/v1/ai/rewrite",
|
||||
new RewriteRequest(html, mode),
|
||||
WinoAccountApiJsonContext.Default.RewriteRequest,
|
||||
WinoAccountApiJsonContext.Default.ApiEnvelopeAiTextResultDto,
|
||||
cancellationToken);
|
||||
|
||||
public Task<ApiEnvelope<WinoStoreCollectionsIdTicketInfo>> CreateCollectionsIdTicketAsync(CancellationToken cancellationToken = default)
|
||||
=> SendAuthorizedRequestAsync(
|
||||
HttpMethod.Post,
|
||||
@@ -588,15 +557,10 @@ public sealed class WinoAccountApiClient : IWinoAccountApiClient, IDisposable
|
||||
[JsonSerializable(typeof(LogoutRequest))]
|
||||
[JsonSerializable(typeof(ResendEmailConfirmationRequest))]
|
||||
[JsonSerializable(typeof(ForgotPasswordRequest))]
|
||||
[JsonSerializable(typeof(SummarizeRequest))]
|
||||
[JsonSerializable(typeof(TranslateRequest))]
|
||||
[JsonSerializable(typeof(RewriteRequest))]
|
||||
[JsonSerializable(typeof(SyncStoreEntitlementsRequest))]
|
||||
[JsonSerializable(typeof(ApiEnvelope<AuthResultDto>))]
|
||||
[JsonSerializable(typeof(ApiEnvelope<EmailConfirmationResendResultDto>))]
|
||||
[JsonSerializable(typeof(ApiEnvelope<AuthUserDto>))]
|
||||
[JsonSerializable(typeof(ApiEnvelope<AiStatusResultDto>))]
|
||||
[JsonSerializable(typeof(ApiEnvelope<AiTextResultDto>))]
|
||||
[JsonSerializable(typeof(ApiEnvelope<WinoStoreCollectionsIdTicketInfo>))]
|
||||
[JsonSerializable(typeof(ApiEnvelope<UserMailboxSyncListDto>))]
|
||||
[JsonSerializable(typeof(ApiEnvelope<JsonElement>))]
|
||||
|
||||
@@ -8,7 +8,6 @@ using Wino.Core.Domain.Entities.Shared;
|
||||
using Wino.Core.Domain.Enums;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
using Wino.Core.Domain.Models.Accounts;
|
||||
using Wino.Mail.Api.Contracts.Ai;
|
||||
using Wino.Mail.Api.Contracts.Auth;
|
||||
using Wino.Mail.Api.Contracts.Common;
|
||||
using Wino.Mail.Api.Contracts.Users;
|
||||
@@ -196,33 +195,6 @@ public sealed class WinoAccountProfileService : BaseDatabaseService, IWinoAccoun
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<ApiEnvelope<AiStatusResultDto>> GetAiStatusAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
var account = await GetAuthenticatedAccountAsync(cancellationToken).ConfigureAwait(false);
|
||||
if (account == null)
|
||||
{
|
||||
return ApiEnvelope<AiStatusResultDto>.Failure("MissingAccessToken");
|
||||
}
|
||||
|
||||
var response = await _apiClient.GetAiStatusAsync(cancellationToken).ConfigureAwait(false);
|
||||
if (!response.IsSuccess)
|
||||
{
|
||||
_logger.Warning("Failed to load AI status for Wino account {Email}. Error code: {ErrorCode}", account.Email, response.ErrorCode);
|
||||
return response;
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public async Task<ApiEnvelope<AiTextResultDto>> SummarizeAsync(string html, string targetLanguage, CancellationToken cancellationToken = default)
|
||||
=> await ExecuteAiOperationAsync(account => _apiClient.SummarizeAsync(html, targetLanguage, cancellationToken), "summarize", cancellationToken).ConfigureAwait(false);
|
||||
|
||||
public async Task<ApiEnvelope<AiTextResultDto>> TranslateAsync(string html, string targetLanguage, CancellationToken cancellationToken = default)
|
||||
=> await ExecuteAiOperationAsync(account => _apiClient.TranslateAsync(html, targetLanguage, cancellationToken), "translate", cancellationToken).ConfigureAwait(false);
|
||||
|
||||
public async Task<ApiEnvelope<AiTextResultDto>> RewriteAsync(string html, string mode, CancellationToken cancellationToken = default)
|
||||
=> await ExecuteAiOperationAsync(account => _apiClient.RewriteAsync(html, mode, cancellationToken), "rewrite", cancellationToken).ConfigureAwait(false);
|
||||
|
||||
public async Task<ApiEnvelope<JsonElement>> SyncStoreEntitlementsAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
var account = await GetActiveAccountAsync().ConfigureAwait(false);
|
||||
@@ -281,7 +253,6 @@ public sealed class WinoAccountProfileService : BaseDatabaseService, IWinoAccoun
|
||||
}
|
||||
|
||||
await RefreshProfileAsync(cancellationToken).ConfigureAwait(false);
|
||||
await GetAiStatusAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
return response;
|
||||
}
|
||||
@@ -426,25 +397,6 @@ public sealed class WinoAccountProfileService : BaseDatabaseService, IWinoAccoun
|
||||
private void PublishProfileUpdated(WinoAccount account)
|
||||
=> ReportUIChange(new WinoAccountProfileUpdatedMessage(account));
|
||||
|
||||
private async Task<ApiEnvelope<AiTextResultDto>> ExecuteAiOperationAsync(Func<WinoAccount, Task<ApiEnvelope<AiTextResultDto>>> executeAsync,
|
||||
string operationName,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var account = await GetAuthenticatedAccountAsync(cancellationToken).ConfigureAwait(false);
|
||||
if (account == null)
|
||||
{
|
||||
return ApiEnvelope<AiTextResultDto>.Failure("MissingAccessToken");
|
||||
}
|
||||
|
||||
var response = await executeAsync(account).ConfigureAwait(false);
|
||||
if (!response.IsSuccess)
|
||||
{
|
||||
_logger.Warning("Failed to {Operation} HTML with AI for Wino account {Email}. Error code: {ErrorCode}", operationName, account.Email, response.ErrorCode);
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
private static bool AreEquivalentProfiles(WinoAccount left, WinoAccount right)
|
||||
=> left.Id == right.Id &&
|
||||
string.Equals(left.Email, right.Email, StringComparison.Ordinal) &&
|
||||
@@ -479,7 +431,6 @@ public sealed class WinoAccountProfileService : BaseDatabaseService, IWinoAccoun
|
||||
|
||||
return productCode.Trim().ToUpperInvariant() switch
|
||||
{
|
||||
"AI_PACK" => WinoAddOnProductType.AI_PACK,
|
||||
"UNLIMITED_ACCOUNTS" => WinoAddOnProductType.UNLIMITED_ACCOUNTS,
|
||||
_ => null
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user