Exemplo n.º 1
0
        // Cell CONTENT clicked (not just cell, the actual cell content)
        // This is used for the checkbox enabled toggles.
        private void _packageList_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e?.ColumnIndex != 4)
            {
                return;
            }

            var package = GetPackageFromRow(e);

            if (package == null)
            {
                return;
            }

            //var cell = _packageList.Rows[e.RowIndex].Cells[4];

            if (!package.IsDisabled)
            {
                LocalPackageManager.TryDisablePackage(package.GUID);
            }
            else
            {
                LocalPackageManager.TryEnablePackage(package.GUID);
            }

            //RefreshRow(e.RowIndex, package);
        }
Exemplo n.º 2
0
        private static void Cmd_DisableAll(string[] obj)
        {
            if (!LocalPackageManager.s_enabledPackages.Any())
            {
                return;
            }

            LocalPackageManager.DisableAllPackages();
        }
Exemplo n.º 3
0
        internal static void Cmd_RefreshModList(params string[] args)
        {
            if (!Folders.IsCurrentOutwardPathValid())
            {
                Console.WriteLine("You need to set the Outward path first!");
                return;
            }

            WebManifestManager.UpdateWebManifests();

            LocalPackageManager.RefreshInstalledPackages();
        }
Exemplo n.º 4
0
 public WebFacade(AppInfo appInfo, PackageDownloadManager packageDownloadManager, PackageDataValidator validator, LocalPackageManager localPackageManager, IPeerRegistry peerRegistry, IPackageRegistry packageRegistry, InstanceHash instanceHash, LongRunningTasksManager tasks, PeersCluster peersCluster)
 {
     this.appInfo = appInfo ?? throw new ArgumentNullException(nameof(appInfo));
     this.packageDownloadManager = packageDownloadManager ?? throw new ArgumentNullException(nameof(packageDownloadManager));
     this.validator           = validator ?? throw new ArgumentNullException(nameof(validator));
     this.localPackageManager = localPackageManager ?? throw new ArgumentNullException(nameof(localPackageManager));
     this.peerRegistry        = peerRegistry ?? throw new ArgumentNullException(nameof(peerRegistry));
     this.packageRegistry     = packageRegistry ?? throw new ArgumentNullException(nameof(packageRegistry));
     this.instanceHash        = instanceHash ?? throw new ArgumentNullException(nameof(instanceHash));
     this.tasks        = tasks ?? throw new ArgumentNullException(nameof(tasks));
     this.peersCluster = peersCluster ?? throw new ArgumentNullException(nameof(peersCluster));
 }
