diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj
index 8188b4adb..f04cfcec1 100644
--- a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj
+++ b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj
@@ -98,6 +98,7 @@
+
diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Services/XmlRpcHandler.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Services/XmlRpcHandler.cs
new file mode 100644
index 000000000..ec788b7c1
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Blogs/Services/XmlRpcHandler.cs
@@ -0,0 +1,138 @@
+using System;
+using Orchard.Core.XmlRpc;
+using Orchard.Core.XmlRpc.Models;
+using Orchard.Logging;
+
+namespace Orchard.Blogs.Services {
+ public class XmlRpcHandler : IXmlRpcHandler {
+ private readonly IBlogService _blogService;
+
+ public XmlRpcHandler(IBlogService blogService) {
+ _blogService = blogService;
+ Logger = NullLogger.Instance;
+ }
+
+ public ILogger Logger { get; set; }
+
+ public void Process(XmlRpcContext context) {
+ var uriBuilder = new UriBuilder(context.HttpContext.Request.Url) {
+ Path =
+ context.HttpContext.Request.
+ ApplicationPath,
+ Query = string.Empty
+ };
+
+
+ if (context.Request.MethodName == "blogger.getUsersBlogs") {
+ var a = new XRpcArray();
+ foreach (var blog in _blogService.Get()) {
+ a.Add(new XRpcStruct()
+ .Set("url", uriBuilder.Path + blog.Slug)
+ .Set("blogid", blog.Id)
+ .Set("blogName", blog.Name));
+ }
+
+ context.Response = new XRpcMethodResponse().Add(a);
+ }
+
+ if (context.Request.MethodName == "metaWeblog.newPost") {
+ var result = MetaWeblogNewPost(
+ Convert.ToString(context.Request.Params[0].Value),
+ Convert.ToString(context.Request.Params[1].Value),
+ Convert.ToString(context.Request.Params[2].Value),
+ (XRpcStruct)context.Request.Params[3].Value,
+ Convert.ToBoolean(context.Request.Params[4].Value));
+
+ context.Response = new XRpcMethodResponse().Add(result);
+ }
+
+ if (context.Request.MethodName == "metaWeblog.getPost") {
+ var result = MetaWeblogGetPost(
+ Convert.ToInt32(context.Request.Params[0].Value),
+ Convert.ToString(context.Request.Params[1].Value),
+ Convert.ToString(context.Request.Params[2].Value));
+ context.Response = new XRpcMethodResponse().Add(result);
+ }
+
+ if (context.Request.MethodName == "metaWeblog.editPost") {
+ var result = MetaWeblogEditPost(
+ Convert.ToInt32(context.Request.Params[0].Value),
+ Convert.ToString(context.Request.Params[1].Value),
+ Convert.ToString(context.Request.Params[2].Value),
+ (XRpcStruct)context.Request.Params[3].Value,
+ Convert.ToBoolean(context.Request.Params[4].Value));
+ context.Response = new XRpcMethodResponse().Add(result);
+ }
+ }
+
+ private int MetaWeblogNewPost(
+ string blogId,
+ string user,
+ string password,
+ XRpcStruct content,
+ bool publish) {
+ //var title = content.Optional("title");
+ //var description = content.Optional("description");
+
+ //var pageRevision = _pageManager.CreatePage(new CreatePageParams(title, null, "TwoColumns"));
+ //pageRevision.Contents.First().Content = description;
+
+ //if (publish) {
+ // if (string.IsNullOrEmpty(pageRevision.Slug))
+ // pageRevision.Slug = "slug" + pageRevision.Page.Id;
+
+ // _pageManager.Publish(pageRevision, new PublishOptions());
+ //}
+
+ //return pageRevision.Page.Id;
+ return 1;
+ }
+
+ private XRpcStruct MetaWeblogGetPost(
+ int postId,
+ string user,
+ string password) {
+
+ //var pageRevision = _pageManager.GetLastRevision(postId);
+
+ //var url = "http://localhost/orchard/" + pageRevision.Slug;
+ //return new XRpcStruct()
+ // .Set("userid", 37)
+ // .Set("postid", pageRevision.Page.Id)
+ // .Set("description", pageRevision.Contents.First().Content)
+ // .Set("title", pageRevision.Title)
+ // .Set("link", url)
+ // .Set("permaLink", url);
+
+ throw new NotImplementedException();
+ }
+
+ private bool MetaWeblogEditPost(
+ int postId,
+ string user,
+ string password,
+ XRpcStruct content,
+ bool publish) {
+
+ //var pageRevision = _pageManager.AcquireDraft(postId);
+
+ //var title = content.Optional("title");
+ //var description = content.Optional("description");
+
+ //pageRevision.Title = title;
+ //pageRevision.Contents.First().Content = description;
+
+ //if (publish) {
+ // if (string.IsNullOrEmpty(pageRevision.Slug))
+ // pageRevision.Slug = "slug" + postId;
+
+ // _pageManager.Publish(pageRevision, new PublishOptions());
+ //}
+
+ //return true;
+
+ throw new NotImplementedException();
+ }
+
+ }
+}