Beispiel #1
0
        private async void AppendAsync(string content)
        {
            if (content.Trim().StartsWith("http://") || content.Trim().StartsWith("https://"))
            {
                DownloaderHelper.ProcessOthers(content.Trim());
                return;
            }

            try
            {
                List <HitomiMetadata> result;

                int start_element = 0;
                int count_element = 0;

                if (content.Contains('/'))
                {
                    var elem = content.Split(' ').Where(x => x.StartsWith("/")).ElementAt(0);
                    start_element = Convert.ToInt32(elem.Substring(1));
                    content       = content.Replace(elem, " ");
                }

                if (content.Contains('?'))
                {
                    var elem = content.Split(' ').Where(x => x.StartsWith("?")).ElementAt(0);
                    count_element = Convert.ToInt32(elem.Substring(1));
                    content       = content.Replace(elem, " ");
                }

                if (!Settings.Instance.Hitomi.UsingAdvancedSearch || content.Contains("recent:"))
                {
                    result = await HitomiDataParser.SearchAsync(content.Trim());

                    if (content.Contains("recent:"))
                    {
                        var elem         = content.Split(' ').Where(x => x.StartsWith("recent:")).ElementAt(0);
                        int recent_count = 0;
                        int recent_start = 0;
                        if (elem.Substring("recent:".Length).Contains("-"))
                        {
                            recent_start = Convert.ToInt32(elem.Substring("recent:".Length).Split('-')[0]);
                            recent_count = Convert.ToInt32(elem.Substring("recent:".Length).Split('-')[1]);
                        }
                        else
                        {
                            recent_count = Convert.ToInt32(elem.Substring("recent:".Length));
                        }
                        SearchText.Text = "recent:" + (recent_start + recent_count) + "-" + recent_count;
                    }
                }
                else
                {
                    result = await HitomiDataSearchAdvanced.Search(content.Trim());
                }

                if (start_element != 0 && start_element <= result.Count)
                {
                    result.RemoveRange(0, start_element);
                }
                if (count_element != 0 && count_element < result.Count)
                {
                    result.RemoveRange(count_element, result.Count - count_element);
                }

                SearchCount.Text = $"검색된 항목: {result.Count.ToString("#,#")}개";
                _ = Task.Run(() => LoadThumbnail(result));
            }
            catch
            {
                SearchCount.Text = "검색 문법이 잘못되었습니다.";
            }
        }
