Add logging support and bump version

This commit is contained in:
Matt Nadareski
2016-03-28 17:54:24 -07:00
parent 04b2eacbdd
commit 9c8075dc05
5 changed files with 152 additions and 26 deletions

View File

@@ -7,6 +7,8 @@ using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Web; using System.Web;
using WoD.Helper;
namespace WoD namespace WoD
{ {
class Generate class Generate
@@ -20,14 +22,16 @@ namespace WoD
// Private required variables // Private required variables
private Dictionary<int, string> _headers; private Dictionary<int, string> _headers;
private Logging _logger;
public Generate(string systems, string sources, string connectionString, bool norename = false, bool old = false) public Generate(string systems, string sources, string connectionString, Logging logger, bool norename = false, bool old = false)
{ {
_systems = systems; _systems = systems;
_sources = sources; _sources = sources;
_connectionString = connectionString; _connectionString = connectionString;
_norename = norename; _norename = norename;
_old = old; _old = old;
_logger = logger;
_headers = new Dictionary<int, string>(); _headers = new Dictionary<int, string>();
_headers.Add(25, "a7800.xml"); _headers.Add(25, "a7800.xml");
@@ -45,7 +49,7 @@ namespace WoD
int id = 0; int id = 0;
if (_sources != "" && Int32.TryParse(_sources, out id) && id <= 14) if (_sources != "" && Int32.TryParse(_sources, out id) && id <= 14)
{ {
Console.WriteLine("This source is import-only so a DAT cannot be created. We apologize for the inconvenience."); _logger.Log("This source is import-only so a DAT cannot be created. We apologize for the inconvenience.");
return false; return false;
} }
@@ -64,7 +68,7 @@ namespace WoD
// If there are no games for this combination, return nothing // If there are no games for this combination, return nothing
if (!sldr.HasRows) if (!sldr.HasRows)
{ {
Console.WriteLine("No system could be found with id in \"" + _systems + "\". Please check and try again."); _logger.Log("No system could be found with id in \"" + _systems + "\". Please check and try again.");
return false; return false;
} }
@@ -106,7 +110,7 @@ namespace WoD
// If there are no games for this combination, return nothing // If there are no games for this combination, return nothing
if (!sldr.HasRows) if (!sldr.HasRows)
{ {
Console.WriteLine("No source could be found with id in \"" + _sources + "\". Please check and try again."); _logger.Log("No source could be found with id in \"" + _sources + "\". Please check and try again.");
return false; return false;
} }
@@ -146,7 +150,7 @@ namespace WoD
string datname = systemname + " (" + sourcename + " " + version + ")"; string datname = systemname + " (" + sourcename + " " + version + ")";
// Create and open an output file for writing (currently uses current time, change to "last updated time" // Create and open an output file for writing (currently uses current time, change to "last updated time"
Console.WriteLine("Opening file for writing: " + datname + (_old ? ".dat" : ".xml")); _logger.Log("Opening file for writing: " + datname + (_old ? ".dat" : ".xml"));
try try
{ {
@@ -234,13 +238,13 @@ namespace WoD
} }
sw.Write((_old ? ")" : "\t</machine>\n</datafile>")); sw.Write((_old ? ")" : "\t</machine>\n</datafile>"));
Console.WriteLine("File written!"); _logger.Log("File written!");
sw.Close(); sw.Close();
fs.Close(); fs.Close();
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine(ex); _logger.Log(ex.ToString());
return false; return false;
} }
@@ -288,7 +292,7 @@ JOIN checksums
// If there are no games for this combination, return nothing // If there are no games for this combination, return nothing
if (!sldr.HasRows) if (!sldr.HasRows)
{ {
Console.WriteLine("No games could be found with those inputs. Please check and try again."); _logger.Log("No games could be found with those inputs. Please check and try again.");
return null; return null;
} }

View File

@@ -13,6 +13,7 @@ namespace WoD
// Private instance variables // Private instance variables
private string _filepath; private string _filepath;
private string _connectionString; private string _connectionString;
private Logging _logger;
// Regex File Name Patterns // Regex File Name Patterns
private static string _defaultPattern = @"^(.+?) - (.+?) \((.*) (.*)\)\.dat$"; private static string _defaultPattern = @"^(.+?) - (.+?) \((.*) (.*)\)\.dat$";
@@ -49,7 +50,7 @@ namespace WoD
} }
// Constructor // Constructor
public Import(string filepath, string connectionString) public Import(string filepath, string connectionString, Logging logger)
{ {
if (File.Exists(filepath)) if (File.Exists(filepath))
{ {
@@ -61,6 +62,7 @@ namespace WoD
} }
_connectionString = connectionString; _connectionString = connectionString;
_logger = logger;
} }
// Import the data from file into the database // Import the data from file into the database
@@ -104,7 +106,7 @@ namespace WoD
// If the type is still unmatched, the data can't be imported yet // If the type is still unmatched, the data can't be imported yet
else else
{ {
Console.WriteLine("File " + filename + " cannot be imported at this time because it is not a known pattern.\nPlease try again with an unrenamed version."); _logger.Log("File " + filename + " cannot be imported at this time because it is not a known pattern.\nPlease try again with an unrenamed version.");
return false; return false;
} }
@@ -120,7 +122,7 @@ namespace WoD
case DatType.mame: case DatType.mame:
if (!Remapping.MAME.ContainsKey(fileinfo[1].Value)) if (!Remapping.MAME.ContainsKey(fileinfo[1].Value))
{ {
Console.WriteLine("The filename " + fileinfo[1].Value + " could not be mapped! Please check the mappings and try again"); _logger.Log("The filename " + fileinfo[1].Value + " could not be mapped! Please check the mappings and try again");
return false; return false;
} }
GroupCollection mameInfo = Regex.Match(Remapping.MAME[fileinfo[1].Value], _remappedPattern).Groups; GroupCollection mameInfo = Regex.Match(Remapping.MAME[fileinfo[1].Value], _remappedPattern).Groups;
@@ -133,7 +135,7 @@ namespace WoD
case DatType.nointro: case DatType.nointro:
if (!Remapping.NoIntro.ContainsKey(fileinfo[1].Value)) if (!Remapping.NoIntro.ContainsKey(fileinfo[1].Value))
{ {
Console.WriteLine("The filename " + fileinfo[1].Value + " could not be mapped! Please check the mappings and try again"); _logger.Log("The filename " + fileinfo[1].Value + " could not be mapped! Please check the mappings and try again");
return false; return false;
} }
GroupCollection nointroInfo = Regex.Match(Remapping.NoIntro[fileinfo[1].Value], _remappedPattern).Groups; GroupCollection nointroInfo = Regex.Match(Remapping.NoIntro[fileinfo[1].Value], _remappedPattern).Groups;
@@ -149,7 +151,7 @@ namespace WoD
case DatType.redump: case DatType.redump:
if (!Remapping.Redump.ContainsKey(fileinfo[1].Value)) if (!Remapping.Redump.ContainsKey(fileinfo[1].Value))
{ {
Console.WriteLine("The filename " + fileinfo[1].Value + " could not be mapped! Please check the mappings and try again"); _logger.Log("The filename " + fileinfo[1].Value + " could not be mapped! Please check the mappings and try again");
return false; return false;
} }
GroupCollection redumpInfo = Regex.Match(Remapping.Redump[fileinfo[1].Value], _remappedPattern).Groups; GroupCollection redumpInfo = Regex.Match(Remapping.Redump[fileinfo[1].Value], _remappedPattern).Groups;
@@ -165,7 +167,7 @@ namespace WoD
case DatType.tosec: case DatType.tosec:
if (!Remapping.TOSEC.ContainsKey(fileinfo[1].Value)) if (!Remapping.TOSEC.ContainsKey(fileinfo[1].Value))
{ {
Console.WriteLine("The filename " + fileinfo[1].Value + " could not be mapped! Please check the mappings and try again"); _logger.Log("The filename " + fileinfo[1].Value + " could not be mapped! Please check the mappings and try again");
return false; return false;
} }
GroupCollection tosecInfo = Regex.Match(Remapping.TOSEC[fileinfo[1].Value], _remappedPattern).Groups; GroupCollection tosecInfo = Regex.Match(Remapping.TOSEC[fileinfo[1].Value], _remappedPattern).Groups;
@@ -180,7 +182,7 @@ namespace WoD
case DatType.trurip: case DatType.trurip:
if (!Remapping.TruRip.ContainsKey(fileinfo[1].Value)) if (!Remapping.TruRip.ContainsKey(fileinfo[1].Value))
{ {
Console.WriteLine("The filename " + fileinfo[1].Value + " could not be mapped! Please check the mappings and try again"); _logger.Log("The filename " + fileinfo[1].Value + " could not be mapped! Please check the mappings and try again");
return false; return false;
} }
GroupCollection truripInfo = Regex.Match(Remapping.TruRip[fileinfo[1].Value], _remappedPattern).Groups; GroupCollection truripInfo = Regex.Match(Remapping.TruRip[fileinfo[1].Value], _remappedPattern).Groups;
@@ -216,7 +218,7 @@ namespace WoD
// If nothing is found, tell the user and exit // If nothing is found, tell the user and exit
if (!sldr.HasRows) if (!sldr.HasRows)
{ {
Console.WriteLine("Error: No suitable system found! Please add the system and then try again."); _logger.Log("Error: No suitable system found! Please add the system and then try again.");
return false; return false;
} }
@@ -240,7 +242,7 @@ namespace WoD
// If nothing is found, tell the user and exit // If nothing is found, tell the user and exit
if (!sldr.HasRows) if (!sldr.HasRows)
{ {
Console.WriteLine("Error: No suitable source found! Please add the source and then try again."); _logger.Log("Error: No suitable source found! Please add the source and then try again.");
return false; return false;
} }
@@ -495,14 +497,14 @@ INSERT INTO files (setid, name, type, lastupdated)
// If the insert of the checksums failed, that's bad // If the insert of the checksums failed, that's bad
if (affected < 1) if (affected < 1)
{ {
Console.WriteLine("There was an error adding checksums for " + name + " to the database!"); _logger.Log("There was an error adding checksums for " + name + " to the database!");
return false; return false;
} }
} }
// Otherwise, something happened which is bad // Otherwise, something happened which is bad
else else
{ {
Console.WriteLine("There was an error adding " + name + " to the database!"); _logger.Log("There was an error adding " + name + " to the database!");
return false; return false;
} }
} }

