Live Writer Plug-in for Sharing Technical Post

July 17, 2010

4 comments

Adding a new post to my blog was always a daunting task.
I had to follow these steps:



  • Write the post on Windows Live Writer

  • Publish it and get the post link

  • Submit to DotNetKicks and get their counter html

  • Submit to DotNetShoutout and get their counter html

  • Prepare html for my CodeProject blog feed

  • Edit the post and add the html I’ve collected in the previous steps

  • Republish post

Well, no more!


Inspired by Guy Burstein’s post I’ve decided to write my own Live Writer Plug-in that will handle all of this mess for me.


In order to test the plug-in I have to publish something on my blog.
So, this is it. Wish me luck.


How to implement a Windows Live Writer Plug-in that adds sharing buttons to your post


First, credit goes to Guy Burstein for providing a reflectable DLL in his post.
Also, I’ve used guidelines for Windows Live Writer Plug-in written by Scøtt Lovegrove.


The end result is a plug-in that adds to your posts the following share icons:


image


Since enough information already exists on this subject, I’ll just quickly review the steps I’ve followed:


1. Create new Class Library project, using .NET Framework 2.0 (!)


Not sure why, but Microsoft recommends to use version 2.0 of the .NET Framework when writing a Windows Liver Writer plug-in.


2. Add reference to WindowsLive.Writer.Api.Dll, which resides in the Windows Live Writer folder (e.g. \Program Files\Windows Live\Writer\)


3. Add “using WindowsLive.Writer.Api;”


4. Create a class that inherits HeaderFooterSource


This type of plug-in allows us to add custom generated html in either the header or the footer of the post.


5. Put WriterPlugin attribute on the class


Here is the code for a basic version of the plug-in (only has one button):




using System.Text;
using System.Windows.Forms;
using WindowsLive.Writer.Api;

namespace ShareTechPost
{
    [WriterPlugin(“00407F92-2152-4339-A9A5-B89873EB77A7”,
        “Share Technological Post”,
        PublisherUrl = “http://blogs.microsoft.co.il/blogs/arik/”,
        Description = “A plugin that lets you share a technological” +
                      ” post on numerous sharing sites.”,
        ImagePath = “writer.png”,
        HasEditableOptions = true)]
    public class ShareTechPostPlugin : HeaderFooterSource
    {
        private Settings _settings;

        public override bool RequiresPermalink
        {
            get
            {
                return true;
            }
        }

        public override void Initialize(IProperties pluginOptions)
        {
            base.Initialize(pluginOptions);

            _settings = new Settings(pluginOptions);
        }

        public override void EditOptions(IWin32Window dialogOwner)
        {
            SettingsForm settingsForm = new SettingsForm(_settings);
            settingsForm.ShowDialog(dialogOwner);
        }

        public override string GeneratePreviewHtml(
            ISmartContent smartContent,
            IPublishingContext publishingContext,
            out Position position)
        {
            position = Position.Footer;

            StringBuilder generatedHtml = new StringBuilder();

            if (_settings.AddDotNetKicks)
            {
                generatedHtml.AppendFormat
                    (“<a href=\”http://www.dotnetkicks.com/kick/” +
                    “?url={0}\”><img border=\”0\” “+
                    “alt=\”kick it on DotNetKicks.com\” “ +
                    “src=\”http://www.dotnetkicks.com/” +
                    “Services/Images/KickItImageGenerator.ashx” +
                    “?url={0}&amp;bgcolor=6600FF\” /></a> “,
                    publishingContext.PostInfo.Permalink);
            }
                        
            return generatedHtml.ToString();
        }

        public override string GeneratePublishHtml(
            IWin32Window dialogOwner,
            ISmartContent smartContent,
            IPublishingContext publishingContext,
            bool publish,
            out Position position)
        {
            return GeneratePreviewHtml(
                smartContent,
                publishingContext,
                out position);
        }
    }
}

The Settings class and SettingsForm just lets you control some of the sharing options.


This is how the settings form look like:


image


You can find the full source for this plug-in here.


That’s it for now,
Arik Poznanski.



kick it on DotNetKicks.com Shout it

Add comment
facebook linkedin twitter email

Leave a Reply

4 comments

  1. Gil FinkJuly 18, 2010 ב 09:52

    Thanks Arik!
    I’ll suggest to upload the add-in to the Live Writer gallery.

  2. arikJuly 18, 2010 ב 10:01

    I will, as soon as I’ll check why I get some HTML errors on my page.

    DotNetKicks and DotNetShoutout buttons seem to work fine.
    (You can set in the settings to only show them)
    I need to check the other two buttons.

  3. arikJuly 22, 2010 ב 01:03

    General information:
    It turns out the two other buttons “DZone” and “AddThis” can’t be used on community-server based blogs, since they use javascript code.

  4. Tomer ShamamJanuary 14, 2011 ב 13:42

    Thanks Arik for the Plugin. It’s really cool.