From ca70f66ff1f14203cadfa7c3afe32d31ab62f78a Mon Sep 17 00:00:00 2001 From: Miguel Date: Wed, 18 Jun 2025 18:55:04 +0200 Subject: [PATCH] =?UTF-8?q?Se=20a=C3=B1adi=C3=B3=20la=20funcionalidad=20pa?= =?UTF-8?q?ra=20cargar=20datos=20de=20im=C3=A1genes=20desde=20archivos=20J?= =?UTF-8?q?SON=20en=20la=20clase=20DatosDeTrabajo,=20mejorando=20la=20gest?= =?UTF-8?q?i=C3=B3n=20de=20im=C3=A1genes.=20Se=20implement=C3=B3=20un=20nu?= =?UTF-8?q?evo=20m=C3=A9todo=20para=20obtener=20configuraciones=20de=20ser?= =?UTF-8?q?ializaci=C3=B3n=20JSON=20y=20se=20mejor=C3=B3=20la=20l=C3=B3gic?= =?UTF-8?q?a=20de=20carga=20de=20datos,=20incluyendo=20compatibilidad=20co?= =?UTF-8?q?n=20versiones=20anteriores.=20Adem=C3=A1s,=20se=20actualiz?= =?UTF-8?q?=C3=B3=20el=20m=C3=A9todo=20de=20obtenci=C3=B3n=20de=20nombres?= =?UTF-8?q?=20de=20im=C3=A1genes=20en=20MainViewModel=20para=20incluir=20e?= =?UTF-8?q?tiquetas,=20y=20se=20ajust=C3=B3=20el=20convertidor=20correspon?= =?UTF-8?q?diente=20en=20ImageDisplayNameConverter.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Converters/ImageDisplayNameConverter.cs | 2 +- DatosDeTrabajo.cs | 59 +++++++++++++++++++++++-- MainViewModel.cs | 16 +++++++ 3 files changed, 72 insertions(+), 5 deletions(-) diff --git a/Converters/ImageDisplayNameConverter.cs b/Converters/ImageDisplayNameConverter.cs index 4aeb080..8609de0 100644 --- a/Converters/ImageDisplayNameConverter.cs +++ b/Converters/ImageDisplayNameConverter.cs @@ -14,7 +14,7 @@ namespace CtrEditor.Converters // Buscar el MainViewModel en el Application.Current.MainWindow.DataContext if (Application.Current?.MainWindow?.DataContext is MainViewModel viewModel) { - return viewModel.GetImageDisplayName(imageName); + return viewModel.GetImageDisplayNameWithTags(imageName); } } return value; diff --git a/DatosDeTrabajo.cs b/DatosDeTrabajo.cs index 7cb93c4..36c131e 100644 --- a/DatosDeTrabajo.cs +++ b/DatosDeTrabajo.cs @@ -5,6 +5,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; +using Newtonsoft.Json; namespace CtrEditor { @@ -68,6 +69,8 @@ namespace CtrEditor private void CargarDatosImagenesExistentes() { + var jsonSerializerSettings = GetJsonSerializerSettings(); + foreach (var imageName in Imagenes.Keys) { string jsonPath = ObtenerPathImagenConExtension(imageName, ".json"); @@ -75,17 +78,65 @@ namespace CtrEditor { try { - // Solo cargamos los datos de imagen si existe el archivo JSON - // El StateSerializer se encargará de cargar los datos completos - _mainViewModel.GetOrCreateImageData(imageName); + // Cargar datos completos del archivo JSON + string jsonString = File.ReadAllText(jsonPath); + var simulationData = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString, jsonSerializerSettings); + + // Cargar datos de imágenes si existen en el archivo + if (simulationData?.ImageDataDictionary != null) + { + foreach (var imageDataEntry in simulationData.ImageDataDictionary) + { + // Solo cargar si no existe ya en el diccionario principal + if (!_mainViewModel._imageDataDictionary.ContainsKey(imageDataEntry.Key)) + { + _mainViewModel._imageDataDictionary[imageDataEntry.Key] = imageDataEntry.Value; + } + } + } + + // Compatibilidad con versiones anteriores (ImageCustomNames) +#pragma warning disable CS0618 // Type or member is obsolete + if (simulationData?.ImageCustomNames != null) + { + foreach (var customName in simulationData.ImageCustomNames) + { + var imageData = _mainViewModel.GetOrCreateImageData(customName.Key); + if (string.IsNullOrEmpty(imageData.CustomName)) // Solo actualizar si no tiene nombre personalizado + { + imageData.CustomName = customName.Value; + } + } + } +#pragma warning restore CS0618 } catch (Exception ex) { // Log del error pero no fallar la carga completa - System.Diagnostics.Debug.WriteLine($"Error al pre-cargar datos de imagen {imageName}: {ex.Message}"); + System.Diagnostics.Debug.WriteLine($"Error al cargar datos de imagen desde {jsonPath}: {ex.Message}"); + + // Como fallback, crear una instancia vacía + _mainViewModel.GetOrCreateImageData(imageName); } } + else + { + // Si no existe archivo JSON, crear instancia vacía + _mainViewModel.GetOrCreateImageData(imageName); + } } } + + private Newtonsoft.Json.JsonSerializerSettings GetJsonSerializerSettings() + { + return new Newtonsoft.Json.JsonSerializerSettings + { + Formatting = Newtonsoft.Json.Formatting.Indented, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto, + ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace, + ConstructorHandling = Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor + }; + } } } diff --git a/MainViewModel.cs b/MainViewModel.cs index d8de8dc..d8dddf5 100644 --- a/MainViewModel.cs +++ b/MainViewModel.cs @@ -448,6 +448,22 @@ namespace CtrEditor return imageName; } + public string GetImageDisplayNameWithTags(string imageName) + { + if (_imageDataDictionary.TryGetValue(imageName, out var imageData)) + { + var displayName = imageData.DisplayName; + var tags = imageData.Etiquetas; + + if (!string.IsNullOrWhiteSpace(tags)) + { + return $"{displayName} {tags}"; + } + return displayName; + } + return imageName; + } + public Models.ImageData GetOrCreateImageData(string imageName) { if (!_imageDataDictionary.TryGetValue(imageName, out var imageData))