/[EmuXPortal]/trunk/EmuXPortal/Api/EmuConfig.cs
ViewVC logotype

Diff of /trunk/EmuXPortal/Api/EmuConfig.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

--- trunk/EmuXPortal/Api/EmuConfig.cs	2012/08/22 02:36:47	105
+++ trunk/EmuXPortal/Api/EmuConfig.cs	2014/08/04 11:35:06	199
@@ -6,11 +6,13 @@
 using System.IO;
 using EmuXPortal.Logging;
 using System.Xml;
+using System.Diagnostics;
 
 namespace EmuXPortal.Api
 {
     public interface IEmuConfig : IComparable<IEmuConfig>, IDisposable
     {
+        bool IsFavorites { get; }
         string ConfigPath { get; }
         string PlatformNameShort { get; }
         string PlatformNameLong { get; }
@@ -31,23 +33,22 @@
         string GameExeArgs { get; }
 
 
-        void RefreshConfig();
-    }
-
-
+        void RefreshConfig(logger log);
+        void ReleasePlatformImageResource();
+    }    
 
     public static class EmuConfigLoader
     {
         public static readonly IEmuConfig Empty = new EmuConfig();
         private const string EMU_CONFIG = "emu.config"; // if this file signifies the emulator configuration
         #region load
-        public static IEmuConfig Load(string rom_path) { return new EmuConfig().Create(rom_path); }
-        public static IEmuConfig Load(string config_path, string rom_path) { return new EmuConfig().Create(config_path, rom_path); }
+        public static IEmuConfig Load(logger log,string rom_path) { return new EmuConfig().Create(log, rom_path); }
+        public static IEmuConfig Load(logger log,string config_path, string rom_path) { return new EmuConfig().Create(log, config_path, rom_path); }
         #endregion
         #region parse emu options
-        public static string GetEMUOptions(IRomConfig config)
+        public static string GetEMUOptions(logger log, IRomConfig config)
         {
-            EMUOptions EMUOptions = new EMUOptions(config);
+            EMUOptions EMUOptions = new EMUOptions(log, config);
             return EMUOptions.Options;
         }
         #endregion
@@ -59,10 +60,10 @@
             private const string ROM_PATH = "%ROM_PATH%";
             #endregion
             private Dictionary<string, string> options_dict = new Dictionary<string, string>();
-            public EMUOptions(IRomConfig config)
+            public EMUOptions(logger log, IRomConfig config)
             {
                 init_dict(config);
-                config.Config.RefreshConfig();
+                config.Config.RefreshConfig(log);
                 string options = config.Config.EmuOptions;
                 string real_options = options;
                 foreach (KeyValuePair<string, string> pair in options_dict) { if (options.ToLower().Contains(pair.Key.ToLower())) { real_options = real_options.ToLower().Replace(pair.Key.ToLower(), pair.Value); } }
@@ -78,20 +79,34 @@
         #endregion
 
         #region private class EmuConfig : IEmuConfig
-        private class EmuConfig : IEmuConfig, IComparable<IEmuConfig>, IDisposable
+        internal class EmuConfig : IEmuConfig, IComparable<IEmuConfig>, IDisposable
         {
-            public IEmuConfig Create(string rom_path) { return this.Create(string.Empty, rom_path); }
-            public IEmuConfig Create(string config_path, string rom_path)
+            public IEmuConfig Create(logger log, string rom_path) { return this.Create(log, string.Empty, rom_path); }
+            public IEmuConfig Create(logger log, string config_path, string rom_path)
             {
-                EmuRomPath = rom_path;
-                if (config_path == "") { config_path = string.Format(@"{0}\{1}", rom_path, EMU_CONFIG); }
-
+                if (rom_path == "")
+                {
+                    if (config_path != "")
+                    {
+                        EmuRomPath = config_path.Replace(EMU_CONFIG, "").TrimEnd(new char[] { '\\' });
+                    }
+                    else
+                    {
+                        EmuRomPath = Config.RomPath;
+                    }
+                }
+                else { EmuRomPath = rom_path; }
+                if (config_path == "")
+                {
+                    config_path = string.Format(@"{0}\{1}", EmuRomPath, EMU_CONFIG);
+                }
+             
                 // read the actual config emu.config
                 FileInfo fi = new FileInfo(config_path);
                 if (fi.Exists)
                 {
-                    logger.WriteLine("Found EMU Config File: {0}", config_path);
-                    logger.WriteLine("\tLoading Config: {0}", config_path);
+                    log.WriteLine("Found EMU Config File: {0}", config_path);
+                    log.WriteLine("\tLoading Config: {0}", config_path);
                     this.ConfigPath = config_path;
                     //bool loaded = false;
                     try
@@ -113,7 +128,7 @@
                                             {
                                                 value = reader.ReadElementContentAsString();
                                                 PlatformNameShort = (value == "") ? PlatformNameShort : value;
-                                                logger.WriteLine("\t\tPLATFORMNAMESHORT={0}", PlatformNameShort);
+                                                log.WriteLine("\t\tPLATFORMNAMESHORT={0}", PlatformNameShort);
                                             }
                                             break;
                                         case "PLATFORMNAMELONG":
@@ -121,16 +136,16 @@
                                             {
                                                 value = reader.ReadElementContentAsString();
                                                 PlatformNameLong = (value == "") ? PlatformNameLong : value;
-                                                logger.WriteLine("\t\tPLATFORMNAMELONG={0}", PlatformNameLong);
+                                                log.WriteLine("\t\tPLATFORMNAMELONG={0}", PlatformNameLong);
                                             }
                                             break;
                                         case "PLATFORMIMAGE":
                                             if (reader.IsStartElement())
                                             {
                                                 string platform_image = reader.ReadElementContentAsString();
-                                                PlatformImage = (platform_image == "") ? Properties.Resources.DefaultPlatformImage : Image.FromFile(string.Format(@"{0}\{1}", rom_path, platform_image));
+                                                PlatformImage = (platform_image == "") ? null : Image.FromFile(string.Format(@"{0}\{1}", EmuRomPath, platform_image));
                                                 string str_platform_image = (platform_image == "") ? "DefaultPlatformImage" : platform_image;
-                                                logger.WriteLine("\t\tPLATFORMIMAGE={0}", str_platform_image);
+                                                log.WriteLine("\t\tPLATFORMIMAGE={0}", str_platform_image);
                                             }
                                             break;
                                         case "EXTENSIONS":
@@ -138,7 +153,7 @@
                                             {
                                                 value = reader.ReadElementContentAsString();
                                                 Extenstions = (value == "") ? Extenstions : value;
-                                                logger.WriteLine("\t\tEXTENSIONS={0}", Extenstions);
+                                                log.WriteLine("\t\tEXTENSIONS={0}", Extenstions);
                                             }
                                             break;
                                         case "EMULATORPATH":
@@ -146,7 +161,7 @@
                                             {
                                                 value = reader.ReadElementContentAsString();
                                                 EmuPath = (value == "") ? EmuPath : value;
-                                                logger.WriteLine("\t\tEMULATORPATH={0}", EmuPath);
+                                                log.WriteLine("\t\tEMULATORPATH={0}", EmuPath);
                                             }
                                             break;
                                         case "EMULATOROPTIONS":
@@ -154,7 +169,7 @@
                                             {
                                                 value = reader.ReadElementContentAsString();
                                                 EmuOptions = (value == "") ? EmuOptions : value;
-                                                logger.WriteLine("\tEMULATOROPTIONS={0}", EmuOptions);
+                                                log.WriteLine("\tEMULATOROPTIONS={0}", EmuOptions);
                                             }
                                             break;
                                         #region External Non-Emulator Rom Support
@@ -164,7 +179,7 @@
                                                 value = reader.ReadElementContentAsString();
                                                 string gametitle = (value == "") ? GameTitle : value;
                                                 GameTitle = gametitle;
-                                                logger.WriteLine("\tGAMETITLE={0}", GameTitle);
+                                                log.WriteLine("\tGAMETITLE={0}", GameTitle);
                                             }
                                             break;
                                         case "GAMEIMAGE":
@@ -173,7 +188,7 @@
                                                 value = reader.ReadElementContentAsString();
                                                 string gameimage = (value == "") ? GameImage : value;
                                                 GameImage = gameimage;
-                                                logger.WriteLine("\tGAMEIMAGE={0}", GameImage);
+                                                log.WriteLine("\tGAMEIMAGE={0}", GameImage);
                                             }
                                             break;
                                         case "GAMEEXE":
@@ -182,7 +197,7 @@
                                                 value = reader.ReadElementContentAsString();
                                                 string gameexe = (value == "") ? GameExe : value;
                                                 GameExe = gameexe;
-                                                logger.WriteLine("\tGAMEEXE={0}", GameExe);
+                                                log.WriteLine("\tGAMEEXE={0}", GameExe);
                                             }
                                             break;
                                         case "GAMEEXEARGS":
@@ -191,7 +206,7 @@
                                                 value = reader.ReadElementContentAsString();
                                                 string gameexeargs = (value == "") ? GameExeArgs : value;
                                                 GameExeArgs = gameexeargs;
-                                                logger.WriteLine("\tGAMEEXEARGS={0}", GameExeArgs);
+                                                log.WriteLine("\tGAMEEXEARGS={0}", GameExeArgs);
                                             }
                                             break;
                                         case "EXTERNALCONFIGSPATH":
@@ -200,9 +215,9 @@
                                                 string searchPattern = "*.config";
                                                 string external_configs_path = reader.ReadElementContentAsString();
                                                 //EmuOptions = (external_configs_path == "") ? EmuOptions : value;
-                                                logger.WriteLine("\tEXTERNALCONFIGSPATH={0}", external_configs_path);
+                                                log.WriteLine("\tEXTERNALCONFIGSPATH={0}", external_configs_path);
                                                 DirectoryInfo ext_path = new DirectoryInfo(external_configs_path);
-                                                string ext_rom_path = string.Format(@"{0}\{1}", rom_path, external_configs_path);
+                                                string ext_rom_path = string.Format(@"{0}\{1}", EmuRomPath, external_configs_path);
                                                 // try the path in romroot
                                                 if (!ext_path.Exists) { ext_path = new DirectoryInfo(ext_rom_path); }
                                                 if (ext_path.Exists)
@@ -215,7 +230,7 @@
                                                         external_config_files.Sort(); // sort the files (they should already be sorted alphabetically by GetFiles())
                                                     foreach (string file in external_config_files)
                                                     {
-                                                        IEmuConfig config = EmuConfigLoader.Load(file, rom_path);
+                                                        IEmuConfig config = EmuConfigLoader.Load(log, file, EmuRomPath);
                                                         if (config != null)
                                                             externalconfigs.Add(config);
                                                     }
@@ -227,38 +242,45 @@
                                         #endregion
                                         default:
                                             if (InConfigSection && (reader.Name != string.Empty) && reader.IsStartElement())
-                                                logger.WriteLine("Warning: Unknown or Unrecognized config option: {0} in {1}", reader.Name, config_path);
+                                                log.WriteLine("Warning: Unknown or Unrecognized config option: {0} in {1}", reader.Name, config_path);
                                             break;
                                     }
                                     reader.Read();
                                 }
                             }
                         }
