Beispiel #1
0
 public ConfigWindow(MainWindow _main)
 {
     InitializeComponent();
     main = _main;
     if (main.modPath != null)
     {
         OutputTextbox.Text = main.modPath;
     }
     if (main.p4gPath != null)
     {
         P4GTextbox.Text = main.p4gPath;
     }
     if (main.reloadedPath != null)
     {
         ReloadedTextbox.Text = main.reloadedPath;
     }
     KeepSND.IsChecked     = main.emptySND;
     TblPatchBox.IsChecked = main.tbl;
     pacUnpacker           = new PacUnpacker();
     Console.WriteLine("[INFO] Config launched");
 }
        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;

            outputter.WriteEvent     += consoleWriter_WriteEvent;
            outputter.WriteLineEvent += consoleWriter_WriteLineEvent;
            Console.SetOut(outputter);

            binMerger         = new binMerge();
            tblPatcher        = new tblPatch();
            pacUnpacker       = new PacUnpacker();
            DisplayedPackages = new ObservableCollection <DisplayedMetadata>();
            PackageList       = new ObservableCollection <Package>();

            // Retrieve initial thumbnail from embedded resource
            Assembly asm        = Assembly.GetExecutingAssembly();
            Stream   iconStream = asm.GetManifestResourceStream("AemulusModManager.Preview.png");

            bitmap = new BitmapImage();
            bitmap.BeginInit();
            bitmap.StreamSource = iconStream;
            bitmap.EndInit();
            Preview.Source = bitmap;

            // Initialize config
            config = new Config();

            // Initialize xml serializers
            xs  = new XmlSerializer(typeof(Config));
            xsp = new XmlSerializer(typeof(Metadata));

            Console.WriteLine("[INFO] Initializing packages from Config.xml");
            // Load in Config if it exists
            if (File.Exists(@"Config.xml"))
            {
                try
                {
                    using (FileStream streamWriter = File.Open(@"Config.xml", FileMode.Open))
                    {
                        // Call the Deserialize method and cast to the object type.
                        config       = (Config)xs.Deserialize(streamWriter);
                        reloadedPath = config.reloadedPath;
                        p4gPath      = config.exePath;
                        modPath      = config.modDir;
                        emptySND     = config.emptySND;
                        // Compatibility with old Config.xml
                        List <Package> temp = config.package.ToList();
                        foreach (var p in temp)
                        {
                            if (p.name != null && p.path == null)
                            {
                                p.path = p.name;
                                p.name = null;
                            }
                        }
                        PackageList = new ObservableCollection <Package>(temp);
                        tbl         = config.tbl;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Invalid Config.xml ({ex.Message})");
                }

                // Create displayed metadata from packages in PackageList and their respective Package.xml's
                foreach (var package in PackageList)
                {
                    string            xml = $@"Packages\{package.path}\Package.xml";
                    Metadata          m;
                    DisplayedMetadata dm = new DisplayedMetadata();
                    try
                    {
                        if (File.Exists(xml))
                        {
                            m = new Metadata();
                            try
                            {
                                using (FileStream streamWriter = File.Open(xml, FileMode.Open))
                                {
                                    m              = (Metadata)xsp.Deserialize(streamWriter);
                                    dm.name        = m.name;
                                    dm.id          = m.id;
                                    dm.author      = m.author;
                                    dm.version     = m.version;
                                    dm.link        = m.link;
                                    dm.description = m.description;
                                }
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine($"[ERROR] Invalid Package.xml for {package.path} ({ex.Message})");
                            }
                        }

                        dm.path    = package.path;
                        dm.enabled = package.enabled;
                        DisplayedPackages.Add(dm);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"[ERROR] Invalid Package.xml for package {package.id} ({ex.Message})");
                        continue;
                    }
                }
                ModGrid.ItemsSource = DisplayedPackages;
            }

            if (modPath == null)
            {
                MergeButton.IsEnabled = false;
            }

            if (config.modDir != null)
            {
                modPath = config.modDir;
            }

            // Create Packages directory if it doesn't exist
            if (!Directory.Exists("Packages"))
            {
                Directory.CreateDirectory("Packages");
            }

            if (!Directory.Exists("Original"))
            {
                Directory.CreateDirectory("Original");
            }

            Refresh();
            updateConfig();

            // Check if Original Folder is unpacked
            if (!Directory.EnumerateFileSystemEntries("Original").Any())
            {
                Console.WriteLine("[WARNING] Aemulus can't find your Vanilla files in the Original folder.");
                Console.WriteLine("Please click the Config button and select \"Unpack data00004.pac\" before building.");
            }
        }