ssg: StaticSiteClient: basic building and publishing
This commit is contained in:
parent
c7f36efabd
commit
299c6081d5
|
@ -8,9 +8,11 @@ using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
|
||||||
using OpenLiveWriter.BlogClient.Providers;
|
using OpenLiveWriter.BlogClient.Providers;
|
||||||
using OpenLiveWriter.CoreServices;
|
using OpenLiveWriter.CoreServices;
|
||||||
using OpenLiveWriter.Extensibility.BlogClient;
|
using OpenLiveWriter.Extensibility.BlogClient;
|
||||||
|
using OpenLiveWriter.Localization;
|
||||||
|
|
||||||
using YamlDotNet.Serialization;
|
using YamlDotNet.Serialization;
|
||||||
using YamlDotNet.Serialization.NamingConventions;
|
using YamlDotNet.Serialization.NamingConventions;
|
||||||
|
@ -98,6 +100,8 @@ namespace OpenLiveWriter.BlogClient.Clients
|
||||||
|
|
||||||
// Make post front matter
|
// Make post front matter
|
||||||
var frontMatter = GetFrontMatterForPost(post);
|
var frontMatter = GetFrontMatterForPost(post);
|
||||||
|
|
||||||
|
// Build the output
|
||||||
var outputFile = new StringBuilder();
|
var outputFile = new StringBuilder();
|
||||||
outputFile.AppendLine("---");
|
outputFile.AppendLine("---");
|
||||||
outputFile.Append(frontMatter.Serialize());
|
outputFile.Append(frontMatter.Serialize());
|
||||||
|
@ -105,10 +109,16 @@ namespace OpenLiveWriter.BlogClient.Clients
|
||||||
outputFile.AppendLine();
|
outputFile.AppendLine();
|
||||||
outputFile.Append(post.Contents);
|
outputFile.Append(post.Contents);
|
||||||
|
|
||||||
|
// Write to file
|
||||||
var fileName = GetFileNameForPost(post, publish);
|
var fileName = GetFileNameForPost(post, publish);
|
||||||
|
|
||||||
File.WriteAllText($"{LocalSitePath}/{PostsPath}/{fileName}.html", outputFile.ToString());
|
File.WriteAllText($"{LocalSitePath}/{PostsPath}/{fileName}.html", outputFile.ToString());
|
||||||
|
|
||||||
|
// Build the site, if required
|
||||||
|
if (BuildCommand != string.Empty) DoSiteBuild();
|
||||||
|
|
||||||
|
// Publish the site
|
||||||
|
DoSitePublish();
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,9 +185,78 @@ namespace OpenLiveWriter.BlogClient.Clients
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsSecure => true;
|
public bool IsSecure => true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Always false. It is not possible to perform remote detection on a static site, as
|
||||||
|
/// it may not be published yet, or published to a web location.
|
||||||
|
/// </summary>
|
||||||
|
public override bool RemoteDetectionPossible { get; } = false;
|
||||||
|
|
||||||
// Authentication is handled by publish script at the moment
|
// Authentication is handled by publish script at the moment
|
||||||
protected override bool RequiresPassword => false;
|
protected override bool RequiresPassword => false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Build the static site
|
||||||
|
/// </summary>
|
||||||
|
private void DoSiteBuild()
|
||||||
|
{
|
||||||
|
var proc = RunSiteCommand(BuildCommand);
|
||||||
|
if (proc.ExitCode != 0)
|
||||||
|
{
|
||||||
|
throw new BlogClientException(
|
||||||
|
StringId.SSGBuildErrorTitle,
|
||||||
|
StringId.SSGBuildErrorText,
|
||||||
|
StringId.ProductNameVersioned,
|
||||||
|
proc.ExitCode.ToString(),
|
||||||
|
proc.StandardOutput.ReadToEnd(),
|
||||||
|
proc.StandardError.ReadToEnd()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Publish the static site
|
||||||
|
/// </summary>
|
||||||
|
private void DoSitePublish()
|
||||||
|
{
|
||||||
|
var proc = RunSiteCommand(PublishCommand);
|
||||||
|
if (proc.ExitCode != 0)
|
||||||
|
{
|
||||||
|
throw new BlogClientException(
|
||||||
|
StringId.SSGPublishErrorTitle,
|
||||||
|
StringId.SSGPublishErrorText,
|
||||||
|
StringId.ProductNameVersioned,
|
||||||
|
proc.ExitCode.ToString(),
|
||||||
|
proc.StandardOutput.ReadToEnd(),
|
||||||
|
proc.StandardError.ReadToEnd()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Run a command from the site directory
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="localCommand">Command to run, releative to site directory</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private Process RunSiteCommand(string localCommand)
|
||||||
|
{
|
||||||
|
var proc = new Process();
|
||||||
|
proc.StartInfo.FileName = "cmd.exe";
|
||||||
|
// Set working directory to local site path
|
||||||
|
proc.StartInfo.WorkingDirectory = LocalSitePath;
|
||||||
|
|
||||||
|
proc.StartInfo.RedirectStandardError = true;
|
||||||
|
proc.StartInfo.RedirectStandardOutput = true;
|
||||||
|
proc.StartInfo.CreateNoWindow = true;
|
||||||
|
proc.StartInfo.UseShellExecute = false;
|
||||||
|
|
||||||
|
proc.StartInfo.Arguments = $"/C {localCommand}";
|
||||||
|
proc.Start();
|
||||||
|
proc.WaitForExit();
|
||||||
|
|
||||||
|
// The Process will have all standard output waiting in buffer
|
||||||
|
return proc;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets the relevant BlogClientOptions for this client
|
/// Sets the relevant BlogClientOptions for this client
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -220,12 +299,6 @@ namespace OpenLiveWriter.BlogClient.Clients
|
||||||
return $"{post.DatePublished.ToString("yyyy-MM-dd")}-{safeTitle}";
|
return $"{post.DatePublished.ToString("yyyy-MM-dd")}-{safeTitle}";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Always false. It is not possible to perform remote detection on a static site, as
|
|
||||||
/// it may not be published yet, or published to a web location.
|
|
||||||
/// </summary>
|
|
||||||
public override bool RemoteDetectionPossible { get; } = false;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get a PostFrontMatter instance for a post
|
/// Get a PostFrontMatter instance for a post
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in New Issue