Beispiel #2
0
        private async void AppendAsync(string content)
        {
            if (content.Trim().StartsWith("http://") || content.Trim().StartsWith("https://"))
            {
                DownloaderHelper.ProcessOthers(content.Trim());
                return;
            }

            try
            {
                List <HitomiIndexMetadata> result;

                int start_element = 0;
                int count_element = 0;

                if (content.Split(' ').Any(x => x.StartsWith("/")))
                {
                    var elem = content.Split(' ').Where(x => x.StartsWith("/")).ElementAt(0);
                    start_element = Convert.ToInt32(elem.Substring(1));
                    content       = content.Replace(elem, " ");
                }

                if (content.Split(' ').Any(x => x.StartsWith("?")))
                {
                    var elem = content.Split(' ').Where(x => x.StartsWith("?")).ElementAt(0);
                    count_element = Convert.ToInt32(elem.Substring(1));
                    content       = content.Replace(elem, " ");
                }

                if (!Settings.Instance.Hitomi.UsingAdvancedSearch || content.Contains("recent:"))
                {
                    result = await HitomiDataParser.SearchAsync(content.Trim());

                    if (content.Contains("recent:"))
                    {
                        var elem         = content.Split(' ').Where(x => x.StartsWith("recent:")).ElementAt(0);
                        int recent_count = 0;
                        int recent_start = 0;
                        if (elem.Substring("recent:".Length).Contains("-"))
                        {
                            recent_start = Convert.ToInt32(elem.Substring("recent:".Length).Split('-')[0]);
                            recent_count = Convert.ToInt32(elem.Substring("recent:".Length).Split('-')[1]);
                        }
                        else
                        {
                            recent_count = Convert.ToInt32(elem.Substring("recent:".Length));
                        }
                        SearchText.Text = "recent:" + (recent_start + recent_count) + "-" + recent_count;
                    }
                }
                else
                {
                    result = await HitomiDataSearchAdvanced.Search(content.Trim());
                }

                if (start_element != 0 && start_element <= result.Count)
                {
                    result.RemoveRange(0, start_element);
                }
                if (count_element != 0 && count_element < result.Count)
                {
                    result.RemoveRange(count_element, result.Count - count_element);
                }

                SearchCount.Text     = $"{FindResource("searched")}: {(result.Count != 0 ? result.Count.ToString("#,#") : "0")}{(FindResource("count_postfix"))}";
                SearchButton.Content = $"{FindResource("stop")}";
                _ = Task.Run(() => LoadThumbnail(result));
            }
            catch
            {
                SearchCount.Text = (string)FindResource("msg_incorret_search_grammar");
            }
        }
        public async void SearchAsync(string content)
        {
            try
            {
                List <HitomiMetadata> result;
                Stopwatch             sw = Stopwatch.StartNew();
                var end = sw.ElapsedMilliseconds;

                int start_element = 0;
                int count_element = 0;

                if (content.Contains('/'))
                {
                    var elem = content.Split(' ').Where(x => x.StartsWith("/")).ElementAt(0);
                    start_element = Convert.ToInt32(elem.Substring(1));
                    content       = content.Replace(elem, " ");
                }

                if (content.Contains('?'))
                {
                    var elem = content.Split(' ').Where(x => x.StartsWith("?")).ElementAt(0);
                    count_element = Convert.ToInt32(elem.Substring(1));
                    content       = content.Replace(elem, " ");
                }

                if (!Settings.Instance.Hitomi.UsingAdvancedSearch || content.Contains("recent:"))
                {
                    result = await HitomiDataParser.SearchAsync(content.Trim());

                    end = sw.ElapsedMilliseconds - end;
                    sw.Stop();
                    if (content.Contains("recent:"))
                    {
                        var elem         = content.Split(' ').Where(x => x.StartsWith("recent:")).ElementAt(0);
                        int recent_count = 0;
                        int recent_start = 0;
                        if (elem.Substring("recent:".Length).Contains("-"))
                        {
                            recent_start = Convert.ToInt32(elem.Substring("recent:".Length).Split('-')[0]);
                            recent_count = Convert.ToInt32(elem.Substring("recent:".Length).Split('-')[1]);
                        }
                        else
                        {
                            recent_count = Convert.ToInt32(elem.Substring("recent:".Length));
                        }
                        SearchText.Text = "recent:" + (recent_start + recent_count) + "-" + recent_count;
                    }
                }
                else
                {
                    result = await HitomiDataSearchAdvanced.Search(content.Trim());

                    end = sw.ElapsedMilliseconds - end;
                    sw.Stop();
                }

                if (start_element != 0 && start_element <= result.Count)
                {
                    result.RemoveRange(0, start_element);
                }
                if (count_element != 0 && count_element < result.Count)
                {
                    result.RemoveRange(count_element, result.Count - count_element);
                }

                var vm = DataContext as Domain.FinderDataGridViewModel;
                result.Sort((a, b) => b.ID.CompareTo(a.ID));
                vm.Items.Clear();
                foreach (var article in result)
                {
                    vm.Items.Add(new Domain.FinderDataGridItemViewModel
                    {
                        아이디    = article.ID.ToString(),
                        제목     = article.Name,
                        타입     = article.Type,
                        작가     = string.Join(",", article.Artists ?? Enumerable.Empty <string>()),
                        그룹     = string.Join(",", article.Groups ?? Enumerable.Empty <string>()),
                        시리즈    = string.Join(",", article.Parodies ?? Enumerable.Empty <string>()),
                        캐릭터    = string.Join(",", article.Characters ?? Enumerable.Empty <string>()),
                        업로드_시간 = HitomiDate.estimate_datetime(article.ID).ToString(),
                        태그     = string.Join(",", article.Tags ?? Enumerable.Empty <string>()),
                        다운     = HitomiLog.Instance.Contains(article.ID.ToString()) ? "★" : ""
                    });
                }

                ResultText.Text = $"{result.Count.ToString("#,#")}개 ({end / 1000.0} 초)";
            }
            catch
            {
            }
        }