1
0
mirror of https://github.com/Kopano-dev/kopano-ol-extension.git synced 2023-10-10 13:37:40 +02:00

[KOE-166] Added support for reminders query on impersonated stores.

[KOE-170] No longer checking impersonated stores for shared folders, as they can never exist
This commit is contained in:
Patrick Simpson 2018-07-04 12:55:34 +03:00
parent 2398b78657
commit 593118f552
10 changed files with 527 additions and 167 deletions

View File

@ -234,7 +234,6 @@ namespace Acacia
return result;
}
}
}
// General

View File

@ -171,20 +171,28 @@ namespace Acacia.Features.SharedFolders
{
Logger.Instance.Debug(this, "Starting sync for account {0}", account);
// Fetch the current shares
ICollection<SharedFolder> shares = manager.GetCurrentShares(null);
Logger.Instance.Trace(this, "AdditionalFolders_Sync: {0}", shares.Count);
if (account.IsShare)
{
Logger.Instance.Debug(this, "Account {0} is a share", account);
manager.UpdateSharedStore();
}
else
{
// Fetch the current shares
ICollection<SharedFolder> shares = manager.GetCurrentShares(null);
Logger.Instance.Trace(this, "AdditionalFolders_Sync: {0}", shares.Count);
// Convert to dictionary
Dictionary<SyncId, SharedFolder> dict = shares.ToDictionary(x => x.SyncId);
Logger.Instance.Trace(this, "AdditionalFolders_Sync2: {0}", shares.Count);
// Convert to dictionary
Dictionary<SyncId, SharedFolder> dict = shares.ToDictionary(x => x.SyncId);
Logger.Instance.Trace(this, "AdditionalFolders_Sync2: {0}", shares.Count);
// Store any send-as properties
FeatureSendAs sendAs = ThisAddIn.Instance.GetFeature<FeatureSendAs>();
sendAs?.UpdateSendAsAddresses(account, shares);
// Store any send-as properties
FeatureSendAs sendAs = ThisAddIn.Instance.GetFeature<FeatureSendAs>();
sendAs?.UpdateSendAsAddresses(account, shares);
// Store with the account
account.SetFeatureData(this, KEY_SHARES, dict);
// Store with the account
account.SetFeatureData(this, KEY_SHARES, dict);
}
}
}

View File

