public static async Task <IEnumerable <ArticleMetadata> > GetArticleList(this DropboxClient client) { var list = await client.Files.ListFolderAsync(string.Empty); var articles = new List <ArticleMetadata>(); foreach (var item in list.Entries) { if (!item.IsFile) { continue; } var fileMetadata = item.AsFile; var metadata = ArticleMetadata.Parse(item.Name, fileMetadata.Rev); if (metadata != null) { articles.Add(metadata); } } articles.Sort((l, r) => l.Date.CompareTo(r.Date)); return(articles); }
public static Article FromMetadata(FileMetadata metadata, HtmlString content) { var parsed = metadata.Name.ParseBlogFileName(); return(new Article( metadata.Name, ArticleMetadata.Parse(metadata.Name, metadata.Rev), content)); }
public static async Task<Article> GetArticle(this DropboxClient client, string blogName, ArticleMetadata metadata, bool bypassCache = false) { if (metadata == null || string.IsNullOrEmpty(blogName)) { return null; } var key = string.Format(CultureInfo.InvariantCulture, "{0}:{1}", blogName, metadata.Name); Article article; if (!bypassCache) { lock (ArticleCache) { if (ArticleCache.TryGetValue(key, out article)) { if (article.Metadata.Rev == metadata.Rev) { return article; } } } } try { using (var download = await client.Files.DownloadAsync("/" + metadata.Filename)) { var content = await download.GetContentAsStringAsync(); var html = content.ParseMarkdown(); article = Article.FromMetadata(download.Response, html); } } catch (ApiException<DownloadError> e) { var pathError = e.ErrorResponse.AsPath; if (pathError != null && pathError.Value.IsNotFile) { return null; } throw; } lock (ArticleCache) { ArticleCache[key] = article; } return article; }
public Article(string name, ArticleMetadata metadata, HtmlString content) { this.Name = name; this.Metadata = metadata; this.Content = content; }
public static async Task <Article> GetArticle(this DropboxClient client, string blogName, ArticleMetadata metadata, bool bypassCache = false) { if (metadata == null || string.IsNullOrEmpty(blogName)) { return(null); } var key = string.Format(CultureInfo.InvariantCulture, "{0}:{1}", blogName, metadata.Name); Article article; if (!bypassCache) { lock (ArticleCache) { if (ArticleCache.TryGetValue(key, out article)) { if (article.Metadata.Rev == metadata.Rev) { return(article); } } } } try { using (var download = await client.Files.DownloadAsync("/" + metadata.Filename)) { var content = await download.GetContentAsStringAsync(); var html = content.ParseMarkdown(); article = Article.FromMetadata(download.Response, html); } } catch (ApiException <DownloadError> e) { if (e.ErrorResponse.IsNoFile) { return(null); } throw; } lock (ArticleCache) { ArticleCache[key] = article; } return(article); }