using MainShell.Filewritable; using MaxwellFramework.Core.Attributes; using Stylet; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MainShell.Recipe.Models { [Singleton] public class RecipeWrapManager : PropertyChangedBase , IHandle { private ObservableCollection _carrierRecipeWraps; public ObservableCollection CarrierRecipeWraps { get { return _carrierRecipeWraps; } set { SetAndNotify(ref _carrierRecipeWraps, value); } } private ObservableCollection _substrateRecipeWraps; public ObservableCollection SubstrateRecipeWraps { get { return _substrateRecipeWraps; } set { SetAndNotify(ref _substrateRecipeWraps, value); } } private ObservableCollection _waferRecipeWraps; public ObservableCollection WaferRecipeWraps { get { return _waferRecipeWraps; } set { SetAndNotify(ref _waferRecipeWraps, value); } } private ObservableCollection _processRecipeWraps; public ObservableCollection ProcessRecipeWraps { get { return _processRecipeWraps; } set { SetAndNotify(ref _processRecipeWraps, value); } } public RecipeWrapManager(IEventAggregator eventAggregator) { CarrierRecipeWraps = new ObservableCollection(LoadRecipes(Paths.CarrierRecipe)); SubstrateRecipeWraps = new ObservableCollection(LoadRecipes(Paths.SubstrateRecipe)); WaferRecipeWraps = new ObservableCollection(LoadRecipes(Paths.WaferRecipe)); ProcessRecipeWraps = new ObservableCollection(LoadRecipes(Paths.ProcessRecipe)); eventAggregator.Unsubscribe(this); eventAggregator.Subscribe(this); } private IEnumerable LoadRecipes(string dirPath) { if (!Directory.Exists(dirPath)) Directory.CreateDirectory(dirPath); foreach (var dir in Directory.EnumerateDirectories(dirPath)) { var name = Path.GetFileNameWithoutExtension(dir); yield return new RecipeWrap { RecipeName = name, CreateTime = Directory.GetCreationTime(dir), ModifiedTime = Directory.GetLastWriteTime(dir), }; } } public void Handle(SubstrateNameChangedEventArgs message) { CarrierRecipe carrierRecipe = new CarrierRecipe(); foreach (var carrierWrap in CarrierRecipeWraps) { carrierRecipe.RecipeName= carrierWrap.RecipeName; carrierRecipe.Read(); if(carrierRecipe.SubstrateSelectInfos!=null) { foreach (var item in carrierRecipe.SubstrateSelectInfos) { if(item.SubstrateName==message.OldName) { item.SubstrateName= message.NewName; carrierRecipe.Write(); break; } } } } } } }