Exemplo n.º 1
0
        public async Task Execute(IJobExecutionContext context)
        {
            try
            {
                var mappedData = context.MergedJobDataMap;
                var rss        = _userRssService.Get(x => x.Id == mappedData.GetString(ScheduleConsts.RSS_ID));
                if (rss == null)
                {
                    return;
                }
                var subscription = _userSubscribeService.Get(x => x.Id == context.Trigger.Key.Name);
                if (subscription == null)
                {
                    return;
                }
                var latestNews = RssHelper.GetLatestUpdates(_logService, rss.Url, subscription.CheckDate.AddHours(3));

                if (latestNews.Any())
                {
                    var user  = _userService.Get(x => x.Id == mappedData.GetString(ScheduleConsts.USER_ID));
                    var group = _telegramGroupService.Get(x => x.Id == mappedData.GetString(ScheduleConsts.GROUP_ID));

                    foreach (var item in latestNews)
                    {
                        string link;

                        if (item.Links.FirstOrDefault() == null)
                        {
                            link = ((TextSyndicationContent)item.Content).Text;
                        }
                        else
                        {
                            link = item.Links.FirstOrDefault().Uri.AbsoluteUri;
                        }

                        _telegramBotClient.SendTextMessageAsync(group.ChatId, link);

                        _logService.Save(new dal.entities.NotifierLog
                        {
                            LogLevel   = (short)enums.LogLevel.RSS_SENT_INFO,
                            Message    = string.Concat(rss.UserId, " ", group.ChatId),
                            StackTrace = link,
                        });
                    }

                    subscription.CheckDate = DateTime.Now;
                    _userSubscribeService.Save(subscription);
                }
            }
            catch (Exception ex)
            {
                _logService.InsertLog(ex, enums.LogLevel.RSS_READ_ERROR);
            }
        }