AnimeDownloader.MainForm.RefreshUpdates C# (CSharp) Method

RefreshUpdates() public method

public RefreshUpdates ( ) : System.Threading.Tasks.Task
return System.Threading.Tasks.Task
        public async Task RefreshUpdates()
        {
            if (!IsUpdateRefreshing)
            {
                IsUpdateRefreshing = true;
                await WrapGuiAction(() => labUpdateTime.Text = "Refreshing");
                List<Task<Updates>> tasks = new List<Task<Updates>>();
                foreach (string s in DownloadPluginHandler.Instance.AvailableAuthorizations)
                {
                    tasks.Add(DownloadPluginHandler.Instance.Updates(s));
                }
                await Task.WhenAll(tasks);
                List<Episode> updates=new List<Episode>();
                foreach (Task<Updates> up in tasks)
                {
                    if (up.Result.Status != ResponseStatus.Ok)
                        await WrapGuiAction(() => Log(LogType.Error, up.Result.ErrorMessage));
                    else
                        updates.AddRange(up.Result.Items);
                }
                List<EpisodeWithDownloadSettings> downloads = Follows.Instance.CheckFollows(updates);
                await WrapGuiAction(() =>
                {
                    foreach (EpisodeWithDownloadSettings d in downloads)
                    {
                        AddDownloadEpisode(d, d.Quality, d.Format,false);
                    }
                    Episode epu = null;
                    if (objUpdates.SelectedObject != null)
                        epu = (Episode)objUpdates.SelectedObject;

                    objUpdates.BeginUpdate();
                    objUpdates.SetObjects(updates);
                    objUpdates.BuildGroups(olvUpdateDate, SortOrder.Descending);
                    objUpdates.BuildList(true);
                    objUpdates.Sort(olvUpdateDate,SortOrder.Descending);

                    objUpdates.EndUpdate();
                    if (epu != null)
                    {
                        Episode n = updates.FirstOrDefault(a => a.UniqueTag == epu.UniqueTag);
                        if (n != null)
                            objUpdates.SelectedObject = n;
                    }
                });
                Episode last = updates.OrderByDescending(a => a.DateTime).FirstOrDefault();
                if (last!=null)
                    await WrapGuiAction(() => labUpdateLast.Text=last.ShowName+" "+last.EpisodeAlpha);
                IsUpdateRefreshing = false;
                IsUpdated = true;

            }
            if (secondtimer == null)
            {
                SecondCount = Settings.Instance.UpdateTime*60;
                secondtimer = new Timer(SecondTimer, null, 1000, 1000);

            }
        }