@ -10,16 +10,14 @@ using System.Threading.Tasks;
namespace Acacia.Features.SharedFolders
{
public class RemindersQuery : DisposableWrapper, LogContext
public abstract class RemindersQuery : DisposableWrapper, LogContext
{
private static readonly SearchQuery.PropertyIdentifier PROP_FOLDER = new SearchQuery.PropertyIdentifier(PropTag.FromInt(0x6B20001F));
protected static readonly SearchQuery.PropertyIdentifier PROP_FOLDER = new SearchQuery.PropertyIdentifier(PropTag.FromInt(0x6B20001F));
private readonly FeatureSharedFolders _feature;
private readonly IFolder _folder;
private SearchQuery _queryRoot;
private SearchQuery.Or _queryCustomShared;
private SearchQuery.Or _queryCustomConfigured;
private bool _queryCustomModified;
protected SearchQuery _queryRoot;
protected bool _queryCustomModified;
public RemindersQuery(FeatureSharedFolders feature, IStore store)
{
@ -27,10 +25,68 @@ namespace Acacia.Features.SharedFolders
this._folder = store.GetSpecialFolder(SpecialFolder.Reminders);
}
public bool Open()
abstract public bool Open();
public string LogContextId
{
get
{
return _feature.LogContextId;
}
}
protected override void DoRelease()
{
_folder.Dispose();
}
public void Commit()
{
if (_queryCustomModified)
{
FolderQuery = _queryRoot;
_queryCustomModified = false;
}
}
protected SearchQuery FolderQuery
{
get
{
return _folder.SearchCriteria;
}
set
{
if (!_feature.RemindersKeepRunning)
_folder.SearchRunning = false;
_folder.SearchCriteria = value;
if (!_feature.RemindersKeepRunning)
_folder.SearchRunning = true;
}
}
}
public class RemindersQueryFolders : RemindersQuery
{
// Custom query for shared (S) and configured (C) folders
private SearchQuery.Or _queryCustomShared;
private SearchQuery.Or _queryCustomConfigured;
public RemindersQueryFolders(FeatureSharedFolders feature, IStore store)
:
base(feature, store)
{
}
override public bool Open()
{
if (_queryCustomShared != null && _queryCustomConfigured != null)
return true;
try
{
_queryRoot = FolderQuery;
@ -80,6 +136,7 @@ namespace Acacia.Features.SharedFolders
return _queryCustomShared != null && _queryCustomConfigured != null;
}
private SearchQuery.Or AddCustomQuery(SearchQuery.And root, string prefix)
{
SearchQuery.Or custom = new SearchQuery.Or();
@ -96,51 +153,10 @@ namespace Acacia.Features.SharedFolders
root.Operands.Add(custom);
return custom;
}
public string LogContextId
{
get
{
return _feature.LogContextId;
}
}
protected override void DoRelease()
{
_folder.Dispose();
}
public void Commit()
{
if (_queryCustomModified)
{
FolderQuery = _queryRoot;
_queryCustomModified = false;
}
}
private SearchQuery FolderQuery
{
get
{
return _folder.SearchCriteria;
}
set
{
if (!_feature.RemindersKeepRunning)
_folder.SearchRunning = false;
_folder.SearchCriteria = value;
if (!_feature.RemindersKeepRunning)
_folder.SearchRunning = true;
}
}
public void UpdateReminders(SyncId folderId, bool wantReminders)
{
Logger.Instance.Trace(this, "Setting reminders for folder {0}: {1} ({2})", wantReminders, folderId, folderId?.Kind);
switch(folderId.Kind)
switch (folderId.Kind)
{
case SyncKind.Configured:
UpdateReminders(_queryCustomConfigured, folderId, wantReminders);
@ -214,7 +230,7 @@ namespace Acacia.Features.SharedFolders
}
private void RemoveStaleReminders(ISet<string> prefixes, SearchQuery.Or query)
{
{
// Remove all operands for which we do not want the prefix
for (int i = 0; i < query.Operands.Count;)
{
@ -244,5 +260,84 @@ namespace Acacia.Features.SharedFolders
return null;
return folderId.ToString() + ":";
}
}
public class RemindersQueryStore : RemindersQuery
{
private SearchQuery.Not _queryCustomShared;
public RemindersQueryStore(FeatureSharedFolders feature, IStore store) : base(feature, store)
{
}
public override bool Open()
{
if (_queryCustomShared != null)
return true;
try
{
_queryRoot = FolderQuery;
if (!(_queryRoot is SearchQuery.And))
return false;
Logger.Instance.Debug(this, "Current query:\n{0}", _queryRoot.ToString());
SearchQuery.And root = (SearchQuery.And)_queryRoot;
// TODO: more strict checking of query
// Remove old shared folders query if present
if ((root.Operands.Count == 3 || root.Operands.Count == 5) && root.Operands.ElementAt(2) is SearchQuery.Or)
{
while (root.Operands.Count > 2)
{
root.Operands.RemoveAt(2);
}
}
if (root.Operands.Count == 3)
{
_queryCustomShared = (SearchQuery.Not)root.Operands.ElementAt(2);
}
else
{
SetReminders(false); // Default to false
root.Operands.Add(_queryCustomShared);
}
Logger.Instance.Debug(this, "Modified query:\n{0}", root.ToString());
// Store it
FolderQuery = root;
Logger.Instance.Debug(this, "Modified query readback:\n{0}", FolderQuery);
}
catch (Exception e)
{
Logger.Instance.Error(this, "Exception in Open: {0}", e);
}
return _queryCustomShared != null;
}
public void SetReminders(bool showReminders)
{
// We do not have support for constants in queries, so use a prefix match (which will always be I for impersonated stores)
// with an unmatchable prefix instead.
// It's wrapped in a NOT, to allow updating that operand rather than the main query
SearchQuery.PropertyContent filter = new SearchQuery.PropertyContent(
PROP_FOLDER, SearchQuery.ContentMatchOperation.Prefix, SearchQuery.ContentMatchModifiers.None, showReminders ? "X" : "I"
);
// Check current state
if (_queryCustomShared != null)
{
if (((SearchQuery.PropertyContent)_queryCustomShared.Operand).Content.Equals(filter.Content))
return;
}
// Update the filter
if (_queryCustomShared == null)
_queryCustomShared = new SearchQuery.Not(filter);
else
_queryCustomShared.Operand = filter;
_queryCustomModified = true;
}
}
}

View File

@ -38,6 +38,8 @@
this.buttonOpenUser = new System.Windows.Forms.Button();
this.kTreeFolders = new Acacia.Controls.KTree();
this._layoutOptions = new System.Windows.Forms.TableLayoutPanel();
this._labelWholeStoreReminders = new System.Windows.Forms.Label();
this.checkWholeStoreReminders = new System.Windows.Forms.CheckBox();
this._labelWholeStore = new System.Windows.Forms.Label();
this.checkWholeStore = new System.Windows.Forms.CheckBox();
this.labelPermissionsValue = new System.Windows.Forms.Label();
@ -137,21 +139,35 @@
// _layoutOptions
//
resources.ApplyResources(this._layoutOptions, "_layoutOptions");
this._layoutOptions.Controls.Add(this._labelWholeStoreReminders, 0, 1);
this._layoutOptions.Controls.Add(this.checkWholeStoreReminders, 1, 1);
this._layoutOptions.Controls.Add(this._labelWholeStore, 0, 0);
this._layoutOptions.Controls.Add(this.checkWholeStore, 1, 0);
this._layoutOptions.Controls.Add(this.labelPermissionsValue, 1, 5);
this._layoutOptions.Controls.Add(this._labelName, 0, 1);
this._layoutOptions.Controls.Add(this.textName, 1, 1);
this._layoutOptions.Controls.Add(this._labelSendAs, 0, 2);
this._layoutOptions.Controls.Add(this.checkSendAs, 1, 2);
this._layoutOptions.Controls.Add(this._labelSendAsAddress, 0, 3);
this._layoutOptions.Controls.Add(this.textSendAsAddress, 1, 3);
this._layoutOptions.Controls.Add(this._labelReminders, 0, 4);
this._layoutOptions.Controls.Add(this.checkReminders, 1, 4);
this._layoutOptions.Controls.Add(this._labelPermissions, 0, 5);
this._layoutOptions.Controls.Add(this.labelPermissionsValue, 1, 6);
this._layoutOptions.Controls.Add(this._labelName, 0, 2);
this._layoutOptions.Controls.Add(this.textName, 1, 2);
this._layoutOptions.Controls.Add(this._labelSendAs, 0, 3);
this._layoutOptions.Controls.Add(this.checkSendAs, 1, 3);
this._layoutOptions.Controls.Add(this._labelSendAsAddress, 0, 4);
this._layoutOptions.Controls.Add(this.textSendAsAddress, 1, 4);
this._layoutOptions.Controls.Add(this._labelReminders, 0, 5);
this._layoutOptions.Controls.Add(this.checkReminders, 1, 5);
this._layoutOptions.Controls.Add(this._labelPermissions, 0, 6);
this._layoutOptions.Controls.Add(this._labelRestartRequired, 2, 0);
this._layoutOptions.Name = "_layoutOptions";
//
// _labelWholeStoreReminders
//
resources.ApplyResources(this._labelWholeStoreReminders, "_labelWholeStoreReminders");
this._labelWholeStoreReminders.Name = "_labelWholeStoreReminders";
//
// checkWholeStoreReminders
//
resources.ApplyResources(this.checkWholeStoreReminders, "checkWholeStoreReminders");
this.checkWholeStoreReminders.Name = "checkWholeStoreReminders";
this.checkWholeStoreReminders.UseVisualStyleBackColor = true;
this.checkWholeStoreReminders.CheckedChanged += new System.EventHandler(this.checkWholeStoreReminders_CheckedChanged);
//
// _labelWholeStore
//
resources.ApplyResources(this._labelWholeStore, "_labelWholeStore");
@ -288,5 +304,7 @@
private System.Windows.Forms.Label _labelRestartRequired;
private System.Windows.Forms.Label _labelSendAsAddress;
private System.Windows.Forms.TextBox textSendAsAddress;
private System.Windows.Forms.Label _labelWholeStoreReminders;
private System.Windows.Forms.CheckBox checkWholeStoreReminders;
}
}

View File

@ -194,18 +194,18 @@ namespace Acacia.Features.SharedFolders
// Add public folders
Dictionary<BackendId, SharedFolder> publicShares;
shares.TryGetValue(GABUser.USER_PUBLIC, out publicShares);
AddUserFolders(GABUser.USER_PUBLIC, false, publicShares, false);
AddUserFolders(GABUser.USER_PUBLIC, null, publicShares, false);
// Add shared stores
foreach (ZPushAccount shared in _account.SharedAccounts)
{
AddUserFolders(new GABUser(shared.ShareUserName), true, null, false);
AddUserFolders(new GABUser(shared.ShareUserName), shared, null, false);
}
// Add any users for which we have shared folders
foreach (KeyValuePair<GABUser, Dictionary<BackendId, SharedFolder>> entry in shares.OrderBy(x => x.Key.DisplayName))
if (GABUser.USER_PUBLIC != entry.Key)
AddUserFolders(entry.Key, false, entry.Value, false);
AddUserFolders(entry.Key, null, entry.Value, false);
}
finally
{
@ -352,6 +352,8 @@ namespace Acacia.Features.SharedFolders
ctx.AddBusy(-state.folders);
List<ZPushAccount> syncAdditional = new List<ZPushAccount>();
// Handle stores
if (state.stores.Count > 0)
{
@ -362,7 +364,23 @@ namespace Acacia.Features.SharedFolders
{
if (store.WantShare)
{
add.Add(store);
// Check if it must be added
if (!store.IsShared)
add.Add(store);
// Update reminders for existing stores
if (store.ShowReminders != store.ShowRemindersInitial)
{
ZPushAccount storeAccount = store.WholeStoreAccount;
if (storeAccount != null)
{
storeAccount.ShowReminders = store.ShowReminders;
syncAdditional.Add(storeAccount);
// Update UI state
store.ShowRemindersInitial = store.ShowReminders;
WholeStoreShareChanged(store);
}
}
continue;
}
else
@ -406,6 +424,10 @@ namespace Acacia.Features.SharedFolders
CheckDirty();
}
// Sync accounts
foreach (ZPushAccount account in syncAdditional)
_feature.Sync(account);
if (state.folders != 0)
{
// Sync account
@ -432,7 +454,7 @@ namespace Acacia.Features.SharedFolders
private void buttonOpenUser_Click(object sender, EventArgs e)
{
AddUserFolders(gabLookup.SelectedUser, false, null, true);
AddUserFolders(gabLookup.SelectedUser, null, null, true);
}
private void gabLookup_SelectedUserChanged(object source, GABLookupControl.SelectedUserEventArgs e)
@ -441,7 +463,7 @@ namespace Acacia.Features.SharedFolders
if (e.IsChosen)
{
AddUserFolders(e.SelectedUser, false, null, true);
AddUserFolders(e.SelectedUser, null, null, true);
}
}
@ -459,7 +481,7 @@ namespace Acacia.Features.SharedFolders
private readonly Dictionary<GABUser, StoreTreeNode> _userFolders = new Dictionary<GABUser, StoreTreeNode>();
private void AddUserFolders(GABUser user, bool wholeStore, Dictionary<BackendId, SharedFolder> currentShares, bool select)
private void AddUserFolders(GABUser user, ZPushAccount wholeStore, Dictionary<BackendId, SharedFolder> currentShares, bool select)
{
if (user == null)
return;
@ -480,7 +502,8 @@ namespace Acacia.Features.SharedFolders
node = new StoreTreeNode(_folders, gabLookup.GAB,
user, sendAsAddress,
user.DisplayName, currentShares ?? new Dictionary<BackendId, SharedFolder>(),
wholeStore);
wholeStore != null,
wholeStore?.ShowReminders == true);
node.DirtyChanged += UserSharesChanged;
node.CheckStateChanged += WholeStoreShareChanged;
_userFolders.Add(user, node);
@ -646,6 +669,22 @@ namespace Acacia.Features.SharedFolders
}
private readonly List<StoreTreeNode> _optionWholeStoreNodes = new List<StoreTreeNode>();
private readonly List<bool> _optionWholeStoreNodesInitial = new List<bool>();
private CheckState? OptionWholeStoreReminders
{
get
{
if (checkWholeStoreReminders.Visible)
return checkWholeStoreReminders.CheckState;
return null;
}
set
{
_labelWholeStoreReminders.Visible = checkWholeStoreReminders.Visible = value != null;
if (value != null)
checkWholeStoreReminders.CheckState = value.Value;
}
}
private void ShowOptions(KTreeNode[] nodes)
{
@ -667,6 +706,7 @@ namespace Acacia.Features.SharedFolders
OptionReminders = null;
OptionPermissions = null;
OptionWholeStore = null;
OptionWholeStoreReminders = null;
bool readOnly = false;
bool haveStoreNodes = false;
bool haveFolderNodes = false;
@ -749,7 +789,6 @@ namespace Acacia.Features.SharedFolders
_labelRestartRequired.Visible = isShared && !wasShared;
}
}
else
{
@ -846,6 +885,7 @@ namespace Acacia.Features.SharedFolders
private void checkWholeStore_CheckedChanged(object sender, EventArgs e)
{
CheckState? reminders = null;
for (int i = 0; i < _optionWholeStoreNodes.Count; ++i)
{
StoreTreeNode node = _optionWholeStoreNodes[i];
@ -857,8 +897,32 @@ namespace Acacia.Features.SharedFolders
case CheckState.Unchecked: wholeStore = false; break;
}
if (wholeStore)
{
CheckState remindersCheck = node.ShowReminders? CheckState.Checked: CheckState.Unchecked;
if (reminders == null)
reminders = remindersCheck;
else if (reminders.Value != remindersCheck)
reminders = CheckState.Indeterminate;
}
node.WantShare = wholeStore;
}
OptionWholeStoreReminders = reminders;
}
private void checkWholeStoreReminders_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i < _optionWholeStoreNodes.Count; ++i)
{
StoreTreeNode node = _optionWholeStoreNodes[i];
switch (checkWholeStoreReminders.CheckState)
{
case CheckState.Checked: node.ShowReminders = true; break;
case CheckState.Indeterminate: node.ShowReminders = node.ShowRemindersInitial; break;
case CheckState.Unchecked: node.ShowReminders = false; break;
}
WholeStoreShareChanged(node);
}
}
private void checkSendAs_CheckedChanged(object sender, EventArgs e)

