public void SaveProject() { AaronProject aaronProject = GetCurrentProject(); foreach (var item in this.GetChangedItems()) { item.Changed = false; switch (item) { case AaronCarRecord aaronCarRecord: File.WriteAllText(Path.Combine(aaronProject.CarsDirectory, aaronCarRecord.CarTypeName + ".json"), Serialization.Serialize(aaronCarRecord)); break; case AaronCarPartCollection carPartCollection: var fileName = Path.Combine(aaronProject.CarPartsDirectory, $"{carPartCollection.Name}.json"); var serialized = Serialization.Serialize(carPartCollection); File.WriteAllText(fileName, serialized); break; case AaronPresetCar aaronPresetCar: File.WriteAllText( Path.Combine(aaronProject.PresetCarsDirectory, $"{aaronPresetCar.PresetName}.xml"), PresetConverter.ConvertAaronPresetToServerXML(aaronPresetCar).DataContractSerializeObject()); break; case AaronPresetSkinRecord aaronPresetSkinRecord: File.WriteAllText( Path.Combine(aaronProject.PresetSkinsDirectory, $"{aaronPresetSkinRecord.PresetName}.json"), Serialization.Serialize(aaronPresetSkinRecord)); break; case AaronDataTable aaronDataTable: File.WriteAllText( Path.Combine(aaronProject.DataTablesDirectory, $"{aaronDataTable.Name}.json"), Serialization.Serialize(aaronDataTable)); break; } } }
public PresetsService() { List <Preset> userPresets = PresetStorage.UserPresets; this.presetFolders = PresetFolderStorage.PresetFolders; this.collapsedBuiltInFolders = CustomConfig.CollapsedBuiltInFolders; var unmodifiedPresets = userPresets.Where(preset => !preset.IsModified); Preset modifiedPreset = userPresets.FirstOrDefault(preset => preset.IsModified); this.allPresets = new ObservableCollection <PresetViewModel>(); int modifiedPresetIndex = -1; int defaultPresetIndex = 0; foreach (Preset userPreset in unmodifiedPresets) { PresetViewModel presetVM; if (modifiedPreset != null && modifiedPreset.Name == userPreset.Name) { modifiedPresetIndex = this.allPresets.Count; presetVM = new PresetViewModel(modifiedPreset); presetVM.OriginalProfile = userPreset.EncodingProfile; } else { presetVM = new PresetViewModel(userPreset); } this.allPresets.Add(presetVM); } // Populate the custom preset folder before built-in presets are added to AllPresets collection. this.customPresetFolder = new PresetFolderViewModel(this, !this.collapsedBuiltInFolders.Contains(CustomFolderKey)) { Name = EncodingRes.PresetFolder_Custom, Id = 0, IsBuiltIn = false }; this.PopulateCustomFolder(this.customPresetFolder); // Populate built-in folder from HandBrake presets IList <PresetCategory> handBrakePresets = HandBrakePresetService.GetBuiltInPresets(); this.builtInFolder = new PresetFolderViewModel(this, !this.collapsedBuiltInFolders.Contains(BuiltInFolderKey)) { Name = EncodingRes.PresetFolder_BuiltIn, IsBuiltIn = true }; foreach (PresetCategory handbrakePresetCategory in handBrakePresets) { var builtInSubfolder = new PresetFolderViewModel(this, !this.collapsedBuiltInFolders.Contains(handbrakePresetCategory.PresetName)) { Name = handbrakePresetCategory.PresetName, IsBuiltIn = true, }; this.builtInFolder.AddSubfolder(builtInSubfolder); foreach (HBPreset handbrakePreset in handbrakePresetCategory.ChildrenArray) { if (handbrakePreset.Default) { defaultPresetIndex = this.allPresets.Count; } Preset builtInPreset = PresetConverter.ConvertHandBrakePresetToVC(handbrakePreset); PresetViewModel builtInPresetViewModel = new PresetViewModel(builtInPreset); this.allPresets.Add(builtInPresetViewModel); builtInSubfolder.AddItem(builtInPresetViewModel); } } this.allPresetsTree = new ObservableCollection <PresetFolderViewModel>(); if (this.customPresetFolder.Items.Count > 0 || this.customPresetFolder.SubFolders.Count > 0) { this.AllPresetsTree.Add(this.customPresetFolder); } this.AllPresetsTree.Add(this.builtInFolder); // Always select the modified preset if it exists. // Otherwise, choose the last selected preset. int presetIndex; if (modifiedPresetIndex >= 0) { presetIndex = modifiedPresetIndex; } else { int lastPresetIndex = Config.LastPresetIndex; if (lastPresetIndex >= 0) { presetIndex = lastPresetIndex; } else { presetIndex = defaultPresetIndex; } } if (presetIndex >= this.allPresets.Count) { presetIndex = 0; } this.SelectedPreset = this.allPresets[presetIndex]; }
public string GenerateProject(string directory) { AaronProject aaronProject = new AaronProject(); aaronProject.Version = AaronProjectVersion; aaronProject.CarsDirectory = Path.Combine(directory, "Cars"); aaronProject.CarPartsDirectory = Path.Combine(directory, "CarParts"); aaronProject.PresetCarsDirectory = Path.Combine(directory, "PresetCars"); aaronProject.PresetSkinsDirectory = Path.Combine(directory, "PresetSkins"); aaronProject.DataTablesDirectory = Path.Combine(directory, "DataTables"); aaronProject.OutputFilePath = Path.Combine(directory, "bin", "GlobalC.lzc"); aaronProject.SlotOverrideData = _carPartService.GetSlotOverrideData(); Directory.CreateDirectory(directory); Directory.CreateDirectory(aaronProject.CarsDirectory); Directory.CreateDirectory(aaronProject.CarPartsDirectory); Directory.CreateDirectory(aaronProject.PresetCarsDirectory); Directory.CreateDirectory(aaronProject.PresetSkinsDirectory); Directory.CreateDirectory(aaronProject.DataTablesDirectory); Directory.CreateDirectory(Path.Combine(directory, "bin")); var projectPath = Path.Combine(directory, "project.aproj"); File.WriteAllText(projectPath, Serialization.Serialize(aaronProject)); DebugTiming.BeginTiming("ExportCars"); foreach (var aaronCarRecord in _carService.GetCars()) { File.WriteAllText(Path.Combine(aaronProject.CarsDirectory, aaronCarRecord.CarTypeName + ".json"), Serialization.Serialize(aaronCarRecord)); } DebugTiming.EndTiming("ExportCars"); DebugTiming.BeginTiming("ExportCarParts"); { var carPartCollections = _carPartService.GetCarPartCollections(); foreach (var carPartCollection in carPartCollections) { var fileName = Path.Combine(aaronProject.CarPartsDirectory, $"{carPartCollection.Name}.json"); var serialized = Serialization.Serialize(carPartCollection); File.WriteAllText(fileName, serialized); } } DebugTiming.EndTiming("ExportCarParts"); DebugTiming.BeginTiming("ExportPresets"); foreach (var aaronPresetCar in _presetCarService.GetPresetCars()) { File.WriteAllText( Path.Combine(aaronProject.PresetCarsDirectory, $"{aaronPresetCar.PresetName}.xml"), PresetConverter.ConvertAaronPresetToServerXML(aaronPresetCar).DataContractSerializeObject()); } DebugTiming.EndTiming("ExportPresets"); DebugTiming.BeginTiming("ExportPresetSkins"); foreach (var aaronPresetSkinRecord in _presetSkinService.GetPresetSkins()) { File.WriteAllText( Path.Combine(aaronProject.PresetSkinsDirectory, $"{aaronPresetSkinRecord.PresetName}.json"), Serialization.Serialize(aaronPresetSkinRecord)); } DebugTiming.EndTiming("ExportPresetSkins"); DebugTiming.BeginTiming("ExportDataTables"); foreach (var aaronDataTable in _dataTableService.GetDataTables()) { File.WriteAllText( Path.Combine(aaronProject.DataTablesDirectory, $"{aaronDataTable.Name}.json"), Serialization.Serialize(aaronDataTable)); } DebugTiming.EndTiming("ExportDataTables"); File.WriteAllText(Path.Combine(directory, "strings.json"), Serialization.Serialize(_carPartService.GetStrings())); return(projectPath); }
public void LoadProject(string file) { CloseProject(); var project = Serialization.Deserialize <AaronProject>(File.ReadAllText(file)); project.Path = file; if (project.Version != AaronProjectVersion) { throw new Exception("Incompatible project. Please make a backup and copy your changes to a new project."); } // set slot override data _carPartService.SetSlotOverrideData(project.SlotOverrideData); DebugTiming.BeginTiming("LoadCars"); // load cars foreach (var carFilePath in Directory.GetFiles(project.CarsDirectory, "*.json")) { _carService.AddCar(Serialization.Deserialize <AaronCarRecord>(File.ReadAllText(carFilePath))); } DebugTiming.EndTiming("LoadCars"); DebugTiming.BeginTiming("LoadCarParts"); // load car part foreach (var carPartFilePath in Directory.GetFiles(project.CarPartsDirectory, "*.json")) { var aaronCarPartCollection = Serialization.Deserialize <AaronCarPartCollection>(File.ReadAllText(carPartFilePath)); _carPartService.AddCarPartCollection( aaronCarPartCollection); } DebugTiming.EndTiming("LoadCarParts"); DebugTiming.BeginTiming("LoadPresets"); // load presets foreach (var presetCarFilePath in Directory.GetFiles(project.PresetCarsDirectory, "*.xml")) { var convertServerXmlToAaronPreset = PresetConverter.ConvertServerXMLToAaronPreset( File.ReadAllText(presetCarFilePath).DataContractDeserializeObject <OwnedCarTrans>()); convertServerXmlToAaronPreset.PresetName = Path.GetFileNameWithoutExtension(presetCarFilePath); _presetCarService.AddPresetCar(convertServerXmlToAaronPreset); } DebugTiming.EndTiming("LoadPresets"); DebugTiming.BeginTiming("LoadPresetSkins"); foreach (var presetSkinFilePath in Directory.GetFiles(project.PresetSkinsDirectory, "*.json")) { _presetSkinService.AddPresetSkin( Serialization.Deserialize <AaronPresetSkinRecord>(File.ReadAllText(presetSkinFilePath))); } DebugTiming.EndTiming("LoadPresetSkins"); DebugTiming.BeginTiming("LoadDataTables"); foreach (var dataTableFilePath in Directory.GetFiles(project.DataTablesDirectory, "*.json")) { _dataTableService.AddDataTable( Serialization.Deserialize <AaronDataTable>(File.ReadAllText(dataTableFilePath))); } DebugTiming.EndTiming("LoadDataTables"); using (var namesFileStream = File.OpenRead(Path.Combine(Path.GetDirectoryName(file), "strings.json"))) { foreach (var s in Serialization.Deserialize <List <string> >( namesFileStream)) { _carPartService.AddString(s); } } _project = project; Messenger.Default.Send(new ProjectMessage(project)); }