Пример #1
0
        public async Task <bool> UpdateFiles()
        {
            QueryResults = null;
            HitItems.Clear();
            FileItems.Clear();
            if (Group != null)
            {
                var api     = IndexApiClient.Create(cts.Token);
                var results = await api.GetFiles(Group);

                if (results is FileInfo[] entries)
                {
                    foreach (var entry in entries.OrderBy(x => x.Path.ToUpperInvariant()))
                    {
                        FileItems.Add(new FileItem(entry.Fid, entry.Path, entry.Size, !Unchecked.Contains(entry.Fid)));
                    }
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(true);
            }
        }
Пример #2
0
        public async Task <string> Execute()
        {
            try
            {
                QueryResults = null;
                HitItems.Clear();
                Fid  = -1;
                Path = " ";
                NotifyOfChange("Path");
                Contents.Clear();
                var svc = new IndexService(cts.Token);
                QueryResults = await svc.FindTextAsync(Group, QueryText);

                ProcessQueryResults();
                return(null);
            }
            catch (TaskCanceledException)
            {
                return(string.Empty);
            }
            catch (AggregateException e) when(e.InnerExceptions[0] is TaskCanceledException)
            {
                return(string.Empty);
            }
            catch (AggregateException e)
            {
                var sb = new StringBuilder();
                foreach (var x in e.InnerExceptions)
                {
                    if (sb.Length > 0)
                    {
                        sb.AppendLine();
                    }
                    sb.Append(x.Message);
                    Exception y = x;
                    while ((y = y.InnerException) != null)
                    {
                        sb.AppendLine();
                        sb.Append(y.Message);
#if DEBUG
                        sb.AppendFormat(" {0}", y.GetType().FullName);
                        if (y is System.Net.Sockets.SocketException s)
                        {
                            sb.AppendFormat(" SocketErrorCode={0}", s.SocketErrorCode.ToString());
                        }
#endif
                    }
                }
                return(sb.ToString());
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }
Пример #3
0
        private async void ProcessQueryResults()
        {
            var m = new List <(HitFile Hit, FileContents Contents)>();

            foreach (var hit in QueryResults)
            {
                var f = FileItems.Where(x => x.Fid == hit.Fid).FirstOrDefault();
                if (f != null && f.Check)
                {
                    var contents = await DownloadFile(hit.Fid);

                    m.Add((hit, contents));
                }
            }
            m.Sort((a, b) =>
            {
                return(a.Contents.Path.ToUpperInvariant().CompareTo(b.Contents.Path.ToUpperInvariant()));
            });
            var d = new Dictionary <int, int>();

            foreach (var(hit, contents) in m)
            {
                foreach (var entry in hit.Rows)
                {
                    var item = new HitItem(contents.Fid, contents.Path, entry.Row + 1, contents.Lines[entry.Row], entry.Matches.Select(x => (x.StartCol, x.EndCol)).ToList());
                    HitItems.Add(item);
                    if (d.TryGetValue(item.Fid, out var hitRows))
                    {
                        d[item.Fid] = hitRows + 1;
                    }
                    else
                    {
                        d.Add(item.Fid, 1);
                    }
                }
            }
            foreach (var f in FileItems)
            {
                if (d.TryGetValue(f.Fid, out var hitRows))
                {
                    f.HitRows = hitRows;
                }
                else
                {
                    f.HitRows = 0;
                }
            }
        }
Пример #4
0
 public void Clear()
 {
     QueryText = string.Empty;
     NotifyOfChange("QueryText");
     QueryResults = null;
     HitItems.Clear();
     Fid  = -1;
     Path = " ";
     NotifyOfChange("Path");
     Contents.Clear();
     foreach (var f in FileItems)
     {
         f.HitRows = 0;
     }
     NotifyOfChange("FileItems");
 }
Пример #5
0
 public void OnFileCheckChanged()
 {
     foreach (var f in FileItems)
     {
         if (f.Check)
         {
             if (Unchecked.Contains(f.Fid))
             {
                 Unchecked.Remove(f.Fid);
             }
         }
         else if (!Unchecked.Contains(f.Fid))
         {
             Unchecked.Add(f.Fid);
         }
     }
     if (QueryResults == null || QueryResults.Count == 0)
     {
         return;
     }
     HitItems.Clear();
     ProcessQueryResults();
 }