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(@"C:\Users\Dunestorm\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( 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( 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( 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%") , @"BioWare\Mass Effect Andromeda"); string relPath = fullPath.Replace(Helpers.Converters.GetSpecialToAbsolutePath("%DOCUMENTS%") + "\\", string.Empty); Console.WriteLine($"Full: {fullPath}"); Console.WriteLine($"Relative Path: {relPath}"); Console.WriteLine("Please enter the pattern for the inclusion filter and then\nthe exclusion filter:"); PrintListValues(Helpers.Filters.FilterDirectory(fullPath, Console.ReadLine(), Console.ReadLine())); //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 directories = gsmMgr.RO.LoadRecords( Gsm.Collections.Options.All, Gsm.Collections.Tables.Directories, Gsm.Collections.Columns.GameID, "600", true); GameEntryModel gameEntry = gsmMgr.RO.LoadRecords( Gsm.Collections.Columns.GameName, Gsm.Collections.Tables.GameEntry, Gsm.Collections.Columns.ID, "600", true).First(); List saveGameEntries = new List(); saveGameEntries.Add(new SaveGameEntriesModel()); masterGameRecord.Directories = directories; masterGameRecord.GameEntry = gameEntry; masterGameRecord.SaveGameEntries = saveGameEntries; flcMgr.CRUD.InsertRecord(Firelance.Collections.GameRecords, masterGameRecord); } static void FlcReadMasterGameRecordAction() { var masterGameRecords = flcMgr.CRUD.LoadRecordsFromTable(Firelance.Collections.GameRecords); foreach (var record in masterGameRecords) { Console.WriteLine(record.Id); Console.WriteLine(""); PrintAllValues(record.GameEntry); Console.WriteLine(""); foreach (var subRecord in record.Directories) { PrintAllValues(subRecord); Console.WriteLine(""); } foreach (var subRecord in record.SaveGameEntries) { PrintAllValues(subRecord); Console.WriteLine(""); } } } private static void FlcRemoveFirstSaveEntryAction() { Guid firstGuid = flcMgr.CRUD.LoadRecordsFromTable( Firelance.Collections.GameRecords).First().Id; MasterGameRecordModel recordToRemove = flcMgr.CRUD.LoadRecordById( Firelance.Collections.GameRecords, firstGuid); ObjectId firstSaveId = recordToRemove.SaveGameEntries.Select(x => x.SaveDataID).First(); recordToRemove.SaveGameEntries.RemoveAll(x => x.SaveDataID == firstSaveId); flcMgr.CRUD.UpsertRecordById(Firelance.Collections.GameRecords, firstGuid, recordToRemove); var result = flcMgr.GFS.DeleteFile(firstSaveId); } private static void FlcInsertBlankSaveEntryAction() { Guid firstGuid = flcMgr.CRUD.LoadRecordsFromTable( Firelance.Collections.GameRecords).First().Id; MasterGameRecordModel recordToInsert = flcMgr.CRUD.LoadRecordById( Firelance.Collections.GameRecords, firstGuid); recordToInsert.SaveGameEntries.Add( new SaveGameEntriesModel()); 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( Firelance.Collections.GameRecords).First().Id; MasterGameRecordModel saveGameEntry = flcMgr.CRUD.LoadRecordById( Firelance.Collections.GameRecords, firstGuid); saveGameEntry.SaveGameEntries.Add( new SaveGameEntriesModel() { SaveDataID = ulObjId }); flcMgr.CRUD.UpsertRecordById( Firelance.Collections.GameRecords, firstGuid, saveGameEntry); Console.WriteLine(ulObjId); } private static void FlcDownloadToGridFsAction() { var objId = "5f00a560b65a2f02d0c7996e"; var dlResult = flcMgr.GFS.DownloadFile(new MongoDB.Bson.ObjectId(objId), @$"D:\Temp\{objId}.exe"); Console.WriteLine($"Download Successful: {dlResult.Result}"); } #endregion private static void PrintAllValues(T data) { foreach (PropertyDescriptor item in TypeDescriptor.GetProperties(data)) { Console.WriteLine($"{item.Name}: {item.GetValue(data)}"); } } private static void PrintListValues(List data) { foreach (var item in data) { Console.WriteLine(item); } } } }