ssg: StaticSitePage impl
This commit is contained in:
parent
5ee2844533
commit
45196f5448
|
@ -12,7 +12,7 @@ using OpenLiveWriter.Extensibility.BlogClient;
|
|||
|
||||
namespace OpenLiveWriter.BlogClient.Clients.StaticSite
|
||||
{
|
||||
public class StaticSitePage : StaticSitePost
|
||||
public class StaticSitePage : StaticSiteItem
|
||||
{
|
||||
public StaticSitePage(StaticSiteConfig config) : base(config)
|
||||
{
|
||||
|
@ -22,6 +22,94 @@ namespace OpenLiveWriter.BlogClient.Clients.StaticSite
|
|||
{
|
||||
}
|
||||
|
||||
public override string FilePathById
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_filePathById != null) return _filePathById;
|
||||
var foundFile = Directory.GetFiles(Path.Combine(SiteConfig.LocalSitePath, SiteConfig.PagesPath), "*.html")
|
||||
.Where(pageFile =>
|
||||
{
|
||||
try
|
||||
{
|
||||
var page = LoadFromFile(Path.Combine(SiteConfig.LocalSitePath, SiteConfig.PagesPath, pageFile), SiteConfig);
|
||||
if (page.Id == Id) return true;
|
||||
}
|
||||
catch { }
|
||||
|
||||
return false;
|
||||
}).DefaultIfEmpty(null).FirstOrDefault();
|
||||
return _filePathById = (foundFile == null ? null : Path.Combine(SiteConfig.LocalSitePath, SiteConfig.PagesPath, foundFile));
|
||||
}
|
||||
|
||||
protected set => _filePathById = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the site path for the published post
|
||||
/// eg. /2019/01/slug.html
|
||||
/// </summary>
|
||||
public override string SitePath
|
||||
{
|
||||
// TODO Generate permalink based on parent IDs
|
||||
get => throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets on-disk filename based on slug
|
||||
/// </summary>
|
||||
/// <param name="slug">Post slug</param>
|
||||
/// <returns>File name with prepended date</returns>
|
||||
protected override string GetFileNameForProvidedSlug(string slug)
|
||||
{
|
||||
// TODO, get slug for all previous posts and prepend
|
||||
return $"{slug}{PUBLISH_FILE_EXTENSION}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a path based on file name and posts path
|
||||
/// </summary>
|
||||
/// <param name="slug"></param>
|
||||
/// <returns>Path containing pages path</returns>
|
||||
protected override string GetFilePathForProvidedSlug(string slug)
|
||||
{
|
||||
return Path.Combine(
|
||||
SiteConfig.LocalSitePath,
|
||||
SiteConfig.PagesPath,
|
||||
GetFileNameForProvidedSlug(slug));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Load published page from a specified file path
|
||||
/// </summary>
|
||||
/// <param name="pageFilePath">Path to published page file</param>
|
||||
/// <param name="config">StaticSiteConfig to instantiate page with</param>
|
||||
/// <returns>A loaded StaticSitePage</returns>
|
||||
public static StaticSitePage LoadFromFile(string pageFilePath, StaticSiteConfig config)
|
||||
{
|
||||
var page = new StaticSitePage(config);
|
||||
page.LoadFromFile(pageFilePath);
|
||||
return page;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get all valid pages in PagesPath
|
||||
/// </summary>
|
||||
/// <returns>An IEnumerable of StaticSitePage</returns>
|
||||
public static IEnumerable<StaticSitePage> GetAllPages(StaticSiteConfig config) =>
|
||||
Directory.GetFiles(Path.Combine(config.LocalSitePath, config.PagesPath), "*.html")
|
||||
.Select(pageFile =>
|
||||
{
|
||||
try
|
||||
{
|
||||
return LoadFromFile(Path.Combine(config.LocalSitePath, config.PagesPath, pageFile), config);
|
||||
}
|
||||
catch { return null; }
|
||||
})
|
||||
.Where(p => p != null);
|
||||
|
||||
public static StaticSitePage GetPageById(StaticSiteConfig config, string id)
|
||||
=> GetAllPages(config).Where(page => page.Id == id).DefaultIfEmpty(null).FirstOrDefault();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace OpenLiveWriter.BlogClient.Clients.StaticSite
|
|||
{
|
||||
try
|
||||
{
|
||||
var post = StaticSitePost.LoadFromFile(Path.Combine(SiteConfig.LocalSitePath, SiteConfig.PostsPath, postFile), SiteConfig);
|
||||
var post = LoadFromFile(Path.Combine(SiteConfig.LocalSitePath, SiteConfig.PostsPath, postFile), SiteConfig);
|
||||
if (post.Id == Id) return true;
|
||||
}
|
||||
catch { }
|
||||
|
|
Loading…
Reference in New Issue