-                        logger.WriteLine("\tLoaded Config: {0}", config_path);
+                        log.WriteLine("\tLoaded Config: {0}", config_path);
                         //loaded = true;
                     }
                     catch (Exception ex)
                     {
-                        logger.WriteLine("\tFailed to Load Config: {0}", config_path);
+                        log.WriteLine("\tFailed to Load Config: {0}", config_path);
                         Console.WriteLine(ex.ToString());
-                        logger.WriteLine("Error: {0}", ex.ToString());
+                        log.WriteLine("Error: {0}", ex.ToString());
                         //loaded = false;
                     }
                 }
-                else { logger.WriteLine("Could not find EMU Config File: {0}", config_path); }
+                else { log.WriteLine("Could not find EMU Config File: {0}", config_path); }
 
                 return this;
             }
 
             private const string Unknown_Platform = "Unknown Platform";
-            public EmuConfig() : this("") { }
-            public EmuConfig(string PlatformNameShort) : this(PlatformNameShort, PlatformNameShort) { }
-            public EmuConfig(string PlatformNameShort, string PlatformNameLong) : this(PlatformNameShort, PlatformNameLong, "") { }
-            public EmuConfig(string PlatformNameShort, string PlatformNameLong, string PlatformImage) : this(PlatformNameShort, PlatformNameLong, PlatformImage, "") { }
-            public EmuConfig(string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions) : this(PlatformNameShort, PlatformNameLong, PlatformImage, Extenstions, "") { }
-            public EmuConfig(string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions, string EmuPath) : this(PlatformNameShort, PlatformNameLong, PlatformImage, Extenstions, EmuPath, "") { }
-            public EmuConfig(string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions, string EmuPath, string EmuOptions)
+            private logger log;
+            public EmuConfig() : this(null, "") { }
+            public EmuConfig(logger log) : this(log,"") { }
+            public EmuConfig(logger log, string PlatformNameShort) : this(log, PlatformNameShort, PlatformNameShort) { }
+            public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong) : this(log, PlatformNameShort, PlatformNameLong, "") { }
+            public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong, string PlatformImage) : this(log, PlatformNameShort, PlatformNameLong, PlatformImage, "") { }
+            public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions) : this(log, PlatformNameShort, PlatformNameLong, PlatformImage, Extenstions, "") { }
+            public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions, string EmuPath) : this(log, PlatformNameShort, PlatformNameLong, PlatformImage, Extenstions, EmuPath, "") { }
+            public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions, string EmuPath, string EmuOptions)
             {
+                //if (string.IsNullOrEmpty(EmuRomPath))
+                //{
+                //    if (Debugger.IsAttached)
+                //        Debugger.Break();
+                //}
                 this.PlatformNameShort = PlatformNameShort;
                 this.PlatformNameLong = PlatformNameLong;
                 this.PlatformImage = (PlatformImage == "") ? Properties.Resources.DefaultPlatformImage : Image.FromFile(PlatformImage);
@@ -270,8 +292,10 @@
                 this.GameImage = "";
                 this.GameExe = "";
                 this.GameExeArgs = "";
+                this.log = log;
             }
             #region IEmuConfig members
