// Copyright 2005 by Omar Al Zabir. All rights are reserved.
//
// If you like this code then feel free to go ahead and use it.
// The only thing I ask is that you don't remove or alter my copyright notice.
//
// Your use of this software is entirely at your own risk. I make no claims or
// warrantees about the reliability or fitness of this code for any particular purpose.
// If you make changes or additions to this code please mark your code as being yours.
//
// website http://www.oazabir.com, email OmarAlZabir@gmail.com, msn oazabir@hotmail.com
using System;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Collections;
using System.Windows.Forms;
using Sgml;
namespace RSSBlogAPI{
using RSSCommon;
using RSSCommon.Helper;
/// <summary>
/// Provides weblogging features
/// </summary>
[XmlRoot("weblogProvider")]
[Serializable]
public class WebLogProvider
{
public const string MD5_HASH_PROVIDER = "MD5CryptoServiceProvider";
public readonly static WebLogProvider Instance = new WebLogProvider();
public WebLogProvider() {}
private ArrayList _WebLogs = new ArrayList();
[XmlArray("weblogs"), XmlArrayItem("weblog", typeof(WebLog)) ]
public ArrayList WebLogs
{
get { return _WebLogs; }
set { _WebLogs = value; }
}
/// <summary>
/// Load web log configurations
/// </summary>
public static void LoadWebLogs()
{
string webLogConfigPath = Path.Combine( ApplicationSettings.ApplicationDataPath, "weblogs.xml" );
if( File.Exists( webLogConfigPath ) )
{
using( FileStream stream = new FileStream( webLogConfigPath, FileMode.Open ) )
{
WebLogProvider.Instance.WebLogs = SerializationHelper.DeserializeArraylist( stream, typeof( WebLog ) );
}
}
}
public static void SaveWebLogs()
{
string webLogConfigPath = Path.Combine( ApplicationSettings.ApplicationDataPath, "weblogs.xml" );
using( FileStream stream = new FileStream( webLogConfigPath, FileMode.Create ) )
{
SerializationHelper.Serialize( stream, WebLogProvider.Instance.WebLogs, typeof( WebLog ) );
}
}
/*
public void NewPost( WebLog log, Form parent )
{
using( PostForm form = new PostForm( ) )
{
form.SetWebLog( log );
if( DialogResult.OK == form.ShowDialog( parent ) )
{
// Make a post
}
}
}
public bool EditWebLog(WebLog log, Form parent)
{
using( WebLogEditor form = new WebLogEditor() )
{
form.EditWebLog(log);
if( DialogResult.OK == form.ShowDialog(parent) )
{
return true;
}
}
return false;
}
*/
public string PostBlog( WebLog log, Post post )
{
this.FilterHtml( post );
return this.GetBlogEngine( log ).PostItem( post );
}
private void FilterHtml( Post post )
{
if( post.Text.IndexOf("</") > 0 )
{
HtmlReader reader = new HtmlReader(post.Text);
reader.DocType ="HTML";
StringBuilder builder = new StringBuilder();
StringWriter writer = new StringWriter( builder );
HtmlWriter w = new HtmlWriter(writer);
// Set properties to filter out content
w.FilterOutput = true;
//w.AllowedAttributes = Configuration.Instance.AllowedAttributes;
//w.AllowedTags = Configuration.Instance.AllowedTags;
w.ReduceConsecutiveSpace = true;
w.RemoveNewlines = true;
reader.Read();
// On this is on, we write to output
bool writerOn = false;
while(!reader.EOF)
{
if( null != reader.Name )
{
// If body tag starts, we turn on the writer to write inside body tag
if( "body" == reader.Name.ToLower() )
{
if( reader.NodeType == XmlNodeType.Element )
writerOn = true;
else
writerOn = false;
reader.Read(); // skip the body tag
}
if( writerOn )
{
w.WriteNode( reader, false );
}
else
reader.Read();
}
else
{
reader.Read();
}
}
w.Flush();
w.Close();
post.Text = builder.ToString();
}
}
/*
public WebLog AddNewWeblog(Form parent)
{
using( WebLogEditor form = new WebLogEditor() )
{
if( DialogResult.OK == form.ShowDialog(parent) )
{
WebLog newWebLog = form.NewWebLog;
_WebLogs.Add( newWebLog );
return newWebLog;
}
}
return null;
}
public void DeleteWebLog(WebLog log)
{
_WebLogs.Remove( log );
}
*/
public void Test(WebLog log)
{
GetBlogEngine(log).Test();
}
public Category[] GetCategories(WebLog log)
{
return GetBlogEngine(log).GetCategories();
}
private BlogAPIBase GetBlogEngine( WebLog log )
{
BlogAPIBase api;
if( log.Engine == EngineEnum.DotText )
{
api = new DotTextAPI();
}
else if( log.Engine == EngineEnum.CommunityServer )
{
api = new CommunityServerAPI();
}
else // if( log.Engine == EngineEnum.MetablogAPI )
{
api = new MetaWeblog( log );
}
api.Url = log.ServiceUrl;
api.Username = log.UserName;
// Decrypt password
string password = RSSCommon.PropertyEditor.PasswordEditor.PasswordProvider.Decrypt( log.Password );
if( log.SendPasswordHashed )
{
api.Password = RSSCommon.PropertyEditor.PasswordEditor.PasswordProvider.Hash( password );
}
else
{
api.Password = password;
}
api.BlogId = log.BlogId;
if( Configuration.Instance.ProxyName.Length > 0 )
{
api.ProxyServer = new System.Net.WebProxy(
Configuration.Instance.ProxyName,
Configuration.Instance.ProxyPort );
if( Configuration.Instance.ProxyUserName.Length > 0 )
{
string proxyPassword = RSSCommon.PropertyEditor.PasswordEditor.PasswordProvider.Decrypt( Configuration.Instance.ProxyUserPassword );
api.ProxyServer.Credentials = new System.Net.NetworkCredential(
Configuration.Instance.ProxyUserName, proxyPassword );
}
}
else
{
api.ProxyServer = System.Net.WebProxy.GetDefaultProxy();
}
return api;
}
}
}
|