示例#1
0
        public async Task <bool> ToggleOneClick(OneClickType oneClickType, bool enable)
        {
            string applicationPath = Process.GetCurrentProcess().MainModule.FileName;

            if (oneClickType == OneClickType.BeatSaver)
            {
                if (enable)
                {
                    var(callback, message) = CheckOneClick(oneClickType);

                    if (callback == OneClickReturn.OtherProvider)
                    {
                        MessageDialogResult result = await MainWindow.ShowMessageAsync($"BeatSaver OneClick", $"The OneClick provider for BeatSaver is currently {message}. Would you like to enable it anyways?", MessageDialogStyle.AffirmativeAndNegative);

                        if (result != MessageDialogResult.Affirmative)
                        {
                            return(false);
                        }
                    }

                    RegistryKey beatSaverKey = Registry.ClassesRoot.CreateSubKey("beatsaver", true);
                    beatSaverKey.SetValue("", "URL:beatsaver");
                    beatSaverKey.SetValue("URL Protocol", string.Empty);
                    beatSaverKey.SetValue("OneClick-Provider", "BeatManager");

                    RegistryKey commandKey = beatSaverKey.CreateSubKey(@"shell\open\command", true);
                    commandKey.SetValue("", $"\"{applicationPath}\" \"%1\"");

                    IsBeatSaverOneClick = true;
                }
                else
                {
                    IsBeatSaverOneClick = false;
                }
            }
            else if (oneClickType == OneClickType.ModelSaber)
            {
                if (enable)
                {
                    var(callback, message) = CheckOneClick(oneClickType);

                    if (callback == OneClickReturn.OtherProvider)
                    {
                        MessageDialogResult result = await MainWindow.ShowMessageAsync("ModelSaber OneClick", $"The OneClick provider for ModelSaber is currently {message}. Would you like to enable it anyways?", MessageDialogStyle.AffirmativeAndNegative);

                        if (result != MessageDialogResult.Affirmative)
                        {
                            return(false);
                        }
                    }

                    RegistryKey beatSaverKey = Registry.ClassesRoot.CreateSubKey("modelsaber", true);
                    beatSaverKey.SetValue("", "URL:modelsaber");
                    beatSaverKey.SetValue("URL Protocol", string.Empty);
                    beatSaverKey.SetValue("OneClick-Provider", "BeatManager");

                    RegistryKey commandKey = beatSaverKey.CreateSubKey(@"shell\open\command", true);
                    commandKey.SetValue("", $"\"{applicationPath}\" \"%1\"");

                    IsModelSaberOneClick = true;
                }
                else
                {
                    IsModelSaberOneClick = false;
                }
            }

            Settings.CurrentSettings.Save();
            return(true);
        }
示例#2
0
        public (OneClickReturn, string) CheckOneClick(OneClickType oneClickType)
        {
            string applicationPath = Process.GetCurrentProcess().MainModule.FileName;

            if (oneClickType == OneClickType.BeatSaver)
            {
                RegistryKey beatSaverKey = Registry.ClassesRoot.OpenSubKey("beatsaver");
                if (beatSaverKey is null ||
                    beatSaverKey.GetValue("") is null ||
                    beatSaverKey.GetValue("").ToString() != "URL:beatsaver" ||
                    beatSaverKey.GetValue("URL Protocol") is null)
                {
                    return(OneClickReturn.KeyError, null);
                }

                RegistryKey commandKey = beatSaverKey.OpenSubKey(@"shell\open\command");
                if (commandKey is null)
                {
                    return(OneClickReturn.KeyError, null);
                }

                string[] commandKeyValues = commandKey.GetValue("").ToString().Replace("\"", "").Split(" ");
                if (commandKeyValues.Length != 2 || commandKeyValues[1] != "%1")
                {
                    return(OneClickReturn.KeyError, null);
                }

                if (beatSaverKey.GetValue("OneClick-Provider") != null)
                {
                    string provider = beatSaverKey.GetValue("OneClick-Provider").ToString();
                    if (provider != "BeatManager")
                    {
                        return(OneClickReturn.OtherProvider, provider);
                    }
                }
                if (commandKeyValues[0] != applicationPath)
                {
                    string provider = Path.GetFileNameWithoutExtension(commandKeyValues[0]);
                    if (provider == "BeatManager")
                    {
                        return(OneClickReturn.WrongPath, commandKeyValues[0]);
                    }
                    else
                    {
                        return(OneClickReturn.OtherProvider, provider);
                    }
                }

                return(OneClickReturn.BeatManager, null);
            }
            else if (oneClickType == OneClickType.ModelSaber)
            {
                RegistryKey modelSaberKey = Registry.ClassesRoot.OpenSubKey("modelsaber");
                if (modelSaberKey is null ||
                    modelSaberKey.GetValue("") is null ||
                    modelSaberKey.GetValue("").ToString() != "URL:modelsaber" ||
                    modelSaberKey.GetValue("URL Protocol") is null)
                {
                    return(OneClickReturn.KeyError, null);
                }

                RegistryKey commandKey = modelSaberKey.OpenSubKey(@"shell\open\command");
                if (commandKey is null)
                {
                    return(OneClickReturn.KeyError, null);
                }

                string[] commandKeyValues = commandKey.GetValue("").ToString().Replace("\"", "").Split(" ");
                if (commandKeyValues.Length != 2 || commandKeyValues[1] != "%1")
                {
                    return(OneClickReturn.KeyError, null);
                }

                if (modelSaberKey.GetValue("OneClick-Provider") != null)
                {
                    string provider = modelSaberKey.GetValue("OneClick-Provider").ToString();
                    if (provider != "BeatManager")
                    {
                        return(OneClickReturn.OtherProvider, provider);
                    }
                }
                if (commandKeyValues[0] != applicationPath)
                {
                    string provider = Path.GetFileNameWithoutExtension(commandKeyValues[0]);
                    if (provider == "BeatManager")
                    {
                        return(OneClickReturn.WrongPath, commandKeyValues[0]);
                    }
                    else
                    {
                        return(OneClickReturn.OtherProvider, provider);
                    }
                }

                return(OneClickReturn.BeatManager, null);
            }

            return(OneClickReturn.Null, null);
        }