Exemplo n.º 5
0
        internal static void Cmd_Enable(params string[] args)
        {
            if (!Folders.IsCurrentOutwardPathValid())
            {
                Console.WriteLine("You need to set the Outward path first!");
                return;
            }

            foreach (var guid in args)
            {
                LocalPackageManager.TryEnablePackage(guid);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Refresh all packages, online and local. Optionally re-download new manifests as well, if <paramref name="refreshOnline"/> is <see langword="true"/>
        /// </summary>
        public static void RefreshAllPackages(bool refreshOnline = false)
        {
            if (refreshOnline)
            {
                WebManifestManager.UpdateWebManifests();
            }
            else
            {
                WebManifestManager.LoadWebManifestCache();
            }

            // refresh installed packages
            LocalPackageManager.RefreshInstalledPackages();
        }
Exemplo n.º 7
0
        internal static void Cmd_UninstallAll(params string[] args)
        {
            if (!Folders.IsCurrentOutwardPathValid())
            {
                Console.WriteLine("You need to set the Outward path first!");
                return;
            }

            for (int i = LocalPackageManager.s_enabledPackages.Count - 1; i >= 0; i--)
            {
                var pkg = LocalPackageManager.s_enabledPackages.ElementAt(i).Value;
                LocalPackageManager.TryUninstallPackage(pkg.GUID);
            }
        }
Exemplo n.º 8
0
        internal void RefreshBepInExPanel()
        {
            if (!Folders.IsCurrentOutwardPathValid())
            {
                this._bepPanel.Visible        = false;
                this._uninstallButton.Visible = false;
                MefinoGUI.DisableFeaturePages();
                return;
            }

            this._bepPanel.Visible = true;

            if (BepInExHandler.IsBepInExUpdated())
            {
                this._bepStatus.Text           = "Installed";
                this._bepStatus.ForeColor      = Color.LightGreen;
                this._bepInstallButton.Visible = false;

                LocalPackageManager.RefreshInstalledPackages();

                MefinoGUI.EnabledFeaturePages();
                Folders.CheckOutwardMefinoInstall();

                this._uninstallButton.Visible = true;
            }
            else
            {
                this._uninstallButton.Visible = false;
                MefinoGUI.DisableFeaturePages();

                switch (BepInExHandler.s_lastInstallStateResult)
                {
                case InstallState.Outdated:
                    this._bepStatus.Text           = $"Outdated";
                    this._bepStatus.ForeColor      = Color.DarkKhaki;
                    this._bepInstallButton.Visible = true;
                    this._bepInstallButton.Text    = $"Update to {BepInExHandler.s_latestBepInExVersion}";
                    break;

                case InstallState.NotInstalled:
                    this._bepStatus.Text           = "Not installed";
                    this._bepStatus.ForeColor      = Color.IndianRed;
                    this._bepInstallButton.Visible = true;
                    this._bepInstallButton.Text    = $"Install BepInEx {BepInExHandler.s_latestBepInExVersion}";
                    break;
                }
            }
        }
Exemplo n.º 9
0
 public AppInstanceBootstrapper(
     PackageDownloadManager packageDownloadManager,
     UdpPeerDiscovery udpPeerDiscovery,
     IPeerRegistry peerRegistry,
     IPackageRegistry packageRegistry,
     LocalPackageManager localPackageManager,
     PeersCluster peersCluster
     )
 {
     PackageDownloadManager = packageDownloadManager ?? throw new ArgumentNullException(nameof(packageDownloadManager));
     UdpPeerDiscovery       = udpPeerDiscovery ?? throw new ArgumentNullException(nameof(udpPeerDiscovery));
     PeerRegistry           = peerRegistry ?? throw new ArgumentNullException(nameof(peerRegistry));
     PackageRegistry        = packageRegistry ?? throw new ArgumentNullException(nameof(packageRegistry));
     LocalPackageManager    = localPackageManager ?? throw new ArgumentNullException(nameof(localPackageManager));
     PeersCluster           = peersCluster ?? throw new ArgumentNullException(nameof(peersCluster));
 }
Exemplo n.º 10
0
        /// <summary>
        /// True if there are manual changes and we overwrote the profile, otherwise false.
        /// If true, it will also set that as the active profile.</summary>
        private static bool DoManualChangesOverwrite(MefinoProfile active)
        {
            if (IsProfileDifferentToEnabledPackages(active))
            {
                List <string> uninstalled = new List <string>();
                foreach (var pkg in active.packages)
                {
                    if (LocalPackageManager.TryGetInstalledPackage(pkg) == null)
                    {
                        uninstalled.Add(pkg);
                    }
                }
                if (uninstalled.Any())
                {
                    var msg = "";
                    foreach (var entry in uninstalled)
                    {
                        msg += $"\n{entry}";
                    }

                    var msgResult = MessageBox.Show($"The following packages from the profile '{active.name}' are no longer installed:" +
                                                    $"\n{msg}" +
                                                    $"\n\n" +
                                                    $"Do you want to reinstall them?",
                                                    "Missing packages!",
                                                    MessageBoxButtons.YesNo);
                    if (msgResult == DialogResult.Yes)
                    {
                        foreach (var entry in uninstalled)
                        {
                            LocalPackageManager.TryInstallWebPackage(entry, true);
                        }
                    }
                }

                active.packages.Clear();
                active.packages.AddRange(LocalPackageManager.s_enabledPackages.Keys);

                SetChangesSinceSave(true);
                SetActiveProfile(active, true);

                return(true);
            }

            return(false);
        }
Exemplo n.º 11
0
        private void _uninstallButton_Click(object sender, EventArgs e)
        {
            ProfileManager.SavePrompt(false);

            var result = OutwardHelper.UninstallFromOutward();

            if (result == DialogResult.Cancel)
            {
                return;
            }

            Folders.IsCurrentOutwardPathValid(out InstallState state);
            SetOtwPathResult(state);

            LocalPackageManager.RefreshInstalledPackages();
            LauncherPage.Instance.RebuildPackageList();
        }
Exemplo n.º 12
0
        private static void OnFileSystemChanged(object sender, FileSystemEventArgs e)
        {
            if (IOHelper.MefinoDoingIO)
            {
                return;
            }

            // Console.WriteLine("Manual folder IO detected");

            LocalPackageManager.RefreshInstalledPackages();

            if (ProfileManager.IsProfileDifferentToEnabledPackages())
            {
                ProfileManager.SetChangesSinceSave(true);
            }

            LauncherPage.Instance?.Invoke(new MethodInvoker(LauncherPage.Instance.RebuildPackageList));
        }
Exemplo n.º 13
0
        internal static void Cmd_Install(params string[] args)
        {
            if (!Folders.IsCurrentOutwardPathValid())
            {
                Console.WriteLine("You need to set the Outward path first!");
                return;
            }

            foreach (var guid in args)
            {
                if (WebManifestManager.s_webManifests.ContainsKey(guid))
                {
                    LocalPackageManager.TryInstallWebPackage(guid);
                }
                else
                {
                    Console.WriteLine($"Could not find package by name '{guid}', maybe need to refresh the list?");
                }
            }
        }
Exemplo n.º 14
0
        internal PackageManifest GetPackageFromRow(DataGridViewCellEventArgs e)
        {
            if (e == null || e.ColumnIndex < 0 || e.RowIndex < 0)
            {
                return(null);
            }

            var row = _packageList.Rows[e.RowIndex];

            var guid    = $"{row.Cells[2].Value} {row.Cells[0].Value}";
            var package = LocalPackageManager.TryGetInstalledPackage(guid);

            if (package == null)
            {
                Console.WriteLine($"ERROR! could not get package: '{package}'");
                return(null);
            }

            return(package);
        }
Exemplo n.º 15
0
        public static MefinoProfile FromJson(string jsonString)
        {
            MefinoProfile ret = null;

            try
            {
                var json = JsonReader.Parse(jsonString);

                ret = new MefinoProfile
                {
                    name = json[nameof(name)].AsString
                };

                if (json[nameof(packages)].AsJsonArray is JsonArray array)
                {
                    ret.packages.AddRange(array.Select(it => it.AsString));
                }

                // verify all GUIDs.
                for (int i = ret.packages.Count - 1; i >= 0; i--)
                {
                    var guid = ret.packages[i];

                    if (!WebManifestManager.s_webManifests.ContainsKey(guid) &&
                        LocalPackageManager.TryGetInstalledPackage(guid) == null)
                    {
                        // GUID in package list does not exist, locally or online!
                        ret.packages.RemoveAt(i);
                    }
                }

                return(ret);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception parsing Profile from json!");
                Console.WriteLine(ex);
                return(ret);
            }
        }
Exemplo n.º 16
0
        /// <summary>
        /// Enable all packages in this profile, and disable all other packages.
        /// </summary>
        public void EnableProfile()
        {
            if (this.packages == null || this.packages.Count == 0)
            {
                if (LocalPackageManager.s_enabledPackages.Any())
                {
                    LocalPackageManager.DisableAllPackages();
                }
                return;
            }

            // Try enable all packages (does nothing if already OK)
            // its possible our 'packages' list will change during this process, so copy it now.
            //var copy = packages.ToList();
            List <string> missing = new List <string>();

            for (int i = 0; i < packages.Count; i++)
            {
                var pkg = packages[i];
                if (LocalPackageManager.TryGetInstalledPackage(pkg) == null)
                {
                    missing.Add(pkg);
                }
                else
                {
                    if (!LocalPackageManager.TryEnablePackage(pkg))
                    {
                        LocalPackageManager.TryDisablePackage(pkg, true);
                        packages.Remove(pkg);
                    }
                }
            }

            if (missing.Any())
            {
                string miss = "";
                foreach (var entry in missing)
                {
                    miss += $"\n{entry}";
                }

                var msgResult = MessageBox.Show($"The following packages in your profile are missing and need to be re-installed:" +
                                                $"\n{miss}" +
                                                $"\n\n" +
                                                $"Do you want to re-install them?",
                                                "Missing packages!",
                                                MessageBoxButtons.YesNo);
                if (msgResult == DialogResult.Yes)
                {
                    foreach (var entry in missing)
                    {
                        LocalPackageManager.TryInstallWebPackage(entry);
                    }
                }
            }

            // Disable currently enabled packages which are not in this profile
            if (LocalPackageManager.s_enabledPackages.Any())
            {
                for (int i = LocalPackageManager.s_enabledPackages.Count - 1; i >= 0; i--)
                {
                    var pkg = LocalPackageManager.s_enabledPackages.ElementAt(i);

                    if (!packages.Any(it => it == pkg.Key))
                    {
                        LocalPackageManager.TryDisablePackage(pkg.Key, true);
                    }
                }
            }
        }
Exemplo n.º 17
0
 public PackageRegistry(ILoggerFactory loggerFactory, LocalPackageManager localPackageManager)
 {
     logger = (loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory))).CreateLogger <PackageRegistry>();
     this.localPackageManager = localPackageManager ?? throw new ArgumentNullException(nameof(localPackageManager));
     Init();
 }