예제 #1
0
        /// <summary>
        /// 刷新http数据
        /// </summary>
        public async void Update()
        {
            IsLoading = true;
            LatestStories ls = await _api.GetLatestStories();

            if (ls != null)
            {
                ls.Stories[0].Separator = true;  //当天第一条
                HomeStoriesIncrementalLoadingCollection c = new HomeStoriesIncrementalLoadingCollection(ls.Date);
                ls.Stories.ToList().ForEach((s) =>
                {
                    if (DataShareManager.Current.FavoriteList.Contains(s.ID))
                    {
                        s.Favorite = true;
                    }
                    if (DataShareManager.Current.ReadedList.Contains(s.ID))
                    {
                        s.Readed = true;
                    }
                    c.Add(s);
                }
                                            );

                Stories     = c;
                Top_Stories = ls.Top_Stories;
                Title       = "首页";

                c.DataLoaded  += C_DataLoaded;
                c.DataLoading += C_DataLoading;
            }
            IsLoading = false;
        }
예제 #2
0
        /// <summary>
        /// 显示未读头条文章的toast
        /// </summary>
        /// <param name="t"></param>
        private static void ShowToast(LatestStories t)
        {
            //将还未阅读的头条文章使用toast方式通知给用户
            var    toast_updater = ToastNotificationManager.CreateToastNotifier();
            string xml           = "<toast lang=\"zh-CN\" launch='111' >" +
                                   "<visual>" +
                                   "<binding template=\"ToastGeneric\">" +
                                   "<text>知乎日报UWP 头条文章</text>" +
                                   "<text>{0}</text>" +
                                   "</binding>" +
                                   "</visual>" +
                                   "</toast>";

            t.Top_Stories.ToList().ForEach(s =>
            {
                if (!DataShareManager.Current.ReadedList.Contains(s.ID) && !IsAlreadyToast(s.ID))  //未阅读
                {
                    // 加载XML文档
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(string.Format(xml, s.Title));
                    // 显示通知
                    ToastNotification notification = new ToastNotification(doc);
                    toast_updater.Show(notification);
                }
            });
        }
예제 #3
0
        /// <summary>
        /// 更新未读头条文章的徽章badge
        /// </summary>
        /// <param name="t"></param>
        private static void UpdateBadge(LatestStories t)
        {
            //将当天未读TOP文章更新到 badge
            int un_readed = 0;

            t.Top_Stories.ToList().ForEach(s => { if (!DataShareManager.Current.ReadedList.Contains(s.ID))
                                                  {
                                                      un_readed++;
                                                  }
                                           });

            var updater = BadgeUpdateManager.CreateBadgeUpdaterForApplication();

            if (un_readed != 0)
            {
                var badgexml = new BadgeNumericNotificationContent((uint)un_readed);

                var n = badgexml.CreateNotification();
                n.ExpirationTime = DateTime.Now.AddDays(7);

                updater.Update(n);
            }
            else
            {
                updater.Clear();
            }
        }
예제 #4
0
 /// <summary>
 /// Invoked when the bookmark button is clicked.
 /// </summary>
 /// <param name="obj">The object</param>
 private void BookmarkButtonClicked(object obj)
 {
     if (obj is Model article)
     {
         LatestStories.Remove(article);
     }
 }
예제 #5
0
 internal override void OnAppearing()
 {
     base.OnAppearing();
     if (!LatestStories.Any() && _backgroundTaskHelper.BackgroundTaskIsCompleted())
     {
         _backgroundTaskHelper.StartBackgroundTask();
     }
 }
예제 #6
0
        /// <summary>
        /// 更新头条文章的磁贴tile
        /// </summary>
        /// <param name="t"></param>
        private static void UpdateTile(LatestStories t)
        {
            //头5条 循环更新到tile中
            List <string> list       = t.Top_Stories.ToList().Select(s => s.Title).ToList();
            List <string> list_image = t.Top_Stories.ToList().Select(s => s.Image).ToList();

            var tileUpdater          = TileUpdateManager.CreateTileUpdaterForApplication();
            var plannedNotifications = tileUpdater.GetScheduledTileNotifications();

            DateTime now        = DateTime.Now;
            DateTime updateTime = now;
            DateTime planTill   = now.AddMinutes(60); //每次制定1小时的tile更新计划

            //删除还未执行的计划
            if (plannedNotifications.Count > 0)
            {
                plannedNotifications.ToList().ForEach(s => tileUpdater.RemoveFromSchedule(s));
            }

            int index = 0;
            int count = list.Count;

            //制定tile更新的计划
            for (var startPlanning = updateTime; startPlanning < planTill; startPlanning = startPlanning.AddSeconds(10))
            {
                try
                {
                    var tilexml = TileContentFactory.CreateTileSquare150x150PeekImageAndText02();
                    tilexml.Image.Src         = list_image[index % count];
                    tilexml.TextHeading.Text  = "知乎日报UWP";
                    tilexml.TextBodyWrap.Text = list[index % count];
                    index++;

                    ScheduledTileNotification stn = new ScheduledTileNotification(tilexml.GetXml(), startPlanning);
                    stn.ExpirationTime = startPlanning.AddSeconds(8);

                    tileUpdater.AddToSchedule(stn);
                }
                catch
                {
                }
            }
        }
예제 #7
0
        private async Task GetSponsors()
        {
            try
            {
                var talkDtOs = await _sponsorService.GetSponsorsAsync(CancellationToken.None);

                LatestStories.Clear();
                FeaturedStories.Clear();
                foreach (var talkDtO in talkDtOs)
                {
                    var sponsorViewModel = new SponsorViewModel(talkDtO);
                    LatestStories.Add(sponsorViewModel);
                    if (talkDtO.SponsorLevel != "Gold" && talkDtO.SponsorLevel != "Silver")
                    {
                        FeaturedStories.Add(sponsorViewModel);
                    }
                }
            }
            catch (Exception e)
            {
            }
        }
예제 #8
0
        private async Task GetSpeakers()
        {
            try
            {
                var speakerDtos = (await _speakerService.GetSpeakersAsync()).ToList();
                LatestStories.Clear();
                FeaturedStories.Clear();

                var featuredSpeakers = speakerDtos.OrderBy(x => Guid.NewGuid()).Take(5);

                foreach (var speaker in featuredSpeakers)
                {
                    featuredStories.Add(speaker);
                }

                foreach (var speaker in speakerDtos)
                {
                    LatestStories.Add(speaker);
                }
            }
            catch (Exception e)
            {
            }
        }