View File

@@ -9,15 +9,16 @@ namespace WoD
{ {
class DATabase class DATabase
{ {
private static Logging logger;
private static string _dbName = "DATabase.sqlite"; private static string _dbName = "DATabase.sqlite";
private static string _connectionString = "Data Source=" + _dbName + ";Version = 3;"; private static string _connectionString = "Data Source=" + _dbName + ";Version = 3;";
private static string _version = "0.1.0.0"; private static string _version = "0.1.1.0";
private static string _header = private static string _header =
@"+-----------------------------------------------------------------------------+ @"+-----------------------------------------------------------------------------+
| DATabase " + _version + @" | | DATabase " + _version + @" |
| | | |
| Programmed by Matt Nadareski (darksabre76) | | Programming: Matt Nadareski (darksabre76) |
| Tested by @tractivo | | Testing: @tractivo |
+-----------------------------------------------------------------------------+ +-----------------------------------------------------------------------------+
"; ";
@@ -26,6 +27,8 @@ namespace WoD
// Perform initial setup and verification // Perform initial setup and verification
DBTools.EnsureDatabase(_dbName, _connectionString); DBTools.EnsureDatabase(_dbName, _connectionString);
Remapping.CreateRemappings(); Remapping.CreateRemappings();
logger = new Logging(false, "database.log");
logger.Start();
Console.Clear(); Console.Clear();
Console.Title = "DATabase " + _version; Console.Title = "DATabase " + _version;
@@ -33,12 +36,14 @@ namespace WoD
if (args.Length == 0) if (args.Length == 0)
{ {
ShowMainMenu(); ShowMainMenu();
logger.Close();
return; return;
} }
// Determine which switches are enabled (with values if necessary) // Determine which switches are enabled (with values if necessary)
bool help = false, import = false, generate = false, convert = false, bool help = false, import = false, generate = false, convert = false,
listsys = false, listsrc = false, norename = false, old = false; listsys = false, listsrc = false, norename = false, old = false,
log = false;
string systems = "", sources = "", input = ""; string systems = "", sources = "", input = "";
foreach (string arg in args) foreach (string arg in args)
{ {
@@ -50,6 +55,7 @@ namespace WoD
listsrc = listsrc || (arg == "-lso" || arg == "--list-sources"); listsrc = listsrc || (arg == "-lso" || arg == "--list-sources");
norename = norename || (arg == "-nr" || arg == "--no-rename"); norename = norename || (arg == "-nr" || arg == "--no-rename");
old = old || (arg == "-old" || arg == "--romvault"); old = old || (arg == "-old" || arg == "--romvault");
log = log || (arg == "-l" || arg == "--log");
systems = (arg.StartsWith("system=") && systems == "" ? arg.Split('=')[1] : systems); systems = (arg.StartsWith("system=") && systems == "" ? arg.Split('=')[1] : systems);
sources = (arg.StartsWith("source=") && sources == "" ? arg.Split('=')[1] : sources); sources = (arg.StartsWith("source=") && sources == "" ? arg.Split('=')[1] : sources);
@@ -62,9 +68,13 @@ namespace WoD
if (help || !(import ^ generate ^ listsys ^ listsrc)) if (help || !(import ^ generate ^ listsys ^ listsrc))
{ {
Help(); Help();
logger.Close();
return; return;
} }
// Update the logger with the new value
logger.ToFile = log;
// Now take care of each mode in succesion // Now take care of each mode in succesion
// Import a file or folder // Import a file or folder
@@ -96,6 +106,7 @@ namespace WoD
{ {
InitConvert(input); InitConvert(input);
} }
logger.Close();
return; return;
} }
@@ -128,6 +139,7 @@ Make a selection:
4) Convert a DAT file from RV to XML 4) Convert a DAT file from RV to XML
5) List all available sources 5) List all available sources
6) List all available systems 6) List all available systems
7) " + (logger.ToFile ? "Disable Logging" : "Enable Logging") + @"
X) Exit Program X) Exit Program
"); ");
Console.Write("Enter selection: "); Console.Write("Enter selection: ");
@@ -161,6 +173,9 @@ Make a selection:
Console.Write("\nPress any key to continue..."); Console.Write("\nPress any key to continue...");
Console.ReadKey(); Console.ReadKey();
break; break;
case "7":
logger.ToFile = !logger.ToFile;
break;
} }
} }
Console.Clear(); Console.Clear();
@@ -188,6 +203,7 @@ Options:
-lsy, --list-systems List all systems (id <= name) -lsy, --list-systems List all systems (id <= name)
-c, --convert Convert a RV DAT to XML -c, --convert Convert a RV DAT to XML
A filename or folder is required to run A filename or folder is required to run
-l, --log Enable logging of program output
Filenames and directories can't start with '-', 'system=', or 'source=' Filenames and directories can't start with '-', 'system=', or 'source='
unless prefixed by 'input=' unless prefixed by 'input='
@@ -229,7 +245,7 @@ or 'b' to go back to the previous menu:");
if (filename != "" && File.Exists(filename)) if (filename != "" && File.Exists(filename))
{ {
Console.WriteLine("Beginning import of " + filename); Console.WriteLine("Beginning import of " + filename);
Import imp = new Import(filename, _connectionString); Import imp = new Import(filename, _connectionString, logger);
imp.ImportData(); imp.ImportData();
Console.WriteLine(filename + " imported!"); Console.WriteLine(filename + " imported!");
} }
@@ -239,7 +255,7 @@ or 'b' to go back to the previous menu:");
foreach (string file in Directory.GetFiles(filename, "*", SearchOption.TopDirectoryOnly)) foreach (string file in Directory.GetFiles(filename, "*", SearchOption.TopDirectoryOnly))
{ {
Console.WriteLine("Beginning import of " + file); Console.WriteLine("Beginning import of " + file);
Import imp = new Import(file, _connectionString); Import imp = new Import(file, _connectionString, logger);
imp.ImportData(); imp.ImportData();
Console.WriteLine(file + " imported!"); Console.WriteLine(file + " imported!");
} }
@@ -305,7 +321,7 @@ Make a selection:
private static void InitGenerate(string systems, string sources, bool norename, bool old) private static void InitGenerate(string systems, string sources, bool norename, bool old)
{ {
Generate gen = new Generate(systems, sources, _connectionString, norename, old); Generate gen = new Generate(systems, sources, _connectionString, logger, norename, old);
gen.Export(); gen.Export();
return; return;
} }

