diff --git a/MareSynchronos/Localization/Strings.cs b/MareSynchronos/Localization/Strings.cs deleted file mode 100644 index 99affff..0000000 --- a/MareSynchronos/Localization/Strings.cs +++ /dev/null @@ -1,44 +0,0 @@ -using CheapLoc; - -namespace MareSynchronos.Localization; - -public static class Strings -{ - public static ToSStrings ToS { get; set; } = new(); - - public class ToSStrings - { - public readonly string AgreeLabel = Loc.Localize("AgreeLabel", "I agree"); - public readonly string AgreementLabel = Loc.Localize("AgreementLabel", "Agreement of Usage of Service"); - public readonly string ButtonWillBeAvailableIn = Loc.Localize("ButtonWillBeAvailableIn", "'I agree' button will be available in"); - public readonly string LanguageLabel = Loc.Localize("LanguageLabel", "Language"); - - public readonly string Paragraph1 = Loc.Localize("Paragraph1", - "All of the mod files currently active on your character as well as your current character state will be uploaded to the service you registered yourself at automatically. " + - "The plugin will exclusively upload the necessary mod files and not the whole mod."); - - public readonly string Paragraph2 = Loc.Localize("Paragraph2", - "If you are on a data capped internet connection, higher fees due to data usage depending on the amount of downloaded and uploaded mod files might occur. " + - "Mod files will be compressed on up- and download to save on bandwidth usage. Due to varying up- and download speeds, changes in characters might not be visible immediately. " + - "Files present on the service that already represent your active mod files will not be uploaded again."); - - public readonly string Paragraph3 = Loc.Localize("Paragraph3", - "The mod files you are uploading are confidential and will not be distributed to parties other than the ones who are requesting the exact same mod files. " + - "Please think about who you are going to pair since it is unavoidable that they will receive and locally cache the necessary mod files that you have currently in use. " + - "Locally cached mod files will have arbitrary file names to discourage attempts at replicating the original mod."); - - public readonly string Paragraph4 = Loc.Localize("Paragraph4", - "The plugin creator tried their best to keep you secure. However, there is no guarantee for 100% security. Do not blindly pair your client with everyone."); - - public readonly string Paragraph5 = Loc.Localize("Paragraph5", - "Mod files that are saved on the service will remain on the service as long as there are requests for the files from clients. " + - "After a period of not being used, the mod files will be automatically deleted. " + - "You will also be able to wipe all the files you have personally uploaded on request. " + - "The service holds no information about which mod files belong to which mod."); - - public readonly string Paragraph6 = Loc.Localize("Paragraph6", - "This service is provided as-is."); - - public readonly string ReadLabel = Loc.Localize("ReadLabel", "READ THIS CAREFULLY"); - } -} \ No newline at end of file diff --git a/MareSynchronos/Localization/de.json b/MareSynchronos/Localization/de.json deleted file mode 100644 index 537cab4..0000000 --- a/MareSynchronos/Localization/de.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "LanguageLabel": { - "message": "Language", - "description": "ToSStrings..ctor" - }, - "AgreementLabel": { - "message": "Nutzungsbedingungen", - "description": "ToSStrings..ctor" - }, - "ReadLabel": { - "message": "BITTE LIES DIES SORGFÄLTIG", - "description": "ToSStrings..ctor" - }, - "Paragraph1": { - "message": "Alle Moddateien, die aktuell auf deinem Charakter aktiv sind und dein Charakterzustand werden automatisch zu dem Service, an dem du dich registriert hast, hochgeladen. Das Plugin wird ausschließlich die nötigen Moddateien hochladen und nicht die gesamte Modifikation.", - "description": "ToSStrings..ctor" - }, - "Paragraph2": { - "message": "Falls du mit einer getakteten Internetverbindung verbunden bist, können durch den Datentransfer von Hoch- und Runtergeladenen Moddateien höhere Kosten entstehen. Moddateien werden beim Hoch- und Runterladen komprimiert um Bandbreite zu sparen. Durch unterschiedliche Hoch- und Runterladgeschwindigkeiten ist es möglich, dass Änderungen an Charakteren nicht sofort sichtbar sind. Dateien die bereits auf dem Service existieren, werden nicht nochmals hochgeladen.", - "description": "ToSStrings..ctor" - }, - "Paragraph3": { - "message": "Die Moddateien die du hochlädst sind vertraulich und werden nicht mit anderen Nutzern geteilt, die nicht die exakt selben Dateien anfordern. Bitte überlege dir sorgfältig mit wem du deinen Identifikationscode teilst, da es unvermeidlich ist, dass die andere Person deine Moddateien erhält und lokal zwischenspeichert. Lokal zwischengespeicherte Dateien haben willkürrliche Namen um vor Versuchen abzuschrecken die originalen Moddateien aus diesen wiederherzustellen.", - "description": "ToSStrings..ctor" - }, - "Paragraph4": { - "message": "Der Ersteller des Plugins hat sein Bestes getan, um deine Sicherheit zu gewährleisten. Es gibt jedoch keine Garantie für 100%ige Sicherheit. Teile deinen Identifikationscode nicht blind mit jedem.", - "description": "ToSStrings..ctor" - }, - "Paragraph5": { - "message": "Moddateien, die auf dem Service gespeichert sind, verbleiben auf dem Service, solange es Anforderungen für diese Dateien gibt. Nach einer Zeitspanne in der die Dateien nicht verwendet wurden, werden diese automatisch gelöscht. Du hast auch die Möglichkeit manuell alle Dateien auf dem Service zu löschen. Der Service hat keine Informationen welche Moddateien zu welcher Modifikation gehören.", - "description": "ToSStrings..ctor" - }, - "Paragraph6": { - "message": "Dieser Dienst wird ohne Gewähr angeboten.", - "description": "ToSStrings..ctor" - }, - "AgreeLabel": { - "message": "Ich Stimme zu", - "description": "ToSStrings..ctor" - }, - "ButtonWillBeAvailableIn": { - "message": "\"Ich stimme zu\" Knopf verfügbar in", - "description": "ToSStrings..ctor" - } -} \ No newline at end of file diff --git a/MareSynchronos/Localization/fr.json b/MareSynchronos/Localization/fr.json deleted file mode 100644 index fb938cd..0000000 --- a/MareSynchronos/Localization/fr.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "LanguageLabel": { - "message": "Language", - "description": "ToSStrings..ctor" - }, - "AgreementLabel": { - "message": "Conditions d'Utilisation", - "description": "ToSStrings..ctor" - }, - "ReadLabel": { - "message": "LISEZ CES INFORMATIONS ATTENTIVEMENT", - "description": "ToSStrings..ctor" - }, - "Paragraph1": { - "message": "Tous les fichiers moddés actuellement en cours d'utilisation ainsi que le statut actuel de votre personnage vont être mix en ligne via le service sur lequel vous vous êtes automatiquement enregistré. Seuls les fichiers nécessaires seront téléversés par le plugin et non pas le mod en entier.", - "description": "ToSStrings..ctor" - }, - "Paragraph2": { - "message": "Si le débit de votre connexion internet est limité, le téléchargement et téléversement d'un grand nombre de fichiers peut entraîner des coûts supplémentaires. Les fichiers seront compressés au chargement et versement pour réduire l'impact sur votre bande passants. Selon la rapidité de vos téléchargements et téléversements, les changements ne seront peut-être pas visibles instantanément sur les personnages. Les fichiers déja présents sur le service qui correspondent à ceux de vos mods en cours d'utilisation ne seront pas remis en ligne.", - "description": "ToSStrings..ctor" - }, - "Paragraph3": { - "message": "Les fichiers que vous allez partager sont confidentiels et ne seront envoyés qu'aux utilisateurs qui feront une requête exacte de ceux-çi. Nous vous demandons de (re)considérer qui sera synchronisé avec vous, puisqu'ils recevront et stockeront inévitablement en local les fichiers nécéssaires utilisés à cet instant. Les noms des fichiers stockés localement sont changés de manière arbitraire afin de décourager toute tentative de réplication des originaux.", - "description": "ToSStrings..ctor" - }, - "Paragraph4": { - "message": "Le créateur de ce plugin a tenté de sécuriser l'application du mieux possible. Cependant, il ne peut pas garantir une protection 100% infaillible. Pour votre sécurité, ne vous synchronisez pas aveuglément et avec n'importe qui.", - "description": "ToSStrings..ctor" - }, - "Paragraph5": { - "message": "Les fichiers sauvegardés sur le service resteront en ligne tant que des utilisateurs en feront usage. Ils seront effacés automatiquement après une certaine période d'inactivité. Vous pouvez également demander l'effacement de tous les fichiers que vous avez mis en ligne vous-même. Le service en soi ne contient aucune information pouvant identifier quel fichier appartient à quel mod.", - "description": "ToSStrings..ctor" - }, - "Paragraph6": { - "message": "Ce service et ses composants vous sont fournis en l'état.", - "description": "ToSStrings..ctor" - }, - "AgreeLabel": { - "message": "J'accept", - "description": "ToSStrings..ctor" - }, - "ButtonWillBeAvailableIn": { - "message": "Bouton \"J'accept\" disposible dans", - "description": "ToSStrings..ctor" - } -} \ No newline at end of file diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index 369ca9e..658e1c6 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -56,21 +56,6 @@ - - - $(DalamudLibPath)CheapLoc.dll - false - - - - - - PreserveNewest - - - - - diff --git a/MareSynchronos/Plugin.cs b/MareSynchronos/Plugin.cs index 3048c4d..ece2614 100644 --- a/MareSynchronos/Plugin.cs +++ b/MareSynchronos/Plugin.cs @@ -34,13 +34,15 @@ public sealed class Plugin : IDalamudPlugin { private readonly IHost _host; +#pragma warning disable CA2211, CS8618 public static Plugin Self; - public Action? _realOnFrameworkUpdate { get; set; } +#pragma warning restore CA2211, CS8618 + public Action? RealOnFrameworkUpdate { get; set; } // Proxy function in the LoporritSync namespace to avoid confusion in /xlstats public void OnFrameworkUpdate(IFramework framework) { - _realOnFrameworkUpdate?.Invoke(framework); + RealOnFrameworkUpdate?.Invoke(framework); } public Plugin(IDalamudPluginInterface pluginInterface, ICommandManager commandManager, IDataManager gameData, @@ -62,7 +64,6 @@ public sealed class Plugin : IDalamudPlugin { collection.AddSingleton(new WindowSystem("MareSynchronos")); collection.AddSingleton(); - collection.AddSingleton(new Dalamud.Localization("MareSynchronos.Localization.", "", useEmbedded: true)); // add dalamud services collection.AddSingleton(_ => pluginInterface); diff --git a/MareSynchronos/Services/DalamudUtilService.cs b/MareSynchronos/Services/DalamudUtilService.cs index 3b0bead..29f00e4 100644 --- a/MareSynchronos/Services/DalamudUtilService.cs +++ b/MareSynchronos/Services/DalamudUtilService.cs @@ -452,7 +452,7 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber { _logger.LogInformation("Starting DalamudUtilService"); #pragma warning disable S2696 // Instance members should not write to "static" fields - LoporritSync.Plugin.Self._realOnFrameworkUpdate = this.FrameworkOnUpdate; + LoporritSync.Plugin.Self.RealOnFrameworkUpdate = this.FrameworkOnUpdate; #pragma warning restore S2696 _framework.Update += LoporritSync.Plugin.Self.OnFrameworkUpdate; if (IsLoggedIn) diff --git a/MareSynchronos/UI/IntroUI.cs b/MareSynchronos/UI/IntroUI.cs index aaad20c..9a9da8b 100644 --- a/MareSynchronos/UI/IntroUI.cs +++ b/MareSynchronos/UI/IntroUI.cs @@ -4,7 +4,6 @@ using Dalamud.Interface.Utility; using Dalamud.Utility; using ImGuiNET; using MareSynchronos.FileCache; -using MareSynchronos.Localization; using MareSynchronos.MareConfiguration; using MareSynchronos.MareConfiguration.Models; using MareSynchronos.Services; @@ -28,17 +27,14 @@ public partial class IntroUi : WindowMediatorSubscriberBase { private readonly MareConfigService _configService; private readonly CacheMonitor _cacheMonitor; - private readonly Dictionary _languages = new(StringComparer.Ordinal) { { "English", "en" }, { "Deutsch", "de" }, { "Français", "fr" } }; private readonly ServerConfigurationManager _serverConfigurationManager; private readonly DalamudUtilService _dalamudUtilService; private readonly UiSharedService _uiShared; - private int _currentLanguage; private bool _readFirstPage; private string _secretKey = string.Empty; private string _timeoutLabel = string.Empty; private Task? _timeoutTask; - private string[]? _tosParagraphs; private bool _registrationInProgress = false; private bool _registrationSuccess = false; private string? _registrationMessage; @@ -63,8 +59,6 @@ public partial class IntroUi : WindowMediatorSubscriberBase MaximumSize = new Vector2(650, 2000), }; - GetToSLocalization(); - Mediator.Subscribe(this, (_) => IsOpen = false); Mediator.Subscribe(this, (_) => { @@ -136,7 +130,7 @@ public partial class IntroUi : WindowMediatorSubscriberBase { for (int i = 10; i > 0; i--) { - _timeoutLabel = $"{Strings.ToS.ButtonWillBeAvailableIn} {i}s"; + _timeoutLabel = $"'I agree' button will be available in {i}s"; await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false); } }); @@ -147,47 +141,43 @@ public partial class IntroUi : WindowMediatorSubscriberBase } else if (!_configService.Current.AcceptedAgreement && _readFirstPage) { - Vector2 textSize; using (_uiShared.UidFont.Push()) { - textSize = ImGui.CalcTextSize(Strings.ToS.LanguageLabel); - ImGui.TextUnformatted(Strings.ToS.AgreementLabel); - } - - ImGui.SameLine(); - var languageSize = ImGui.CalcTextSize(Strings.ToS.LanguageLabel); - ImGui.SetCursorPosX(ImGui.GetWindowContentRegionMax().X - ImGui.GetWindowContentRegionMin().X - languageSize.X - 80); - ImGui.SetCursorPosY(ImGui.GetCursorPosY() + textSize.Y / 2 - languageSize.Y / 2); - - ImGui.TextUnformatted(Strings.ToS.LanguageLabel); - ImGui.SameLine(); - ImGui.SetCursorPosY(ImGui.GetCursorPosY() + textSize.Y / 2 - (languageSize.Y + ImGui.GetStyle().FramePadding.Y) / 2); - ImGui.SetNextItemWidth(80 * ImGuiHelpers.GlobalScale); - if (ImGui.Combo("", ref _currentLanguage, _languages.Keys.ToArray(), _languages.Count)) - { - GetToSLocalization(_currentLanguage); + ImGui.TextUnformatted("Agreement of Usage of Service"); } ImGui.Separator(); ImGui.SetWindowFontScale(1.5f); - string readThis = Strings.ToS.ReadLabel; - textSize = ImGui.CalcTextSize(readThis); + string readThis = "READ THIS CAREFULLY"; + Vector2 textSize = ImGui.CalcTextSize(readThis); ImGui.SetCursorPosX(ImGui.GetWindowSize().X / 2 - textSize.X / 2); UiSharedService.ColorText(readThis, ImGuiColors.DalamudRed); ImGui.SetWindowFontScale(1.0f); ImGui.Separator(); - UiSharedService.TextWrapped(_tosParagraphs![0]); - UiSharedService.TextWrapped(_tosParagraphs![1]); - UiSharedService.TextWrapped(_tosParagraphs![2]); - UiSharedService.TextWrapped(_tosParagraphs![3]); - UiSharedService.TextWrapped(_tosParagraphs![4]); - UiSharedService.TextWrapped(_tosParagraphs![5]); + UiSharedService.TextWrapped(""" +All of the mod files currently active on your character as well as your current character state will be uploaded to the service you registered yourself at automatically. The plugin will exclusively upload the necessary mod files and not the whole mod. +"""); + UiSharedService.TextWrapped(""" +If you are on a data capped internet connection, higher fees due to data usage depending on the amount of downloaded and uploaded mod files might occur. Mod files will be compressed on up- and download to save on bandwidth usage. Due to varying up- and download speeds, changes in characters might not be visible immediately. Files present on the service that already represent your active mod files will not be uploaded again. +"""); + UiSharedService.TextWrapped(""" +The mod files you are uploading are confidential and will not be distributed to parties other than the ones who are requesting the exact same mod files. Please think about who you are going to pair since it is unavoidable that they will receive and locally cache the necessary mod files that you have currently in use. Locally cached mod files will have arbitrary file names to discourage attempts at replicating the original mod. +"""); + UiSharedService.TextWrapped(""" +The plugin creator tried their best to keep you secure. However, there is no guarantee for 100% security. Do not blindly pair your client with everyone. +"""); + UiSharedService.TextWrapped(""" +Mod files that are saved on the service will remain on the service as long as there are requests for the files from clients. After a period of not being used, the mod files will be automatically deleted. +"""); + UiSharedService.TextWrapped(""" +This service is provided as-is. +"""); ImGui.Separator(); if (_timeoutTask?.IsCompleted ?? true) { - if (ImGui.Button(Strings.ToS.AgreeLabel + "##toSetup")) + if (ImGui.Button("I agree##toSetup")) { _configService.Current.AcceptedAgreement = true; _configService.Save(); @@ -384,16 +374,6 @@ public partial class IntroUi : WindowMediatorSubscriberBase } } - private void GetToSLocalization(int changeLanguageTo = -1) - { - if (changeLanguageTo != -1) - { - _uiShared.LoadLocalization(_languages.ElementAt(changeLanguageTo).Value); - } - - _tosParagraphs = [Strings.ToS.Paragraph1, Strings.ToS.Paragraph2, Strings.ToS.Paragraph3, Strings.ToS.Paragraph4, Strings.ToS.Paragraph5, Strings.ToS.Paragraph6]; - } - [GeneratedRegex("^([A-F0-9]{2})+")] private static partial Regex HexRegex(); } diff --git a/MareSynchronos/UI/SettingsUi.cs b/MareSynchronos/UI/SettingsUi.cs index 0140755..29ab0f2 100644 --- a/MareSynchronos/UI/SettingsUi.cs +++ b/MareSynchronos/UI/SettingsUi.cs @@ -55,7 +55,6 @@ public class SettingsUi : WindowMediatorSubscriberBase private readonly PlayerPerformanceService _playerPerformanceService; private readonly UiSharedService _uiShared; private bool _deleteAccountPopupModalShown = false; - private bool _deleteFilesPopupModalShown = false; private string _lastTab = string.Empty; private bool? _notesSuccessfullyApplied = null; private bool _overwriteExistingLabels = false; @@ -65,7 +64,6 @@ public class SettingsUi : WindowMediatorSubscriberBase private bool _wasOpen = false; private readonly IProgress<(int, int, FileCacheEntity)> _validationProgress; private (int, int, FileCacheEntity) _currentProgress; - private Task? _exportTask; private bool _registrationInProgress = false; private bool _registrationSuccess = false; diff --git a/MareSynchronos/UI/UISharedService.cs b/MareSynchronos/UI/UISharedService.cs index 86e8d57..c3077d0 100644 --- a/MareSynchronos/UI/UISharedService.cs +++ b/MareSynchronos/UI/UISharedService.cs @@ -13,7 +13,6 @@ using Dalamud.Utility; using ImGuiNET; using MareSynchronos.FileCache; using MareSynchronos.Interop.Ipc; -using MareSynchronos.Localization; using MareSynchronos.MareConfiguration; using MareSynchronos.MareConfiguration.Models; using MareSynchronos.PlayerData.Pairs; @@ -52,7 +51,6 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase private readonly DalamudUtilService _dalamudUtil; private readonly IpcManager _ipcManager; - private readonly Dalamud.Localization _localization; private readonly IDalamudPluginInterface _pluginInterface; private readonly ITextureProvider _textureProvider; private readonly Dictionary _selectedComboItems = new(StringComparer.Ordinal); @@ -86,7 +84,6 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase CacheMonitor cacheMonitor, FileDialogManager fileDialogManager, MareConfigService configService, DalamudUtilService dalamudUtil, IDalamudPluginInterface pluginInterface, ITextureProvider textureProvider, - Dalamud.Localization localization, ServerConfigurationManager serverManager, MareMediator mediator) : base(logger, mediator) { _ipcManager = ipcManager; @@ -97,9 +94,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase _dalamudUtil = dalamudUtil; _pluginInterface = pluginInterface; _textureProvider = textureProvider; - _localization = localization; _serverConfigurationManager = serverManager; - _localization.SetupWithLangCode("en"); _isDirectoryWritable = IsDirectoryWritable(_configService.Current.CacheFolder); @@ -963,12 +958,6 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase return _textureProvider.CreateFromImageAsync(imageData).Result; } - public void LoadLocalization(string languageCode) - { - _localization.SetupWithLangCode(languageCode); - Strings.ToS = new Strings.ToSStrings(); - } - internal static void DistanceSeparator() { ImGuiHelpers.ScaledDummy(5);