public HttpResponseMessage GetNewsArticle(string sessionKey, int id)
        {
            User user = null;

            try
            {
                user = this.usersRepository.GetBySessionKey(sessionKey);
            }
            catch (Exception)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Invalid user!"));
            }

            NewsArticle newsArticle = this.newsArticlesRepository.Get(id);

            if (newsArticle == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "News article not found!"));
            }

            NewsArticleModel newsArticleModel = null;

            try
            {
                newsArticleModel = NewsArticlesMapper.ToNewsArticleModel(newsArticle);
            }
            catch (Exception)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError));
            }

            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, newsArticleModel);

            return(response);
        }
Beispiel #2
0
        public async Task <IActionResult> Index()
        {
            NewsArticleModel model = await _service.GetFirstNewsArticleAsync();

            Console.WriteLine(model);
            return(View());
        }
        public HttpResponseMessage PostNewsArticle(string sessionKey, [FromBody] NewsArticleModel newsArticle)
        {
            User user = null;

            try
            {
                user = this.usersRepository.GetBySessionKey(sessionKey);
            }
            catch (Exception)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Invalid user!"));
            }

            newsArticle.Author = user.Nickname;

            NewsArticle newsArticleEntity = null;

            try
            {
                newsArticleEntity = NewsArticlesMapper
                                    .ToNewsArticleEntity(newsArticle, usersRepository, commentsRepository);
            }
            catch (Exception)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid news article model provided!"));
            }

            newsArticle.ID = newsArticleEntity.ID;

            AddImages(newsArticle, newsArticleEntity);

            this.newsArticlesRepository.Add(newsArticleEntity);

            return(Request.CreateResponse(HttpStatusCode.Created, newsArticle));
        }
        public HttpResponseMessage EditNewsArticle(string sessionKey, int id, NewsArticleModel newsArticle)
        {
            User user = null;

            try
            {
                user = this.usersRepository.GetBySessionKey(sessionKey);
            }
            catch (Exception)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Invalid user!"));
            }

            if (id != newsArticle.ID)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }

            NewsArticle updatedNewsArticle = null;

            try
            {
                updatedNewsArticle =
                    NewsArticlesMapper.ToNewsArticleEntity(newsArticle, usersRepository, commentsRepository);
            }
            catch (Exception)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid news article model provided!"));
            }

            this.newsArticlesRepository.Update(id, updatedNewsArticle);

            return(Request.CreateResponse(HttpStatusCode.OK));
        }
        private void OnShowNewsArticle(NewsArticleModel model)
        {
            var ps = new ProcessStartInfo(model.Url.Value)
            {
                UseShellExecute = true,
                Verb            = "open"
            };

            Process.Start(ps);
        }
        private static void AddImages(NewsArticleModel newsArticle, NewsArticle newsArticleEntity)
        {
            foreach (string imageUrl in newsArticle.ImagesUrls)
            {
                Entry       uploadFileEntry = DropboxUtilities.UploadImage(imageUrl, dropbox, "New_Folder");
                DropboxLink imageLink       = dropbox.GetShareableLinkAsync(uploadFileEntry.Path).Result;

                newsArticleEntity.ImagesUrls.Add(imageLink.Url);
            }
        }
