Example #1
0
        private void PreloadMangas()
        {
            var preloadables = _scrapers.OfType <IPreload>();

            // if there are no preloadables skip the execution
            if (!preloadables.Any())
            {
                return;
            }

            if (!OperationInProgress)
            {
                CurrentActionText   = "Preloading manga directories ...";
                OperationInProgress = true;
            }

            AsyncWrapper.Call <object>(() =>
            {
                System.Threading.Tasks.Parallel.ForEach(preloadables, (x) => x.PreloadDirectory());
                return(null);
            },
                                       (x, y) =>
            {
                // don't care about errors...
                OperationInProgress = false;
                CurrentActionText   = "";
            }
                                       );
        }
Example #2
0
        /// <summary>
        /// Gets the request stream
        /// </summary>
        /// <returns>The request stream</returns>
        /// <param name="contentlength">The content length to use</param>
        public Stream GetRequestStream(long contentlength = -1)
        {
            // Prevent in-memory buffering causing out-of-memory issues
            if (this.m_request is HttpWebRequest request)
            {
                if (contentlength >= 0)
                {
                    request.ContentLength = contentlength;
                }
                if (request.ContentLength >= 0)
                {
                    request.AllowWriteStreamBuffering = false;
                }
            }

            if (m_state == RequestStates.GetRequest)
            {
                return((Stream)m_asyncRequest.GetResponseOrStream());
            }

            if (m_state != RequestStates.Created)
            {
                throw new InvalidOperationException();
            }

            m_asyncRequest = new AsyncWrapper(this, true);
            m_state        = RequestStates.GetRequest;

            return(TrySetTimeout((Stream)m_asyncRequest.GetResponseOrStream(), m_activity_timeout));
        }
        public override IAsyncOperation <LaunchResult> HandleAsync(UriHandlerData data)
        {
            var category = categoryDic[data.Path0];
            var keyword  = GetKeyword(data);
            var advanced = GetAdvancedSearchOptions(data);

            return(AsyncWrapper.CreateCompleted <LaunchResult>(new SearchLaunchResult(Client.Current.Search(keyword, category, advanced))));
        }
Example #4
0
        public override IAsyncOperation <LaunchResult> HandleAsync(UriHandlerData data)
        {
            var sr = data.Queries.ContainsKey("f_shash")
                 ? handleFileSearch(data)
                 : handleSearch(data);

            return(AsyncWrapper.CreateCompleted <LaunchResult>(new SearchLaunchResult(sr)));
        }
        public IAsyncAction AddToCategoryAsync(IReadOnlyList <ItemIndexRange> items, FavoriteCategory categoty)
        {
            if (categoty == null)
            {
                throw new ArgumentNullException(nameof(categoty));
            }
            if (items == null || items.Count == 0)
            {
                return(AsyncWrapper.CreateCompleted());
            }
            return(AsyncInfo.Run(async token =>
            {
                var ddact = default(string);
                if (categoty.Index < 0)
                {
                    ddact = "delete";
                }
                else
                {
                    ddact = $"fav{categoty.Index}";
                }
                var post = Client.Current.HttpClient.PostAsync(this.SearchUri, new HttpFormUrlEncodedContent(getParameters()));
                token.Register(post.Cancel);
                var r = await post;
                if (categoty.Index < 0)
                {
                    this.Reset();
                }
                else
                {
                    foreach (var range in items)
                    {
                        for (var i = range.FirstIndex; i <= range.LastIndex; i++)
                        {
                            this[i].FavoriteCategory = categoty;
                        }
                    }
                }
                IEnumerable <KeyValuePair <string, string> > getParameters()
                {
                    yield return new KeyValuePair <string, string>("apply", "Apply");

                    yield return new KeyValuePair <string, string>("ddact", ddact);

                    foreach (var range in items)
                    {
                        for (var i = range.FirstIndex; i <= range.LastIndex; i++)
                        {
                            yield return new KeyValuePair <string, string>("modifygids[]", this[i].ID.ToString());
                        }
                    }
                }
            }));
        }
