Exemplo n.º 1
0
        private void OnDownloadTaskRemoved(object sender, TaskRemovedEventArgs <HttpFileDownloadTask> e)
        {
            if (e.Task != null)
            {
                FeedEnclosure enc = e.Task.UserState as FeedEnclosure;

                if (enc != null)
                {
                    lock (sync) {
                        DownloadTaskRemoved(enc, e.Task, true);
                    }
                }
            }
            else if (e.Tasks != null)
            {
                Feed                 tmpParent    = null;
                FeedEnclosure        tmpEnclosure = null;
                List <FeedEnclosure> tmpList      = null;

                Dictionary <Feed, List <FeedEnclosure> > feedDict =
                    new Dictionary <Feed, List <FeedEnclosure> > ();

                lock (sync) {
                    foreach (HttpFileDownloadTask t in e.Tasks)
                    {
                        tmpEnclosure = t.UserState as FeedEnclosure;

                        if (tmpEnclosure != null)
                        {
                            tmpParent = tmpEnclosure.Item.Feed;

                            if (!feedDict.TryGetValue(tmpParent, out tmpList))
                            {
                                tmpList = new List <FeedEnclosure> ();
                                feedDict.Add(tmpParent, tmpList);
                            }

                            tmpList.Add(tmpEnclosure);
                            DownloadTaskRemoved(tmpEnclosure, t, false);
                        }
                    }

                    //foreach (KeyValuePair<Feed,List<FeedEnclosure>> kvp in feedDict) {
                    //kvp.Key.DecrementQueuedDownloadCount (kvp.Value.Count);
                    //}
                }
            }
        }
Exemplo n.º 2
0
        protected virtual void OnTaskRemovedHandler(object sender, TaskRemovedEventArgs <T> e)
        {
            lock (sync) {
                if (e.Index != -1 && e.Task != null)
                {
                    T tsk = e.Task as T;

                    if (currentTasks.Contains(tsk))
                    {
                        tsk.CancelAsync();
                        return;
                    }
                    else if (tsk.Status == TaskStatus.Ready ||
                             tsk.Status == TaskStatus.Paused)
                    {
                        gsm.DecrementRemainingTaskCount();
                    }

                    Disassociate(tsk);
                }
                else if (e.Indices != null && e.Tasks != null)
                {
                    int      sub        = e.Tasks.Count;
                    List <T> removeList = new List <T> (sub);

                    foreach (T tsk in e.Tasks)
                    {
                        if (currentTasks.Contains(tsk))
                        {
                            tsk.CancelAsync();
                            --sub;
                        }
                        else
                        {
                            removeList.Add(tsk);
                        }
                    }

                    if (sub > 0)
                    {
                        Disassociate(removeList);
                        gsm.RemainingTasks -= sub;
                    }
                }
            }
        }
Exemplo n.º 3
0
        private void OnDownloadTaskRemoved(object sender, TaskRemovedEventArgs<HttpFileDownloadTask> e)
        {
            if (e.Task != null) {
                FeedEnclosure enc = e.Task.UserState as FeedEnclosure;

                if (enc != null) {
                    lock (sync) {
                        DownloadTaskRemoved (enc, e.Task, true);
                    }
                }
            } else if (e.Tasks != null) {
                Feed tmpParent = null;
                FeedEnclosure tmpEnclosure = null;
                List<FeedEnclosure> tmpList = null;

                Dictionary<Feed, List<FeedEnclosure>> feedDict =
                    new Dictionary<Feed,List<FeedEnclosure>> ();

                lock (sync) {
                    foreach (HttpFileDownloadTask t in e.Tasks) {
                        tmpEnclosure = t.UserState as FeedEnclosure;

                        if (tmpEnclosure != null) {
                            tmpParent = tmpEnclosure.Item.Feed;

                            if (!feedDict.TryGetValue (tmpParent, out tmpList)) {
                                tmpList = new List<FeedEnclosure> ();
                                feedDict.Add (tmpParent, tmpList);
                            }

                            tmpList.Add (tmpEnclosure);
                            DownloadTaskRemoved (tmpEnclosure, t, false);
                        }
                    }

                    //foreach (KeyValuePair<Feed,List<FeedEnclosure>> kvp in feedDict) {
                        //kvp.Key.DecrementQueuedDownloadCount (kvp.Value.Count);
                    //}
                }
            }
        }