public bool RemoveForumFromPins(ForumMetadata forum) { if (PinnedForumIDs == null) return false; return PinnedForumIDs.Remove(forum.ForumID); }
public void AddForumToPins(ForumMetadata forum) { if (PinnedForumIDs == null) PinnedForumIDs = new List<string>(); if (!PinnedForumIDs.Contains(forum.ForumID)) PinnedForumIDs.Add(forum.ForumID); }
public void SetMetadata(ForumMetadata data) { this._data = data; this.UniqueId = data.ForumID; this.Title = data.ForumName; this.Subtitle = data.ForumName; this.OnPropertyChanged("Data"); }
public virtual IEnumerable <Data.ThreadDataSource> LoadThreadsFromPage(string forumId, int pageNumber) { var forum = new ForumMetadata() { ForumID = forumId }; return(LoadThreadsFromPage(forum, pageNumber)); }
private IEnumerable <Data.ThreadDataSource> LoadThreadsFromPage(ForumMetadata forum, int pageNumber) { List <Data.ThreadDataSource> threads = null; var forumPageData = forum.Page(pageNumber); if (forumPageData != null) { UpdateStatus("Formatting..."); threads = Data.ForumThreadCollection.CreateThreadSources(forumPageData, forum); if (this._threadListModel is Data.ForumThreadCollection) { (this._threadListModel as Data.ForumThreadCollection).LastUpdated = DateTime.Now; } } return(threads); }
public static IEnumerable<ForumMetadata> ParseShallowForumList(HtmlDocument doc) { List<ForumMetadata> forums = new List<ForumMetadata>(100); if (doc == null) return forums; try { var parent = doc.DocumentNode; var title = parent.Descendants("title").FirstOrDefault(); if (title != null && title.InnerText.ToLower().Contains("banned")) throw new BannedAccountException("Cannot parse forums using a banned account."); // get all unique links off the page with hrefs containing "forumdisplay.php" // and with nonempty class attributes var forumAnchors = parent.Descendants("a") .Where(anchor => anchor.GetAttributeValue("href", string.Empty).Contains("forumdisplay.php") && !anchor.GetAttributeValue("class", "empty").Equals("empty")) .Distinct(new GenericEqualityComparer<HtmlNode>( (node1, node2) => node1.Attributes["href"].Value == node2.Attributes["href"].Value, (node) => node.Attributes["href"].GetHashCode())) .ToList(); foreach(var anchor in forumAnchors) { // expected href: forumdisplay.php?forumid=<id> if (!string.IsNullOrEmpty(anchor.InnerText)) { string href = anchor.Attributes["href"].Value; string forumID = href.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries)[1]; string forumTitle = WebUtility.HtmlDecode(anchor.InnerText); ForumMetadata forum = new ForumMetadata() { ForumID = forumID, ForumName = forumTitle }; forum.Category = forum.GetGroup(); forums.Add(forum); } } } catch (BannedAccountException bae) { throw bae; } catch (Exception) { } return forums; }
public bool IsForumPinned(ForumMetadata forum) { if (PinnedForumIDs == null) return false; return PinnedForumIDs.Contains(forum.ForumID); }
private static ForumMetadata CreateForumMetadata(HtmlNode node) { ForumMetadata result = null; var value = node.Attributes["value"].Value; int id = -1; // instantiate only if the forum has a valid id if (int.TryParse(value, out id) && id > -1) { result = new ForumMetadata() { ForumID = value } .ParseForumName(node) .ParseForumLevelCount(node) .ParseForumGroup(); } return result; }
public bool IsPinned(ForumMetadata forum) { return ContainsForum(forum); }
public bool UnpinForum(ForumMetadata forum) { var pinned = PinnedForums.Where(x => x.ForumID.Equals(forum.ForumID)).SingleOrDefault(); if (pinned != null) return PinnedForums.Remove(pinned); return false; }
private bool ContainsForum(ForumMetadata forum) { var contains = PinnedForums.Contains(forum, new GenericEqualityComparer<ForumMetadata>( (x, y) => x.ForumID.Equals(y.ForumID), (x) => x.ForumID.GetHashCode())); return contains; }
public void PinForum(ForumMetadata forum) { if (!ContainsForum(forum)) PinnedForums.Add(forum); }
public static List <ThreadDataSource> CreateThreadSources(ForumPageMetadata page, ForumMetadata forum) { var threads = new List <ThreadDataSource>(page.Threads.Count); foreach (var thread in page.Threads) { var source = new ThreadDataSource(thread); source.ForumID = forum.ForumID; threads.Add(source); } return(threads); }
public ForumDataSource(ForumMetadata data) : base() { SetMetadata(data); }