public void UpdateLastTweetDate(TwittData data) { if (data == null) { throw new ArgumentNullException(nameof(data)); } if (data.Page == null) { throw new ArgumentNullException(nameof(data), "data.Page==null"); } var page = data.Page; var now = _DateSupply.Now; page.TweetDate = now; //обновить пост в базе... _SitePageTweetDateUpdater.UpdateTweetDateForPage(page, now); //если было использовано изображение var img = data.Image; if (img != null) { img.TweetDate = now; //обновить в базе изображений... _AnimatedTweetDateUpdater.UpdateTweetDateForBlob(img, now); } }
public async Task <TwittData> GetPageForTwitting() { //В базе есть страницы для всех постов сайта. В некоторых случаях (но не всегда) к посту может быть дополнительно //доступны N gif-анимированных изображений (они в отдельной коллекции) //Мы будем твитить тех, кого "ни разу", в первую очередь, но только если они не блокированы и не принадлежат к спец-ивенту //Спец.ивент - это Рождество (новогодние посты), и Хеллоуин - их твитить надо строго в опред.диапазоне времени //Первая часть логики - "Если пост новый, то без вариантов твитим его, изображение берем из него же" (никаких внешних аним.гифок) SitePage page = await _PageSelectorForNewPages.GetPageForTwitting(); if (page != null) { _Log.Log("_PageSelectorForNewPages.GetPageForTwitting done {0}", DateTime.Now); TwittData result = new TwittData { Page = page }; return(result); } //на этом этапе у нас все новые страницы и уже твитились //В этом случае начинает работать схема - "выбрать только пост, а потом уточнить если есть у него гифки, то случайно решить то ли изображение из поста, то ли гифка" //Здесь селектор должен быть умен в плане предлагать вначале более "старо-твиченные посты" SitePage pageSelected = await _PageSelectorForAnyPages.GetPageForTwitting(); if (pageSelected == null) { throw new ApplicationException("No page found for twitting"); //это правда необычно..скорее ошибка т.к. база ведь не пустая } //теперь решаем: то ли просто страница , то ли используем аним.изображение (для этой страницы, если конечно они есть) if (_PageOrExternalImageSelector.UseExternalAnimatedImage) { //Пробуем использовать аним.изображение, но это ЕСЛИ оно найдется для этой страницы (бывают страницы без них вообще) string url = pageSelected.URL; AnimatedImage animImg = null; AnimatedImage[] imgsNew = await _FindNewAnimatedByPage.GetAnimatedImagesForPage(url); if (imgsNew != null) { //берем первую что нашли - эти гифки не твитили ни разу (скорее всего она будет одна в результате-ответе) animImg = imgsNew[0]; } else { //новых нет, но может есть "не новые" гиф-файлы? AnimatedImage[] imgsForPage = await _FindAnimatedByPage.GetAnimatedImagesForPage(url); if (imgsForPage != null && imgsForPage.Length > 0) { //выбираем случайно аним.гифку, кроме той которую твитили последний раз (если их более чем одна) animImg = _AnimatedSelectorWithExcludeLast.SelectImage(imgsForPage); } } if (animImg != null) { TwittData result = new TwittData { Image = animImg, Page = pageSelected }; return(result); } } //просто страницу TwittData resultData = new TwittData { Page = pageSelected }; return(resultData); } //GetPageForTwitting