Carnac.Logic/MessageProvider.cs

(开头部分) 4KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
using System.Reactive.Subjects;
using Carnac.Logic.Models;
using SettingsProviderNet;
using Message = Carnac.Logic.Models.Message;

namespace Carnac.Logic
{
    [Export(typeof(IMessageProvider))]
    public class MessageProvider : IMessageProvider, IObserver<KeyPress>
    {
        readonly Subject<Message> subject = new Subject<Message>();
        private readonly IShortcutProvider shortcutProvider;
        private IDisposable keyStream;
        private readonly PopupSettings settings;

        [ImportingConstructor]
        public MessageProvider(IKeyProvider keyProvider, IShortcutProvider shortcutProvider, ISettingsProvider settingsProvider)
        {
            this.shortcutProvider = shortcutProvider;
            settings = settingsProvider.GetSettings<PopupSettings>();
            keyStream = keyProvider.Subscribe(this);
        }

        public Message CurrentMessage { get; private set; }

        public IDisposable Subscribe(IObserver<Message> observer)
        {
            return subject.Subscribe(observer);
        }

        public void OnNext(KeyPress value)
        {
            Message message;

            var currentKeyPress = new[] {value};
            var keyPresses = CurrentMessage == null ? currentKeyPress : CurrentMessage.Keys.Concat(currentKeyPress).ToArray();
            var possibleShortcuts = GetPossibleShortcuts(keyPresses).ToList();
            if (possibleShortcuts.Any())
            {
                var shortcut = possibleShortcuts.FirstOrDefault(s => s.IsMatch(keyPresses));
                if (shortcut != null)
                {
                    message = CurrentMessage ?? CreateNewMessage(value);
                    message.AddKey(value);
                    message.ShortcutName = shortcut.Name;
                    message.LastMessage = DateTime.Now;
                    message.Count++;
                    //Have duplicated as it was easier for now, this should be cleaned up
                    return;
                }
            }

            // Haven't matched a Chord, try just the last keypress
            var keyShortcuts = GetPossibleShortcuts(currentKeyPress).ToList();
            if (keyShortcuts.Any())
            {
后面还有 83 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。