Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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];
        }
Пример #3
0
        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);
        }
Пример #4
0
        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));
        }