refactor(PPT)!: 重构PPT链接管理器,引入基类并优化代码结构

将ROTPPTManager重命名为ROTPPTLinkManager
新增BasePPTLinkManager抽象基类,提取公共逻辑
重构ComPPTLinkManager继承自基类,减少重复代码

Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com>
This commit is contained in:
doudou0720
2026-04-12 13:40:54 +08:00
parent b50049c822
commit ab7905696d
4 changed files with 191 additions and 106 deletions
+32 -50
View File
@@ -2,7 +2,7 @@ using System;
namespace Ink_Canvas.Helpers
{
public class ComPPTLinkManager : IPPTLinkManager
public class ComPPTLinkManager : BasePPTLinkManager
{
private readonly PPTManager _inner;
@@ -10,65 +10,47 @@ namespace Ink_Canvas.Helpers
{
_inner = new PPTManager();
_inner.SlideShowBegin += wn => SlideShowBegin?.Invoke(wn);
_inner.SlideShowNextSlide += wn => SlideShowNextSlide?.Invoke(wn);
_inner.SlideShowEnd += pres => SlideShowEnd?.Invoke(pres);
_inner.PresentationOpen += pres => PresentationOpen?.Invoke(pres);
_inner.PresentationClose += pres => PresentationClose?.Invoke(pres);
_inner.PPTConnectionChanged += connected => PPTConnectionChanged?.Invoke(connected);
_inner.SlideShowStateChanged += inSlideShow => SlideShowStateChanged?.Invoke(inSlideShow);
_inner.SlideShowBegin += wn => OnSlideShowBegin(wn);
_inner.SlideShowNextSlide += wn => OnSlideShowNextSlide(wn);
_inner.SlideShowEnd += pres => OnSlideShowEnd(pres);
_inner.PresentationOpen += pres => OnPresentationOpen(pres);
_inner.PresentationClose += pres => OnPresentationClose(pres);
_inner.PPTConnectionChanged += connected => OnPPTConnectionChanged(connected);
_inner.SlideShowStateChanged += inSlideShow => OnSlideShowStateChanged(inSlideShow);
}
#region IPPTLinkManager
public event Action<object> SlideShowBegin;
public event Action<object> SlideShowNextSlide;
public event Action<object> SlideShowEnd;
public event Action<object> PresentationOpen;
public event Action<object> PresentationClose;
public event Action<bool> PPTConnectionChanged;
public event Action<bool> SlideShowStateChanged;
#endregion
#region BasePPTLinkManager
public override bool IsConnected => _inner.IsConnected;
#region IPPTLinkManager
public bool IsConnected => _inner.IsConnected;
public override bool IsInSlideShow => _inner.IsInSlideShow;
public bool IsInSlideShow => _inner.IsInSlideShow;
public bool IsSupportWPS
public override bool IsSupportWPS
{
get => _inner.IsSupportWPS;
set => _inner.IsSupportWPS = value;
}
public bool SkipAnimationsWhenNavigating
public override bool SkipAnimationsWhenNavigating
{
get => _inner.SkipAnimationsWhenNavigating;
set => _inner.SkipAnimationsWhenNavigating = value;
}
public int SlidesCount => _inner.SlidesCount;
public override int SlidesCount => _inner.SlidesCount;
public object PPTApplication => _inner.PPTApplication;
public override object PPTApplication
{
get => _inner.PPTApplication;
protected set { }
}
#endregion
#region
/// <summary>
/// 开始监控本地 PowerPoint 的连接与运行状态,并在状态变化时触发相应事件。
/// </summary>
public void StartMonitoring() => _inner.StartMonitoring();
public override void StartMonitoring() => _inner.StartMonitoring();
/// <summary>
/// 停止对 PowerPoint 的监控,断开当前连接并停止触发相关事件。
/// </summary>
public void StopMonitoring() => _inner.StopMonitoring();
public override void StopMonitoring() => _inner.StopMonitoring();
/// <summary>
/// 强制断开当前 COM PPT 连接并停止对其监控,同时写入事件日志。
/// </summary>
/// <remarks>
/// 会向日志记录一条事件信息并调用内部管理器停止监控;该方法不会重新启动监控或重新初始化内部管理器实例。
/// </remarks>
public void ReloadConnection()
public override void ReloadConnection()
{
LogHelper.WriteLogToFile("COM PPT 执行热重载:强制断开并重新连接", LogHelper.LogType.Event);
_inner.StopMonitoring();
@@ -76,31 +58,31 @@ namespace Ink_Canvas.Helpers
#endregion
#region
public bool TryStartSlideShow() => _inner.TryStartSlideShow();
public override bool TryStartSlideShow() => _inner.TryStartSlideShow();
public bool TryEndSlideShow() => _inner.TryEndSlideShow();
public override bool TryEndSlideShow() => _inner.TryEndSlideShow();
#endregion
#region
public bool TryNavigateToSlide(int slideNumber) => _inner.TryNavigateToSlide(slideNumber);
public override bool TryNavigateToSlide(int slideNumber) => _inner.TryNavigateToSlide(slideNumber);
public bool TryNavigateNext() => _inner.TryNavigateNext();
public override bool TryNavigateNext() => _inner.TryNavigateNext();
public bool TryNavigatePrevious() => _inner.TryNavigatePrevious();
public override bool TryNavigatePrevious() => _inner.TryNavigatePrevious();
#endregion
#region
public int GetCurrentSlideNumber() => _inner.GetCurrentSlideNumber();
public override int GetCurrentSlideNumber() => _inner.GetCurrentSlideNumber();
public string GetPresentationName() => _inner.GetPresentationName();
public override string GetPresentationName() => _inner.GetPresentationName();
public bool TryShowSlideNavigation() => _inner.TryShowSlideNavigation();
public override bool TryShowSlideNavigation() => _inner.TryShowSlideNavigation();
public object GetCurrentActivePresentation() => _inner.GetCurrentActivePresentation();
public override object GetCurrentActivePresentation() => _inner.GetCurrentActivePresentation();
#endregion
#region IDisposable
public void Dispose()
public override void Dispose()
{
_inner?.Dispose();
}