View File

@@ -71,6 +71,7 @@
<Compile Include="Core\Import.cs" /> <Compile Include="Core\Import.cs" />
<Compile Include="Helper\DBTools.cs" /> <Compile Include="Helper\DBTools.cs" />
<Compile Include="DATabase.cs" /> <Compile Include="DATabase.cs" />
<Compile Include="Helper\Logging.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Helper\Remapping.cs" /> <Compile Include="Helper\Remapping.cs" />
<Compile Include="Helper\Style.cs" /> <Compile Include="Helper\Style.cs" />

103
DATabase/Helper/Logging.cs Normal file
View File

@@ -0,0 +1,103 @@
using System;
using System.IO;
namespace WoD.Helper
{
public class Logging
{
// Private instance variables
private bool _tofile;
private string _filename;
private StreamWriter _log;
// Public wrappers
public bool ToFile
{
get { return _tofile; }
set
{
if (!value)
{
Close();
}
_tofile = value;
if (_tofile)
{
Start();
}
}
}
public Logging(bool tofile, string filename = "")
{
_tofile = tofile;
_filename = filename;
}
public bool Start()
{
if (!_tofile)
{
return true;
}
try
{
if (!File.Exists(_filename))
{
File.Create(_filename);
}
_log = new StreamWriter(File.OpenWrite(_filename));
_log.WriteLine("Logging started " + DateTime.Now);
}
catch
{
return false;
}
return true;
}
public bool Close()
{
if (!_tofile)
{
return true;
}
try
{
_log.WriteLine("Logging ended " + DateTime.Now);
_log.Close();
}
catch
{
return false;
}
return true;
}
public bool Log(string output)
{
// If we're writing to console, just write the string
if (!_tofile)
{
Console.WriteLine(output);
return true;
}
// If we're writing to file, use the existing stream
try
{
_log.WriteLine(output);
}
catch
{
Console.WriteLine("Could not write to log file!");
return false;
}
return true;
}
}
}