Beispiel #7
0
        private static void AddImages(NewsArticleModel newsArticle, NewsArticle newsArticleEntity)
        {
            for (int i = 0; i < newsArticle.ImagesUrls.Count; i++)
            {
                Entry uploadFileEntry = DropboxUtilities.UploadImage(newsArticle.ImagesUrls[i], dropbox, "New_Folder");

                DropboxLink imageLink = dropbox.GetMediaLinkAsync(uploadFileEntry.Path).Result;

                newsArticle.ImagesUrls[i] = imageLink.Url;
            }
        }
        public Task <NewsArticleModel[]> GetLatestNewsArticlesAsync(int count = 10)
        {
            return(Task.Run(async() =>
            {
                Tracer.Info("Retrieving latest news from https://www.digitalcombatsimulator.com/en/news/");

                var articles = new List <NewsArticleModel>();

                using (var client = new HttpClient())
                {
                    var html = await client.GetStringAsync("https://www.digitalcombatsimulator.com/en/news/");
                    var doc = new HtmlDocument();

                    doc.LoadHtml(html);

                    var nodes = doc.DocumentNode.SelectNodes("//*[contains(@class,'well')]").ToArray();

                    foreach (var node in nodes.Take(count))
                    {
                        if (!node.Id.StartsWith("bx_"))
                        {
                            continue;
                        }

                        var divs = node.SelectNodes("div");
                        var article = new NewsArticleModel();
                        var dayMonth = divs[0].SelectSingleNode("div[1]/div[1]").InnerText.Trim();
                        var year = divs[0].SelectSingleNode("div[1]/div[2]").InnerText.Trim();
                        var title = divs[0].SelectSingleNode("div[2]/div[1]/h3[1]/a[1]").InnerText.Trim();
                        var summary = divs[0].SelectSingleNode("div[2]/div[2]/div[1]").InnerText.Trim();
                        var url = "https://www.digitalcombatsimulator.com" + divs[0].SelectSingleNode("div[2]/a[1]").Attributes["href"].Value.Trim();

                        article.Title.Value = title;
                        article.Summary.Value = summary;
                        article.Url.Value = url;
                        article.Day.Value = dayMonth;
                        article.Year.Value = year;
                        article.ImageSource.Value = $"/Images/Backgrounds/background ({Convert.ToInt32(article.Day.Value.Substring(0, dayMonth.Length - 3).Trim()) % 20 + 1}).jpg";

                        articles.Add(article);

                        Tracer.Info($"Found article {title}");
                    }

                    return articles.ToArray();
                }
            }));
        }
Beispiel #9
0
        public static UserModel ToUserModel(User userEntity)
        {
            UserModel userModel = new UserModel()
            {
                ID       = userEntity.ID,
                Nickname = userEntity.Nickname
            };

            foreach (NewsArticle newsArticle in userEntity.NewsArticles)
            {
                NewsArticleModel newsArticleModel = NewsArticlesMapper.ToNewsArticleModel(newsArticle);
                userModel.NewsArticles.Add(newsArticleModel);
            }

            return(userModel);
        }
Beispiel #10
0
        public static NewsArticleModel ToNewsArticleModel(NewsArticle newsArticle)
        {
            NewsArticleModel newsArticleModel = new NewsArticleModel()
            {
                ID      = newsArticle.ID,
                Title   = newsArticle.Title,
                Content = newsArticle.Content,
                Rating  = newsArticle.Rating,
                Date    = newsArticle.Date,
                Author  = newsArticle.Author.Nickname
            };

            foreach (Comment comment in newsArticle.Comments)
            {
                newsArticleModel.Comments.Add(CommentsMapper.ToCommentModel(comment));
            }

            return(newsArticleModel);
        }
        public static NewsArticle ToNewsArticleEntity(
            NewsArticleModel newsArticleModel,
            DbUsersRepository usersRepository,
            IRepository <Comment> commentsRepository)
        {
            NewsArticle newsArticleEntity = new NewsArticle()
            {
                ID         = newsArticleModel.ID,
                Author     = usersRepository.GetByNickname(newsArticleModel.Author),
                Content    = newsArticleModel.Content,
                Date       = newsArticleModel.Date,
                ImagesUrls = newsArticleModel.ImagesUrls,
                Rating     = newsArticleModel.Rating,
                Title      = newsArticleModel.Title
            };

            foreach (CommentModel comment in newsArticleModel.Comments)
            {
                newsArticleEntity.Comments.Add(
                    Extensions.CreateOrLoadComment(comment, commentsRepository, usersRepository));
            }

            return(newsArticleEntity);
        }
