From ec6cb0abb4b7669895b6e96fd7581c93b5abd691 Mon Sep 17 00:00:00 2001 From: Mary Guillemard Date: Sat, 2 Mar 2024 12:51:05 +0100 Subject: infra: Make Avalonia the default UI (#6375) * misc: Move Ryujinx project to Ryujinx.Gtk3 This breaks release CI for now but that's fine. Signed-off-by: Mary Guillemard * misc: Move Ryujinx.Ava project to Ryujinx This breaks CI for now, but it's fine. Signed-off-by: Mary Guillemard * infra: Make Avalonia the default UI Should fix CI after the previous changes. GTK3 isn't build by the release job anymore, only by PR CI. This also ensure that the test-ava update package is still generated to allow update from the old testing channel. Signed-off-by: Mary Guillemard * Fix missing copy in create_app_bundle.sh Signed-off-by: Mary Guillemard * Fix syntax error Signed-off-by: Mary Guillemard --------- Signed-off-by: Mary Guillemard --- src/Ryujinx.Ava/Common/Locale/LocaleExtension.cs | 40 ------ src/Ryujinx.Ava/Common/Locale/LocaleManager.cs | 160 ----------------------- 2 files changed, 200 deletions(-) delete mode 100644 src/Ryujinx.Ava/Common/Locale/LocaleExtension.cs delete mode 100644 src/Ryujinx.Ava/Common/Locale/LocaleManager.cs (limited to 'src/Ryujinx.Ava/Common/Locale') diff --git a/src/Ryujinx.Ava/Common/Locale/LocaleExtension.cs b/src/Ryujinx.Ava/Common/Locale/LocaleExtension.cs deleted file mode 100644 index 40661bf3..00000000 --- a/src/Ryujinx.Ava/Common/Locale/LocaleExtension.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Avalonia.Data.Core; -using Avalonia.Markup.Xaml; -using Avalonia.Markup.Xaml.MarkupExtensions; -using Avalonia.Markup.Xaml.MarkupExtensions.CompiledBindings; -using System; - -namespace Ryujinx.Ava.Common.Locale -{ - internal class LocaleExtension : MarkupExtension - { - public LocaleExtension(LocaleKeys key) - { - Key = key; - } - - public LocaleKeys Key { get; } - - public override object ProvideValue(IServiceProvider serviceProvider) - { - LocaleKeys keyToUse = Key; - - var builder = new CompiledBindingPathBuilder(); - - builder.SetRawSource(LocaleManager.Instance) - .Property(new ClrPropertyInfo("Item", - obj => (LocaleManager.Instance[keyToUse]), - null, - typeof(string)), (weakRef, iPropInfo) => - { - return PropertyInfoAccessorFactory.CreateInpcPropertyAccessor(weakRef, iPropInfo); - }); - - var path = builder.Build(); - - var binding = new CompiledBindingExtension(path); - - return binding.ProvideValue(serviceProvider); - } - } -} diff --git a/src/Ryujinx.Ava/Common/Locale/LocaleManager.cs b/src/Ryujinx.Ava/Common/Locale/LocaleManager.cs deleted file mode 100644 index b2f3e7ab..00000000 --- a/src/Ryujinx.Ava/Common/Locale/LocaleManager.cs +++ /dev/null @@ -1,160 +0,0 @@ -using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.Common; -using Ryujinx.Common.Utilities; -using Ryujinx.UI.Common.Configuration; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Globalization; - -namespace Ryujinx.Ava.Common.Locale -{ - class LocaleManager : BaseModel - { - private const string DefaultLanguageCode = "en_US"; - - private readonly Dictionary _localeStrings; - private Dictionary _localeDefaultStrings; - private readonly ConcurrentDictionary _dynamicValues; - private string _localeLanguageCode; - - public static LocaleManager Instance { get; } = new(); - public event Action LocaleChanged; - - public LocaleManager() - { - _localeStrings = new Dictionary(); - _localeDefaultStrings = new Dictionary(); - _dynamicValues = new ConcurrentDictionary(); - - Load(); - } - - public void Load() - { - // Load the system Language Code. - string localeLanguageCode = CultureInfo.CurrentCulture.Name.Replace('-', '_'); - - // If the view is loaded with the UI Previewer detached, then override it with the saved one or default. - if (Program.PreviewerDetached) - { - if (!string.IsNullOrEmpty(ConfigurationState.Instance.UI.LanguageCode.Value)) - { - localeLanguageCode = ConfigurationState.Instance.UI.LanguageCode.Value; - } - else - { - localeLanguageCode = DefaultLanguageCode; - } - } - - // Load en_US as default, if the target language translation is incomplete. - LoadDefaultLanguage(); - - LoadLanguage(localeLanguageCode); - } - - public string this[LocaleKeys key] - { - get - { - // Check if the locale contains the key. - if (_localeStrings.TryGetValue(key, out string value)) - { - // Check if the localized string needs to be formatted. - if (_dynamicValues.TryGetValue(key, out var dynamicValue)) - { - try - { - return string.Format(value, dynamicValue); - } - catch (Exception) - { - // If formatting failed use the default text instead. - if (_localeDefaultStrings.TryGetValue(key, out value)) - { - try - { - return string.Format(value, dynamicValue); - } - catch (Exception) - { - // If formatting the default text failed return the key. - return key.ToString(); - } - } - } - } - - return value; - } - - // If the locale doesn't contain the key return the default one. - if (_localeDefaultStrings.TryGetValue(key, out string defaultValue)) - { - return defaultValue; - } - - // If the locale text doesn't exist return the key. - return key.ToString(); - } - set - { - _localeStrings[key] = value; - - OnPropertyChanged(); - } - } - - public bool IsRTL() - { - return _localeLanguageCode switch - { - "he_IL" => true, - _ => false - }; - } - - public string UpdateAndGetDynamicValue(LocaleKeys key, params object[] values) - { - _dynamicValues[key] = values; - - OnPropertyChanged("Item"); - - return this[key]; - } - - private void LoadDefaultLanguage() - { - _localeDefaultStrings = LoadJsonLanguage(); - } - - public void LoadLanguage(string languageCode) - { - foreach (var item in LoadJsonLanguage(languageCode)) - { - this[item.Key] = item.Value; - } - - _localeLanguageCode = languageCode; - LocaleChanged?.Invoke(); - } - - private static Dictionary LoadJsonLanguage(string languageCode = DefaultLanguageCode) - { - var localeStrings = new Dictionary(); - string languageJson = EmbeddedResources.ReadAllText($"Ryujinx.Ava/Assets/Locales/{languageCode}.json"); - var strings = JsonHelper.Deserialize(languageJson, CommonJsonContext.Default.StringDictionary); - - foreach (var item in strings) - { - if (Enum.TryParse(item.Key, out var key)) - { - localeStrings[key] = item.Value; - } - } - - return localeStrings; - } - } -} -- cgit v1.2.3