static void Main(string[] args) { while (true) { try { using (TrackerDataContext db = new TrackerDataContext(_connStr)) { var trackerItemsNeedingUpdates = (from t in db.TrackerTableListItems where t.IsPstSummaryUpdateRequired == null || t.IsPstSummaryUpdateRequired.Value == true select t).ToList(); //Need to get them all in a list, because of a weird bug in the ORM. foreach (var item in trackerItemsNeedingUpdates) { if (item.EntryType == 0) //ForumBoards { using (ForumBlogsDataContext postsContext = new ForumBlogsDataContext(_connStr)) { try { var desiredPost = (from p in postsContext.Posts where p.TopicId == item.BlogOrTopicId && p.DirectPostLink.EndsWith("#1") select p).Single(); item.FirstPostSummary = GenerateSummary(desiredPost.PostContent, true); item.IsPstSummaryUpdateRequired = false; } catch { HandleFailure(item); } db.SubmitChanges(); } } else if (item.EntryType == 1) //Blog entries { using (ForumBlogsDataContext blogEntriesContext = new ForumBlogsDataContext(_connStr)) { try { var desiredPost = (from p in blogEntriesContext.BlogEntries where p.Id == item.BlogOrTopicId select p).Single(); item.FirstPostSummary = GenerateSummary(desiredPost.BlogContent, false); item.IsPstSummaryUpdateRequired = false; } catch { HandleFailure(item); } db.SubmitChanges(); } } else if (item.EntryType == 2) //Twitter conversations { using (TwitterDataContext twitterContext = new TwitterDataContext(_connStr)) { try { var desiredPost = (from p in twitterContext.Tweets where p.TwitterConversationId == item.BlogOrTopicId orderby p.Id ascending select p).Take(1).Single(); item.FirstPostSummary = desiredPost.TweetContentNonHtml; item.IsPstSummaryUpdateRequired = false; } catch { HandleFailure(item); } db.SubmitChanges(); } } else { throw new NotImplementedException("EntryType"); } } } } catch { } //Job should run once per minute. Console.WriteLine("\nJob done. Sleeping for a minute. - " + DateTime.Now + "\n"); System.Threading.Thread.Sleep(30 * 1000); } }
public TrackerDo GetTrackerByPosterName(string posterName, int page) { if (posterName == null) throw new ArgumentNullException("posterName"); TrackerDo tracker = new TrackerDo(); var dbTracker = new TrackerDataContext(DbConnectionString.Value); var dbForumBlogs = new ForumBlogsDataContext(DbConnectionString.Value); var threadQuery = (from p in dbForumBlogs.Posts where p.PosterName == posterName && p.PosterType == 2 select p.Topic).Distinct().OrderByDescending(x => x.LastPostDate); List<int> threadsPostedIn = threadQuery.Skip((page - 1) * 50).Take(50).Select(x => x.Id).ToList(); var trackerQuery = from t in dbTracker.TrackerTableListItems where threadsPostedIn.Contains(t.BlogOrTopicId) && t.EntryType == 0 orderby t.TimeOfLatestPost descending select t; List<TrackerTableListItem> trackerListItems = (trackerQuery).ToList(); tracker.TrackerItems = GetItemsDomainObjects(trackerListItems); tracker.PageTitle = posterName; tracker.TotalItems = threadQuery.Count(); return tracker; }
public TrackerDo GetTrackerByBlog(string game, string lang, string region, int page) { if (game == null) throw new ArgumentNullException("game"); if (lang == null) throw new ArgumentNullException("lang"); if (region == null) throw new ArgumentNullException("region"); game = game.ToUpper(); lang = lang.ToUpper(); region = region.ToUpper(); TrackerDo tracker = new TrackerDo(); var db = new TrackerDataContext(DbConnectionString.Value); tracker.CurrentPage = page; var trackerQuery = from t in db.TrackerTableListItems where t.Game == game && t.Lang == lang && t.Region == region && t.EntryType == 1 orderby t.TimeOfLatestPost descending select t; List<TrackerTableListItem> trackerListItems = (trackerQuery).Skip((page - 1) * 50).Take(50).ToList(); //TODO: This should be detected in the frontend, and appropriate action taken. tracker.PageTitle = "{REPLACE WITH GAME}"; tracker.TotalItems = trackerQuery.Count(); tracker.TrackerItems = GetItemsDomainObjects(trackerListItems); if (tracker.TotalItems > 0) { tracker.SecondaryTitle1 = tracker.TrackerItems[0].SubForumName; } return tracker; }
public TrackerDo GetTracker(string game, string lang, string p, bool includeBlogs, bool includeThreads, bool includeTwitter) { if (String.IsNullOrEmpty(game)) throw new ArgumentNullException("game"); if (String.IsNullOrEmpty(lang)) throw new ArgumentNullException("lang"); List<short> rawIncludes = new List<short>(); if (includeThreads) rawIncludes.Add(0); if (includeBlogs) rawIncludes.Add(1); if (includeTwitter) rawIncludes.Add(2); int page = 1; if (!String.IsNullOrEmpty(p)) { if (!(int.TryParse(p, out page))) { throw new ArgumentException("p"); } } game = game.ToUpper(); lang = lang.ToUpper(); TrackerDo tracker = new TrackerDo(); tracker.CurrentPage = page; List<TrackerTableListItem> trackerListItems = null; var db = new TrackerDataContext(DbConnectionString.Value); if (game == "ALL") { trackerListItems = (from t in db.TrackerTableListItems where t.Lang == lang && rawIncludes.Contains(t.EntryType) orderby t.TimeOfLatestPost descending select t).Skip((page - 1) * 50).Take(50).ToList(); tracker.TotalItems = (from t in db.TrackerTableListItems where t.Lang == lang && rawIncludes.Contains(t.EntryType) select t).Count(); } else { trackerListItems = (from t in db.TrackerTableListItems where t.Lang == lang && t.Game == game && rawIncludes.Contains(t.EntryType) orderby t.TimeOfLatestPost descending select t).Skip((page - 1) * 50).Take(50).ToList(); tracker.TotalItems = (from t in db.TrackerTableListItems where t.Lang == lang && t.Game == game && rawIncludes.Contains(t.EntryType) select t).Count(); } tracker.TrackerItems = GetItemsDomainObjects(trackerListItems); if (game == "ALL") { tracker.PageTitle = "Home"; //this would be the home page. tracker.TotalItems = (from t in db.TrackerTableListItems where t.Lang == lang && rawIncludes.Contains(t.EntryType) select t).Count(); } else { //TODO: This should be detected in the frontend, and appropriate action taken. tracker.PageTitle = "{REPLACE WITH GAME}"; } return tracker; }