ちょっとだけ状況が改善。
「SharpLab. – publish notification hooksでpost内容を安全に書き換えるには」のコメント欄を受けて、「サーバーに修正後のエントリをアップ、そのアップされたエントリをWLWでDLして再読み込み」という方法を試してみた。
public override bool OnPrePublish(System.Windows.Forms.IWin32Window dialogOwner, IProperties properties, IPublishingContext publishingContext, bool publish) {
PostEditorForm postEditorForm = getPostEditorForm(dialogOwner);
Blog blog = new Blog(postEditorForm.CurrentBlogId);
//publishingContextからリフレクションでBlogPostEditingManagerを取得
FieldInfo editingContextFieldInfo = publishingContext.GetType().GetField("_editingContext", BindingFlags.NonPublic | BindingFlags.Instance);
BlogPostEditingManager manager = (BlogPostEditingManager)editingContextFieldInfo.GetValue(publishingContext);
PropertyInfo localFilePropertyInfo = manager.GetType().GetProperty("LocalFile", BindingFlags.NonPublic | BindingFlags.Instance);
PostEditorFile postEditorFile = (PostEditorFile)localFilePropertyInfo.GetValue(manager,null);
BlogPost blogPost = (BlogPost)publishingContext.PostInfo; ;
blogPost.Title = "test";
return true;
}
このようにOnPrePublishメソッド内では投稿内容の書き換えだけを行って、
public override void OnPostPublish(IWin32Window dialogOwner, IProperties properties, IPublishingContext publishingContext, bool publish) {
PostEditorForm postEditorForm = getPostEditorForm(dialogOwner);
Blog blog = new Blog(postEditorForm.CurrentBlogId);
//publishingContextからリフレクションでBlogPostEditingManagerを取得
FieldInfo editingContextFieldInfo = publishingContext.GetType().GetField("_editingContext", BindingFlags.NonPublic | BindingFlags.Instance);
BlogPostEditingManager manager = (BlogPostEditingManager)editingContextFieldInfo.GetValue(publishingContext);
BlogPost blogPost = blog.GetPost(publishingContext.PostInfo.Id, publishingContext.PostInfo.IsPage);
manager.EditPost(new BlogPostEditingContext(postEditorForm.CurrentBlogId, blogPost));
}
OnPostPublishメソッド内で記事の再読み込みを行うというやり方でテスト。
YATTA!この場合だと、画像が消えてしまうことなく、書き換え内容を投稿画面に反映することが出来た。だが一方で、「Smart Content」部を選択しても、右のように"Selected item cannot be edited."というメッセージが出て、編集出来なくなるという問題が。また、画像も良く見てみると、ローカル画像という扱いではなく、Web画像という扱いになってしまっている。つまりこの方法ではWindows Live Writerがローカルに保存した記事についての情報(.wpost拡張子でMy Weblog Posts以下に保存されている奴)を利用出来ていないようだ。なかなか難しいな…。このやり方でのOnPrePublishメソッド部のみ実行し、その後手動でサイドバーのRecently Postedの一覧の中から投稿したエントリを選択するというやり方なら、上手くマージされた状態で読み込め、「Smart Content」部も再編集可能なので、どこかに方法はあるはずだとは思うのだが…。
Related Entries
Comments :2
- JZ5 08-08-03 16:14:58 JST
-
うーむ。難しいですねw
この方法を使うと、手動で再度Webから開いても編集できない状態になるんですか? - shiroica 08-08-04 00:59:06 JST
-
いえ、確か読み込めたかと。BlogクラスのGetPostメソッドを使ってWebから読み込んでいるのが悪いのかなぁ、とあたりをつけているのですが、よくわかりません。
XP搭載PCを入手。