From d4b03c2eb9f9216661ded98d72f57bb5f13f5743 Mon Sep 17 00:00:00 2001 From: Patrick Simpson Date: Tue, 14 Feb 2017 10:47:51 +0100 Subject: [PATCH] Cleaned up ZPushSync. --- .../AcaciaZPushPlugin.csproj | 2 + .../AcaciaZPushPlugin/Stubs/IAddIn.cs | 1 + .../AcaciaZPushPlugin/Stubs/ISyncObject.cs | 34 ++++++++++ .../Stubs/OutlookWrappers/AddInWrapper.cs | 10 +++ .../OutlookWrappers/SyncObjectWrapper.cs | 64 +++++++++++++++++++ .../AcaciaZPushPlugin/ZPush/ZPushSync.cs | 15 +++-- .../AcaciaZPushPlugin/ZPush/ZPushWatcher.cs | 2 +- 7 files changed, 122 insertions(+), 6 deletions(-) create mode 100644 src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/ISyncObject.cs create mode 100644 src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SyncObjectWrapper.cs diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj index 746e59c..438f191 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj @@ -288,6 +288,7 @@ + @@ -295,6 +296,7 @@ + diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/IAddIn.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/IAddIn.cs index 21ffdf2..46bf344 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/IAddIn.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/IAddIn.cs @@ -21,6 +21,7 @@ namespace Acacia.Stubs IEnumerable Features { get; } IEnumerable> COMAddIns { get; } string Version { get; } + ISyncObject GetSyncObject(); #region UI diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/ISyncObject.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/ISyncObject.cs new file mode 100644 index 0000000..1d3a16d --- /dev/null +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/ISyncObject.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NSOutlook = Microsoft.Office.Interop.Outlook; + +namespace Acacia.Stubs +{ + public interface ISyncObject : IComWrapper + { + #region Properties + + string Name { get; } + + #endregion + + #region Methods + + void Start(); + void Stop(); + + #endregion + + + #region Events + // TODO: custom delegates + event NSOutlook.SyncObjectEvents_OnErrorEventHandler OnError; + event NSOutlook.SyncObjectEvents_ProgressEventHandler Progress; + event NSOutlook.SyncObjectEvents_SyncEndEventHandler SyncEnd; + event NSOutlook.SyncObjectEvents_SyncStartEventHandler SyncStart; + #endregion + } +} diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/AddInWrapper.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/AddInWrapper.cs index 3facf93..8ee6ddc 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/AddInWrapper.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/AddInWrapper.cs @@ -82,6 +82,16 @@ namespace Acacia.Stubs.OutlookWrappers } } + public ISyncObject GetSyncObject() + { + using (ComRelease com = new ComRelease()) + { + NSOutlook.NameSpace session = com.Add(_app.Session); + NSOutlook.SyncObjects syncObjects = com.Add(session.SyncObjects); + return new SyncObjectWrapper(syncObjects.AppFolders); + } + } + #region UI public OutlookUI OutlookUI { get { return _thisAddIn.OutlookUI; } } diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SyncObjectWrapper.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SyncObjectWrapper.cs new file mode 100644 index 0000000..110d856 --- /dev/null +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SyncObjectWrapper.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NSOutlook = Microsoft.Office.Interop.Outlook; + +namespace Acacia.Stubs.OutlookWrappers +{ + class SyncObjectWrapper : ComWrapper, ISyncObject + { + public SyncObjectWrapper(NSOutlook.SyncObject item) : base(item) + { + } + + #region Properties + + public string Name { get { return _item.Name; } } + + #endregion + + #region Methods + + public void Start() + { + _item.Start(); + } + + public void Stop() + { + _item.Stop(); + } + + #endregion + + #region Events + + public event NSOutlook.SyncObjectEvents_OnErrorEventHandler OnError + { + add { _item.OnError += value; } + remove { _item.OnError -= value; } + } + + public event NSOutlook.SyncObjectEvents_ProgressEventHandler Progress + { + add { _item.Progress += value; } + remove { _item.Progress -= value; } + } + + public event NSOutlook.SyncObjectEvents_SyncEndEventHandler SyncEnd + { + add { _item.SyncEnd += value; } + remove { _item.SyncEnd -= value; } + } + + public event NSOutlook.SyncObjectEvents_SyncStartEventHandler SyncStart + { + add { _item.SyncStart += value; } + remove { _item.SyncStart -= value; } + } + + #endregion + } +} diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushSync.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushSync.cs index dadfb89..c521519 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushSync.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushSync.cs @@ -15,6 +15,7 @@ /// Consult LICENSE file for details using Acacia.Features; +using Acacia.Stubs; using Acacia.Utils; using Acacia.ZPush.Connect; using System; @@ -23,14 +24,13 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; -using NSOutlook = Microsoft.Office.Interop.Outlook; namespace Acacia.ZPush { /// /// Helper for synchronising state with ZPush servers /// - public class ZPushSync + public class ZPushSync : DisposableWrapper { #region SyncTask @@ -77,7 +77,7 @@ namespace Acacia.ZPush #region Setup - private readonly NSOutlook.SyncObject _syncObject; + private readonly ISyncObject _syncObject; private readonly Timer _timer; private ZPushWatcher _watcher; private bool _started; @@ -86,7 +86,7 @@ namespace Acacia.ZPush public readonly bool Enabled; public readonly TimeSpan Period; - public ZPushSync(ZPushWatcher watcher, NSOutlook.Application app) + public ZPushSync(ZPushWatcher watcher, IAddIn addIn) { // Get the settings Enabled = GlobalOptions.INSTANCE.ZPushSync; @@ -104,12 +104,17 @@ namespace Acacia.ZPush _timer.Start(); // Need to keep a reference to keep receiving events - _syncObject = app.Session.SyncObjects.AppFolders; + _syncObject = addIn.GetSyncObject(); _syncObject.SyncStart += SyncObject_SyncStart; watcher.AccountDiscovered += Watcher_AccountDiscovered; } } + protected override void DoRelease() + { + _syncObject.Dispose(); + } + #endregion #region Public interface diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushWatcher.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushWatcher.cs index 2fe58db..c2fcd8c 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushWatcher.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushWatcher.cs @@ -52,7 +52,7 @@ namespace Acacia.ZPush { this._addIn = addIn; this._app = addIn.RawApp; - Sync = new ZPushSync(this, _app); + Sync = new ZPushSync(this, addIn); Accounts = new ZPushAccounts(this, _app); // Need to keep a link to keep receiving events