using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.IO; using System.Text.RegularExpressions; using auto_creamapi.Models; using auto_creamapi.Utils; using MvvmCross.Converters; using MvvmCross.Platforms.Wpf.Converters; namespace auto_creamapi.Converters { public class ListOfDLcToStringNativeConverter : MvxNativeValueConverter { } public class ListOfDLcToStringConverter : MvxValueConverter, string> { protected override string Convert(ObservableCollection value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return ""; MyLogger.Log.Debug("ListOfDLcToStringConverter: Convert"); var dlcListToString = DlcListToString(value); return dlcListToString.GetType() == targetType ? dlcListToString : ""; } protected override ObservableCollection ConvertBack(string value, Type targetType, object parameter, CultureInfo culture) { MyLogger.Log.Debug("ListOfDLcToStringConverter: ConvertBack"); var stringToDlcList = StringToDlcList(value); return stringToDlcList.GetType() == targetType ? stringToDlcList : []; } private static ObservableCollection StringToDlcList(string value) { var result = new ObservableCollection(); var expression = new Regex("(?.*) *= *(?.*)"); using var reader = new StringReader(value); string line; while ((line = reader.ReadLine()) != null) { var match = expression.Match(line); if (match.Success) { result.Add(new SteamApp { AppId = int.Parse(match.Groups["id"].Value), Name = match.Groups["name"].Value }); } } return result; } private static string DlcListToString(IEnumerable value) { var result = ""; //value.ForEach(x => result += $"{x}\n"); foreach (var steamApp in value) result += $"{steamApp}\n"; return result; } } }