public void ApplyUpdates(InventorySet result) { var dm = DataMangler.GetInstance(); var cshk = CurrentState.History.Keys; InventorySet patch = CurrentState.History[cshk.Max()]; foreach (var update in dm.GetUpdates(result, CurrentState.DataVersion)) { if (!result.ContainsKey(update)) { result[update] = 0; } if (!patch.ContainsKey(update)) { patch[update] = 0; } } if (patch.Count == 0) { return; } CurrentState.DataVersion = dm.DataVersion; }
static void Main(string[] args) { var dm = DataMangler.GetInstance(); var journalPath = Filesystem.GuessJournalPath(); var logs = new EliteJournalParser(journalPath); var handler = new InventoryHandler(dm.EngineerCostLookup); int data = 0; handler.InventoryChanged += (o, e) => { if (e.Name == "scandatabanks" && e.Delta != 0) { data += e.Delta; Console.WriteLine("scandatabanks: " + data.ToString()); } }; foreach (var entry in logs.GetLogEntries()) { entry.Accept(handler); } // Prevent the console from closing Console.ReadLine(); }
static void Main(string[] args) { EliteJournalParser logs = new EliteJournalParser(""); DataMangler dm = DataMangler.GetInstance(); InventorySet Deltas = new InventorySet(); IDictionary <string, IList <EliteJournalEntry> > MatSeen = new Dictionary <string, IList <EliteJournalEntry> >(); EliteJournalDebugHandler dhandler = new EliteJournalDebugHandler(); InventoryHandler mhandler = new InventoryHandler(dm.EngineerCostLookup); mhandler.InventoryChanged += (object sender, InventoryEventArgs e) => { Deltas.AddMat(e.Name, e.Delta); if (!MatSeen.ContainsKey(e.Name)) { MatSeen[e.Name] = new List <EliteJournalEntry>(); } MatSeen[e.Name].Add(e.JournalEntry); }; var handlers = new List <EliteJournalHandler>() { dhandler, mhandler }; foreach (var entry in logs.GetLogEntries()) { entry.Accept(dhandler); entry.Accept(mhandler); } #region Show unknown log entries foreach (var evt in dhandler.UnknownEvents) { Console.WriteLine("Unknown Event: " + evt); } #endregion #region Show confirmed material names var deltas = new InventorySet(); var seen = new Dictionary <string, IList <EliteJournalEntry> >(); // Normalize the names to lowercase foreach (var mat in Deltas) { var name = mat.Key.ToLower(); deltas.AddMat(name, mat.Value); if (!seen.ContainsKey(name)) { seen[name] = new List <EliteJournalEntry>(); } // Insert seen events in the appropriate order var i = 0; foreach (var e in MatSeen[mat.Key]) { bool wasInserted = false; while (i < seen[name].Count) { if (seen[name][i].Timestamp > e.Timestamp) { seen[name].Insert(i, e); wasInserted = true; break; } i++; } if (!wasInserted) { seen[name].Add(e); } } } foreach (var mat in deltas) { if (dm.IgnoreCommodities.Contains(mat.Key)) { Console.WriteLine("\"Ignored Commodity\",\"{0}\",{1},\"{2}\"", mat.Key.ToLower(), mat.Value, seen[mat.Key][0].Timestamp); } } foreach (var mat in deltas) { if (!dm.IgnoreCommodities.Contains(mat.Key)) { Console.WriteLine("\"Confirmed Material\",\"{0}\",{1},\"{2}\"", mat.Key.ToLower(), mat.Value, seen[mat.Key][0].Timestamp); } } #endregion // Prevent the console from closing Console.ReadLine(); }
static void Main() { // We would like to thank Microsoft for their generous donation of // these next two codes. Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // Set up Internal Constants DataMangler dm = DataMangler.GetInstance(); // Set up Registry Keys Configuration cfg = new Configuration(); // See if we need to upgrade the state file HandleUpgrade(); // Program will run in a loop until user chooses "Exit" // on the chooser, or in the main window ChooseCmdrController choose = new ChooseCmdrController(cfg); while (choose.Run()) { // Picard Persistent State PersistentState state = new PersistentState( Filesystem.GetStatePath(choose.CmdrName)); // This needs to be refactored out entirely since the // name is basically chosen on startup. But for now // this should solve the problem. state.CurrentState.EliteCmdrName = choose.CmdrName; // Inara.cz API InaraApi api = new InaraApi(); // Elite Dangerous Gameplay Logs EliteJournalParser logs = new EliteJournalParser( choose.JournalPath); // Show a login dialog box and handle user authentication with Inara AuthenticationController authCtrl = new AuthenticationController(api, state); authCtrl.Run(); // If unauthenticated, that means they closed the login form // Just exit without error, don't write anything if (!api.isAuthenticated) { continue; } if (!state.HasHistory()) { // If there is no stored history, perform an initial // import and then exit FirstRunController firstRunCtrl = new FirstRunController( api, state); firstRunCtrl.Run(); } else { // If there is stored history, run the main program. NormalRunController normalRunCtrl = new NormalRunController( api, state, logs, dm); normalRunCtrl.Run(); } } /*if(!state.HasEliteCmdrName()) * { * StateFileUpgrader.StateFileUpgrader drat = new StateFileUpgrader.StateFileUpgrader(logs, state); * drat.Run(); * } * * if (state.HasEliteCmdrName()) * { * }*/ }