View File

@ -145,10 +145,13 @@
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="labelSelectUser.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 0</value>
<value>4, 0</value>
</data>
<data name="labelSelectUser.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="labelSelectUser.Size" type="System.Drawing.Size, System.Drawing">
<value>105, 29</value>
<value>158, 40</value>
</data>
<data name="labelSelectUser.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -175,10 +178,13 @@
<value>Fill</value>
</data>
<data name="gabLookup.Location" type="System.Drawing.Point, System.Drawing">
<value>114, 3</value>
<value>170, 5</value>
</data>
<data name="gabLookup.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 5, 4, 5</value>
</data>
<data name="gabLookup.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>200, 0</value>
<value>300, 0</value>
</data>
<data name="gabLookup.NotFoundText" xml:space="preserve">
<value>The user was not found</value>
@ -187,7 +193,7 @@
<value>Start typing name</value>
</data>
<data name="gabLookup.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 23</value>
<value>401, 30</value>
</data>
<data name="gabLookup.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -220,13 +226,16 @@
<value>NoControl</value>
</data>
<data name="buttonOpenUser.Location" type="System.Drawing.Point, System.Drawing">
<value>380, 3</value>
<value>579, 5</value>
</data>
<data name="buttonOpenUser.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 5, 4, 5</value>
</data>
<data name="buttonOpenUser.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>8, 0, 8, 0</value>
<value>12, 0, 12, 0</value>
</data>
<data name="buttonOpenUser.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 23</value>
<value>82, 30</value>
</data>
<data name="buttonOpenUser.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@ -250,13 +259,16 @@
<value>Fill</value>
</data>
<data name="_layoutSelectUser.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
<value>4, 5</value>
</data>
<data name="_layoutSelectUser.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 5, 4, 5</value>
</data>
<data name="_layoutSelectUser.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="_layoutSelectUser.Size" type="System.Drawing.Size, System.Drawing">
<value>442, 29</value>
<value>665, 40</value>
</data>
<data name="_layoutSelectUser.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -274,16 +286,19 @@
<value>0</value>
</data>
<data name="_layoutSelectUser.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="labelSelectUser" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="gabLookup" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="buttonOpenUser" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,100,AutoSize,0" /&gt;&lt;Rows Styles="Percent,100,Absolute,29" /&gt;&lt;/TableLayoutSettings&gt;</value>
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="labelSelectUser" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="gabLookup" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="buttonOpenUser" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,100,AutoSize,0" /&gt;&lt;Rows Styles="Percent,100,Absolute,40" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="kTreeFolders.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="kTreeFolders.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 38</value>
<value>4, 55</value>
</data>
<data name="kTreeFolders.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 5, 4, 5</value>
</data>
<data name="kTreeFolders.Size" type="System.Drawing.Size, System.Drawing">
<value>442, 224</value>
<value>665, 313</value>
</data>
<data name="kTreeFolders.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -309,6 +324,81 @@
<data name="_layoutOptions.ColumnCount" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="_labelWholeStoreReminders.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="_labelWholeStoreReminders.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="_labelWholeStoreReminders.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="_labelWholeStoreReminders.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 52</value>
</data>
<data name="_labelWholeStoreReminders.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="_labelWholeStoreReminders.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 42</value>
</data>
<data name="_labelWholeStoreReminders.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="_labelWholeStoreReminders.Text" xml:space="preserve">
<value>Show reminders</value>
</data>
<data name="_labelWholeStoreReminders.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="&gt;&gt;_labelWholeStoreReminders.Name" xml:space="preserve">
<value>_labelWholeStoreReminders</value>
</data>
<data name="&gt;&gt;_labelWholeStoreReminders.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;_labelWholeStoreReminders.Parent" xml:space="preserve">
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;_labelWholeStoreReminders.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="checkWholeStoreReminders.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="checkWholeStoreReminders.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Left</value>
</data>
<data name="checkWholeStoreReminders.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="checkWholeStoreReminders.Location" type="System.Drawing.Point, System.Drawing">
<value>150, 58</value>
</data>
<data name="checkWholeStoreReminders.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>9, 6, 4, 5</value>
</data>
<data name="checkWholeStoreReminders.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 5, 0, 5</value>
</data>
<data name="checkWholeStoreReminders.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 31</value>
</data>
<data name="checkWholeStoreReminders.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="&gt;&gt;checkWholeStoreReminders.Name" xml:space="preserve">
<value>checkWholeStoreReminders</value>
</data>
<data name="&gt;&gt;checkWholeStoreReminders.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;checkWholeStoreReminders.Parent" xml:space="preserve">
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;checkWholeStoreReminders.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="_labelWholeStore.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -319,13 +409,16 @@
<value>MiddleLeft</value>
</data>
<data name="_labelWholeStore.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 0</value>
<value>4, 0</value>
</data>
<data name="_labelWholeStore.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="_labelWholeStore.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 4, 0, 3</value>
<value>0, 6, 0, 5</value>
</data>
<data name="_labelWholeStore.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 27</value>
<value>133, 52</value>
</data>
<data name="_labelWholeStore.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
@ -346,7 +439,7 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;_labelWholeStore.ZOrder" xml:space="preserve">
<value>0</value>
<value>2</value>
</data>
<data name="checkWholeStore.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -358,16 +451,16 @@
<value>NoControl</value>
</data>
<data name="checkWholeStore.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 4</value>
<value>150, 6</value>
</data>
<data name="checkWholeStore.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 4, 3, 3</value>
<value>9, 6, 4, 5</value>
</data>
<data name="checkWholeStore.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 3, 0, 3</value>
<value>0, 5, 0, 5</value>
</data>
<data name="checkWholeStore.Size" type="System.Drawing.Size, System.Drawing">
<value>15, 20</value>
<value>22, 41</value>
</data>
<data name="checkWholeStore.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
@ -382,7 +475,7 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;checkWholeStore.ZOrder" xml:space="preserve">
<value>1</value>
<value>3</value>
</data>
<data name="labelPermissionsValue.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -394,10 +487,13 @@
<value>NoControl</value>
</data>
<data name="labelPermissionsValue.Location" type="System.Drawing.Point, System.Drawing">
<value>99, 133</value>
<value>145, 250</value>
</data>
<data name="labelPermissionsValue.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="labelPermissionsValue.Size" type="System.Drawing.Size, System.Drawing">
<value>346, 20</value>
<value>524, 31</value>
</data>
<data name="labelPermissionsValue.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
@ -415,7 +511,7 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;labelPermissionsValue.ZOrder" xml:space="preserve">
<value>2</value>
<value>4</value>
</data>
<data name="_labelName.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -424,10 +520,13 @@
<value>Fill</value>
</data>
<data name="_labelName.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 27</value>
<value>4, 94</value>
</data>
<data name="_labelName.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="_labelName.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 26</value>
<value>133, 36</value>
</data>
<data name="_labelName.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -448,19 +547,19 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;_labelName.ZOrder" xml:space="preserve">
<value>3</value>
<value>5</value>
</data>
<data name="textName.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="textName.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 30</value>
<value>150, 99</value>
</data>
<data name="textName.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 3, 3, 3</value>
<value>9, 5, 4, 5</value>
</data>
<data name="textName.Size" type="System.Drawing.Size, System.Drawing">
<value>343, 20</value>
<value>519, 26</value>
</data>
<data name="textName.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -475,7 +574,7 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;textName.ZOrder" xml:space="preserve">
<value>4</value>
<value>6</value>
</data>
<data name="_labelSendAs.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -484,10 +583,13 @@
<value>Fill</value>
</data>
<data name="_labelSendAs.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 53</value>
<value>4, 130</value>
</data>
<data name="_labelSendAs.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="_labelSendAs.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 27</value>
<value>133, 42</value>
</data>
<data name="_labelSendAs.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@ -508,7 +610,7 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;_labelSendAs.ZOrder" xml:space="preserve">
<value>5</value>
<value>7</value>
</data>
<data name="checkSendAs.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -517,16 +619,16 @@
<value>Left</value>
</data>
<data name="checkSendAs.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 57</value>
<value>150, 136</value>
</data>
<data name="checkSendAs.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 4, 3, 3</value>
<value>9, 6, 4, 5</value>
</data>
<data name="checkSendAs.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 3, 0, 3</value>
<value>0, 5, 0, 5</value>
</data>
<data name="checkSendAs.Size" type="System.Drawing.Size, System.Drawing">
<value>15, 20</value>
<value>22, 31</value>
</data>
<data name="checkSendAs.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
@ -541,7 +643,7 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;checkSendAs.ZOrder" xml:space="preserve">
<value>6</value>
<value>8</value>
</data>
<data name="_labelSendAsAddress.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -553,10 +655,13 @@
<value>NoControl</value>
</data>
<data name="_labelSendAsAddress.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 80</value>
<value>4, 172</value>
</data>
<data name="_labelSendAsAddress.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="_labelSendAsAddress.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 26</value>
<value>133, 36</value>
</data>
<data name="_labelSendAsAddress.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
@ -577,19 +682,19 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;_labelSendAsAddress.ZOrder" xml:space="preserve">
<value>7</value>
<value>9</value>
</data>
<data name="textSendAsAddress.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="textSendAsAddress.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 83</value>
<value>150, 177</value>
</data>
<data name="textSendAsAddress.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 3, 3, 3</value>
<value>9, 5, 4, 5</value>
</data>
<data name="textSendAsAddress.Size" type="System.Drawing.Size, System.Drawing">
<value>343, 20</value>
<value>519, 26</value>
</data>
<data name="textSendAsAddress.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
@ -604,7 +709,7 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;textSendAsAddress.ZOrder" xml:space="preserve">
<value>8</value>
<value>10</value>
</data>
<data name="_labelReminders.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -613,10 +718,13 @@
<value>Fill</value>
</data>
<data name="_labelReminders.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 106</value>
<value>4, 208</value>
</data>
<data name="_labelReminders.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="_labelReminders.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 27</value>
<value>133, 42</value>
</data>
<data name="_labelReminders.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
@ -637,7 +745,7 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;_labelReminders.ZOrder" xml:space="preserve">
<value>9</value>
<value>11</value>
</data>
<data name="checkReminders.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -646,16 +754,16 @@
<value>Left</value>
</data>
<data name="checkReminders.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 110</value>
<value>150, 214</value>
</data>
<data name="checkReminders.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 4, 3, 3</value>
<value>9, 6, 4, 5</value>
</data>
<data name="checkReminders.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 3, 0, 3</value>
<value>0, 5, 0, 5</value>
</data>
<data name="checkReminders.Size" type="System.Drawing.Size, System.Drawing">
<value>15, 20</value>
<value>22, 31</value>
</data>
<data name="checkReminders.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
@ -670,7 +778,7 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;checkReminders.ZOrder" xml:space="preserve">
<value>10</value>
<value>12</value>
</data>
<data name="_labelPermissions.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -679,13 +787,16 @@
<value>Fill</value>
</data>
<data name="_labelPermissions.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 133</value>
<value>4, 250</value>
</data>
<data name="_labelPermissions.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="_labelPermissions.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 4, 0, 3</value>
<value>0, 6, 0, 5</value>
</data>
<data name="_labelPermissions.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 20</value>
<value>133, 31</value>
</data>
<data name="_labelPermissions.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
@ -706,16 +817,19 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;_labelPermissions.ZOrder" xml:space="preserve">
<value>11</value>
<value>13</value>
</data>
<data name="_labelRestartRequired.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="_labelRestartRequired.Location" type="System.Drawing.Point, System.Drawing">
<value>123, 0</value>
<value>180, 0</value>
</data>
<data name="_labelRestartRequired.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="_labelRestartRequired.Size" type="System.Drawing.Size, System.Drawing">
<value>322, 27</value>
<value>489, 52</value>
</data>
<data name="_labelRestartRequired.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
@ -739,22 +853,22 @@
<value>_layoutOptions</value>
</data>
<data name="&gt;&gt;_labelRestartRequired.ZOrder" xml:space="preserve">
<value>12</value>
<value>14</value>
</data>
<data name="_layoutOptions.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="_layoutOptions.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 265</value>
<value>0, 373</value>
</data>
<data name="_layoutOptions.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="_layoutOptions.RowCount" type="System.Int32, mscorlib">
<value>6</value>
<value>7</value>
</data>
<data name="_layoutOptions.Size" type="System.Drawing.Size, System.Drawing">
<value>448, 153</value>
<value>673, 281</value>
</data>
<data name="_layoutOptions.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@ -772,7 +886,7 @@
<value>2</value>
</data>
<data name="_layoutOptions.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="_labelWholeStore" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="checkWholeStore" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="labelPermissionsValue" Row="5" RowSpan="1" Column="1" ColumnSpan="2" /&gt;&lt;Control Name="_labelName" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="textName" Row="1" RowSpan="1" Column="1" ColumnSpan="2" /&gt;&lt;Control Name="_labelSendAs" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="checkSendAs" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="_labelSendAsAddress" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="textSendAsAddress" Row="3" RowSpan="1" Column="1" ColumnSpan="2" /&gt;&lt;Control Name="_labelReminders" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="checkReminders" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="_labelPermissions" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="_labelRestartRequired" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="_labelWholeStoreReminders" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="checkWholeStoreReminders" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="_labelWholeStore" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="checkWholeStore" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="labelPermissionsValue" Row="6" RowSpan="1" Column="1" ColumnSpan="2" /&gt;&lt;Control Name="_labelName" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="textName" Row="2" RowSpan="1" Column="1" ColumnSpan="2" /&gt;&lt;Control Name="_labelSendAs" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="checkSendAs" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="_labelSendAsAddress" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="textSendAsAddress" Row="4" RowSpan="1" Column="1" ColumnSpan="2" /&gt;&lt;Control Name="_labelReminders" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="checkReminders" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="_labelPermissions" Row="6" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="_labelRestartRequired" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="_layoutMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@ -780,11 +894,14 @@
<data name="_layoutMain.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="_layoutMain.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 5, 4, 5</value>
</data>
<data name="_layoutMain.RowCount" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="_layoutMain.Size" type="System.Drawing.Size, System.Drawing">
<value>448, 418</value>
<value>673, 654</value>
</data>
<data name="_layoutMain.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -808,10 +925,13 @@
<value>Fill</value>
</data>
<data name="_mainBusyHider.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
<value>4, 5</value>
</data>
<data name="_mainBusyHider.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 5, 4, 5</value>
</data>
<data name="_mainBusyHider.Size" type="System.Drawing.Size, System.Drawing">
<value>448, 418</value>
<value>673, 654</value>
</data>
<data name="_mainBusyHider.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -841,13 +961,13 @@
<value>Fill</value>
</data>
<data name="dialogButtons.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 425</value>
<value>3, 666</value>
</data>
<data name="dialogButtons.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 1, 2, 1</value>
<value>3, 2, 3, 2</value>
</data>
<data name="dialogButtons.Size" type="System.Drawing.Size, System.Drawing">
<value>450, 35</value>
<value>675, 42</value>
</data>
<data name="dialogButtons.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -868,7 +988,7 @@
<value>Fill</value>
</data>
<data name="_layout.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 6</value>
<value>9, 9</value>
</data>
<data name="_layout.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
@ -877,7 +997,7 @@
<value>2</value>
</data>
<data name="_layout.Size" type="System.Drawing.Size, System.Drawing">
<value>454, 461</value>
<value>681, 710</value>
</data>
<data name="_layout.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -895,22 +1015,19 @@
<value>0</value>
</data>
<data name="_layout.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="_mainBusyHider" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="dialogButtons" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Percent,100,AutoSize,0,Absolute,20" /&gt;&lt;/TableLayoutSettings&gt;</value>
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="_mainBusyHider" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="dialogButtons" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Percent,100,AutoSize,0,Absolute,31" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
<value>9, 20</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>466, 473</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
<value>699, 728</value>
</data>
<data name="$this.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 6, 6, 6</value>
<value>9, 9, 9, 9</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>

