do searching

This commit is contained in:
Kyle Spearrin 2018-09-24 15:08:16 -04:00
parent 2870b8331e
commit 340d4ce714
2 changed files with 40 additions and 15 deletions

View file

@ -7,6 +7,7 @@ using Bit.iOS.Core.Utilities;
using Bit.iOS.Core.Controllers; using Bit.iOS.Core.Controllers;
using Bit.App.Resources; using Bit.App.Resources;
using Bit.iOS.Core.Views; using Bit.iOS.Core.Views;
using System.Threading;
namespace Bit.iOS.Autofill namespace Bit.iOS.Autofill
{ {
@ -158,20 +159,21 @@ namespace Bit.iOS.Autofill
} }
} }
} }
}
public class SearchDelegate : UISearchBarDelegate public class SearchDelegate : UISearchBarDelegate
{
private readonly LoginSearchViewController _controller;
public SearchDelegate(LoginSearchViewController controller)
{ {
_controller = controller; private readonly LoginSearchViewController _controller;
}
public override void TextChanged(UISearchBar searchBar, string searchText) public SearchDelegate(LoginSearchViewController controller)
{ {
System.Diagnostics.Debug.WriteLine("search text: " + searchText); _controller = controller;
}
public override void TextChanged(UISearchBar searchBar, string searchText)
{
System.Diagnostics.Debug.WriteLine("search text: " + searchText);
((TableSource)_controller.TableView.Source).FilterResults(searchText, new CancellationToken());
}
} }
} }
} }

View file

@ -9,6 +9,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using UIKit; using UIKit;
using XLabs.Ioc; using XLabs.Ioc;
@ -19,6 +20,7 @@ namespace Bit.iOS.Core.Views
{ {
private const string CellIdentifier = "TableCell"; private const string CellIdentifier = "TableCell";
private IEnumerable<CipherViewModel> _allItems = new List<CipherViewModel>();
protected IEnumerable<CipherViewModel> _tableItems = new List<CipherViewModel>(); protected IEnumerable<CipherViewModel> _tableItems = new List<CipherViewModel>();
protected ICipherService _cipherService; protected ICipherService _cipherService;
protected ISettings _settings; protected ISettings _settings;
@ -39,14 +41,14 @@ namespace Bit.iOS.Core.Views
{ {
var combinedLogins = new List<Cipher>(); var combinedLogins = new List<Cipher>();
if (urlFilter) if(urlFilter)
{ {
var logins = await _cipherService.GetAllAsync(_context.UrlString); var logins = await _cipherService.GetAllAsync(_context.UrlString);
if (logins?.Item1 != null) if(logins?.Item1 != null)
{ {
combinedLogins.AddRange(logins.Item1); combinedLogins.AddRange(logins.Item1);
} }
if (logins?.Item2 != null) if(logins?.Item2 != null)
{ {
combinedLogins.AddRange(logins.Item2); combinedLogins.AddRange(logins.Item2);
} }
@ -57,10 +59,31 @@ namespace Bit.iOS.Core.Views
combinedLogins.AddRange(logins); combinedLogins.AddRange(logins);
} }
_tableItems = combinedLogins.Select(s => new CipherViewModel(s)) _allItems = combinedLogins.Select(s => new CipherViewModel(s))
.OrderBy(s => s.Name) .OrderBy(s => s.Name)
.ThenBy(s => s.Username) .ThenBy(s => s.Username)
.ToList() ?? new List<CipherViewModel>(); .ToList() ?? new List<CipherViewModel>();
FilterResults(searchFilter, new CancellationToken());
}
public void FilterResults(string searchFilter, CancellationToken ct)
{
ct.ThrowIfCancellationRequested();
if(string.IsNullOrWhiteSpace(searchFilter))
{
_tableItems = _allItems.ToList();
}
else
{
searchFilter = searchFilter.ToLower();
_tableItems = _allItems
.Where(s => s.Name.ToLower().Contains(searchFilter) ||
(s.Username?.ToLower().Contains(searchFilter) ?? false) ||
(s.Uris?.FirstOrDefault()?.Uri.ToLower().Contains(searchFilter) ?? false))
.TakeWhile(s => !ct.IsCancellationRequested)
.ToArray();
}
} }
public IEnumerable<CipherViewModel> TableItems { get; set; } public IEnumerable<CipherViewModel> TableItems { get; set; }