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 算力,解读结果公开显示在下面。
还没有人解读过这个文件。