Skip to content

Commit

Permalink
Slow filtering of files. Fixes #1
Browse files Browse the repository at this point in the history
  • Loading branch information
RolandPheasant committed Nov 9, 2015
1 parent 8d9c02c commit 3e222d3
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 6 deletions.
11 changes: 7 additions & 4 deletions Source/TailBlazer.Domain/FileHandling/FileInfoEx.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,23 +92,26 @@ public static IObservable<int[]> ScanLineNumbers(this FileInfo file, Func<string
.Scan(Tuple.Create(new ImmutableList<int>(), 0), (state, _) =>
{

var result = state.Item1;

var i = state.Item2;

var newItems = new List<int>();
while ((line = reader.ReadLine()) != null)
{
if (predicate == null)
{
i++;
result = result.Add(i);
newItems.Add(i);
}
else
{
i++;
if (!predicate(line)) continue;
result = result.Add(i);
newItems.Add(i);

}
}
var result = state.Item1.Add(newItems.ToArray());

return Tuple.Create(result,i);
} ).Select(tuple=>tuple.Item1.Data)
.SubscribeSafe(observer);
Expand Down
11 changes: 11 additions & 0 deletions Source/TailBlazer.Domain/Infrastructure/ImmutableList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,17 @@ public ImmutableList<T> Add(T value)
return new ImmutableList<T>(newData);
}


public ImmutableList<T> Add(T[] newItems)
{

var result = new T[_data.Length + newItems.Length];
_data.CopyTo(result, 0);
newItems.CopyTo(result, _data.Length);

return new ImmutableList<T>(result);
}

public ImmutableList<T> Remove(T value)
{
var i = IndexOf(value);
Expand Down
4 changes: 2 additions & 2 deletions Source/TailBlazer/Views/FileTailerViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ public FileTailerViewModel(ILogger logger,ISchedulerProvider schedulerProvider,

File = fileInfo.FullName;

var tailer = new FileTailer(fileInfo, this.WhenValueChanged(vm=>vm.SearchText).Throttle(TimeSpan.FromMilliseconds(250)),Observable.Return(new ScrollRequest(40)));
var tailer = new FileTailer(fileInfo, this.WhenValueChanged(vm=>vm.SearchText).Throttle(TimeSpan.FromMilliseconds(125)),Observable.Return(new ScrollRequest(40)));
var totalCount = tailer.TotalLines.Subscribe(total => TotalLines = total);
var filterCount = tailer.MatchedLines.Subscribe(filtered => FilteredLines = filtered.Length);

//TODO: 1. Add observable to give current end of tail value

var loader = tailer.Lines.Connect()

.Buffer(TimeSpan.FromMilliseconds(125)).FlattenBufferResult()
.Transform(line => new LineProxy(line, (DateTime?)null))
.Sort(SortExpressionComparer<LineProxy>.Ascending(proxy => proxy.Number))
.ObserveOn(schedulerProvider.MainThread)
Expand Down

0 comments on commit 3e222d3

Please sign in to comment.