Example #6
0
        public override IAsyncOperation <LaunchResult> HandleAsync(UriHandlerData data)
        {
            var v        = data.Paths[1].Unescape2().Trim();
            var category = GetCategory(data);
            var advanced = GetAdvancedSearchOptions(data);

            switch (data.Path0)
            {
            case "tag":
                return(AsyncWrapper.CreateCompleted <LaunchResult>(new SearchLaunchResult(Tag.Parse(v.TrimEnd(trim)).Search(category, advanced))));

            case "uploader":
                return(AsyncWrapper.CreateCompleted <LaunchResult>(new SearchLaunchResult(Client.Current.Search(v, null, category, advanced))));
            }
            return(AsyncWrapper.CreateError <LaunchResult>(new NotSupportedException("Unsupported uri.")));
        }
Example #7
0
 public static IAsyncOperation <Record> GetAsync(string title)
 {
     using (var db = new WikiDb())
     {
         var record = db.Table.AsNoTracking().SingleOrDefault(r => r.Title == title);
         if (record != null && record.IsValid)
         {
             return(AsyncWrapper.CreateCompleted(record));
         }
         if (record == null || record.LastUpdate.AddDays(7) < DateTimeOffset.Now)
         {
             return(FetchAsync(title));
         }
         return(AsyncWrapper.CreateCompleted(default(Record)));
     }
 }
        public IAsyncResult BeginRead(AsyncCallback cb, object state)
        {
            if (m_buffers == null)
                m_buffers = new Dictionary<int, byte[]>();

            int length = m_core.BitRead();
            var buffer = new byte[length];
            var wrapper = new AsyncWrapper(Interlocked.Increment(ref m_readId));
            m_buffers.Add(wrapper.Id, buffer);
            var ret = m_core.BeginRead(buffer, 0, length, ar => {
                wrapper.Core = ar;
                cb(wrapper);
            }, state);
                        
            return ret;
        }
Example #9
0
        /// <summary>
        /// Gets the request stream
        /// </summary>
        /// <returns>The request stream</returns>
        public Stream GetRequestStream()
        {
            if (m_state == RequestStates.GetRequest)
            {
                return((Stream)m_asyncRequest.GetResponseOrStream());
            }

            if (m_state != RequestStates.Created)
            {
                throw new InvalidOperationException();
            }

            m_asyncRequest = new AsyncWrapper(this, true);
            m_state        = RequestStates.GetRequest;

            return(TrySetTimeout((Stream)m_asyncRequest.GetResponseOrStream(), m_activity_timeout));
        }
Example #10
0
        /// <summary>
        /// Gets the response object
        /// </summary>
        /// <returns>The web response</returns>
        public WebResponse GetResponse()
        {
            if (m_state == RequestStates.GetResponse)
            {
                return((WebResponse)m_asyncResponse.GetResponseOrStream());
            }

            if (m_state == RequestStates.Done)
            {
                throw new InvalidOperationException();
            }

            m_asyncRequest  = null;
            m_asyncResponse = new AsyncWrapper(this, false);
            m_state         = RequestStates.GetResponse;

            return((WebResponse)m_asyncResponse.GetResponseOrStream());
        }
Example #11
0
        public static IAsyncOperation <string> GetDisplayContentAsync(this Tag tag)
        {
            var settings = SettingCollection.Current;

            if (settings.UseChineseTagTranslation)
            {
                var r = tag.GetEhTagTranslatorRecord();
                if (r != null)
                {
                    return(AsyncWrapper.CreateCompleted(r.Translated.Text));
                }
            }
            if (settings.UseJapaneseTagTranslation)
            {
                var t = tag.GetEhWikiRecordAsync();
                if (t.Status == AsyncStatus.Completed)
                {
                    var r = t.GetResults();
                    if (!match(tag, r))
                    {
                        return(AsyncWrapper.CreateCompleted(tag.Content));
                    }
                    return(AsyncWrapper.CreateCompleted(r.Japanese ?? tag.Content));
                }
                return(Run(async token =>
                {
                    try
                    {
                        var r = await t;
                        if (!match(tag, r))
                        {
                            return tag.Content;
                        }
                        return r.Japanese ?? tag.Content;
                    }
                    catch (Exception)
                    {
                        return tag.Content;
                    }
                }));
            }
            return(AsyncWrapper.CreateCompleted(tag.Content));
        }