View File

@ -98,7 +98,7 @@ namespace Acacia.Features.SharedFolders
UpdateReminders(shares);
// Remove any reminders from the shares that are not wanted, they are stale
OpenQuery()?.RemoveStaleReminders(
((RemindersQueryFolders) OpenQuery())?.RemoveStaleReminders(
shares
.Where(x => x.IsSynced && x.SyncType.IsAppointment() && x.FlagCalendarReminders)
.Select(x => x.SyncId)
@ -126,6 +126,18 @@ namespace Acacia.Features.SharedFolders
return _api.GetUserFolders(store);
}
public void UpdateSharedStore()
{
Logger.Instance.Debug(this, "Updating shared store: {0}", _account);
RemindersQuery query = OpenQuery();
if (query != null)
{
Logger.Instance.Debug(this, "Updating shared store reminders: {0}", query);
((RemindersQueryStore)query).SetReminders(_account.ShowReminders);
query.Commit();
}
}
#endregion
#region Reminders
@ -139,7 +151,7 @@ namespace Acacia.Features.SharedFolders
Logger.Instance.Debug(this, "UpdateReminders: {0}", share);
if (share.IsSynced && share.SyncType.IsAppointment())
{
OpenQuery()?.UpdateReminders(share.SyncId, share.FlagCalendarReminders);
((RemindersQueryFolders)OpenQuery())?.UpdateReminders(share.SyncId, share.FlagCalendarReminders);
}
}
}
@ -151,7 +163,9 @@ namespace Acacia.Features.SharedFolders
{
if (_feature.Reminders)
{
RemindersQuery query = new RemindersQuery(_feature, _account.Account.Store);
RemindersQuery query = _account.IsShare
? (RemindersQuery)new RemindersQueryStore(_feature, _account.Account.Store)
: (RemindersQuery)new RemindersQueryFolders(_feature, _account.Account.Store);
if (query.Open())
{
_query = query;

View File

@ -66,8 +66,19 @@ namespace Acacia.Features.SharedFolders
}
}
public bool ShowReminders
{
get;
set;
}
public bool ShowRemindersInitial
{
get;
set;
}
public StoreTreeNode(SharedFoldersManager folders, GABHandler gab, GABUser user, string sendAsAddress, string text,
Dictionary<BackendId, SharedFolder> currentFolders, bool isShared)
Dictionary<BackendId, SharedFolder> currentFolders, bool isShared, bool showRemindersWholeStore)
:
base(text)
{
@ -109,6 +120,8 @@ namespace Acacia.Features.SharedFolders
// Set up sharing
WantShare = isShared;
ShowRemindersInitial = showRemindersWholeStore;
ShowReminders = ShowRemindersInitial;
}
private static void ApplyReadOnly(KTreeNode node, bool isReadOnly)
@ -148,6 +161,18 @@ namespace Acacia.Features.SharedFolders
}
}
public ZPushAccount WholeStoreAccount
{
get
{
if (IsShared)
{
return _account.FindSharedAccount(_user.UserName);
}
return null;
}
}
#region Share management
/// <summary>
@ -289,7 +314,7 @@ namespace Acacia.Features.SharedFolders
{
get
{
return WantShare != IsShared;
return WantShare != IsShared || ShowReminders != ShowRemindersInitial;
}
}

