From f687ee9f220878d46042e1dbafe0c9bbe1a8000a Mon Sep 17 00:00:00 2001
From: Patrick Simpson
Date: Wed, 15 Feb 2017 10:53:24 +0100
Subject: [PATCH] Made Search manage returned items, like Folder.Items
---
.../AcaciaZPushPlugin/Features/GAB/GABHandler.cs | 8 ++------
.../Stubs/OutlookWrappers/SearchWrapper.cs | 15 +++++++++++----
.../AcaciaZPushPlugin/UI/GABLookupControl.cs | 13 ++++---------
3 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs
index cbb7a13..a8b7106 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs
@@ -274,12 +274,8 @@ namespace Acacia.Features.GAB
search.AddField(PROP_CHUNK, true).SetOperation(SearchOperation.Equal, index.chunk);
foreach (IItem oldItem in search.Search())
{
- // TODO: Search should handle this, like folder enumeration
- using (oldItem)
- {
- Logger.Instance.Trace(this, "Deleting GAB entry: {0}", oldItem.Subject);
- oldItem.Delete();
- }
+ Logger.Instance.Trace(this, "Deleting GAB entry: {0}", oldItem.Subject);
+ oldItem.Delete();
}
}
}
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SearchWrapper.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SearchWrapper.cs
index 4366c1f..3262f2b 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SearchWrapper.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SearchWrapper.cs
@@ -176,19 +176,26 @@ namespace Acacia.Stubs.OutlookWrappers
public IEnumerable Search(int maxResults)
{
- List values = new List();
string filter = MakeFilter();
+ int count = 0;
object value = _item.Find(filter);
while(value != null)
{
- if (values.Count < maxResults)
+ if (count < maxResults)
{
// Wrap and add if it returns an object. If not, WrapOrDefault will release it
ItemType wrapped = Mapping.WrapOrDefault(value);
if (wrapped != null)
{
- values.Add(wrapped);
+ try
+ {
+ yield return wrapped;
+ }
+ finally
+ {
+ wrapped.Dispose();
+ }
}
}
else
@@ -197,8 +204,8 @@ namespace Acacia.Stubs.OutlookWrappers
ComRelease.Release(value);
}
value = _item.FindNext();
+ ++count;
}
- return values;
}
public ItemType SearchOne()
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/UI/GABLookupControl.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/UI/GABLookupControl.cs
index 5088051..31cf925 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/UI/GABLookupControl.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/UI/GABLookupControl.cs
@@ -231,14 +231,11 @@ namespace Acacia.UI
oper.AddField("urn:schemas:contacts:customerid").SetOperation(SearchOperation.Like, text + "%");
// Fetch the results up to the limit.
- // TODO: make limit a property
+ // TODO: make limit a property?
List users = new List();
foreach (IContactItem result in search.Search(max))
{
- using (result)
- {
- users.Add(new GABUser(result.FullName, result.CustomerID));
- }
+ users.Add(new GABUser(result.FullName, result.CustomerID));
}
return users;
@@ -254,13 +251,11 @@ namespace Acacia.UI
search.AddField("urn:schemas:contacts:customerid").SetOperation(SearchOperation.Equal, username);
// Fetch the result, if any.
+ // TODO: make a SearchOne method?
List users = new List();
foreach (IContactItem result in search.Search(1))
{
- using (result)
- {
- return new GABUser(result.FullName, result.CustomerID);
- }
+ return new GABUser(result.FullName, result.CustomerID);
}
}