+            public bool IsFavorites { get { return false; } }
             public string ConfigPath { get; set; }
             private string _PlatformNameShort;
             public string PlatformNameShort
@@ -280,12 +304,17 @@
                 {
                     try
                     {
-                        DirectoryInfo t = new DirectoryInfo(EmuRomPath);
+                        //if (string.IsNullOrEmpty(EmuRomPath))
+                        //{
+                        //    return "EmuRomPath null";
+                        //}
+                        DirectoryInfo t = new DirectoryInfo(EmuRomPath);                      
                         return (_PlatformNameShort == "") ? string.Format("{0} (folder={1})", Unknown_Platform, t.Name) : _PlatformNameShort;
+                        
                     }
                     catch (Exception ex)
                     {
-                        logger.WriteLine("PlatformNameShort.get() Error: {0}", ex.ToString());
+                        log.WriteLine("PlatformNameShort.get() Error: {0}", ex.ToString());
                         return Unknown_Platform;
                     }
                 }
@@ -303,7 +332,7 @@
                     }
                     catch (Exception ex)
                     {
-                        logger.WriteLine("PlatformNameLong.get() Error: {0}", ex.ToString());
+                        log.WriteLine("PlatformNameLong.get() Error: {0}", ex.ToString());
                         return Unknown_Platform;
                     }
                 }
@@ -321,6 +350,12 @@
             public string GameImage { get; set; }
             public string GameExe { get; set; }
             public string GameExeArgs { get; set; }
+
+            public void ReleasePlatformImageResource()
+            {
+                if (this.PlatformImage != null)
+                    this.PlatformImage.Dispose();
+            }
             #endregion
 
             public override string ToString()
@@ -333,10 +368,10 @@
             {
                 return this.PlatformNameLong.CompareTo(obj.PlatformNameLong);
             }
-            public void RefreshConfig()
+            public void RefreshConfig(logger log)
             {
-                logger.WriteLine("Refreshing config for: {0} from {1}", this.ToString(), string.Format(@"{0}\{1}", EmuRomPath, EMU_CONFIG));
-                this.Create(EmuRomPath);
+                log.WriteLine("Refreshing config for: {0} from {1}", this.ToString(), string.Format(@"{0}\{1}", EmuRomPath, EMU_CONFIG));
+                this.Create(log,EmuRomPath);
             }
             #endregion
 

 

  ViewVC Help
Powered by ViewVC 1.1.22