コード例 #1
0
        public bool RemoveForumFromPins(ForumMetadata forum)
        {
            if (PinnedForumIDs == null)
                return false;

            return PinnedForumIDs.Remove(forum.ForumID);
        }
コード例 #2
0
        public void AddForumToPins(ForumMetadata forum)
        {
            if (PinnedForumIDs == null)
                PinnedForumIDs = new List<string>();

            if (!PinnedForumIDs.Contains(forum.ForumID))
                PinnedForumIDs.Add(forum.ForumID);
        }
コード例 #3
0
ファイル: MainDataSource.cs プロジェクト: nisimpson/awful2
 public void SetMetadata(ForumMetadata data)
 {
     this._data    = data;
     this.UniqueId = data.ForumID;
     this.Title    = data.ForumName;
     this.Subtitle = data.ForumName;
     this.OnPropertyChanged("Data");
 }
コード例 #4
0
        public virtual IEnumerable <Data.ThreadDataSource> LoadThreadsFromPage(string forumId, int pageNumber)
        {
            var forum = new ForumMetadata()
            {
                ForumID = forumId
            };

            return(LoadThreadsFromPage(forum, pageNumber));
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: ForumParser.cs プロジェクト: jarkkom/awfuldotnet
        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;
        }
コード例 #7
0
        public bool IsForumPinned(ForumMetadata forum)
        {
            if (PinnedForumIDs == null)
                return false;

            return PinnedForumIDs.Contains(forum.ForumID);
        }
コード例 #8
0
ファイル: ForumParser.cs プロジェクト: jarkkom/awfuldotnet
        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;
        }
コード例 #9
0
ファイル: ForumDataModel.cs プロジェクト: jarkkom/awfuldotnet
 public bool IsPinned(ForumMetadata forum)
 {
     return ContainsForum(forum);
 }
コード例 #10
0
ファイル: ForumDataModel.cs プロジェクト: jarkkom/awfuldotnet
        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;
        }
コード例 #11
0
ファイル: ForumDataModel.cs プロジェクト: jarkkom/awfuldotnet
        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;
        }
コード例 #12
0
ファイル: ForumDataModel.cs プロジェクト: jarkkom/awfuldotnet
 public void PinForum(ForumMetadata forum)
 {
     if (!ContainsForum(forum))
         PinnedForums.Add(forum);
 }
コード例 #13
0
ファイル: MainDataSource.cs プロジェクト: nisimpson/awful2
        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);
        }
コード例 #14
0
ファイル: MainDataSource.cs プロジェクト: nisimpson/awful2
 public ForumDataSource(ForumMetadata data)
     : base()
 {
     SetMetadata(data);
 }