Example #1
0
    /// <summary>
    /// Initializes the mod grid.
    /// Sets the nodestore up to store Mod View Models,
    /// Then adds the appropriate columns to the ModGrid.
    /// </summary>
    private void InitializeModGrid()
    {
        ModGrid.NodeSelection.Changed += onModSelection;
        NodeStore modStore = new NodeStore(typeof(ModViewModel));

        ModGrid.NodeStore = modStore;
        //this line currently works around a bug in mono 5. Should be able to remove it once mono 6 is publicly used.
        typeof(NodeView).GetField("store", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(ModGrid, modStore);

        CellRendererToggle modcheckbox = new CellRendererToggle();

        modcheckbox.Activatable = true;
        modcheckbox.Toggled    += delegate(object o, Gtk.ToggledArgs args) {
            var node = modStore.GetNode(new Gtk.TreePath(args.Path)) as ModViewModel;
            node.Enabled = !node.Enabled;
        };
        //modcheckbox.
        TreeViewColumn modEnabled = new TreeViewColumn("Enabled", modcheckbox, "active", 0);

        //modEnabled.AddAttribute(modcheckbox, "active", 0);
        ModGrid.AppendColumn(modEnabled);
        //modEnabled.SetCellDataFunc(modcheckbox, "activatable", true,);
        ModGrid.AppendColumn("title", new Gtk.CellRendererText(), "text", 1);
        ModGrid.AppendColumn("description", new Gtk.CellRendererText(), "text", 2);
        ModGrid.AppendColumn("version", new Gtk.CellRendererText(), "text", 3);
        ModGrid.AppendColumn("author", new Gtk.CellRendererText(), "text", 4);
        ModGrid.AppendColumn("date", new Gtk.CellRendererText(), "text", 5);
        ModGrid.AppendColumn("url", new Gtk.CellRendererText(), "text", 6);
        ModGrid.AppendColumn("updateurl", new Gtk.CellRendererText(), "text", 7);
        // ModGrid.AppendColumn("test", new Gtk.CellRendererToggle();
        ModGrid.ShowAll();
    }
Example #2
0
 private void ModGrid_KeyDown(object sender, KeyEventArgs e)
 {
     if (e.Key == Key.Down)
     {
         ModGrid.CommitEdit();
         ++ModGrid.SelectedIndex;
     }
     else if (e.Key == Key.Up)
     {
         ModGrid.CommitEdit();
         --ModGrid.SelectedIndex;
     }
 }
        // Refresh both PackageList and DisplayedPackages
        private void Refresh()
        {
            Metadata metadata;

            // First remove all deleted packages and update package id's to match metadata
            foreach (var package in PackageList.ToList())
            {
                if (!Directory.Exists($@"Packages\{package.path}"))
                {
                    PackageList.Remove(package);
                    List <DisplayedMetadata> temp = DisplayedPackages.ToList();
                    temp.RemoveAll(x => x.path == package.path);
                    DisplayedPackages = new ObservableCollection <DisplayedMetadata>(temp);
                }
                if (File.Exists($@"Packages\{package.path}\Package.xml"))
                {
                    try
                    {
                        using (FileStream streamWriter = File.Open($@"Packages\{package.path}\Package.xml", FileMode.Open))
                        {
                            metadata   = (Metadata)xsp.Deserialize(streamWriter);
                            package.id = metadata.id;
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"[ERROR] Invalid Package.xml for {package.path} ({ex.Message})");
                    }
                }
            }

            UpdateMetadata();

            // Get all packages from Packages folder (Adding packages)
            foreach (var package in Directory.EnumerateDirectories("Packages"))
            {
                if (File.Exists($@"{package}\Package.xml"))
                {
                    using (FileStream streamWriter = File.Open($@"{package}\Package.xml", FileMode.Open))
                    {
                        metadata = (Metadata)xsp.Deserialize(streamWriter);
                        // Add package to list if it doesn't exist
                        if (!PackageList.ToList().Any(x => x.path == Path.GetFileName(package)) &&
                            !DisplayedPackages.ToList().Any(x => x.path == Path.GetFileName(package)))
                        {
                            // Add new package to both collections
                            DisplayedMetadata dm = InitDisplayedMetadata(metadata);
                            Package           p  = new Package();
                            p.enabled = false;
                            p.id      = metadata.id;
                            p.path    = Path.GetFileName(package);
                            PackageList.Add(p);
                            dm.enabled = false;
                            dm.path    = Path.GetFileName(package);
                            DisplayedPackages.Add(dm);
                        }
                    }
                }
                // Create Package.xml
                else
                {
                    Console.WriteLine($"[WARNING] No Package.xml found for {Path.GetFileName(package)}, creating a simple one...");
                    // Create metadata
                    Metadata newMetadata = new Metadata();
                    newMetadata.name        = Path.GetFileName(package);
                    newMetadata.id          = newMetadata.name.Replace(" ", "").ToLower();
                    newMetadata.author      = "";
                    newMetadata.version     = "";
                    newMetadata.link        = "";
                    newMetadata.description = "";
                    using (FileStream streamWriter = File.Create($@"{package}\Package.xml"))
                    {
                        xsp.Serialize(streamWriter, newMetadata);
                    }
                    if (!PackageList.ToList().Any(x => x.path == Path.GetFileName(package)) &&
                        !DisplayedPackages.ToList().Any(x => x.path == Path.GetFileName(package)))
                    {
                        // Create package
                        Package newPackage = new Package();
                        newPackage.enabled = false;
                        newPackage.path    = Path.GetFileName(package);
                        newPackage.id      = newMetadata.id;
                        PackageList.Add(newPackage);
                        // Create displayedmetadata
                        DisplayedMetadata newDisplayedMetadata = InitDisplayedMetadata(newMetadata);
                        newDisplayedMetadata.enabled = false;
                        newDisplayedMetadata.path    = newPackage.path;
                        DisplayedPackages.Add(newDisplayedMetadata);
                    }
                    else
                    {
                        UpdateMetadata();
                    }
                }
            }

            // Update DisplayedPackages
            App.Current.Dispatcher.Invoke((Action) delegate
            {
                ModGrid.ItemsSource = DisplayedPackages;
                // Trigger select event to refresh description and Preview.png
                ModGrid.SetSelectedItem(ModGrid.GetSelectedItem());
            });
            Console.WriteLine($"[INFO] Refreshed!");
        }
        // Refresh both PackageList and DisplayedPackages
        private void Refresh()
        {
            Metadata metadata;

            // First remove all deleted packages and update package id's to match metadata
            foreach (var package in PackageList.ToList())
            {
                if (!Directory.Exists($@"Packages\{package.path}"))
                {
                    PackageList.Remove(package);
                    List <DisplayedMetadata> temp = DisplayedPackages.ToList();
                    temp.RemoveAll(x => x.path == package.path);
                    DisplayedPackages = new ObservableCollection <DisplayedMetadata>(temp);
                }
                if (File.Exists($@"Packages\{package.path}\Package.xml"))
                {
                    try
                    {
                        using (FileStream streamWriter = File.Open($@"Packages\{package.path}\Package.xml", FileMode.Open))
                        {
                            metadata   = (Metadata)xsp.Deserialize(streamWriter);
                            package.id = metadata.id;
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"[ERROR] Invalid Package.xml for {package.path} ({ex.Message})");
                    }
                }
            }

            UpdateMetadata();

            // Get all packages from Packages folder (Adding packages)
            foreach (var package in Directory.EnumerateDirectories("Packages"))
            {
                if (File.Exists($@"{package}\Package.xml"))
                {
                    using (FileStream streamWriter = File.Open($@"{package}\Package.xml", FileMode.Open))
                    {
                        metadata = (Metadata)xsp.Deserialize(streamWriter);
                        // Add package to list if it doesn't exist
                        if (!PackageList.ToList().Any(x => x.path == Path.GetFileName(package)) &&
                            !DisplayedPackages.ToList().Any(x => x.path == Path.GetFileName(package)))
                        {
                            // Add new package to both collections
                            DisplayedMetadata dm = InitDisplayedMetadata(metadata);
                            Package           p  = new Package();
                            p.enabled = false;
                            p.id      = metadata.id;
                            p.path    = Path.GetFileName(package);
                            PackageList.Add(p);
                            dm.enabled = false;
                            dm.path    = Path.GetFileName(package);
                            DisplayedPackages.Add(dm);
                        }
                    }
                }
                // Create Package.xml
                else
                {
                    Console.WriteLine($"[WARNING] No Package.xml found for {Path.GetFileName(package)}, creating a simple one...");
                    // Create metadata
                    Metadata newMetadata = new Metadata();
                    newMetadata.name = Path.GetFileName(package);
                    newMetadata.id   = newMetadata.name.Replace(" ", "").ToLower();

                    List <string> dirFiles   = Directory.GetFiles(package).ToList();
                    List <string> dirFolders = Directory.GetDirectories(package, "*", SearchOption.TopDirectoryOnly).ToList();
                    dirFiles = dirFiles.Concat(dirFolders).ToList();
                    if (dirFiles.Any(x => Path.GetFileName(x).Equals("Mod.xml")) && dirFiles.Any(x => Path.GetFileName(x).Equals("Data")))
                    {
                        //If mod folder contains Data folder and mod.xml, import mod compendium mod.xml...
                        string modXml = dirFiles.First(x => Path.GetFileName(x).Equals("Mod.xml"));
                        using (FileStream streamWriter = File.Open(modXml, FileMode.Open))
                        {
                            //Deserialize Mod.xml & Use metadata
                            ModXmlMetadata m = (ModXmlMetadata)xsm.Deserialize(streamWriter);
                            newMetadata.id          = m.Author.ToLower().Replace(" ", "") + "." + m.Title.ToLower().Replace(" ", "");
                            newMetadata.author      = m.Author;
                            newMetadata.version     = m.Version;
                            newMetadata.link        = m.Url;
                            newMetadata.description = m.Description;
                        }
                        //Move files out of Data folder
                        string dataDir = dirFiles.First(x => Path.GetFileName(x).Equals("Data"));
                        if (Directory.Exists(dataDir))
                        {
                            MoveDir(dataDir, Path.GetDirectoryName(dataDir));
                        }
                        //Delete prebuild.bat if exists
                        if (dirFiles.Any(x => Path.GetFileName(x).Equals("prebuild.bat")))
                        {
                            File.Delete(dirFiles.First(x => Path.GetFileName(x).Equals("prebuild.bat")));
                        }
                        //Make sure Data folder is gone
                        if (Directory.Exists(dataDir))
                        {
                            Directory.Delete(dataDir, true);
                        }
                        //Goodbye old friend
                        File.Delete(modXml);
                    }
                    else
                    {
                        newMetadata.author      = "";
                        newMetadata.version     = "";
                        newMetadata.link        = "";
                        newMetadata.description = "";
                    }
                    using (FileStream streamWriter = File.Create($@"{package}\Package.xml"))
                    {
                        xsp.Serialize(streamWriter, newMetadata);
                    }
                    if (!PackageList.ToList().Any(x => x.path == Path.GetFileName(package)) &&
                        !DisplayedPackages.ToList().Any(x => x.path == Path.GetFileName(package)))
                    {
                        // Create package
                        Package newPackage = new Package();
                        newPackage.enabled = false;
                        newPackage.path    = Path.GetFileName(package);
                        newPackage.id      = newMetadata.id;
                        PackageList.Add(newPackage);
                        // Create displayedmetadata
                        DisplayedMetadata newDisplayedMetadata = InitDisplayedMetadata(newMetadata);
                        newDisplayedMetadata.enabled = false;
                        newDisplayedMetadata.path    = newPackage.path;
                        DisplayedPackages.Add(newDisplayedMetadata);
                    }
                    else
                    {
                        UpdateMetadata();
                    }
                }
            }

            // Update DisplayedPackages
            App.Current.Dispatcher.Invoke((Action) delegate
            {
                ModGrid.ItemsSource = DisplayedPackages;
                // Trigger select event to refresh description and Preview.png
                ModGrid.SetSelectedItem(ModGrid.GetSelectedItem());
            });
            Console.WriteLine($"[INFO] Refreshed!");
        }