// 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.Diagnostics;
using System.IO;
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
using Microsoft.Practices.EnterpriseLibrary.Logging;
namespace RSSFeeder.Helpers{
using RSSCommon;
using RSSCommon.Helper;
using RSSBlogAPI;
/// <summary>
/// Helper class for storing/retrieving global configuration
/// </summary>
public class ConfigurationHelper
{
public const string CONFIGURATION_BACKUP_FILE = "ConfigurationBackup.xml";
public static void CopyFiles()
{
#region Log
Logger.Write("Copying files...");
#endregion
string exeFileName = Process.GetCurrentProcess().MainModule.FileName;
DateTime exeDateTime = File.GetLastWriteTime( exeFileName );
// 1. Create the default XSLT file
Configuration.Instance.XSLFileName = Path.Combine( ApplicationSettings.ApplicationDataPath, "default.xslt" );
if( !File.Exists( Configuration.Instance.XSLFileName ) || File.GetLastWriteTime( Configuration.Instance.XSLFileName ) < exeDateTime )
SerializationHelper.WriteEmbeddedFile( "default.xslt", Configuration.Instance.XSLFileName );
// 2. Copy the java script file
//string jsFilePath = Path.Combine( ApplicationSettings.ApplicationDataPath, "fix.js" );
//SerializationHelper.WriteEmbeddedFile( "RSSFeeder.Resources.fix.js", jsFilePath );
// 3. Copy newspaper XSL
Configuration.Instance.NewspaperXSL = Path.Combine( ApplicationSettings.ApplicationDataPath, "rss2html.xslt" );
if( !File.Exists( Configuration.Instance.NewspaperXSL ) || File.GetLastWriteTime( Configuration.Instance.NewspaperXSL ) < exeDateTime )
SerializationHelper.WriteEmbeddedFile( "rss2html.xslt", Configuration.Instance.NewspaperXSL );
// 4. Copy outlook view XML
Configuration.Instance.OutlookViewXmlPath = Path.Combine( ApplicationSettings.ApplicationDataPath, "RSSFeederView.xml" );
if( !File.Exists( Configuration.Instance.OutlookViewXmlPath ) || File.GetLastWriteTime( Configuration.Instance.OutlookViewXmlPath ) < exeDateTime )
SerializationHelper.WriteEmbeddedFile( "RSSFeederView.xml", Configuration.Instance.OutlookViewXmlPath );
// 5. Copy outlook XSL
Configuration.Instance.OutlookXSL = Path.Combine( ApplicationSettings.ApplicationDataPath, "outlook.xslt" );
if( !File.Exists( Configuration.Instance.OutlookXSL ) || File.GetLastWriteTime( Configuration.Instance.OutlookXSL ) < exeDateTime )
SerializationHelper.WriteEmbeddedFile( "outlook.xslt", Configuration.Instance.OutlookXSL );
// 6. Atom to RSS Converter XSL
Configuration.Instance.AtomToRssXsl= Path.Combine( ApplicationSettings.ApplicationDataPath, "atomtorss2.xslt" );
if( !File.Exists( Configuration.Instance.AtomToRssXsl ) || File.GetLastWriteTime( Configuration.Instance.AtomToRssXsl ) < exeDateTime )
SerializationHelper.WriteEmbeddedFile( "atomtorss2.xslt", Configuration.Instance.AtomToRssXsl );
}
public static void LoadGlobalSettings()
{
EntLibHelper.LoadConfiguration();
// Try loading the web log configuration. For first time, it may fail, never mind
try
{
WebLogProvider.LoadWebLogs();
}
catch
{
}
// If this is the new installation, try restoring the old configuration
if( Configuration.Instance.IsNewInstall )
{
string configPath = Path.Combine( ApplicationSettings.ApplicationDataPath, CONFIGURATION_BACKUP_FILE );
if( File.Exists( configPath ) )
{
using( FileStream file = new FileStream( configPath, FileMode.Open ) )
{
Configuration oldConfig = (Configuration)SerializationHelper.Deserialize( file, typeof( Configuration ) );
// Copy old config settings to new config
SerializationHelper.CopyProperties( oldConfig, Configuration.Instance );
}
}
Configuration.Instance.IsNewInstall = false;
SaveGlobalSettings();
}
RSSCommon.PropertyEditor.PasswordEditor.PasswordProvider = new EntLibHelper();
// Subscribe to change event so that whenever the configuration object changes, it is saved
Configuration.Instance.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Instance_PropertyChanged);
}
public static void SaveGlobalSettings()
{
EntLibHelper.Debug("Saving configuration", "");
EntLibHelper.SaveConfiguration();
// 6. Copy the configuration file to application data in order to maintain a backup of it.
// Next time when a new version comes, we need to get settings from this backup
string configPath = Path.Combine( ApplicationSettings.ApplicationDataPath, CONFIGURATION_BACKUP_FILE );
using( FileStream file = new FileStream( configPath, FileMode.Create ) )
{
SerializationHelper.Serialize( file, Configuration.Instance );
}
WebLogProvider.SaveWebLogs();
}
private static void Instance_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if( Configuration.Instance.LoadAtStartup )
RegistryHelper.RegisterAtStartup();
else
RegistryHelper.UnregisterAtStartup();
SaveGlobalSettings();
}
}
}
|