ssg: StaticSiteClient: EditPost impl
This commit is contained in:
parent
b10e85e829
commit
b9287e65a4
|
@ -98,8 +98,10 @@ namespace OpenLiveWriter.BlogClient.Clients.StaticSite
|
||||||
var newPostId = ssgPost.EnsureId();
|
var newPostId = ssgPost.EnsureId();
|
||||||
// Ensure the post has a date
|
// Ensure the post has a date
|
||||||
ssgPost.EnsureDatePublished();
|
ssgPost.EnsureDatePublished();
|
||||||
// Save the post to disk
|
// Ensure the post has a safe slug
|
||||||
ssgPost.SaveToFile();
|
ssgPost.EnsureSafeSlug();
|
||||||
|
// Save the post to disk under it's new slug-based path
|
||||||
|
ssgPost.SaveToFile(ssgPost.FilePathBySlug);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -113,7 +115,7 @@ namespace OpenLiveWriter.BlogClient.Clients.StaticSite
|
||||||
} catch (Exception ex)
|
} catch (Exception ex)
|
||||||
{
|
{
|
||||||
// Clean up our output file
|
// Clean up our output file
|
||||||
File.Delete(ssgPost.FilePath);
|
File.Delete(ssgPost.FilePathBySlug);
|
||||||
// Throw the exception up
|
// Throw the exception up
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
|
@ -121,9 +123,94 @@ namespace OpenLiveWriter.BlogClient.Clients.StaticSite
|
||||||
|
|
||||||
public bool EditPost(string blogId, BlogPost post, INewCategoryContext newCategoryContext, bool publish, out string etag, out XmlDocument remotePost)
|
public bool EditPost(string blogId, BlogPost post, INewCategoryContext newCategoryContext, bool publish, out string etag, out XmlDocument remotePost)
|
||||||
{
|
{
|
||||||
|
if (!publish && !Options.SupportsPostAsDraft)
|
||||||
|
{
|
||||||
|
Trace.Fail("Static site does not support drafts, cannot post.");
|
||||||
|
throw new BlogClientPostAsDraftUnsupportedException();
|
||||||
|
}
|
||||||
|
remotePost = null;
|
||||||
etag = "";
|
etag = "";
|
||||||
remotePost = new XmlDocument();
|
|
||||||
throw new NotImplementedException("not implemented yet :(");
|
// Create a StaticSitePost on the provided post
|
||||||
|
var ssgPost = new StaticSitePost(Config, post);
|
||||||
|
|
||||||
|
if(ssgPost.FilePathById == null)
|
||||||
|
{
|
||||||
|
// Existing post could not be found to edit, call NewPost instead;
|
||||||
|
NewPost(blogId, post, newCategoryContext, publish, out etag, out remotePost);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set slug to existing slug on post
|
||||||
|
ssgPost.Slug = post.Slug;
|
||||||
|
// Copy the existing post to a temporary file
|
||||||
|
var backupFileName = Path.GetTempFileName();
|
||||||
|
File.Copy(ssgPost.FilePathById, backupFileName, true);
|
||||||
|
|
||||||
|
bool renameOccurred = false;
|
||||||
|
// Store the old file path and slug
|
||||||
|
string oldPath = ssgPost.FilePathById;
|
||||||
|
string oldSlug = ssgPost.DiskSlug;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Determine if the post file needs renaming (slug change)
|
||||||
|
if (ssgPost.FilePathById != ssgPost.FilePathBySlug)
|
||||||
|
{
|
||||||
|
// Set the new safe slug
|
||||||
|
ssgPost.Slug = ssgPost.FindNewSlug(ssgPost.Slug, safe: true);
|
||||||
|
// If the new slug is equal to the old, save to the existing file (most likely a date change)
|
||||||
|
if (oldSlug == ssgPost.Slug)
|
||||||
|
{
|
||||||
|
// Save the post to disk based on it's existing id
|
||||||
|
ssgPost.SaveToFile(ssgPost.FilePathById);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
renameOccurred = true;
|
||||||
|
|
||||||
|
// Remove the old file
|
||||||
|
File.Delete(oldPath);
|
||||||
|
// Save to the new file
|
||||||
|
ssgPost.SaveToFile(ssgPost.FilePathBySlug);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Save the post to disk based on it's existing id
|
||||||
|
ssgPost.SaveToFile(ssgPost.FilePathById);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build the site, if required
|
||||||
|
if (Config.BuildCommand != string.Empty) DoSiteBuild();
|
||||||
|
|
||||||
|
// Publish the site
|
||||||
|
DoSitePublish();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Clean up the failed output
|
||||||
|
if(renameOccurred)
|
||||||
|
{
|
||||||
|
// Delete the rename target
|
||||||
|
File.Delete(ssgPost.FilePathBySlug);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
// Delete the original file
|
||||||
|
File.Delete(ssgPost.FilePathById);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy the backup to the old location
|
||||||
|
File.Copy(backupFileName, oldPath, overwrite: true);
|
||||||
|
|
||||||
|
// Delete the backup
|
||||||
|
File.Delete(backupFileName);
|
||||||
|
|
||||||
|
// Throw the exception up
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in New Issue