using System; using System.IO; using System.Xml; using System.Xml.XPath; using System.Diagnostics; public struct ConfigOption { private string name; private string setting; public ConfigOption( string name, string setting ) { this.name = name; this.setting = setting; } public string Name { get{ return name; } set{ name = value; } } public string Setting { get{ return setting; } set{ setting = value; } } }//struct ConfigOption public class Configurator { private int max_options; //the max amount of options to parse into our internal list private ConfigOption[] configList; private int actual_cfg; public Configurator() { max_options = 10; configList = new ConfigOption[ max_options ]; } public Configurator( int max_options ) { this.max_options = max_options; configList = new ConfigOption[ this.max_options ]; } //TODO enforce the max_options--don't parse and try to add more than you can private ConfigOption build_option( XPathNavigator nav ) { XPathNodeIterator iter = nav.SelectDescendants( XPathNodeType.Element, false); ConfigOption cfg_option = new ConfigOption( ); while( iter.MoveNext() ) { string option = iter.Current.Name; if( option == "name" ) { cfg_option.Name = iter.Current.Value; } if( option == "setting" ) { cfg_option.Setting = iter.Current.Value; } } return cfg_option; }//build_option public void parse_options( ) { int i = 0; try { XPathDocument xpdoc = new XPathDocument( "config.xml" ); XPathNavigator nav = xpdoc.CreateNavigator( ); XPathNodeIterator iter = nav.Select( "/configuration/option" ); for( i = 0; iter.MoveNext() ; i++ ) { configList[i] = build_option( iter.Current ); } actual_cfg = i; } catch( Exception ex ) { Console.WriteLine( ex.Message ); } }//parse_options public string get_config_value( string option ) { for( int i=0 ; i < actual_cfg ; i++ ) { if( configList[i].Name == option ) return configList[i].Setting; } return null; }//get_config_value public void write_configuration_file( ) { XmlTextWriter xwriter = new XmlTextWriter("config.xml",null); xwriter.Formatting = Formatting.Indented; xwriter.Indentation = 4; xwriter.WriteStartDocument( ); xwriter.WriteComment("MakeGallery Configuration - Blursoft 2004"); xwriter.WriteStartElement("configuration"); //gallery name xwriter.WriteStartElement("option"); xwriter.WriteStartElement("name"); xwriter.WriteString("gallery_name"); xwriter.WriteEndElement(); xwriter.WriteStartElement("setting"); xwriter.WriteString("USE_DIRECTORY"); xwriter.WriteEndElement( ); xwriter.WriteEndElement( ); //image extension option xwriter.WriteStartElement("option"); xwriter.WriteStartElement("name"); xwriter.WriteString("image_extension"); xwriter.WriteEndElement(); xwriter.WriteStartElement("setting"); xwriter.WriteString(".jpg"); xwriter.WriteEndElement( ); xwriter.WriteEndElement( ); //thumbsize option xwriter.WriteStartElement("option"); xwriter.WriteStartElement("name"); xwriter.WriteString("thumbsize"); xwriter.WriteEndElement(); xwriter.WriteStartElement("setting"); xwriter.WriteString("200x150"); xwriter.WriteEndElement( ); xwriter.WriteEndElement( ); //smallsize option xwriter.WriteStartElement("option"); xwriter.WriteStartElement("name"); xwriter.WriteString("smallsize"); xwriter.WriteEndElement(); xwriter.WriteStartElement("setting"); xwriter.WriteString("400x300"); xwriter.WriteEndElement( ); xwriter.WriteEndElement( ); //mediumsize option xwriter.WriteStartElement("option"); xwriter.WriteStartElement("name"); xwriter.WriteString("mediumsize"); xwriter.WriteEndElement(); xwriter.WriteStartElement("setting"); xwriter.WriteString("640x480"); xwriter.WriteEndElement( ); xwriter.WriteEndElement( ); xwriter.WriteEndElement( );//configuration xwriter.Flush( ); xwriter.Close( ); } }//class Configurator public class Thumbnailer { public void MakeThumbnail( string directory ) { Configurator config = new Configurator( ); config.parse_options( ); string thumbsize = config.get_config_value( "thumbsize" ); string smallsize = config.get_config_value( "smallsize" ); string mediumsize = config.get_config_value( "mediumsize" ); string extension = config.get_config_value("image_extension"); string gallery_name = config.get_config_value("gallery_name"); string basename = null; GalleryWriter writer = new GalleryWriter( directory ); DirectoryInfo dirInfo = new DirectoryInfo( directory ); FileInfo[] files = dirInfo.GetFiles( ); Process pImageMagick = null; ProcessStartInfo psi = new ProcessStartInfo(); psi.UseShellExecute = false; writer.WriteHeadChunk( gallery_name ); psi.WorkingDirectory = directory; psi.FileName = "convert"; foreach( FileInfo file in files ) { if( String.Compare(file.Extension,extension,true) == 0 ) { string fullpath = Path.Combine(file.DirectoryName,file.Name); basename = fullpath.Trim( extension.ToCharArray() ); string thumbname = basename+"-tb"+extension; string smallname = basename+"-sm"+extension; string mediumname = basename+"-md"+extension; Console.Write("Processing {0} ...",file.Name); psi.Arguments = "convert "+"-interlace NONE -geometry "+thumbsize+" "+fullpath+" "+thumbname; pImageMagick=Process.Start( psi ); pImageMagick.WaitForExit( ); Console.Write("thumbnail [OK] ..."); psi.Arguments = "convert "+"-interlace NONE -geometry "+smallsize+" "+fullpath+" "+smallname; pImageMagick=Process.Start( psi ); pImageMagick.WaitForExit( ); Console.Write("small [OK] ..."); psi.Arguments = "convert "+"-interlace NONE -geometry "+mediumsize+" "+fullpath+" "+mediumname; pImageMagick=Process.Start( psi ); pImageMagick.WaitForExit( ); Console.Write("medium [OK] ..."); Console.WriteLine("[DONE]"); writer.WriteNewImage( file.Name, Path.GetFileName(thumbname), Path.GetFileName(smallname), Path.GetFileName(mediumname)); } }//foreach writer.WriteTailChunk( ); writer.Close( ); } }//class Thumbnailer public class GalleryWriter { private StreamWriter writer; private string directory; public GalleryWriter( string directory ) { this.directory = directory; writer = File.CreateText( Path.Combine( directory, "index.html") ); } public void WriteNewImage( string large, string thumb, string small, string med ) { writer.WriteLine(""); writer.WriteLine("
"); writer.WriteLine(" small "); writer.WriteLine(" medium "); writer.WriteLine(" large "); writer.WriteLine("