View File

@ -46,6 +46,8 @@ namespace Acacia
public const string REG_VAL_REPLY_FORWARD_SIGNATURE = "Reply-Forward Signature";
public const string REG_VAL_CURRENT_SIGNATURE = "KOE Signature Digest";
public const string REG_VAL_SHOW_REMINDERS = "KOE Reminders";
public const string REG_VAL_SYNC_TIMEFRAME = "KOE SyncTimeFrame";
public const string REG_VAL_SYNC_SLIDER = "EAS SyncSlider";
public const string REG_VAL_NEXT_ACCOUNT_ID = "NextAccountID";

View File

@ -222,6 +222,11 @@ namespace Acacia.ZPush
}
}
public bool IsShare
{
get { return ShareFor != null; }
}
public string ShareUserName
{
get
@ -289,6 +294,19 @@ namespace Acacia.ZPush
return null;
}
public bool ShowReminders
{
get
{
return RegistryUtil.GetValueDword(Account.RegistryBaseKey, OutlookConstants.REG_VAL_SHOW_REMINDERS, 1) != 0;
}
set
{
RegistryUtil.SetValueDword(Account.RegistryBaseKey, OutlookConstants.REG_VAL_SHOW_REMINDERS, value ? 1 : 0);
}
}
#endregion
#region Signatures