Esempio n. 1
0
        public void SearchInTailedFilesAndScrollIntoTheEnds()
        {
            var pulse = new Subject <Unit>();

            using (var files = new TestFileCollection())
            {
                for (int i = 0; i < 10; i++)
                {
                    files.Add(new TestFile());
                    files[i].Append(Enumerable.Range(1, 10).Select(j => $"{i}. files {j}. row").ToArray());
                }


                FileSearchResult fileSearchResult = null;
                var search = files.Select(t => t.Info.WatchFile(pulse))
                             .Merge()
                             .Search(str => int.Parse(str.Split('.')[0]) % 2 != 0);

                using (search.Subscribe(x => fileSearchResult = x))
                {
                    pulse.Once();
                    var lines         = fileSearchResult.ReadLines(new ScrollRequest(20, 30)).Select(line => line.Text);
                    var expectedLines = Enumerable.Range(7, 3).Select(i =>
                    {
                        return(i % 2 != 0 ? Enumerable.Range(1, 10).Select(j => $"{i}. files {j}. row") : null);
                    })
                                        .Where(t => t != null)
                                        .SelectMany(t => t).ToArray();

                    lines.ShouldAllBeEquivalentTo(expectedLines);
                }
            }
        }
Esempio n. 2
0
        public void CanReadLinesBack()
        {
            var scheduler = new TestScheduler();
            var pulse     = new Subject <Unit>();

            using (var file = new TestFile())
            {
                FileSearchResult fileSearchResult = null;
                file.Append(Enumerable.Range(1, 100).Select(i => i.ToString()).ToArray());

                using (file.Info.WatchFile(pulse)
                       .Search(str => str.Contains("9"), scheduler)
                       .Subscribe(x => fileSearchResult = x))
                {
                    pulse.Once();
                    fileSearchResult.Matches.Length.Should().Be(19);

                    file.Append(new[] { "9", "20" });
                    pulse.Once();
                    fileSearchResult.Matches.Length.Should().Be(20);

                    file.Append(new[] { "9999" });
                    pulse.Once();
                    fileSearchResult.Matches.Length.Should().Be(21);
                }
            }
        }
Esempio n. 3
0
        public void SearchInTenTailedFiles()
        {
            var pulse = new Subject <Unit>();

            using (var files = new TestFileCollection())
            {
                for (int i = 0; i < 10; i++)
                {
                    files.Add(new TestFile());
                    files[i].Append(Enumerable.Range(1, 100).Select(j => $"{(i + 1)}. files {j} row").ToArray());
                }
                FileSearchResult fileSearchResult = null;
                var search = files.Select(t => t.Info.WatchFile(pulse))
                             .Merge()
                             .Search(str => str.Contains("files 9 row"));

                using (search.Subscribe(x => fileSearchResult = x))
                {
                    pulse.Once();
                    int matches = 0;
                    while (fileSearchResult != null)
                    {
                        matches         += fileSearchResult.Count;
                        fileSearchResult = fileSearchResult.Previous as FileSearchResult;
                    }
                    matches.Should().Be(10);
                }
            }
        }
Esempio n. 4
0
        public void SearchOnDataWhenTailedFilesArePopulated()
        {
            var pulse = new Subject <Unit>();

            using (var files = new TestFileCollection())
            {
                for (int i = 0; i < 10; i++)
                {
                    files.Add(new TestFile());
                }
                FileSearchResult fileSearchResult = null;
                var search = files.Select(t => t.Info.WatchFile(pulse))
                             .Merge()
                             .Search(str => str.Contains("9"));

                using (search.Subscribe(x => fileSearchResult = x))
                {
                    for (int i = 0; i < 10; i++)
                    {
                        files[i].Append(Enumerable.Range(1, 100).Select(j => j.ToString()).ToArray());
                    }
                    pulse.Once();
                    pulse.Once();
                    while (fileSearchResult != null)
                    {
                        fileSearchResult.Matches.Length.Should().NotBe(0);
                        fileSearchResult = fileSearchResult.Previous as FileSearchResult;
                    }
                }
            }
        }
        public void SearchFiles(string searchTerm, string peerID)
        {
            if (ClientHostDetails.Any()) // Removed in Tutorial //
            {
                // var info = ClientHostDetails.First(p => p.ID == peerID);
                var result = (from file in AvailableFileMetaData
                              where searchTerm == file.FileName ||
                              file.FileName.Contains(searchTerm) ||
                              file.FileName.IndexOf(searchTerm, StringComparison.CurrentCulture) > 0
                              select file);

                if (result.Any())
                {
                    FileSearchResultModel searchResult = new FileSearchResultModel
                    {
                        PeerID = peerID,
                        Files  = (ObservableCollection <FileMetaData>)result
                    };

                    FileSearchResult?.Invoke(searchResult);
                }

                /*if (info != null)
                 * {
                 *  if (result.Any())
                 *  {
                 *      FileSearchResultModel search = new FileSearchResultModel
                 *      {
                 *          ServiceHost = FileServiceHost,
                 *          Files = (ObservableCollection<FileMetaData>)result
                 *      };
                 *  }
                 * }*/
            }
        }
