public async Task <PublicationViewModel> CreatePublication(NewPostRequest request, User user)
        {
            var extractor = new X.Web.MetaExtractor.Extractor();

            var metadata = await extractor.ExtractAsync(request.Link);

            var existingPublication = await _publicationService.Get(new Uri(metadata.Url));

            if (existingPublication != null)
            {
                throw new DuplicateNameException("Publication with this URL already exist");
            }

            var languageCode = _languageAnalyzer.GetTextLanguage(metadata.Description);
            var languageId   = await _localizationService.GetLanguageId(languageCode) ?? Core.Language.EnglishId;

            var player     = EmbeddedPlayerFactory.CreatePlayer(request.Link);
            var playerCode = player != null ? await player.GetEmbeddedPlayerUrl(request.Link) : null;

            var publication = await _publicationService.CreatePublication(
                metadata,
                user.Id,
                languageId,
                playerCode,
                request.CategoryId,
                request.Comment);

            if (publication != null)
            {
                var model = new PublicationViewModel(publication, _settings.WebSiteUrl);

                //If we can embed main content into site page, so we can share this page.
                var url = string.IsNullOrEmpty(model.EmbededPlayerCode) ? model.Url : model.ShareUrl;

                var services = await GetServices(publication);

                foreach (var service in services)
                {
                    await service.Send(request.Comment, url, GetTags(request));
                }

                return(model);
            }

            throw new Exception("Can't save publication to database");
        }
Example #2
0
        public async Task <IActionResult> AddPublicaton(NewPostRequest request)
        {
            var user = _userManager.GetBySecretKey(request.Key);

            if (user == null)
            {
                return(StatusCode((int)HttpStatusCode.Forbidden));
            }

            var extractor        = new X.Web.MetaExtractor.Extractor();
            var languageAnalyzer = new LanguageAnalyzer(Settings.Current.CognitiveServicesTextAnalyticsKey);

            try
            {
                var metadata = await extractor.Extract(new Uri(request.Link));

                var languageCode = languageAnalyzer.GetTextLanguage(metadata.Description);
                var languageId   = _localizationManager.GetLanguageId(languageCode) ?? Language.EnglishId;

                var publication = new DAL.Publication
                {
                    Title       = metadata.Title,
                    Description = metadata.Description,
                    Link        = metadata.Url,
                    Image       = metadata.Image.FirstOrDefault(),
                    Type        = metadata.Type,
                    DateTime    = DateTime.Now,
                    UserId      = user.Id,
                    CategoryId  = request.CategoryId,
                    Comment     = request.Comment,
                    LanguageId  = languageId
                };

                if (EmbededPlayer.GetPlayerSoure(request.Link) != null)
                {
                    var player = new EmbededPlayer(request.Link);
                    publication.EmbededPlayerCode = player.Render();
                }

                publication = await _publicationManager.Save(publication);

                if (publication != null)
                {
                    var model = new PublicationViewModel(publication, Settings.Current.WebSiteUrl);

                    //If we can embed main content into site page, so we can share this page.
                    var url = string.IsNullOrEmpty(model.EmbededPlayerCode) ? model.Link : model.ShareUrl;

                    await _crossPostManager.Send(request.CategoryId, request.Comment, url);

                    return(Created(new Uri(model.ShareUrl), model));
                }
                else
                {
                    throw new Exception("Can't save publication to databse");
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
Example #3
0
        public async Task <IActionResult> AddPublication(NewPostRequest request)
        {
            var user = await _userManager.GetBySecretKey(request.Key);

            if (user == null)
            {
                _logger.Write(LogLevel.Warning, $"Somebody tried to login with this key: `{request.Key}`. Text: `{request.Comment}`");

                return(StatusCode((int)HttpStatusCode.Forbidden, "Incorrect security key"));
            }

            var extractor        = new X.Web.MetaExtractor.Extractor();
            var languageAnalyzer = new LanguageAnalyzerService(_settings.CognitiveServicesTextAnalyticsKey, _logger);

            try
            {
                var metadata = await extractor.ExtractAsync(request.Link);

                var existingPublication = await _publicationManager.Get(new Uri(metadata.Url));

                if (existingPublication != null)
                {
                    return(StatusCode((int)HttpStatusCode.Conflict, "Publication with this URL already exist"));
                }

                var languageCode = languageAnalyzer.GetTextLanguage(metadata.Description);
                var languageId   = await _localizationManager.GetLanguageId(languageCode) ?? Language.EnglishId;

                var image = metadata.Images.FirstOrDefault();

                var publication = new DAL.Publication
                {
                    Title       = metadata.Title,
                    Description = metadata.Description,
                    Link        = metadata.Url,
                    Image       = string.IsNullOrWhiteSpace(image) || image.Length > 250 ? string.Empty : image,
                    Type        = "article",
                    DateTime    = DateTime.Now,
                    UserId      = user.Id,
                    CategoryId  = request.CategoryId,
                    Comment     = request.Comment,
                    LanguageId  = languageId
                };

                var player = EmbeddedPlayerFactory.CreatePlayer(request.Link);

                if (player != null)
                {
                    publication.EmbededPlayerCode = await player.GetEmbeddedPlayerUrl(request.Link);
                }

                publication = await _publicationManager.Save(publication);

                if (publication != null)
                {
                    var model = new PublicationViewModel(publication, _settings.WebSiteUrl);

                    //If we can embed main content into site page, so we can share this page.
                    var url = string.IsNullOrEmpty(model.EmbededPlayerCode) ? model.Link : model.ShareUrl;

                    foreach (var crossPostManager in _crossPostManagers)
                    {
                        await crossPostManager.Send(request.CategoryId, request.Comment, url);
                    }

                    return(Created(new Uri(model.ShareUrl), model));
                }

                throw new Exception("Can't save publication to database");
            }
            catch (Exception ex)
            {
                _logger.Write(LogLevel.Error, "Error while creating new publication", ex);

                return(BadRequest(ex.Message));
            }
        }