/[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

revision 104 by william, Wed Aug 22 02:12:46 2012 UTC revision 126 by william, Thu Aug 23 04:47:35 2012 UTC
# Line 9  using System.Xml; Line 9  using System.Xml;
9    
10  namespace EmuXPortal.Api  namespace EmuXPortal.Api
11  {  {
12      public interface IEmuConfig : IComparable<IEmuConfig>      public interface IEmuConfig : IComparable<IEmuConfig>, IDisposable
13      {      {
14          string ConfigPath { get; }          string ConfigPath { get; }
15          string PlatformNameShort { get; }          string PlatformNameShort { get; }
# Line 31  namespace EmuXPortal.Api Line 31  namespace EmuXPortal.Api
31          string GameExeArgs { get; }          string GameExeArgs { get; }
32    
33    
34          void RefreshConfig();          void RefreshConfig(logger log);
35            void ReleasePlatformImageResource();
36      }      }
37    
38    
# Line 41  namespace EmuXPortal.Api Line 42  namespace EmuXPortal.Api
42          public static readonly IEmuConfig Empty = new EmuConfig();          public static readonly IEmuConfig Empty = new EmuConfig();
43          private const string EMU_CONFIG = "emu.config"; // if this file signifies the emulator configuration          private const string EMU_CONFIG = "emu.config"; // if this file signifies the emulator configuration
44          #region load          #region load
45          public static IEmuConfig Load(string rom_path) { return new EmuConfig().Create(rom_path); }          public static IEmuConfig Load(logger log,string rom_path) { return new EmuConfig().Create(log, rom_path); }
46          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 config_path, string rom_path) { return new EmuConfig().Create(log, config_path, rom_path); }
47          #endregion          #endregion
48          #region parse emu options          #region parse emu options
49          public static string GetEMUOptions(IRomConfig config)          public static string GetEMUOptions(logger log, IRomConfig config)
50          {          {
51              EMUOptions EMUOptions = new EMUOptions(config);              EMUOptions EMUOptions = new EMUOptions(log, config);
52              return EMUOptions.Options;              return EMUOptions.Options;
53          }          }
54          #endregion          #endregion
# Line 59  namespace EmuXPortal.Api Line 60  namespace EmuXPortal.Api
60              private const string ROM_PATH = "%ROM_PATH%";              private const string ROM_PATH = "%ROM_PATH%";
61              #endregion              #endregion
62              private Dictionary<string, string> options_dict = new Dictionary<string, string>();              private Dictionary<string, string> options_dict = new Dictionary<string, string>();
63              public EMUOptions(IRomConfig config)              public EMUOptions(logger log, IRomConfig config)
64              {              {
65                  init_dict(config);                  init_dict(config);
66                  config.Config.RefreshConfig();                  config.Config.RefreshConfig(log);
67                  string options = config.Config.EmuOptions;                  string options = config.Config.EmuOptions;
68                  string real_options = options;                  string real_options = options;
69                  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); } }                  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); } }
# Line 78  namespace EmuXPortal.Api Line 79  namespace EmuXPortal.Api
79          #endregion          #endregion
80    
81          #region private class EmuConfig : IEmuConfig          #region private class EmuConfig : IEmuConfig
82          private class EmuConfig : IEmuConfig, IComparable<IEmuConfig>          private class EmuConfig : IEmuConfig, IComparable<IEmuConfig>, IDisposable
83          {          {
84              public IEmuConfig Create(string rom_path) { return this.Create(string.Empty, rom_path); }              public IEmuConfig Create(logger log, string rom_path) { return this.Create(log, string.Empty, rom_path); }
85              public IEmuConfig Create(string config_path, string rom_path)              public IEmuConfig Create(logger log, string config_path, string rom_path)
86              {              {
87                  EmuRomPath = rom_path;                  EmuRomPath = rom_path;
88                  if (config_path == "") { config_path = string.Format(@"{0}\{1}", rom_path, EMU_CONFIG); }                  if (config_path == "") { config_path = string.Format(@"{0}\{1}", rom_path, EMU_CONFIG); }
# Line 90  namespace EmuXPortal.Api Line 91  namespace EmuXPortal.Api
91                  FileInfo fi = new FileInfo(config_path);                  FileInfo fi = new FileInfo(config_path);
92                  if (fi.Exists)                  if (fi.Exists)
93                  {                  {
94                      logger.WriteLine("Found EMU Config File: {0}", config_path);                      log.WriteLine("Found EMU Config File: {0}", config_path);
95                      logger.WriteLine("\tLoading Config: {0}", config_path);                      log.WriteLine("\tLoading Config: {0}", config_path);
96                      this.ConfigPath = config_path;                      this.ConfigPath = config_path;
97                      //bool loaded = false;                      //bool loaded = false;
98                      try                      try
# Line 113  namespace EmuXPortal.Api Line 114  namespace EmuXPortal.Api
114                                              {                                              {
115                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
116                                                  PlatformNameShort = (value == "") ? PlatformNameShort : value;                                                  PlatformNameShort = (value == "") ? PlatformNameShort : value;
117                                                  logger.WriteLine("\t\tPLATFORMNAMESHORT={0}", PlatformNameShort);                                                  log.WriteLine("\t\tPLATFORMNAMESHORT={0}", PlatformNameShort);
118                                              }                                              }
119                                              break;                                              break;
120                                          case "PLATFORMNAMELONG":                                          case "PLATFORMNAMELONG":
# Line 121  namespace EmuXPortal.Api Line 122  namespace EmuXPortal.Api
122                                              {                                              {
123                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
124                                                  PlatformNameLong = (value == "") ? PlatformNameLong : value;                                                  PlatformNameLong = (value == "") ? PlatformNameLong : value;
125                                                  logger.WriteLine("\t\tPLATFORMNAMELONG={0}", PlatformNameLong);                                                  log.WriteLine("\t\tPLATFORMNAMELONG={0}", PlatformNameLong);
126                                              }                                              }
127                                              break;                                              break;
128                                          case "PLATFORMIMAGE":                                          case "PLATFORMIMAGE":
129                                              if (reader.IsStartElement())                                              if (reader.IsStartElement())
130                                              {                                              {
131                                                  string platform_image = reader.ReadElementContentAsString();                                                  string platform_image = reader.ReadElementContentAsString();
132                                                  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}", rom_path, platform_image));
133                                                  string str_platform_image = (platform_image == "") ? "DefaultPlatformImage" : platform_image;                                                  string str_platform_image = (platform_image == "") ? "DefaultPlatformImage" : platform_image;
134                                                  logger.WriteLine("\t\tPLATFORMIMAGE={0}", str_platform_image);                                                  log.WriteLine("\t\tPLATFORMIMAGE={0}", str_platform_image);
135                                              }                                              }
136                                              break;                                              break;
137                                          case "EXTENSIONS":                                          case "EXTENSIONS":
# Line 138  namespace EmuXPortal.Api Line 139  namespace EmuXPortal.Api
139                                              {                                              {
140                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
141                                                  Extenstions = (value == "") ? Extenstions : value;                                                  Extenstions = (value == "") ? Extenstions : value;
142                                                  logger.WriteLine("\t\tEXTENSIONS={0}", Extenstions);                                                  log.WriteLine("\t\tEXTENSIONS={0}", Extenstions);
143                                              }                                              }
144                                              break;                                              break;
145                                          case "EMULATORPATH":                                          case "EMULATORPATH":
# Line 146  namespace EmuXPortal.Api Line 147  namespace EmuXPortal.Api
147                                              {                                              {
148                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
149                                                  EmuPath = (value == "") ? EmuPath : value;                                                  EmuPath = (value == "") ? EmuPath : value;
150                                                  logger.WriteLine("\t\tEMULATORPATH={0}", EmuPath);                                                  log.WriteLine("\t\tEMULATORPATH={0}", EmuPath);
151                                              }                                              }
152                                              break;                                              break;
153                                          case "EMULATOROPTIONS":                                          case "EMULATOROPTIONS":
# Line 154  namespace EmuXPortal.Api Line 155  namespace EmuXPortal.Api
155                                              {                                              {
156                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
157                                                  EmuOptions = (value == "") ? EmuOptions : value;                                                  EmuOptions = (value == "") ? EmuOptions : value;
158                                                  logger.WriteLine("\tEMULATOROPTIONS={0}", EmuOptions);                                                  log.WriteLine("\tEMULATOROPTIONS={0}", EmuOptions);
159                                              }                                              }
160                                              break;                                              break;
161                                          #region External Non-Emulator Rom Support                                          #region External Non-Emulator Rom Support
# Line 164  namespace EmuXPortal.Api Line 165  namespace EmuXPortal.Api
165                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
166                                                  string gametitle = (value == "") ? GameTitle : value;                                                  string gametitle = (value == "") ? GameTitle : value;
167                                                  GameTitle = gametitle;                                                  GameTitle = gametitle;
168                                                  logger.WriteLine("\tGAMETITLE={0}", GameTitle);                                                  log.WriteLine("\tGAMETITLE={0}", GameTitle);
169                                              }                                              }
170                                              break;                                              break;
171                                          case "GAMEIMAGE":                                          case "GAMEIMAGE":
# Line 173  namespace EmuXPortal.Api Line 174  namespace EmuXPortal.Api
174                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
175                                                  string gameimage = (value == "") ? GameImage : value;                                                  string gameimage = (value == "") ? GameImage : value;
176                                                  GameImage = gameimage;                                                  GameImage = gameimage;
177                                                  logger.WriteLine("\tGAMEIMAGE={0}", GameImage);                                                  log.WriteLine("\tGAMEIMAGE={0}", GameImage);
178                                              }                                              }
179                                              break;                                              break;
180                                          case "GAMEEXE":                                          case "GAMEEXE":
# Line 182  namespace EmuXPortal.Api Line 183  namespace EmuXPortal.Api
183                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
184                                                  string gameexe = (value == "") ? GameExe : value;                                                  string gameexe = (value == "") ? GameExe : value;
185                                                  GameExe = gameexe;                                                  GameExe = gameexe;
186                                                  logger.WriteLine("\tGAMEEXE={0}", GameExe);                                                  log.WriteLine("\tGAMEEXE={0}", GameExe);
187                                              }                                              }
188                                              break;                                              break;
189                                          case "GAMEEXEARGS":                                          case "GAMEEXEARGS":
# Line 191  namespace EmuXPortal.Api Line 192  namespace EmuXPortal.Api
192                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
193                                                  string gameexeargs = (value == "") ? GameExeArgs : value;                                                  string gameexeargs = (value == "") ? GameExeArgs : value;
194                                                  GameExeArgs = gameexeargs;                                                  GameExeArgs = gameexeargs;
195                                                  logger.WriteLine("\tGAMEEXEARGS={0}", GameExeArgs);                                                  log.WriteLine("\tGAMEEXEARGS={0}", GameExeArgs);
196                                              }                                              }
197                                              break;                                              break;
198                                          case "EXTERNALCONFIGSPATH":                                          case "EXTERNALCONFIGSPATH":
# Line 200  namespace EmuXPortal.Api Line 201  namespace EmuXPortal.Api
201                                                  string searchPattern = "*.config";                                                  string searchPattern = "*.config";
202                                                  string external_configs_path = reader.ReadElementContentAsString();                                                  string external_configs_path = reader.ReadElementContentAsString();
203                                                  //EmuOptions = (external_configs_path == "") ? EmuOptions : value;                                                  //EmuOptions = (external_configs_path == "") ? EmuOptions : value;
204                                                  logger.WriteLine("\tEXTERNALCONFIGSPATH={0}", external_configs_path);                                                  log.WriteLine("\tEXTERNALCONFIGSPATH={0}", external_configs_path);
205                                                  DirectoryInfo ext_path = new DirectoryInfo(external_configs_path);                                                  DirectoryInfo ext_path = new DirectoryInfo(external_configs_path);
206                                                  string ext_rom_path = string.Format(@"{0}\{1}", rom_path, external_configs_path);                                                  string ext_rom_path = string.Format(@"{0}\{1}", rom_path, external_configs_path);
207                                                  // try the path in romroot                                                  // try the path in romroot
# Line 215  namespace EmuXPortal.Api Line 216  namespace EmuXPortal.Api
216                                                          external_config_files.Sort(); // sort the files (they should already be sorted alphabetically by GetFiles())                                                          external_config_files.Sort(); // sort the files (they should already be sorted alphabetically by GetFiles())
217                                                      foreach (string file in external_config_files)                                                      foreach (string file in external_config_files)
218                                                      {                                                      {
219                                                          IEmuConfig config = EmuConfigLoader.Load(file, rom_path);                                                          IEmuConfig config = EmuConfigLoader.Load(log, file, rom_path);
220                                                          if (config != null)                                                          if (config != null)
221                                                              externalconfigs.Add(config);                                                              externalconfigs.Add(config);
222                                                      }                                                      }
# Line 227  namespace EmuXPortal.Api Line 228  namespace EmuXPortal.Api
228                                          #endregion                                          #endregion
229                                          default:                                          default:
230                                              if (InConfigSection && (reader.Name != string.Empty) && reader.IsStartElement())                                              if (InConfigSection && (reader.Name != string.Empty) && reader.IsStartElement())
231                                                  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);
232                                              break;                                              break;
233                                      }                                      }
234                                      reader.Read();                                      reader.Read();
235                                  }                                  }
236                              }                              }
237                          }                          }
238                          logger.WriteLine("\tLoaded Config: {0}", config_path);                          log.WriteLine("\tLoaded Config: {0}", config_path);
239                          //loaded = true;                          //loaded = true;
240                      }                      }
241                      catch (Exception ex)                      catch (Exception ex)
242                      {                      {
243                          logger.WriteLine("\tFailed to Load Config: {0}", config_path);                          log.WriteLine("\tFailed to Load Config: {0}", config_path);
244                          Console.WriteLine(ex.ToString());                          Console.WriteLine(ex.ToString());
245                          logger.WriteLine("Error: {0}", ex.ToString());                          log.WriteLine("Error: {0}", ex.ToString());
246                          //loaded = false;                          //loaded = false;
247                      }                      }
248                  }                  }
249                  else { logger.WriteLine("Could not find EMU Config File: {0}", config_path); }                  else { log.WriteLine("Could not find EMU Config File: {0}", config_path); }
250    
251                  return this;                  return this;
252              }              }
253    
254              private const string Unknown_Platform = "Unknown Platform";              private const string Unknown_Platform = "Unknown Platform";
255              public EmuConfig() : this("") { }              private logger log;
256              public EmuConfig(string PlatformNameShort) : this(PlatformNameShort, PlatformNameShort) { }              public EmuConfig() : this(null, "") { }
257              public EmuConfig(string PlatformNameShort, string PlatformNameLong) : this(PlatformNameShort, PlatformNameLong, "") { }              public EmuConfig(logger log) : this(log,"") { }
258              public EmuConfig(string PlatformNameShort, string PlatformNameLong, string PlatformImage) : this(PlatformNameShort, PlatformNameLong, PlatformImage, "") { }              public EmuConfig(logger log, string PlatformNameShort) : this(log, PlatformNameShort, PlatformNameShort) { }
259              public EmuConfig(string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions) : this(PlatformNameShort, PlatformNameLong, PlatformImage, Extenstions, "") { }              public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong) : this(log, PlatformNameShort, PlatformNameLong, "") { }
260              public EmuConfig(string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions, string EmuPath) : this(PlatformNameShort, PlatformNameLong, PlatformImage, Extenstions, EmuPath, "") { }              public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong, string PlatformImage) : this(log, PlatformNameShort, PlatformNameLong, PlatformImage, "") { }
261              public EmuConfig(string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions, string EmuPath, string EmuOptions)              public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions) : this(log, PlatformNameShort, PlatformNameLong, PlatformImage, Extenstions, "") { }
262                public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions, string EmuPath) : this(log, PlatformNameShort, PlatformNameLong, PlatformImage, Extenstions, EmuPath, "") { }
263                public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions, string EmuPath, string EmuOptions)
264              {              {
265                  this.PlatformNameShort = PlatformNameShort;                  this.PlatformNameShort = PlatformNameShort;
266                  this.PlatformNameLong = PlatformNameLong;                  this.PlatformNameLong = PlatformNameLong;
# Line 270  namespace EmuXPortal.Api Line 273  namespace EmuXPortal.Api
273                  this.GameImage = "";                  this.GameImage = "";
274                  this.GameExe = "";                  this.GameExe = "";
275                  this.GameExeArgs = "";                  this.GameExeArgs = "";
276                    this.log = log;
277              }              }
278              #region IEmuConfig members              #region IEmuConfig members
279              public string ConfigPath { get; set; }              public string ConfigPath { get; set; }
# Line 285  namespace EmuXPortal.Api Line 289  namespace EmuXPortal.Api
289                      }                      }
290                      catch (Exception ex)                      catch (Exception ex)
291                      {                      {
292                          logger.WriteLine("PlatformNameShort.get() Error: {0}", ex.ToString());                          log.WriteLine("PlatformNameShort.get() Error: {0}", ex.ToString());
293                          return Unknown_Platform;                          return Unknown_Platform;
294                      }                      }
295                  }                  }
# Line 303  namespace EmuXPortal.Api Line 307  namespace EmuXPortal.Api
307                      }                      }
308                      catch (Exception ex)                      catch (Exception ex)
309                      {                      {
310                          logger.WriteLine("PlatformNameLong.get() Error: {0}", ex.ToString());                          log.WriteLine("PlatformNameLong.get() Error: {0}", ex.ToString());
311                          return Unknown_Platform;                          return Unknown_Platform;
312                      }                      }
313                  }                  }
# Line 321  namespace EmuXPortal.Api Line 325  namespace EmuXPortal.Api
325              public string GameImage { get; set; }              public string GameImage { get; set; }
326              public string GameExe { get; set; }              public string GameExe { get; set; }
327              public string GameExeArgs { get; set; }              public string GameExeArgs { get; set; }
328    
329                public void ReleasePlatformImageResource()
330                {
331                    if (this.PlatformImage != null)
332                        this.PlatformImage.Dispose();
333                }
334              #endregion              #endregion
335    
336              public override string ToString()              public override string ToString()
# Line 333  namespace EmuXPortal.Api Line 343  namespace EmuXPortal.Api
343              {              {
344                  return this.PlatformNameLong.CompareTo(obj.PlatformNameLong);                  return this.PlatformNameLong.CompareTo(obj.PlatformNameLong);
345              }              }
346              public void RefreshConfig()              public void RefreshConfig(logger log)
347              {              {
348                  logger.WriteLine("Refreshing config for: {0} from {1}", this.ToString(), string.Format(@"{0}\{1}", EmuRomPath, EMU_CONFIG));                  log.WriteLine("Refreshing config for: {0} from {1}", this.ToString(), string.Format(@"{0}\{1}", EmuRomPath, EMU_CONFIG));
349                  this.Create(EmuRomPath);                  this.Create(log,EmuRomPath);
350              }              }
351              #endregion              #endregion
352    
353                public void Dispose()
354                {
355                    if (this.PlatformImage != null)
356                        this.PlatformImage.Dispose();
357                }
358          }          }
359          #endregion          #endregion
360    

Legend:
Removed from v.104  
changed lines
  Added in v.126

  ViewVC Help
Powered by ViewVC 1.1.22