Esempio n. 6
0
        private FileSearchResult handleFileSearch(UriHandlerData data)
        {
            var filename = data.Queries.GetString("fs_from");
            var sm       = data.Queries.GetBoolean("fs_similar");
            var cv       = data.Queries.GetBoolean("fs_covers");
            var exp      = data.Queries.GetBoolean("fs_exp");
            var hashes   = (data.Queries.GetString("f_shash") ?? "")
                           .Split(",; ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                           .Where(str => str.All(ch => ('0' <= ch && ch <= '9') || ('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F')))
                           .Select(SHA1Value.Parse);
            var otherdata = handleSearch(data);

            return(FileSearchResult.Search(otherdata.Keyword, otherdata.Category, hashes, filename, sm, cv, exp));
        }
Esempio n. 7
0
        public void NotExistingFile()
        {
            var pulse = new Subject <Unit>();

            using (var file = new TestFile())
            {
                file.Delete();

                FileSearchResult fileSearchResult = null;

                using (file.Info.WatchFile(pulse)
                       .Search(str => str.Contains("9"))
                       .Subscribe(x => fileSearchResult = x))
                {
                    fileSearchResult.Should().BeNull();
                }
            }
        }
Esempio n. 8
0
        public void InitiallyEmptyThenLinesAdded()
        {
            var scheduler = new TestScheduler();

            using (var file = new TestFile())
            {
                FileSearchResult fileSearchResult = null;

                using (file.Info.WatchFile(scheduler: scheduler)
                       .Search(str => str.Contains("9"))
                       .Subscribe(x => fileSearchResult = x))
                {
                    scheduler.AdvanceBy(1);
                    file.Append(Enumerable.Range(1, 100).Select(i => i.ToString()).ToArray());
                    scheduler.AdvanceByMilliSeconds(250);
                    fileSearchResult.Matches.Length.Should().Be(19);
                }
            }
        }
Esempio n. 9
0
        public void SearchOnDataWhenFileIsPopulated()
        {
            var pulse = new Subject <Unit>();

            using (var file = new TestFile())
            {
                FileSearchResult fileSearchResult = null;


                using (file.Info.WatchFile(pulse)
                       .Search(str => str.Contains("9"))
                       .Subscribe(x => fileSearchResult = x))
                {
                    file.Append(Enumerable.Range(1, 100).Select(i => i.ToString()).ToArray());
                    pulse.Once();
                    pulse.Once();
                    fileSearchResult.Matches.Length.Should().NotBe(0);
                }
            }
        }
Esempio n. 10
0
        public void SearchInTailedFilesAndAfterAppendOneLineIntoOneFileAndSrollBegins()
        {
            var pulse = new Subject <Unit>();

            using (var files = new TestFileCollection())
            {
                for (int i = 0; i < 10; i++)
                {
                    files.Add(new TestFile());
                    files[i].Append(Enumerable.Range(1, 10).Select(j => $"{i}. files {j}. row").ToArray());
                }


                FileSearchResult fileSearchResult = null;
                var search = files.Select(t => t.Info.WatchFile(pulse))
                             .Merge()
                             .Search(str => int.Parse(str.Split('.')[0]) % 2 != 0);

                using (search.Subscribe(x => fileSearchResult = x))
                {
                    pulse.Once();
                    files[0].Append("1. file added new row");
                    pulse.Once();
                    while (fileSearchResult?.Next != null)
                    {
                        fileSearchResult = fileSearchResult?.Next as FileSearchResult;
                    }
                    var lines         = fileSearchResult.ReadLines(new ScrollRequest(20, 0)).Select(line => line.Text);
                    var expectedLines = Enumerable.Range(1, 3).Select(i =>
                    {
                        return(i % 2 != 0 ? Enumerable.Range(1, 10).Select(j => $"{i}. files {j}. row") : null);
                    })
                                        .Where(t => t != null)
                                        .SelectMany(t => t).ToList();
                    expectedLines.RemoveAt(expectedLines.Count - 1);
                    expectedLines =
                        new[] { new[] { "1. file added new row" }, expectedLines.ToArray() }.SelectMany(t => t).ToList();
                    lines.ShouldAllBeEquivalentTo(expectedLines.ToArray());
                }
            }
        }
Esempio n. 11
0
        //[Fact]
        //Cannot recreate the file as something is hanging on to it.
        public void CreateFileLater()
        {
            var pulse = new Subject <Unit>();

            using (var file = new TestFile())
            {
                file.Delete();

                FileSearchResult fileSearchResult = null;

                using (file.Info.WatchFile(pulse)
                       .Search(str => str.Contains("9"))
                       .Subscribe(x => fileSearchResult = x))
                {
                    fileSearchResult.Should().Be(FileSearchResult.None);
                    file.Create();
                    pulse.Once();
                    fileSearchResult.Should().NotBe(FileSearchResult.None);
                }
            }
        }
Esempio n. 12
0
        public void EmptyTailedFiles()
        {
            var pulse     = new Subject <Unit>();
            var scheduler = new TestScheduler();

            using (var files = new TestFileCollection())
            {
                for (int i = 0; i < 10; i++)
                {
                    files.Add(new TestFile());
                }
                FileSearchResult fileSearchResult = null;
                var search = files.Select(t => t.Info.WatchFile(pulse))
                             .Merge()
                             .Search(str => str.Contains("9"), scheduler);

                using (search.Subscribe(x => fileSearchResult = x))
                {
                    scheduler.AdvanceByMilliSeconds(250);
                    pulse.Once();
                    var segments          = 0;
                    var segmentsCompleted = 0;
                    var isSearchCompleted = true;
                    var count             = 0;
                    while (fileSearchResult != null)
                    {
                        segments          += fileSearchResult.Segments;
                        segmentsCompleted += fileSearchResult.SegmentsCompleted;
                        isSearchCompleted  = isSearchCompleted && fileSearchResult.IsSearching;
                        count             += fileSearchResult.Count;
                        fileSearchResult   = fileSearchResult.Previous as FileSearchResult;
                    }

                    segments.Should().Be(10);
                    segmentsCompleted.Should().Be(0);
                    isSearchCompleted.Should().Be(false);
                    count.Should().Be(0);
                }
            }
        }
Esempio n. 13
0
        public void WillContinuallyTailInTailedFilesWithTwoFileModified()
        {
            var pulse = new Subject <Unit>();

            using (var files = new TestFileCollection())
            {
                for (int i = 0; i < 10; i++)
                {
                    files.Add(new TestFile());
                    files[i].Append(Enumerable.Range(1, 100).Select(j => $"{(i + 1)}. files {j} row").ToArray());
                }
                FileSearchResult fileSearchResult = null;
                var search = files.Select(t => t.Info.WatchFile(pulse))
                             .Merge()
                             .Search(str => str.Contains("files 9 row"));

                using (search.Subscribe(x => fileSearchResult = x))
                {
                    pulse.Once();

                    files[7].Append("8. files 9 row");
                    files[9].Append("10. files 9 row");

                    pulse.Once();

                    int matches           = 0;
                    var _fileSearchResult = fileSearchResult;
                    while (_fileSearchResult?.Next != null)
                    {
                        _fileSearchResult = _fileSearchResult.Next as FileSearchResult;
                    }
                    while (_fileSearchResult != null)
                    {
                        matches          += _fileSearchResult.Count;
                        _fileSearchResult = _fileSearchResult.Previous as FileSearchResult;
                    }
                    matches.Should().Be(12);
                }
            }
        }
Esempio n. 14
0
        public void EmptyFile()
        {
            var pulse     = new Subject <Unit>();
            var scheduler = new TestScheduler();

            using (var file = new TestFile())
            {
                FileSearchResult fileSearchResult = null;

                using (file.Info
                       .Search(str => str.Contains("9"), scheduler)
                       .Subscribe(x => fileSearchResult = x))
                {
                    scheduler.AdvanceByMilliSeconds(250);
                    pulse.Once();
                    fileSearchResult.Segments.Should().Be(1);
                    fileSearchResult.SegmentsCompleted.Should().Be(0);
                    fileSearchResult.IsSearching.Should().Be(false);
                    fileSearchResult.Count.Should().Be(0);
                }
            }
        }
Esempio n. 15
0
        public void Search(string searchPathEntry, FileSearchInfo searchInfo, FileSearchResult result)
        {
            if (searchPathEntry == FileLocator.FirstSearchEntry || searchPathEntry == FileLocator.LastSearchEntry)
                return;
            if (searchInfo.SearchKind == FileSearchInfo.FileSearchKind.Source)
                return;

            // don't search for ngen images on the symbol server, we won't find them
            if (searchInfo.Path.EndsWith(".ni.dll", StringComparison.OrdinalIgnoreCase))
                return;

            string fileName = Path.GetFileName(searchInfo.Path);
            string indexString = ComputeIndexString(searchInfo);

            SymStore store;
            if(searchPathEntry.StartsWith("srv*"))
                store = SymStore.FromPath(searchPathEntry);
            else
                store = SymStore.FromPath(@"srv**" + searchPathEntry);
            string filePath;
            if (store.TryGetFile(fileName, indexString, out filePath))
                result.CreateEntry(filePath);
        }
Esempio n. 16
0
        private FileSearchResult handleFileSearch(UriHandlerData data)
        {
            var fn     = default(string);
            var sm     = false;
            var cv     = false;
            var exp    = false;
            var hashes = default(IEnumerable <SHA1Value>);

            foreach (var item in data.Queries)
            {
                switch (item.Key)
                {
                case "f_shash":
                    hashes = item.Value.Split(",;".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(SHA1Value.Parse);
                    break;

                case "fs_from":
                    fn = item.Value;
                    break;

                case "fs_similar":
                    sm = item.Value.QueryValueAsBoolean();
                    break;

                case "fs_covers":
                    cv = item.Value.QueryValueAsBoolean();
                    break;

                case "fs_exp":
                    exp = item.Value.QueryValueAsBoolean();
                    break;
                }
            }
            var otherdata = handleSearch(data);

            return(FileSearchResult.Search(otherdata.Keyword, otherdata.Category, hashes, fn, sm, cv, exp));
        }
Esempio n. 17
0
        public void Search(string searchPathEntry, FileSearchInfo searchInfo, FileSearchResult result)
        {
            if (searchPathEntry == FileLocator.FirstSearchEntry || searchPathEntry == FileLocator.LastSearchEntry)
            {
                return;
            }
            if (searchInfo.SearchKind == FileSearchInfo.FileSearchKind.Source)
            {
                return;
            }

            // don't search for ngen images on the symbol server, we won't find them
            if (searchInfo.Path.EndsWith(".ni.dll", StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            string fileName    = Path.GetFileName(searchInfo.Path);
            string indexString = ComputeIndexString(searchInfo);

            SymStore store;

            if (searchPathEntry.StartsWith("srv*"))
            {
                store = SymStore.FromPath(searchPathEntry);
            }
            else
            {
                store = SymStore.FromPath(@"srv**" + searchPathEntry);
            }
            string filePath;

            if (store.TryGetFile(fileName, indexString, out filePath))
            {
                result.CreateEntry(filePath);
            }
        }
Esempio n. 18
0
        public void NotExistingTailedFiles()
        {
            var pulse = new Subject <Unit>();

            using (var files = new TestFileCollection())
            {
                for (int i = 0; i < 10; i++)
                {
                    files.Add(new TestFile());
                }
                files.Dispose();

                FileSearchResult fileSearchResult = null;
                var search = files.Select(t => t.Info.WatchFile(pulse))
                             .Merge()
                             .Search(str => str.Contains("9"));

                using (search.Subscribe(x => fileSearchResult = x))
                {
                    pulse.Once();
                    fileSearchResult.Should().BeNull();
                }
            }
        }
 public FixedSearchResult(FileSearchResult fileSearchResult)
 {
     FileNames    = new HashSet <string>(fileSearchResult.FileNames);
     SyntaxErrors = fileSearchResult.SyntaxErrors;
 }
Esempio n. 20
0
 private void FileFound(FileSearchResult fr)
 {
     lvwResults.Items.Add(fr);
 }
Esempio n. 21
0
 private static bool FileTest(FileSearchResult fsr)
 {
     return(true);
 }
Esempio n. 22
0
 static void FileFound(FileSearchResult founddata)
 {
     Console.WriteLine("Found:" + founddata.FullPath);
     Console.WriteLine("Created:" + founddata.DateCreated.ToString());
 }
Esempio n. 23
0
 public IAsyncOperationWithProgress <FileSearchResult, HttpProgress> SearchAsync(string keyword, Category category, StorageFile file, bool searchSimilar, bool onlyCovers, bool searchExpunged)
 {
     return(FileSearchResult.SearchAsync(keyword, category, file, searchSimilar, onlyCovers, searchExpunged));
 }
Esempio n. 24
0
 public IAsyncOperationWithProgress <FileSearchResult, HttpProgress> SearchAsync(StorageFile file, bool searchSimilar, bool onlyCovers, bool searchExpunged)
 {
     return(FileSearchResult.SearchAsync(null, default, file, searchSimilar, onlyCovers, searchExpunged));
Esempio n. 25
0
 public FileSearchResult Search(string keyword, Category category, IEnumerable <SHA1Value> fileHashes, string fileName, bool onlyCovers, bool searchExpunged)
 => FileSearchResult.Search(keyword, category, fileHashes, fileName, false, onlyCovers, searchExpunged);