Exemplo n.º 1
0
        private static void StartupTaskPreSettings()
        {
            if (logger.IsDebugEnabled)
            {
                logger.Debug($"[{nameof(StartupTaskPreSettings)}]");
            }

            // Convert the settings file
            if (File.Exists(Settings.SettingsFilePath))
            {
                JObject jSettings;

                using (var sr = new StreamReader(Settings.SettingsFilePath))
                {
                    using (var jsonReader = new JsonTextReader(sr))
                    {
                        jSettings = JObject.Load(jsonReader);
                    }
                }

                JToken jPreviousV = jSettings["PreviousVersion"];
                var    previousV  = new Version(jPreviousV?.Value <string>() ?? "0");

                // [IDO] Hotkeys
                if (previousV < new Version("1.10.10"))
                {
                    // pre-1.10.10 hotkeys must be converted to the current format
                    logger.Info("Converting old hotkeys to the current format...");

                    JToken jHotkeys = jSettings["HotKeys"];
                    if (jHotkeys?.HasValues == true)
                    {
                        var convertedHotkeys = new JArray();

                        foreach (JToken jHotkey in jHotkeys.Children())
                        {
                            JToken jKeyOrButton = jHotkey["KeyOrButton"];
                            JToken jKey         = jKeyOrButton?["Key"];

                            ModifierKeys modifiers = (jHotkey["Alt"]?.Value <bool>() == true ? ModifierKeys.Alt : ModifierKeys.None) |
                                                     (jHotkey["Ctrl"]?.Value <bool>() == true ? ModifierKeys.Control : ModifierKeys.None) |
                                                     (jHotkey["Shift"]?.Value <bool>() == true ? ModifierKeys.Shift : ModifierKeys.None) |
                                                     (jHotkey["WindowsKey"]?.Value <bool>() == true ? ModifierKeys.Windows : ModifierKeys.None);

                            ToastifyActionEnum toastifyActionEnum = Enum.TryParse(jHotkey["Action"]?.Value <string>(), out ToastifyActionEnum tae) ? tae : ToastifyActionEnum.None;
                            ToastifyAction     action             = App.Container.Resolve <IToastifyActionRegistry>().GetAction(toastifyActionEnum);
                            bool enabled = jHotkey["Enabled"]?.Value <bool>() ?? false;

                            Hotkey h = jKeyOrButton?["IsKey"]?.Value <bool>() ?? jKey != null
                                ? new KeyboardHotkey
                            {
                                Modifiers = modifiers,
                                Key       = Enum.TryParse(jKey?.Value <string>(), out Key k) ? k : (Key?)null,
                                Action    = action,
                                Enabled   = enabled
                            } as Hotkey
Exemplo n.º 2
0
        public static void SendMediaKey(ToastifyAction action)
        {
            VirtualKeyCode virtualKey;

            switch (action)
            {
            case ToastifyAction.PlayPause:
                virtualKey = VirtualKeyCode.VK_MEDIA_PLAY_PAUSE;
                break;

            case ToastifyAction.Mute:
                virtualKey = VirtualKeyCode.VK_VOLUME_MUTE;
                break;

            case ToastifyAction.VolumeDown:
                virtualKey = VirtualKeyCode.VK_VOLUME_DOWN;
                break;

            case ToastifyAction.VolumeUp:
                virtualKey = VirtualKeyCode.VK_VOLUME_UP;
                break;

            case ToastifyAction.PreviousTrack:
                virtualKey = VirtualKeyCode.VK_MEDIA_PREV_TRACK;
                break;

            case ToastifyAction.NextTrack:
                virtualKey = VirtualKeyCode.VK_MEDIA_NEXT_TRACK;
                break;

            case ToastifyAction.None:
            case ToastifyAction.FastForward:
            case ToastifyAction.Rewind:
            case ToastifyAction.ShowToast:
            case ToastifyAction.ShowSpotify:
            case ToastifyAction.CopyTrackInfo:
            case ToastifyAction.SettingsSaved:
            case ToastifyAction.PasteTrackInfo:
            case ToastifyAction.ThumbsUp:
            case ToastifyAction.ThumbsDown:
            case ToastifyAction.Exit:
#if DEBUG
            case ToastifyAction.ShowDebugView:
#endif
            default:
                return;
            }

            User32.KeyboardEvent(virtualKey, 0, 1, IntPtr.Zero);
        }
        public static void TestActionEvents(ToastifyAction action, bool shouldFail)
        {
            bool?success = null;

            void OnActionFailed(object sender, ActionFailedEventArgs e) => success = false;
            void OnActionPerformed(object sender, EventArgs e) => success          = true;

            action.ActionFailed    += OnActionFailed;
            action.ActionPerformed += OnActionPerformed;

            action.PerformAction();

            action.ActionFailed    -= OnActionFailed;
            action.ActionPerformed -= OnActionPerformed;

            Assert.That(success, Is.EqualTo(!shouldFail));
        }
Exemplo n.º 4
0
        public void SendAction(ToastifyAction action)
        {
            if (!this.IsRunning)
            {
                return;
            }

            bool sendAppCommandMessage = false;
            bool sendMediaKey          = false;

            switch (action)
            {
#if DEBUG
            case ToastifyAction.ShowDebugView:
#endif
            case ToastifyAction.None:
            case ToastifyAction.CopyTrackInfo:
            case ToastifyAction.PasteTrackInfo:
            case ToastifyAction.ThumbsUp:
            case ToastifyAction.ThumbsDown:
            case ToastifyAction.ShowToast:
            case ToastifyAction.SettingsSaved:
            case ToastifyAction.Exit:
                break;

            case ToastifyAction.ShowSpotify:
                Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.ShowSpotify);
                if (this.IsMinimized)
                {
                    this.ShowSpotify();
                }
                else
                {
                    this.Minimize();
                }
                break;

            case ToastifyAction.VolumeUp:
                Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.VolumeUp);
                switch ((ToastifyVolumeControlMode)Settings.Current.VolumeControlMode)
                {
                // The Spotify volume control mode has been dropped since Spotify version 1.0.75.483.g7ff4a0dc due to issue #31
                //case ToastifyVolumeControlMode.Spotify:
                //    this.SendShortcut(action);
                //    break;

                case ToastifyVolumeControlMode.SystemSpotifyOnly:
                    this.localAPI.IncrementVolume();
                    break;

                case ToastifyVolumeControlMode.SystemGlobal:
                    sendMediaKey = true;
                    break;

                default:
                    sendMediaKey = true;
                    break;
                }
                break;

            case ToastifyAction.VolumeDown:
                Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.VolumeDown);
                switch ((ToastifyVolumeControlMode)Settings.Current.VolumeControlMode)
                {
                // The Spotify volume control mode has been dropped since Spotify version 1.0.75.483.g7ff4a0dc due to issue #31
                //case ToastifyVolumeControlMode.Spotify:
                //    this.SendShortcut(action);
                //    break;

                case ToastifyVolumeControlMode.SystemSpotifyOnly:
                    this.localAPI.DecrementVolume();
                    break;

                case ToastifyVolumeControlMode.SystemGlobal:
                default:
                    sendMediaKey = true;
                    break;
                }
                break;

            case ToastifyAction.Mute:
                Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, Analytics.ToastifyEvent.Action.Mute);
                switch ((ToastifyVolumeControlMode)Settings.Current.VolumeControlMode)
                {
                case ToastifyVolumeControlMode.SystemSpotifyOnly:
                    this.localAPI.ToggleMute();
                    break;

                // The Spotify volume control mode has been dropped since Spotify version 1.0.75.483.g7ff4a0dc due to issue #31
                //case ToastifyVolumeControlMode.Spotify:
                case ToastifyVolumeControlMode.SystemGlobal:
                default:
                    sendMediaKey = true;
                    break;
                }
                break;

            case ToastifyAction.FastForward:
            case ToastifyAction.Rewind:
            case ToastifyAction.PlayPause:
            case ToastifyAction.PreviousTrack:
            case ToastifyAction.NextTrack:
                goto default;

            default:
                Analytics.TrackEvent(Analytics.ToastifyEventCategory.Action, $"{Analytics.ToastifyEvent.Action.Default}{action}");
                sendAppCommandMessage = true;
                break;
            }

            if (sendAppCommandMessage)
            {
                Windows.SendAppCommandMessage(this.GetMainWindowHandle(), (IntPtr)action, true);
            }
            if (sendMediaKey)
            {
                Win32API.SendMediaKey(action);
            }
        }
 public static bool TestGetHashCode([NotNull] ToastifyAction action1, [NotNull] ToastifyAction action2)
 {
     return(action1.GetHashCode() == action2.GetHashCode());
 }
 public static bool TestEquals_Object([NotNull] ToastifyAction action, object obj)
 {
     return(action.Equals(obj));
 }
 public static bool TestEquals_IAction([NotNull] ToastifyAction action1, IAction action2)
 {
     return(action1.Equals(action2));
 }