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); }
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); } }
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(); } })); }
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); }
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); }
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); }