Example #12
0
        protected internal static IAsyncOperation <StorageFolder> GetImageFolderAsync()
        {
            var temp = ImageFolder;

            if (temp != null)
            {
                return(AsyncWrapper.CreateCompleted(temp));
            }
            return(Run(async token =>
            {
                var temp2 = ImageFolder;
                if (temp2 == null)
                {
                    temp2 = await ApplicationData.Current.LocalCacheFolder.CreateFolderAsync("Images", CreationCollisionOption.OpenIfExists);
                    ImageFolder = temp2;
                }
                return temp2;
            }));
        }
Example #13
0
 public static IAsyncOperation <IList <Gallery> > FetchGalleriesAsync(IReadOnlyList <GalleryInfo> galleryInfo)
 {
     if (galleryInfo == null)
     {
         throw new ArgumentNullException(nameof(galleryInfo));
     }
     if (galleryInfo.Count <= 0)
     {
         return(AsyncWrapper.CreateCompleted((IList <Gallery>)Array.Empty <Gallery>()));
     }
     if (galleryInfo.Count <= 25)
     {
         return(Run <IList <Gallery> >(async token =>
         {
             var re = await new GalleryDataRequest(galleryInfo, 0, galleryInfo.Count).GetResponseAsync();
             var data = re.GalleryMetaData;
             data.ForEach(async g => await g.InitAsync());
             return data;
         }));
     }
     else
     {
         return(Run <IList <Gallery> >(async token =>
         {
             var result = new Gallery[galleryInfo.Count];
             var pageCount = MathHelper.GetPageCount(galleryInfo.Count, 25);
             for (var i = 0; i < pageCount; i++)
             {
                 var pageSize = MathHelper.GetSizeOfPage(galleryInfo.Count, 25, i);
                 var startIndex = MathHelper.GetStartIndexOfPage(25, i);
                 var re = await new GalleryDataRequest(galleryInfo, startIndex, pageSize).GetResponseAsync();
                 var data = re.GalleryMetaData;
                 data.ForEach(async g => await g.InitAsync());
                 data.CopyTo(result, startIndex);
             }
             return result;
         }));
     }
 }
Example #14
0
        /// <summary>
        /// Gets the request stream
        /// </summary>
        /// <returns>The request stream</returns>
        public Stream GetRequestStream()
        {
            if (m_state == RequestStates.GetRequest)
            {
                return((Stream)m_asyncRequest.GetResponseOrStream());
            }

            if (m_state != RequestStates.Created)
            {
                throw new InvalidOperationException();
            }

            m_asyncRequest = new AsyncWrapper(this, true);
            m_state        = RequestStates.GetRequest;

            var s = (Stream)m_asyncRequest.GetResponseOrStream();

            try { s.WriteTimeout = m_activity_timeout; }
            catch { }

            return(s);
        }
        public override IAsyncOperation <LaunchResult> HandleAsync(UriHandlerData data)
        {
            var keyword  = "";
            var category = (FavoriteCategory)null;
            var ap       = false;

            foreach (var item in data.Queries)
            {
                switch (item.Key)
                {
                case "f_apply":
                    ap = item.Value.QueryValueAsBoolean();
                    break;

                case "favcat":
                    if (item.Value != "all")
                    {
                        var index = item.Value.QueryValueAsInt32();
                        index    = Math.Max(0, index);
                        index    = Math.Min(9, index);
                        category = Client.Current.Favorites[index];
                    }
                    break;

                case "f_search":
                    keyword = UnescapeKeyword(item.Value);
                    break;
                }
            }
            if (!ap)
            {
                return(AsyncWrapper.CreateCompleted <LaunchResult>(new SearchLaunchResult(Client.Current.Favorites.Search("", category))));
            }
            else
            {
                return(AsyncWrapper.CreateCompleted <LaunchResult>(new SearchLaunchResult(Client.Current.Favorites.Search(keyword, category))));
            }
        }