Beispiel #12
0
 protected static string GetTitleEnding(NewsArticleModel newsArticle)
 {
     return(newsArticle.IsHotContent ? $" {EmojiLibrary.FireEmoji} {newsArticle.CommentsCount}"
         : newsArticle.CommentsCount > 0 ? $" {EmojiLibrary.SpeechBalloon} {newsArticle.CommentsCount} "
             : string.Empty);
 }
        public override IAliceResponseBase Reply(SportsRequest sportsRequest)
        {
            SportsResponse   response;
            var              fromDate    = DateTimeOffset.Now.AddDays(-1);
            NewsArticleModel newsArticle = null;

            if (sportsRequest.State.Session.NextNewsArticleId != Guid.Empty)
            {
                newsArticle = _newsService.GetById(sportsRequest.State.Session.NextNewsArticleId);
            }

            if (newsArticle == null)
            {
                newsArticle = _newsService.GetPopularNews(fromDate, new PagedRequest(1, 0)).Items.FirstOrDefault();
            }
            IEnumerable <NewsArticleCommentModel> comments = null;

            if (newsArticle != null)
            {
                comments = _newsArticleCommentService.GetBestComments(newsArticle.Id, _sportsSettings.CommentsToDisplay);
            }

            if (comments != null && comments.Any())
            {
                var buttons = new List <AliceButtonModel>()
                {
                    new AliceButtonModel()
                    {
                        Title = Sports_Resources.Command_BestComments_OpenNewsArticle,
                        Url   = newsArticle.Url,
                        Hide  = false
                    }
                };
                string ttsEnding         = string.Empty;
                var    nextNewsArticle   = _newsService.GetNextPopularNewsArticle(fromDate, newsArticle.Id);
                Guid   nextNewsArticleId = Guid.Empty;
                if (nextNewsArticle != null)
                {
                    ttsEnding = $"{AliceHelper.SilenceString500}{Sports_Resources.Tips_BestComments_Next}";
                    buttons.Add(new SportsButtonModel(Sports_Resources.Command_BestComments_Next));
                    nextNewsArticleId = nextNewsArticle.Id;
                }
                buttons.Add(new SportsButtonModel(Sports_Resources.Command_LatestNews));
                buttons.Add(new SportsButtonModel(Sports_Resources.Command_MainNews));

                var text = new StringBuilder($"{Sports_Resources.BestComments_Title_Tts} \"{newsArticle.Title} {GetTitleEnding(newsArticle)}\":");
                var tts  = new StringBuilder($"{Sports_Resources.BestComments_Title_Tts} \"{newsArticle.Title}\"{AliceHelper.SilenceString500}");
                foreach (var comment in comments)
                {
                    string textComment = $"\n\n{EmojiLibrary.SpeechBalloon} {comment.CommentText} {EmojiLibrary.ThumbsUp}{comment.CommentRating}";
                    string textTts     = $"{AliceHelper.SilenceString500}{comment.CommentText}";
                    if (text.Length + textComment.Length <= AliceResponseModel.TextMaxLenght &&
                        tts.Length + textTts.Length + ttsEnding.Length <= AliceResponseModel.TtsMaxLenght)
                    {
                        text.Append(textComment);
                        tts.Append(textTts);
                    }
                }
                tts.Append(ttsEnding);

                response = new SportsResponse(sportsRequest, text.ToString(), tts.ToString(), buttons);
                response.SessionState.NextNewsArticleId = nextNewsArticleId;
                response.SessionState.CurrentScene      = SceneType;
            }
            else
            {
                var noResponseButtons = new List <AliceButtonModel>()
                {
                    new SportsButtonModel(Sports_Resources.Command_LatestNews),
                    new SportsButtonModel(Sports_Resources.Command_MainNews)
                };
                response = new SportsResponse(sportsRequest, Sports_Resources.BestComments_NoComments, noResponseButtons);
            }
            response.SessionState.CurrentScene = SceneType;
            return(response);
        }
 private void OnShowNewsArticle(NewsArticleModel model)
 {
     Process.Start(model.Url.Value);
 }
 private void OnShowNewsArticle(NewsArticleModel model)
 {
     _controller.ShowUrl(model.Url.Value);
 }