Made Search manage returned items, like Folder.Items

This commit is contained in:
Patrick Simpson 2017-02-15 10:53:24 +01:00
parent 10d2bd4d65
commit f687ee9f22
3 changed files with 17 additions and 19 deletions

View File

@ -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();
}
}
}

View File

@ -176,19 +176,26 @@ namespace Acacia.Stubs.OutlookWrappers
public IEnumerable<ItemType> Search(int maxResults)
{
List<ItemType> values = new List<ItemType>();
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<ItemType>(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()

View File

@ -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<GABUser> users = new List<GABUser>();
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<GABUser> users = new List<GABUser>();
foreach (IContactItem result in search.Search(1))
{
using (result)
{
return new GABUser(result.FullName, result.CustomerID);
}
return new GABUser(result.FullName, result.CustomerID);
}
}