Example #16
0
 protected override IAsyncAction InitOverrideAsync()
 {
     return(AsyncWrapper.CreateCompleted());
 }
        private void PreloadMangas()
        {
            var preloadables = _scrapers.Where(s => s is IPreload).Select(s => s as IPreload);

            // if there are no preloadables skip the execution
            if (!preloadables.Any())
                return;

            if (!ProgressIndeterminate)
            {
                CurrentActionText = "Preloading manga directories ...";
                ProgressIndeterminate = true;
                InvokePropertyChanged("ProgressIndeterminate");
                InvokePropertyChanged("CurrentActionText");
            }

            var async = new AsyncWrapper();
            async.Call<object>(() =>
                                {
                                    System.Threading.Tasks.Parallel.ForEach(preloadables, (x) => { x.PreloadDirectory(); });
                                    return null;
                                },
                                (x, y) =>
                                {
                                    // don't care about errors...
                                    ProgressIndeterminate = false;
                                    InvokePropertyChanged("ProgressIndeterminate");
                                    CurrentActionText = "";
                                    InvokePropertyChanged("CurrentActionText");
                                }
                        );
        }
Example #18
0
 public override IAsyncOperation <LaunchResult> HandleAsync(UriHandlerData data)
 {
     GalleryInfo.TryParseGallery(data, out var info);
     return(AsyncWrapper.CreateCompleted((LaunchResult) new GalleryLaunchResult(info, -1, GalleryLaunchStatus.Default)));
 }
Example #19
0
        /// <summary>
        /// Gets the request stream
        /// </summary>
        /// <returns>The request stream</returns>
        public Stream GetRequestStream()
        {
            if (m_state == RequestStates.GetRequest)
                return (Stream)m_asyncRequest.GetResponseOrStream();

            if (m_state != RequestStates.Created)
                throw new InvalidOperationException();

            m_asyncRequest = new AsyncWrapper(this, true);
            m_state = RequestStates.GetRequest;

            var s = (Stream)m_asyncRequest.GetResponseOrStream();

            try { s.WriteTimeout = m_activity_timeout; }
            catch { }

            return s;
        }
Example #20
0
        /// <summary>
        /// Gets the response object
        /// </summary>
        /// <returns>The web response</returns>
        public WebResponse GetResponse()
        {
            if (m_state == RequestStates.GetResponse)
                return (WebResponse)m_asyncResponse.GetResponseOrStream();

            if (m_state == RequestStates.Done)
                throw new InvalidOperationException();

            m_asyncRequest = null;
            m_asyncResponse = new AsyncWrapper(this, false);
            m_state = RequestStates.GetResponse;

            return (WebResponse)m_asyncResponse.GetResponseOrStream();
        }
Example #21
0
        /// <summary>
        /// Gets the request stream
        /// </summary>
        /// <returns>The request stream</returns>
        public Stream GetRequestStream()
        {
            if (m_state == RequestStates.GetRequest)
                return (Stream)m_asyncRequest.GetResponseOrStream();

            if (m_state != RequestStates.Created)
                throw new InvalidOperationException();

            m_asyncRequest = new AsyncWrapper(this, true);
            m_state = RequestStates.GetRequest;

			return TrySetTimeout((Stream)m_asyncRequest.GetResponseOrStream(), m_activity_timeout);
        }