/[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 110 by william, Thu Aug 23 02:44:26 2012 UTC revision 175 by william, Mon Aug 4 06:31:48 2014 UTC
# Line 11  namespace EmuXPortal.Api Line 11  namespace EmuXPortal.Api
11  {  {
12      public interface IEmuConfig : IComparable<IEmuConfig>, IDisposable      public interface IEmuConfig : IComparable<IEmuConfig>, IDisposable
13      {      {
14            bool IsFavorites { get; }
15          string ConfigPath { get; }          string ConfigPath { get; }
16          string PlatformNameShort { get; }          string PlatformNameShort { get; }
17          string PlatformNameLong { get; }          string PlatformNameLong { get; }
# Line 31  namespace EmuXPortal.Api Line 32  namespace EmuXPortal.Api
32          string GameExeArgs { get; }          string GameExeArgs { get; }
33    
34    
35          void RefreshConfig();          void RefreshConfig(logger log);
36          void ReleasePlatformImageResource();          void ReleasePlatformImageResource();
37      }      }    
   
   
38    
39      public static class EmuConfigLoader      public static class EmuConfigLoader
40      {      {
41          public static readonly IEmuConfig Empty = new EmuConfig();          public static readonly IEmuConfig Empty = new EmuConfig();
42          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
43          #region load          #region load
44          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); }
45          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); }
46          #endregion          #endregion
47          #region parse emu options          #region parse emu options
48          public static string GetEMUOptions(IRomConfig config)          public static string GetEMUOptions(logger log, IRomConfig config)
49          {          {
50              EMUOptions EMUOptions = new EMUOptions(config);              EMUOptions EMUOptions = new EMUOptions(log, config);
51              return EMUOptions.Options;              return EMUOptions.Options;
52          }          }
53          #endregion          #endregion
# Line 60  namespace EmuXPortal.Api Line 59  namespace EmuXPortal.Api
59              private const string ROM_PATH = "%ROM_PATH%";              private const string ROM_PATH = "%ROM_PATH%";
60              #endregion              #endregion
61              private Dictionary<string, string> options_dict = new Dictionary<string, string>();              private Dictionary<string, string> options_dict = new Dictionary<string, string>();
62              public EMUOptions(IRomConfig config)              public EMUOptions(logger log, IRomConfig config)
63              {              {
64                  init_dict(config);                  init_dict(config);
65                  config.Config.RefreshConfig();                  config.Config.RefreshConfig(log);
66                  string options = config.Config.EmuOptions;                  string options = config.Config.EmuOptions;
67                  string real_options = options;                  string real_options = options;
68                  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 81  namespace EmuXPortal.Api Line 80  namespace EmuXPortal.Api
80          #region private class EmuConfig : IEmuConfig          #region private class EmuConfig : IEmuConfig
81          private class EmuConfig : IEmuConfig, IComparable<IEmuConfig>, IDisposable          private class EmuConfig : IEmuConfig, IComparable<IEmuConfig>, IDisposable
82          {          {
83              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); }
84              public IEmuConfig Create(string config_path, string rom_path)              public IEmuConfig Create(logger log, string config_path, string rom_path)
85              {              {
86                  EmuRomPath = rom_path;                  if (rom_path == "")
87                  if (config_path == "") { config_path = string.Format(@"{0}\{1}", rom_path, EMU_CONFIG); }                  {
88                        if (config_path != "")
89                        {
90                            EmuRomPath = config_path.Replace(EMU_CONFIG, "").TrimEnd(new char[] { '\\' });
91                        }
92                        else
93                        {
94                            EmuRomPath = Config.RomPath;
95                        }
96                    }
97                    else { EmuRomPath = rom_path; }
98                    if (config_path == "")
99                    {
100                        config_path = string.Format(@"{0}\{1}", EmuRomPath, EMU_CONFIG);
101                    }
102                
103                  // read the actual config emu.config                  // read the actual config emu.config
104                  FileInfo fi = new FileInfo(config_path);                  FileInfo fi = new FileInfo(config_path);
105                  if (fi.Exists)                  if (fi.Exists)
106                  {                  {
107                      logger.WriteLine("Found EMU Config File: {0}", config_path);                      log.WriteLine("Found EMU Config File: {0}", config_path);
108                      logger.WriteLine("\tLoading Config: {0}", config_path);                      log.WriteLine("\tLoading Config: {0}", config_path);
109                      this.ConfigPath = config_path;                      this.ConfigPath = config_path;
110                      //bool loaded = false;                      //bool loaded = false;
111                      try                      try
# Line 114  namespace EmuXPortal.Api Line 127  namespace EmuXPortal.Api
127                                              {                                              {
128                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
129                                                  PlatformNameShort = (value == "") ? PlatformNameShort : value;                                                  PlatformNameShort = (value == "") ? PlatformNameShort : value;
130                                                  logger.WriteLine("\t\tPLATFORMNAMESHORT={0}", PlatformNameShort);                                                  log.WriteLine("\t\tPLATFORMNAMESHORT={0}", PlatformNameShort);
131                                              }                                              }
132                                              break;                                              break;
133                                          case "PLATFORMNAMELONG":                                          case "PLATFORMNAMELONG":
# Line 122  namespace EmuXPortal.Api Line 135  namespace EmuXPortal.Api
135                                              {                                              {
136                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
137                                                  PlatformNameLong = (value == "") ? PlatformNameLong : value;                                                  PlatformNameLong = (value == "") ? PlatformNameLong : value;
138                                                  logger.WriteLine("\t\tPLATFORMNAMELONG={0}", PlatformNameLong);                                                  log.WriteLine("\t\tPLATFORMNAMELONG={0}", PlatformNameLong);
139                                              }                                              }
140                                              break;                                              break;
141                                          case "PLATFORMIMAGE":                                          case "PLATFORMIMAGE":
142                                              if (reader.IsStartElement())                                              if (reader.IsStartElement())
143                                              {                                              {
144                                                  string platform_image = reader.ReadElementContentAsString();                                                  string platform_image = reader.ReadElementContentAsString();
145                                                  PlatformImage = (platform_image == "") ? null : Image.FromFile(string.Format(@"{0}\{1}", rom_path, platform_image));                                                  PlatformImage = (platform_image == "") ? null : Image.FromFile(string.Format(@"{0}\{1}", EmuRomPath, platform_image));
146                                                  string str_platform_image = (platform_image == "") ? "DefaultPlatformImage" : platform_image;                                                  string str_platform_image = (platform_image == "") ? "DefaultPlatformImage" : platform_image;
147                                                  logger.WriteLine("\t\tPLATFORMIMAGE={0}", str_platform_image);                                                  log.WriteLine("\t\tPLATFORMIMAGE={0}", str_platform_image);
148                                              }                                              }
149                                              break;                                              break;
150                                          case "EXTENSIONS":                                          case "EXTENSIONS":
# Line 139  namespace EmuXPortal.Api Line 152  namespace EmuXPortal.Api
152                                              {                                              {
153                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
154                                                  Extenstions = (value == "") ? Extenstions : value;                                                  Extenstions = (value == "") ? Extenstions : value;
155                                                  logger.WriteLine("\t\tEXTENSIONS={0}", Extenstions);                                                  log.WriteLine("\t\tEXTENSIONS={0}", Extenstions);
156                                              }                                              }
157                                              break;                                              break;
158                                          case "EMULATORPATH":                                          case "EMULATORPATH":
# Line 147  namespace EmuXPortal.Api Line 160  namespace EmuXPortal.Api
160                                              {                                              {
161                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
162                                                  EmuPath = (value == "") ? EmuPath : value;                                                  EmuPath = (value == "") ? EmuPath : value;
163                                                  logger.WriteLine("\t\tEMULATORPATH={0}", EmuPath);                                                  log.WriteLine("\t\tEMULATORPATH={0}", EmuPath);
164                                              }                                              }
165                                              break;                                              break;
166                                          case "EMULATOROPTIONS":                                          case "EMULATOROPTIONS":
# Line 155  namespace EmuXPortal.Api Line 168  namespace EmuXPortal.Api
168                                              {                                              {
169                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
170                                                  EmuOptions = (value == "") ? EmuOptions : value;                                                  EmuOptions = (value == "") ? EmuOptions : value;
171                                                  logger.WriteLine("\tEMULATOROPTIONS={0}", EmuOptions);                                                  log.WriteLine("\tEMULATOROPTIONS={0}", EmuOptions);
172                                              }                                              }
173                                              break;                                              break;
174                                          #region External Non-Emulator Rom Support                                          #region External Non-Emulator Rom Support
# Line 165  namespace EmuXPortal.Api Line 178  namespace EmuXPortal.Api
178                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
179                                                  string gametitle = (value == "") ? GameTitle : value;                                                  string gametitle = (value == "") ? GameTitle : value;
180                                                  GameTitle = gametitle;                                                  GameTitle = gametitle;
181                                                  logger.WriteLine("\tGAMETITLE={0}", GameTitle);                                                  log.WriteLine("\tGAMETITLE={0}", GameTitle);
182                                              }                                              }
183                                              break;                                              break;
184                                          case "GAMEIMAGE":                                          case "GAMEIMAGE":
# Line 174  namespace EmuXPortal.Api Line 187  namespace EmuXPortal.Api
187                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
188                                                  string gameimage = (value == "") ? GameImage : value;                                                  string gameimage = (value == "") ? GameImage : value;
189                                                  GameImage = gameimage;                                                  GameImage = gameimage;
190                                                  logger.WriteLine("\tGAMEIMAGE={0}", GameImage);                                                  log.WriteLine("\tGAMEIMAGE={0}", GameImage);
191                                              }                                              }
192                                              break;                                              break;
193                                          case "GAMEEXE":                                          case "GAMEEXE":
# Line 183  namespace EmuXPortal.Api Line 196  namespace EmuXPortal.Api
196                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
197                                                  string gameexe = (value == "") ? GameExe : value;                                                  string gameexe = (value == "") ? GameExe : value;
198                                                  GameExe = gameexe;                                                  GameExe = gameexe;
199                                                  logger.WriteLine("\tGAMEEXE={0}", GameExe);                                                  log.WriteLine("\tGAMEEXE={0}", GameExe);
200                                              }                                              }
201                                              break;                                              break;
202                                          case "GAMEEXEARGS":                                          case "GAMEEXEARGS":
# Line 192  namespace EmuXPortal.Api Line 205  namespace EmuXPortal.Api
205                                                  value = reader.ReadElementContentAsString();                                                  value = reader.ReadElementContentAsString();
206                                                  string gameexeargs = (value == "") ? GameExeArgs : value;                                                  string gameexeargs = (value == "") ? GameExeArgs : value;
207                                                  GameExeArgs = gameexeargs;                                                  GameExeArgs = gameexeargs;
208                                                  logger.WriteLine("\tGAMEEXEARGS={0}", GameExeArgs);                                                  log.WriteLine("\tGAMEEXEARGS={0}", GameExeArgs);
209                                              }                                              }
210                                              break;                                              break;
211                                          case "EXTERNALCONFIGSPATH":                                          case "EXTERNALCONFIGSPATH":
# Line 201  namespace EmuXPortal.Api Line 214  namespace EmuXPortal.Api
214                                                  string searchPattern = "*.config";                                                  string searchPattern = "*.config";
215                                                  string external_configs_path = reader.ReadElementContentAsString();                                                  string external_configs_path = reader.ReadElementContentAsString();
216                                                  //EmuOptions = (external_configs_path == "") ? EmuOptions : value;                                                  //EmuOptions = (external_configs_path == "") ? EmuOptions : value;
217                                                  logger.WriteLine("\tEXTERNALCONFIGSPATH={0}", external_configs_path);                                                  log.WriteLine("\tEXTERNALCONFIGSPATH={0}", external_configs_path);
218                                                  DirectoryInfo ext_path = new DirectoryInfo(external_configs_path);                                                  DirectoryInfo ext_path = new DirectoryInfo(external_configs_path);
219                                                  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);
220                                                  // try the path in romroot                                                  // try the path in romroot
221                                                  if (!ext_path.Exists) { ext_path = new DirectoryInfo(ext_rom_path); }                                                  if (!ext_path.Exists) { ext_path = new DirectoryInfo(ext_rom_path); }
222                                                  if (ext_path.Exists)                                                  if (ext_path.Exists)
# Line 216  namespace EmuXPortal.Api Line 229  namespace EmuXPortal.Api
229                                                          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())
230                                                      foreach (string file in external_config_files)                                                      foreach (string file in external_config_files)
231                                                      {                                                      {
232                                                          IEmuConfig config = EmuConfigLoader.Load(file, rom_path);                                                          IEmuConfig config = EmuConfigLoader.Load(log, file, EmuRomPath);
233                                                          if (config != null)                                                          if (config != null)
234                                                              externalconfigs.Add(config);                                                              externalconfigs.Add(config);
235                                                      }                                                      }
# Line 228  namespace EmuXPortal.Api Line 241  namespace EmuXPortal.Api
241                                          #endregion                                          #endregion
242                                          default:                                          default:
243                                              if (InConfigSection && (reader.Name != string.Empty) && reader.IsStartElement())                                              if (InConfigSection && (reader.Name != string.Empty) && reader.IsStartElement())
244                                                  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);
245                                              break;                                              break;
246                                      }                                      }
247                                      reader.Read();                                      reader.Read();
248                                  }                                  }
249                              }                              }
250                          }                          }
251                          logger.WriteLine("\tLoaded Config: {0}", config_path);                          log.WriteLine("\tLoaded Config: {0}", config_path);
252                          //loaded = true;                          //loaded = true;
253                      }                      }
254                      catch (Exception ex)                      catch (Exception ex)
255                      {                      {
256                          logger.WriteLine("\tFailed to Load Config: {0}", config_path);                          log.WriteLine("\tFailed to Load Config: {0}", config_path);
257                          Console.WriteLine(ex.ToString());                          Console.WriteLine(ex.ToString());
258                          logger.WriteLine("Error: {0}", ex.ToString());                          log.WriteLine("Error: {0}", ex.ToString());
259                          //loaded = false;                          //loaded = false;
260                      }                      }
261                  }                  }
262                  else { logger.WriteLine("Could not find EMU Config File: {0}", config_path); }                  else { log.WriteLine("Could not find EMU Config File: {0}", config_path); }
263    
264                  return this;                  return this;
265              }              }
266    
267              private const string Unknown_Platform = "Unknown Platform";              private const string Unknown_Platform = "Unknown Platform";
268              public EmuConfig() : this("") { }              private logger log;
269              public EmuConfig(string PlatformNameShort) : this(PlatformNameShort, PlatformNameShort) { }              public EmuConfig() : this(null, "") { }
270              public EmuConfig(string PlatformNameShort, string PlatformNameLong) : this(PlatformNameShort, PlatformNameLong, "") { }              public EmuConfig(logger log) : this(log,"") { }
271              public EmuConfig(string PlatformNameShort, string PlatformNameLong, string PlatformImage) : this(PlatformNameShort, PlatformNameLong, PlatformImage, "") { }              public EmuConfig(logger log, string PlatformNameShort) : this(log, PlatformNameShort, PlatformNameShort) { }
272              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, "") { }
273              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, "") { }
274              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, "") { }
275                public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions, string EmuPath) : this(log, PlatformNameShort, PlatformNameLong, PlatformImage, Extenstions, EmuPath, "") { }
276                public EmuConfig(logger log, string PlatformNameShort, string PlatformNameLong, string PlatformImage, string Extenstions, string EmuPath, string EmuOptions)
277              {              {
278                  this.PlatformNameShort = PlatformNameShort;                  this.PlatformNameShort = PlatformNameShort;
279                  this.PlatformNameLong = PlatformNameLong;                  this.PlatformNameLong = PlatformNameLong;
# Line 271  namespace EmuXPortal.Api Line 286  namespace EmuXPortal.Api
286                  this.GameImage = "";                  this.GameImage = "";
287                  this.GameExe = "";                  this.GameExe = "";
288                  this.GameExeArgs = "";                  this.GameExeArgs = "";
289                    this.log = log;
290              }              }
291              #region IEmuConfig members              #region IEmuConfig members
292                public bool IsFavorites { get { return false; } }
293              public string ConfigPath { get; set; }              public string ConfigPath { get; set; }
294              private string _PlatformNameShort;              private string _PlatformNameShort;
295              public string PlatformNameShort              public string PlatformNameShort
# Line 286  namespace EmuXPortal.Api Line 303  namespace EmuXPortal.Api
303                      }                      }
304                      catch (Exception ex)                      catch (Exception ex)
305                      {                      {
306                          logger.WriteLine("PlatformNameShort.get() Error: {0}", ex.ToString());                          log.WriteLine("PlatformNameShort.get() Error: {0}", ex.ToString());
307                          return Unknown_Platform;                          return Unknown_Platform;
308                      }                      }
309                  }                  }
# Line 304  namespace EmuXPortal.Api Line 321  namespace EmuXPortal.Api
321                      }                      }
322                      catch (Exception ex)                      catch (Exception ex)
323                      {                      {
324                          logger.WriteLine("PlatformNameLong.get() Error: {0}", ex.ToString());                          log.WriteLine("PlatformNameLong.get() Error: {0}", ex.ToString());
325                          return Unknown_Platform;                          return Unknown_Platform;
326                      }                      }
327                  }                  }
# Line 340  namespace EmuXPortal.Api Line 357  namespace EmuXPortal.Api
357              {              {
358                  return this.PlatformNameLong.CompareTo(obj.PlatformNameLong);                  return this.PlatformNameLong.CompareTo(obj.PlatformNameLong);
359              }              }
360              public void RefreshConfig()              public void RefreshConfig(logger log)
361              {              {
362                  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));
363                  this.Create(EmuRomPath);                  this.Create(log,EmuRomPath);
364              }              }
365              #endregion              #endregion
366    

Legend:
Removed from v.110  
changed lines
  Added in v.175

  ViewVC Help
Powered by ViewVC 1.1.22