363 lines
15 KiB
C#
363 lines
15 KiB
C#
using Firelance.Models;
|
|
using FirelanceMgr;
|
|
using MongoDB.Bson;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.IO;
|
|
using System.Linq;
|
|
|
|
namespace DevConsole
|
|
{
|
|
class Program
|
|
{
|
|
public static Gsm.GsmMgr gsmMgr = new Gsm.GsmMgr();
|
|
public static Firelance.FirelanceMgr flcMgr = new Firelance.FirelanceMgr();
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
ConnectToGsmDb();
|
|
ConnectToFirelanceManager();
|
|
Console.WriteLine("");
|
|
while (true) { CommandsMenu(); }
|
|
}
|
|
|
|
private static void CommandsMenu()
|
|
{
|
|
Console.WriteLine("Please select an option below:\n");
|
|
Console.WriteLine("A. Manage DB Connections --->");
|
|
Console.WriteLine("B. GSM Actions --->");
|
|
Console.WriteLine("C. FLC Actions --->");
|
|
Console.WriteLine("D. Helper Actions --->");
|
|
Console.WriteLine("X. Exit application\n");
|
|
Console.Write(":");
|
|
|
|
var userInput = Console.ReadLine();
|
|
Console.Write("\n\n");
|
|
|
|
switch (userInput.ToUpper())
|
|
{
|
|
case "A":
|
|
CmdDbMgr();
|
|
break;
|
|
case "B":
|
|
CmdGsmActions();
|
|
break;
|
|
case "C":
|
|
CmdFlcActions();
|
|
break;
|
|
case "D":
|
|
CmdHelperActions();
|
|
break;
|
|
case "X":
|
|
Environment.Exit(0);
|
|
break;
|
|
default:
|
|
Console.WriteLine("Invalid selection, please enter a listed command.");
|
|
break;
|
|
}
|
|
}
|
|
|
|
private static void ConnectToGsmDb()
|
|
{
|
|
gsmMgr.OpenConnection(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
|
|
@"Projects\FireLance\GSMParser\games.db"), 0);
|
|
Console.WriteLine($"GSMParser Connection State: {gsmMgr.IsConnectionOpen()}");
|
|
}
|
|
|
|
private static void ConnectToFirelanceManager()
|
|
{
|
|
flcMgr.OpenConnection("sr3", 27017);
|
|
Console.WriteLine($"FireLance Connection State: {flcMgr.IsConnectionOpen()}");
|
|
}
|
|
|
|
#region Command Options
|
|
private static void CmdDbMgr()
|
|
{
|
|
Console.WriteLine("[GsmDb]------------");
|
|
Console.WriteLine("A. Open DB");
|
|
Console.WriteLine("B. Close DB");
|
|
Console.WriteLine("[Firelance]------------");
|
|
Console.WriteLine("C. Open DB");
|
|
Console.WriteLine("D. Close DB (Unsupported)");
|
|
Console.WriteLine("X. <--- Go back\n");
|
|
Console.Write(":");
|
|
|
|
var userInput = Console.ReadLine();
|
|
Console.Write("\n\n");
|
|
|
|
switch (userInput.ToUpper())
|
|
{
|
|
case "A":
|
|
ConnectToGsmDb();
|
|
break;
|
|
case "B":
|
|
gsmMgr.CloseCurrentConnection();
|
|
break;
|
|
case "C":
|
|
ConnectToFirelanceManager();
|
|
break;
|
|
case "D":
|
|
flcMgr.CloseCurrentConnection();
|
|
break;
|
|
case "X":
|
|
break;
|
|
}
|
|
}
|
|
|
|
private static void CmdGsmActions()
|
|
{
|
|
Console.WriteLine("A. Query game by ID");
|
|
Console.WriteLine("B. Query directory by ID");
|
|
Console.WriteLine("C. Query game by NAME");
|
|
Console.WriteLine("X. <--- Go back\n");
|
|
Console.Write(":");
|
|
|
|
var userInput = Console.ReadLine();
|
|
Console.Write("\n\n");
|
|
|
|
switch (userInput.ToUpper())
|
|
{
|
|
case "A":
|
|
Console.WriteLine("Enter a game ID:");
|
|
|
|
var queryId = gsmMgr.RO.LoadRecords<GameEntryModel>( Gsm.Collections.Columns.GameName,
|
|
Gsm.Collections.Tables.GameEntry,
|
|
Gsm.Collections.Columns.ID,
|
|
Console.ReadLine(),
|
|
true);
|
|
foreach (var record in queryId) PrintAllValues(record);
|
|
|
|
break;
|
|
case "B":
|
|
Console.WriteLine("Enter a game ID:");
|
|
|
|
var queryDirectoryId = gsmMgr.RO.LoadRecords<DirectoriesModel>( Gsm.Collections.Options.All,
|
|
Gsm.Collections.Tables.Directories,
|
|
Gsm.Collections.Columns.GameID,
|
|
Console.ReadLine(),
|
|
true);
|
|
foreach (var record in queryDirectoryId) PrintAllValues(record);
|
|
break;
|
|
case "C":
|
|
Console.WriteLine("Enter game title to search:");
|
|
|
|
var queryGameByName = gsmMgr.RO.LoadRecords<GameEntryModel>( Gsm.Collections.Columns.GameName,
|
|
Gsm.Collections.Tables.GameEntry,
|
|
Gsm.Collections.Columns.GameName,
|
|
Console.ReadLine(),
|
|
false);
|
|
foreach (var record in queryGameByName) PrintAllValues(record);
|
|
break;
|
|
case "X":
|
|
break;
|
|
}
|
|
}
|
|
|
|
private static void CmdFlcActions()
|
|
{
|
|
Console.WriteLine("A. Write predefined MasterGameRecord");
|
|
Console.WriteLine("B. Read predefined MasterGameRecord");
|
|
Console.WriteLine("C. Insert blank save entry into existing MasterGameRecord");
|
|
Console.WriteLine("D. Remove first save entry from existing MasterGameRecord");
|
|
Console.WriteLine("E. Upload save entry using GridFS");
|
|
Console.WriteLine("F. Download save entry using GridFS");
|
|
Console.WriteLine("X. <--- Go back\n");
|
|
Console.Write(":");
|
|
|
|
var userInput = Console.ReadLine();
|
|
Console.Write("\n\n");
|
|
|
|
switch (userInput.ToUpper())
|
|
{
|
|
case "A":
|
|
FlcWriteMasterGameRecordAction();
|
|
break;
|
|
case "B":
|
|
FlcReadMasterGameRecordAction();
|
|
break;
|
|
case "C":
|
|
FlcInsertBlankSaveEntryAction();
|
|
break;
|
|
case "D":
|
|
FlcRemoveFirstSaveEntryAction();
|
|
break;
|
|
case "E":
|
|
FlcUploadToGridFsAction();
|
|
break;
|
|
case "F":
|
|
FlcDownloadToGridFsAction();
|
|
break;
|
|
case "X":
|
|
break;
|
|
}
|
|
}
|
|
|
|
private static void CmdHelperActions()
|
|
{
|
|
Console.WriteLine("A. Convert SpecialPath to AbsolutePath");
|
|
Console.WriteLine("B. Path and filter testing");
|
|
Console.WriteLine("X. <--- Go back\n");
|
|
Console.Write(":");
|
|
|
|
var userInput = Console.ReadLine();
|
|
Console.Write("\n\n");
|
|
|
|
switch (userInput.ToUpper())
|
|
{
|
|
case "A":
|
|
Console.WriteLine(Helpers.Converters.GetSpecialToAbsolutePath(Console.ReadLine().ToUpper()));
|
|
break;
|
|
case "B":
|
|
string fullPath = Path.Combine(Helpers.Converters.GetSpecialToAbsolutePath("%DOCUMENTS%") , @"Saved Games\Hades");
|
|
string relPath = fullPath.Replace(Helpers.Converters.GetSpecialToAbsolutePath("%DOCUMENTS%") + "\\", string.Empty);
|
|
|
|
Console.WriteLine($"Full: {fullPath}");
|
|
Console.WriteLine($"Relative Path: {relPath}");
|
|
|
|
Console.WriteLine("Please enter the filter patterns required.");
|
|
Console.Write("\nInclusion Filter: ");
|
|
var i = Console.ReadLine();
|
|
Console.Write("Exclusion Filter: ");
|
|
var e = Console.ReadLine();
|
|
PrintListValues(new FileManifest().Build(fullPath, i, e));
|
|
|
|
//FSManipulation.CopyDirectory(
|
|
// fullPath,
|
|
// fullPath.Replace(Helpers.Converters.GetSpecialToAbsolutePath("%DOCUMENTS%") + "\\", @"D:\Temp\TEST\"));
|
|
break;
|
|
case "X":
|
|
break;
|
|
}
|
|
}
|
|
#endregion
|
|
#region FlcActions
|
|
private static void FlcWriteMasterGameRecordAction()
|
|
{
|
|
var masterGameRecord = new MasterGameRecordModel();
|
|
List<DirectoriesModel> directories = gsmMgr.RO.LoadRecords<DirectoriesModel>( Gsm.Collections.Options.All,
|
|
Gsm.Collections.Tables.Directories,
|
|
Gsm.Collections.Columns.GameID,
|
|
"600",
|
|
true);
|
|
|
|
GameEntryModel gameEntry = gsmMgr.RO.LoadRecords<GameEntryModel>( Gsm.Collections.Columns.GameName,
|
|
Gsm.Collections.Tables.GameEntry,
|
|
Gsm.Collections.Columns.ID,
|
|
"600",
|
|
true).First();
|
|
|
|
masterGameRecord.Directories = directories;
|
|
directories.ForEach(x => x.SaveGameEntries = new List<SaveGameEntriesModel>());
|
|
masterGameRecord.GameEntry = gameEntry;
|
|
|
|
flcMgr.CRUD.InsertRecord(Firelance.Collections.GameRecords, masterGameRecord);
|
|
}
|
|
|
|
static void FlcReadMasterGameRecordAction()
|
|
{
|
|
var masterGameRecords = flcMgr.CRUD.LoadRecordsFromTable<MasterGameRecordModel>(Firelance.Collections.GameRecords);
|
|
foreach (var record in masterGameRecords)
|
|
{
|
|
Console.WriteLine(record.Id);
|
|
Console.WriteLine("");
|
|
PrintAllValues(record.GameEntry);
|
|
Console.WriteLine("");
|
|
|
|
foreach (var dirRecord in record.Directories)
|
|
{
|
|
PrintAllValues(dirRecord);
|
|
dirRecord.SaveGameEntries.ForEach(x => PrintAllValues(x));
|
|
Console.WriteLine("");
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void FlcRemoveFirstSaveEntryAction()
|
|
{
|
|
Guid firstGuid = flcMgr.CRUD.LoadRecordsFromTable<MasterGameRecordModel>(
|
|
Firelance.Collections.GameRecords).First().Id;
|
|
MasterGameRecordModel recordToRemove = flcMgr.CRUD.LoadRecordById<MasterGameRecordModel>(
|
|
Firelance.Collections.GameRecords,
|
|
firstGuid);
|
|
ObjectId firstSaveId = recordToRemove
|
|
.Directories.Select(y => y
|
|
.SaveGameEntries.Select(x => x
|
|
.SaveDataID).First()).First();
|
|
recordToRemove
|
|
.Directories.Select(y => y
|
|
.SaveGameEntries.RemoveAll(x => x
|
|
.SaveDataID == firstSaveId)).First();
|
|
|
|
flcMgr.CRUD.UpsertRecordById(Firelance.Collections.GameRecords,
|
|
firstGuid,
|
|
recordToRemove);
|
|
|
|
var result = flcMgr.GFS.DeleteFile(firstSaveId);
|
|
}
|
|
|
|
private static void FlcInsertBlankSaveEntryAction()
|
|
{
|
|
Guid firstGuid = flcMgr.CRUD.LoadRecordsFromTable<MasterGameRecordModel>(
|
|
Firelance.Collections.GameRecords).First().Id;
|
|
MasterGameRecordModel recordToInsert = flcMgr.CRUD.LoadRecordById<MasterGameRecordModel>(
|
|
Firelance.Collections.GameRecords,
|
|
firstGuid);
|
|
|
|
foreach (var dir in recordToInsert.Directories)
|
|
{
|
|
dir.SaveGameEntries.Add(new SaveGameEntriesModel());
|
|
break;
|
|
}
|
|
|
|
flcMgr.CRUD.UpsertRecordById( Firelance.Collections.GameRecords,
|
|
firstGuid,
|
|
recordToInsert);
|
|
}
|
|
|
|
private static void FlcUploadToGridFsAction()
|
|
{
|
|
var ulObjId = new ObjectId(flcMgr.GFS.UploadFile("TestFile", @"C:\Users\Dunestorm\Downloads\OpenMW-0.46.0-win64.exe").Result);
|
|
|
|
Guid firstGuid = flcMgr.CRUD.LoadRecordsFromTable<MasterGameRecordModel>(
|
|
Firelance.Collections.GameRecords).First().Id;
|
|
MasterGameRecordModel saveGameEntry = flcMgr.CRUD.LoadRecordById<MasterGameRecordModel>(
|
|
Firelance.Collections.GameRecords, firstGuid);
|
|
|
|
foreach (var dir in saveGameEntry.Directories)
|
|
{
|
|
dir.SaveGameEntries.Add(new SaveGameEntriesModel() { SaveDataID = ulObjId });
|
|
break;
|
|
}
|
|
|
|
flcMgr.CRUD.UpsertRecordById( Firelance.Collections.GameRecords,
|
|
firstGuid,
|
|
saveGameEntry);
|
|
|
|
Console.WriteLine(ulObjId);
|
|
}
|
|
|
|
private static void FlcDownloadToGridFsAction()
|
|
{
|
|
var objId = "5f00a560b65a2f02d0c7996e";
|
|
|
|
var dlResult = flcMgr.GFS.DownloadFile(new ObjectId(objId), @$"D:\Temp\{objId}.exe");
|
|
Console.WriteLine($"Download Successful: {dlResult.Result}");
|
|
}
|
|
#endregion
|
|
|
|
private static void PrintAllValues<T>(T data)
|
|
{
|
|
foreach (PropertyDescriptor item in TypeDescriptor.GetProperties(data))
|
|
{
|
|
Console.WriteLine($"{item.Name}: {item.GetValue(data)}");
|
|
}
|
|
}
|
|
|
|
private static void PrintListValues(List<string> data)
|
|
{
|
|
foreach (var item in data) { Console.WriteLine(item); }
|
|
}
|
|
}
|
|
}
|