コード例 #1
0
        private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            SearchArg         searchArg         = webBrowser.Tag as SearchArg;
            SearchProgressArg searchProgressArg = webBrowser.Tag as SearchProgressArg;

            if (searchArg != null)
            {
                WebBrowser_PreloadDocumentCompleted(sender, e);
            }
            else if (searchProgressArg != null)
            {
                WebBrowser_LibraryDocumentCompleted(sender, e);
            }
        }
コード例 #2
0
        private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                MessageBox.Show(e.Error.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            if (!e.Cancelled)
            {
                LibraryLoadCompletedArg completedArg      = e.Result as LibraryLoadCompletedArg;
                SearchProgressArg       searchProgressArg = new SearchProgressArg(completedArg.RunArg.SearchArg, completedArg.SearchResult, completedArg.RunArg.SearchArg.PageIndex, MetadataKeywordLists, completedArg.RunArg.SortType, completedArg.RunArg.SortOrder);

                //searchResult = completedArg.SearchResult;

                webBrowser.Tag          = searchProgressArg;
                webBrowser.DocumentText = LibraryCovergridTemplate.GetFormattedText(searchProgressArg);
            }
        }
コード例 #3
0
        private void ListBackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            SearchErrorArg errorArg = e.UserState as SearchErrorArg;

            if (errorArg != null)
            {
                if (!string.IsNullOrEmpty(WebBrowser.DocumentText))
                {
                    WebBrowser.Document?.InvokeScript("__onSearchError", errorArg.ToObjectArray());
                }

                return;
            }

            SearchProgressArg searchProgressArg = e.UserState as SearchProgressArg;

            if (searchProgressArg != null)
            {
                SearchResult searchResult = searchProgressArg.SearchResult;

                if (searchResult == null)
                {
                    MessageBox.Show("Couldn't get search results for page " + (searchProgressArg.PageIndex + 1) + "!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                // TODO: should this be done in DoWork instead?

                for (int i = 0; i < searchResult.Result.Count; ++i)
                {
                    Metadata metadata = searchResult.Result[i];
                    string   cachedMetadataPath;

                    if (PathFormatter.IsEnabled)
                    {
                        cachedMetadataPath = PathFormatter.GetMetadata(metadata.Id);
                    }
                    else
                    {
                        cachedMetadataPath = string.Format(CultureInfo.InvariantCulture, "{0}{1}{2}", PathFormatter.GetCacheDirectory(), metadata.Id.ToString(CultureInfo.InvariantCulture), ".json");
                    }

                    if (!File.Exists(cachedMetadataPath))
                    {
                        try
                        {
                            Directory.CreateDirectory(Path.GetDirectoryName(cachedMetadataPath));
                            File.WriteAllText(cachedMetadataPath, JsonConvert.SerializeObject(metadata, Formatting.Indented));
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }

                    // TODO: the progress should be multiple searchresult, not individual metadata in the first searchresult.

                    if (!string.IsNullOrEmpty(WebBrowser.DocumentText))
                    {
                        // TODO: invoke an event instead of directly invoking a script function.

                        WebBrowser.Document?.InvokeScript("__onSearchResultLoaded", new object[]
                        {
                            searchProgressArg.SearchArg.PageIndex,
                            searchProgressArg.SearchArg.TagId,
                            searchProgressArg.SearchArg.Query ?? "",
                            searchProgressArg.SearchArg.Target.ToString().ToLowerInvariant(),
                            e.ProgressPercentage,
                            i + 1,
                            searchResult.Result.Count,
                            JsonConvert.SerializeObject(metadata)
                        });
                    }
                }

                if (searchProgressArg.PageIndex == searchProgressArg.SearchArg.PageIndex)
                {
                    if (searchResult.Result != null &&
                        searchProgressArg.SortType != GallerySortType.None)
                    {
                        SearchResult customSearchResult = new SearchResult();

                        customSearchResult.NumPages = searchProgressArg.SearchResult.NumPages;
                        customSearchResult.PerPage  = searchProgressArg.SearchResult.PerPage;

                        /*
                         * IEnumerable<Metadata> customResult;
                         *
                         * customResult = searchProgressArg.SearchResult.Result.GetFilteredSearchResult(searchProgressArg.MetadataKeywordLists);
                         * customResult = customResult.GetSortedSearchResult(searchProgressArg.SortType, searchProgressArg.SortOrder);
                         */
                        IEnumerable <Metadata> customResult = searchProgressArg.SearchResult.Result.GetSortedSearchResult(searchProgressArg.SortType, searchProgressArg.SortOrder);

                        customSearchResult.Result = customResult.ToList();

                        SearchProgressArg customSearchProgressArg = new SearchProgressArg(searchProgressArg.SearchArg, customSearchResult, searchProgressArg.PageIndex, searchProgressArg.MetadataKeywordLists, searchProgressArg.SortType, searchProgressArg.SortOrder);

                        GalleryModel.SearchProgressArg = customSearchProgressArg;
                    }
                    else
                    {
                        GalleryModel.SearchProgressArg = searchProgressArg;
                    }
                }

                //
                // TODO notify javascript to add one page of items
                //
                //galleryBrowserView.WebBrowser.Document.InvokeScript("__onProgressChanged", new object[] { searchProgressArg.PageIndex, JsonConvert.SerializeObject(searchProgressArg.SearchResult) });
            }
        }
コード例 #4
0
        private static void ListBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker backgroundWorker = sender as BackgroundWorker;
            SearchDoArg      searchDoArg      = e.Argument as SearchDoArg;

            if (searchDoArg == null)
            {
                return;
            }

            SearchArg         searchArg         = searchDoArg.SearchArg;
            SearchProgressArg searchProgressArg = null;
            int          currentPage            = searchArg.PageIndex;
            SearchResult searchResult           = null;

            /*
             * bool loadAll = false;   // TODO: read this from settings.Download.LoadAll
             *
             * do
             * {
             */
            try
            {
                if (searchArg.Target == SearchTarget.Query)
                {
                    searchResult = searchDoArg.SearchHandler.Search(searchArg.Query, currentPage);
                }
                else if (searchArg.Target == SearchTarget.Tagged)
                {
                    searchResult = searchDoArg.SearchHandler.TaggedSearch(searchArg.TagId, currentPage);
                }
                else if (searchArg.Target == SearchTarget.Recent)
                {
                    searchResult = searchDoArg.SearchHandler.RecentSearch(currentPage);
                }

                if (searchResult == null)
                {
                    e.Cancel = true;
                    return;
                }

                searchDoArg.TagsModel.CollectTags(searchResult);

                searchProgressArg = new SearchProgressArg(searchArg, searchResult, currentPage, searchDoArg.MetadataKeywordLists, searchDoArg.SortType, searchDoArg.SortOrder);

                backgroundWorker.ReportProgress(searchResult.NumPages > 0 ? (int)(currentPage / (float)searchResult.NumPages * 100) : 100, searchProgressArg);
            }
            catch (Exception ex)
            {
                SearchErrorArg errorArg = new SearchErrorArg(searchArg, currentPage, (ex.InnerException != null) ? string.Format(CultureInfo.InvariantCulture, "{0}{1}{2}", ex.Message, Environment.NewLine, ex.InnerException.Message) : ex.Message);

                backgroundWorker.ReportProgress(0, errorArg);
            }

            /*
             * } while (loadAll
             *      && searchResult != null
             *      && ++currentPage < searchResult.NumPages);
             */

            if (searchResult != null &&
                searchResult.Result != null)
            {
                /*if (searchDoArg.SortType != GallerySortType.None)
                 * {
                 *      searchResult = OrderByMetadata(searchResult, searchDoArg.SortType, searchDoArg.SortOrder);
                 * }*/

                e.Result = new SearchResultArg(searchArg, searchResult);
            }
        }
コード例 #5
0
        private void GalleryWebBrowser_SearchDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            SearchProgressArg searchProgressArg = webBrowser.Tag as SearchProgressArg;

            CoverDownloader.Download(searchProgressArg.SearchResult, CoverDownloaderFilters.All);
        }
コード例 #6
0
        private void WebBrowser_LibraryDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            SearchProgressArg searchProgressArg = webBrowser.Tag as SearchProgressArg;

            LibraryModel.SearchProgressArg = searchProgressArg;
        }