"); } public void WriteHeadChunk( string gallery_name ) { if( String.Compare( gallery_name , "USE_DIRECTORY" ) == 0 ) gallery_name = directory; writer.WriteLine("\n gallery :: "+ gallery_name+""); writer.WriteLine("
gallery >> "+ gallery_name+"


\n
"); } public void WriteTailChunk( ) { writer.WriteLine(""); } public void Close( ) { writer.Close( ); } } public class GalleryDriver { public static void Main( string[] args ) { string VERSION = "MakeGallery 0.3.0"; Configurator configurator = new Configurator( ); Thumbnailer thumber = new Thumbnailer( ); if( args.Length == 0 ) { Console.WriteLine( VERSION + " -- Blursoft 2004"); Console.WriteLine("Usage: mono MakeGallery.exe [IMAGE_DIRECTORY]"); Console.WriteLine("Passing '--writeconfig' will write the default config file, then exit"); return; } if( String.Compare( args[0] , "--writeconfig" ) == 0 ) { configurator.write_configuration_file( ); return; } if( File.Exists("config.xml") ) Console.WriteLine("Found existing config.xml; using it."); else { Console.WriteLine("Unable to find config.xml; creating it using default settings."); configurator.write_configuration_file( ); } configurator.parse_options( ); thumber.MakeThumbnail( args[0] ); } }