Exemplo n.º 1
0
        async Task asy2FindNewDL(List <Feed> feedsParam = null)
        {
            MUProgressPerc += .06; MUProgressState = TaskbarItemProgressState.Normal;

            var feeds = feedsParam ?? FeedList.Where(r => r.RunTimeNote.StartsWith(__new)).ToList();  //var lst = FeedList.Where(r => r.Name == "CBC Ideas "); //.RunTimeNote.StartsWith(__new));

            Max2 = feeds.Sum(r => r.DnLds.Where(d => d.IsStillOnline == true).Count());

            try
            {
                FC = Brushes.Blue;

                Appender += $"F2. Checking {feeds.Count}{(feedsParam == null ? " NEW" : " ALL")} feeds for new casts ... ";

#if !AwaitNotWorking
                await Task.Delay(3);

                foreach (var feed in feeds.ToList())
                {
                    try
                    {
                        Debug.WriteLine(feed.Name);
                        var ri = RssHelper.FindNewCasts(feed)?.RssDnldInfos;
                        Debug.WriteLine("~> {0,-32}   {1,5} casts found in RSS", feed.Name, ri.Count);
                        await addUPdate_SetIdrFlag(feed, ri);

                        //Val2++;
                    }
                    catch (Exception ex) { ex.Log(); feed.RunTimeNote = ex.Message; FC = Brushes.Violet; }
                }

                //WARNING!!! This one does not AWAIT!!! ->lst.ToList().ForEach(async feed => { try { await addUPdate_SetIdrFlag(feed, RssHelper.FindNewCasts(feed).RssDnldInfos); } catch (Exception ex) { ex.Log(); feed.RunTimeNote = ex.Message; FC = Brushes.Violet; } });

                Appender += $"done.  ({Val2} / {Max2} / {feeds.Sum(r => r.DnLds.Where(d => d.IsStillOnline == true).Count())})"; //saving must be donw only after dnldg finished otherwise there will be omissions from F2Same case:        InfoMsg += DbSaveLib.TrySaveReport(_db, "Db-saving new found casts done. \r\n");

                //recursive calling itwself: onChgdSelectFeed1();

                if (feeds.Count == 1)
                {
                    reload1(feeds[0]);
                }
                else
                {
                    reloadActiveRecentDnlds();
                }

                FC = Brushes.LightGreen;
#else
                var t = Task.Run(() => FeedList.ToList().ForEach(feed =>
                {
                    try { addUPdate_SetIdrFlag(feed, RssHelper.FindNewCasts(feed).RssDnldInfos); }
                    catch (Exception ex) { ex.Log(); feed.RunTimeNote = ex.Message; FC = Brushes.Violet; }
                }));

                await t.ContinueWith(_ =>
                {
                    InfoMsg += DbSaveLib.TrySaveReport(_db, "Db-Saving new casts");

                    FC = Brushes.LightGreen;
                }, TaskScheduler.FromCurrentSynchronizationContext());

                InfoMsg += "\r\nWaiting ...";

                t.Wait();
#endif
            }
            catch (Exception ex) { ex.Log(); Appender += "\r\nasy2FindNewDL() failed.\r\n" + ex.ToString(); FC = Brushes.Violet; }
            MUProgressPerc += .09; MUProgressState = TaskbarItemProgressState.Paused;
        }