Esempio n. 1
0
 public ForumItem(ForumItemType type, string id, string link, string updated)
 {
     Type    = type;
     Id      = id;
     Link    = link;
     Updated = updated;
 }
Esempio n. 2
0
        async Task <ForumItem> CheckItemIsUpdated(ForumItemType type, HtmlNode htmlItem)
        {
            var link         = GetHtmlValue(htmlItem, Configuration.GetSection($"{type}s:Link"));
            var updated      = GetHtmlValue(htmlItem, Configuration.GetSection($"{type}s:Updated"));
            var idUrlPattern = IdUrlPattern[type];
            var idIdPattern  = IdIdPattern[type];
            var idString     = (idUrlPattern != null ? idUrlPattern.Match(link) : idIdPattern.Match(htmlItem.Attributes["id"].Value))?.Groups?[1]?.Value;

            if (idString == null)
            {
                throw new InvalidDataException($"Cannot find ID for {type}");
            }
            if (!int.TryParse(idString, out var id))
            {
                throw new InvalidDataException($"Cannot parse ID for {type}");
            }
            var uniqueId = $"{Configuration.Key}/{id}";

            var lastUpdated = await Storage.ExecuteScalarAsync($"SELECT Updated FROM {type}s WHERE {type}Id = @Param0", uniqueId) as string;

            if (updated == lastUpdated)
            {
                return(null);
            }

            switch (type)
            {
            case ForumItemType.Forum:
            case ForumItemType.Topic:
                return(new ForumItem(type, uniqueId, link, updated));

            case ForumItemType.Post:
                return(new ForumPostItem(
                           GetHtmlValue(htmlItem.OwnerDocument.DocumentNode, Configuration.GetSection("Posts:ForumName")),
                           GetHtmlValue(htmlItem.OwnerDocument.DocumentNode, Configuration.GetSection("Posts:TopicName")),
                           uniqueId,
                           GetHtmlValue(htmlItem, Configuration.GetSection("Posts:Link")),
                           GetHtmlValue <int>(htmlItem, Configuration.GetSection("Posts:Index")),
                           GetHtmlValue(htmlItem, Configuration.GetSection("Posts:ReplyLink")),
                           GetHtmlValue <DateTimeOffset>(htmlItem, Configuration.GetSection("Posts:Date")),
                           GetHtmlValue(htmlItem, Configuration.GetSection("Posts:Author")),
                           GetHtmlValue <HtmlNode>(htmlItem, Configuration.GetSection("Posts:Body"))
                           ));

            default:
                throw new InvalidDataException($"Unknown type {type} in CheckItemIsUpdated");
            }
        }