diff --git a/.eslintrc.json b/.eslintrc.json index 526a45f..36b3aee 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -8,6 +8,7 @@ "edjApp": true, "edjLogparser": true, "edScoopables": true, + "edjGetdistance": true, "edj": true, "console": false, "process": true, @@ -105,4 +106,4 @@ "off" ] } -} \ No newline at end of file +} diff --git a/.jshintrc b/.jshintrc index 5ad2377..4e36f45 100644 --- a/.jshintrc +++ b/.jshintrc @@ -4,6 +4,7 @@ "edjApp": true, "edjLogparser": true, "edScoopables": true, + "edjGetdistance": true, "edj": true, "console": false, "process": true, @@ -17,4 +18,4 @@ "unused": true, "esversion": 6, "varstmt": true -} \ No newline at end of file +} diff --git a/edj.filereader.js b/edj.filereader.js index d81ccf2..c001fc6 100644 --- a/edj.filereader.js +++ b/edj.filereader.js @@ -26,6 +26,7 @@ edj = { sel.removeAllRanges(); sel.addRange(r2); document.execCommand('copy'); + //todo: update on new file selection } t.contenteditable = false; }, @@ -49,6 +50,10 @@ edj = { edj.fileOnLoad(res.target.result); }; fr.readAsText(edj.lastFile, 'UTF-8'); + //one file uploaded, stop monitoring for changes. + if (_files.length === 1) { + return; + } setTimeout(() => { edj.monitorChanges(_selDir); }, 1000); @@ -109,6 +114,8 @@ edj = { l++; } edj.lastLine = l; + // assuming parsing is done, go ahead and get the distance + edjGetdistance.request(edjdata.player.pos.Body); edjGui.updateGui(); }, isJson(line) { @@ -161,4 +168,4 @@ edj = { const files = await edj.loadLogFiles(); edj.monitorChanges(files); } -}()); \ No newline at end of file +}()); diff --git a/edj.getdistance.js b/edj.getdistance.js new file mode 100644 index 0000000..e0942a2 --- /dev/null +++ b/edj.getdistance.js @@ -0,0 +1,19 @@ +/* edjGui */ +edjGetdistance = { + request(sysname) { + const req = new XMLHttpRequest(); + // true parameter denotes asynchronous + req.overrideMimeType('application/json'); + req.open('GET', `https://elitebgs.kodeblox.com/api/eddb/v3/bodies?name=${sysname.toString()}`, true); + req.onreadystatechange = function () { + if (req.readyState == 4 && req.status == '200') { + const jsonResponse = JSON.parse(req.responseText); + console.log(jsonResponse.docs[0].distance_to_arrival); + edjdata.player.pos.DistanceToArrival = jsonResponse.docs[0].distance_to_arrival; + edjGui.updateGui(); + } + }; + req.send(null); + }, +}; + diff --git a/edj.gui.js b/edj.gui.js index 1a3b1c0..a21f5ab 100644 --- a/edj.gui.js +++ b/edj.gui.js @@ -12,6 +12,7 @@ const edjGui = { const playerPos = edjGui.get_cmdr_position(); if (playerPos.length > 0) { document.getElementById('location').innerText = `in ${playerPos.join(', ')}`; + document.getElementById('body').innerText = `${edjdata.player.pos.Body} is ${edjdata.player.pos.DistanceToArrival} LS from the primary star.`; } else { document.getElementById('location').innerText = 'at an unknown position'; } @@ -38,4 +39,4 @@ const edjGui = { return items; }, -}; \ No newline at end of file +}; diff --git a/edj.logparser.js b/edj.logparser.js index c12177d..ac7e471 100644 --- a/edj.logparser.js +++ b/edj.logparser.js @@ -1,374 +1,376 @@ edjLogparser = { - parseLogLine(line) { - if (edj.isJson(line)) { - const logItem = JSON.parse(line); - switch (logItem.event) { - case 'Continued': - // TODO: Handle continued logs - break; - case 'AfmuRepairs': - case 'ApproachBody': - case 'ApproachSettlement': - case 'BuyAmmo': - case 'BuyDrones': - case 'Bounty': - case 'BuyExplorationData': - case 'BuyTradeData': - case 'CapShipBond': - case 'Cargo': - case 'CargoDepot': - case 'ChangeCrewRole': - case 'CollectCargo': - case 'CommunityGoal': - case 'CommunityGoalDiscard': - case 'CommunityGoalJoin': - case 'CommunityGoalReward': - case 'ClearSavedGame': - case 'CrewAssign': - case 'CrewFire': - case 'CrewHire': - case 'CrewLaunchFighter': - case 'CrewMemberJoins': - case 'CrewMemberQuits': - case 'CrewMemberRoleChange': - case 'DatalinkScan': - case 'DatalinkVoucher': - case 'DataScanned': - case 'DockFigher': - case 'DockSRV': + parseLogLine(line) { + if (edj.isJson(line)) { + const logItem = JSON.parse(line); + switch (logItem.event) { + case 'Continued': + // TODO: Handle continued logs + break; + case 'AfmuRepairs': + case 'ApproachBody': + console.log(line); + break; + case 'ApproachSettlement': + case 'BuyAmmo': + case 'BuyDrones': + case 'Bounty': + case 'BuyExplorationData': + case 'BuyTradeData': + case 'CapShipBond': + case 'Cargo': + case 'CargoDepot': + case 'ChangeCrewRole': + case 'CollectCargo': + case 'CommunityGoal': + case 'CommunityGoalDiscard': + case 'CommunityGoalJoin': + case 'CommunityGoalReward': + case 'ClearSavedGame': + case 'CrewAssign': + case 'CrewFire': + case 'CrewHire': + case 'CrewLaunchFighter': + case 'CrewMemberJoins': + case 'CrewMemberQuits': + case 'CrewMemberRoleChange': + case 'DatalinkScan': + case 'DatalinkVoucher': + case 'DataScanned': + case 'DockFigher': + case 'DockSRV': - case 'EjectCargo': - case 'EndCrewSession': - case 'EngineerApply': - case 'EngineerContribution': - case 'EngineerCraft': - case 'EngineerLegacyConvert': - case 'EngineerProgress': - case 'FactionKillBond': - case 'FetchRemoteModule': - case 'FighterDestroyed': - case 'FighterRebuilt': - case 'Fileheader': - case 'Friends': - case 'Interdiction': - case 'HeatWarning': - case 'JetConeBoost': - case 'JetConeDamage': - case 'JoinACrew': - case 'KickCrewMember': - case 'MarketBuy': - case 'MarketSell': - case 'MassModuleStore': - case 'MiningRefined': - case 'MissionAccepted': - case 'MissionAbandoned': - case 'MissionCompleted': - case 'MissionFailed': - case 'MissionRedirected': - case 'Missions': - case 'ModuleInfo': - case 'ModuleBuy': - case 'ModuleRetrieve': - case 'ModuleSell': - case 'ModuleSellRemote': - case 'ModuleStore': - case 'ModuleSwap': - case 'NavBeaconScan': - case 'NewCommander': - case 'NpcCrewPaidWage': - case 'NpcCrewRank': - case 'LaunchDrone': - case 'LaunchFighter': - case 'LaunchSRV': - case 'LeaveBody': - case 'Outfitting': - case 'Passengers': - case 'PayBounties': - case 'PayFines': - case 'PayLegacyFines': - case 'Powerplay': - case 'PowerplayCollect': - case 'PowerplayDefect': - case 'PowerplayDeliver': - case 'PowerplayFastTrack': - case 'PowerplayJoin': - case 'PowerplayLeave': - case 'PowerplaySalary': - case 'PowerplayVote': - case 'PowerplayVoucher': - case 'Promotion': - case 'PVPKill': - case 'QuitACrew': - case 'RebootRepair': - case 'RedeemVoucher': - case 'Repair': - case 'RepairDrone': - case 'RepairAll': - case 'Reputation': - case 'Ressurect': - case 'RestockVehicle': - case 'Scan': - case 'Scanned': - case 'ScientificResearch': - case 'Screenshot': - case 'SearchAndRescue': - case 'SellExplorationData': - case 'SellDrones': - case 'SellShipOnRebuy': - case 'SetUserShipName': - case 'Shipyard': - case 'ShipyardBuy': - case 'ShipyardNew': - case 'ShipyardSell': - case 'ShipyardTransfer': - case 'ShipyardSwap': - case 'ShipTargeted': - case 'Shutdown': - case 'Statistics': - case 'StoredShips': - case 'StoredModules': - case 'TechnologyBroker': - case 'Touchdown': - case 'UnderAttack': - case 'USSDrop': - case 'VehicleSwitch': - // We'll just ignore these events, since they contain nothing funny at the moment. - console.log(line); - break; - case 'DiscoveryScan': - case 'Music': - break; - case 'Died': - // TODO: Notification about client dead - console.log(logItem); - break; - case 'EscapeInterdiction': - console.log(logItem); - break; - case 'HeatDamage': - console.log(logItem); - break; - case 'HullDamage': - console.log(logItem); - break; - case 'Interdicted': - console.log(logItem); - break; - case 'Commander': - edjdata.player.cmdr = { - Commander: logItem.Name - }; - break; - case 'CommitCrime': - console.log(logItem); - break; - case 'CockpitBreached': - console.log(logItem); - break; - case 'LoadGame': - delete logItem.event; - delete logItem.timestamp; - edjdata.player.cmdr = logItem; - if (typeof logItem.FuelCapacity !== 'undefined') { - edjdata.player.fuel.max = logItem.FuelCapacity; - } - if (typeof logItem.FuelLevel !== 'undefined') { - edjdata.player.fuel.current = logItem.FuelLevel; - } - edjdata.gamemode = logItem.GameMode; - break; - case 'Location': - edjdata.player.pos = { - ...edjdata.player.pos, - ...logItem - }; - break; - case 'StartJump': - edjdata.player.pos = { - ...edjdata.player.pos, - ...logItem - }; - edjdata.player.pos.Docked = false; - edjdata.player.pos.Body = null; - edjdata.player.pos.StarPos = null; - edjdata.player.pos.BodyType = null; - edjdata.player.pos.Scoopable = edScoopables.findIndex((item) => item === logItem.StarClass) !== -1; - break; - case 'FSDJump': - edjdata.player.pos = { - ...edjdata.player.pos, - ...logItem - }; - edjdata.player.pos.Docked = false; - edjdata.player.pos.Body = null; - edjdata.player.pos.BodyType = null; - if (typeof logItem.FuelLevel !== 'undefined') { - edjdata.player.fuel.current = logItem.FuelLevel; - } - break; - case 'Shipyard': - edjdata.player.pos = { - ...edjdata.player.pos, - ...{ - StarSystem: logItem.StarSystem, - Body: logItem.StationName - } - }; - break; - case 'Market': - edjdata.player.pos = { - ...edjdata.player.pos, - ...{ - StarSystem: logItem.StarSystem, - Body: logItem.StationName - } - }; - break; - case 'ShieldState': - console.log(logItem); - break; - case 'FuelScoop': - edjdata.player.fuel.current = logItem.Total; - break; - case 'RefuelAll': - edjdata.player.fuel.current = edjdata.player.fuel.max; - break; - case 'RefuelPartial': - console.log(logItem); - break; - case 'SupercruiseEntry': - edjdata.player.pos.Docked = false; - edjdata.player.pos.Body = null; - edjdata.player.pos.BodyType = null; - edjdata.player.pos.SuperCruise = true; - break; - case 'SupercruiseExit': - edjdata.player.pos.Docked = false; - edjdata.player.pos.Body = null; - edjdata.player.pos.BodyType = null; - edjdata.player.pos.SuperCruise = false; - break; - case 'Undocked': - edjdata.player.pos.Docked = false; - edjdata.player.pos.Body = null; - edjdata.player.pos.BodyType = null; - break; - case 'Docked': - edjdata.player.pos = { - ...edjdata.player.pos, - ...logItem - }; - edjdata.player.pos.Docked = true; - edjdata.player.pos.Body = logItem.StationName; - edjdata.player.pos.BodyType = logItem.StationType; - edjdata.player.pos.SuperCruise = false; - break; - case 'DockingCancelled': - console.log(logItem); - break; - case 'DockingDenied': - console.log(logItem); - break; - case 'DockingTimeout': - console.log(logItem); - break; - case 'DockingRequested': - // TODO: Add notification to client-kiwi that they have reached a station - console.log(logItem); - break; - case 'DockingGranted': - // TODO: See above - console.log(logItem); - break; - case 'Rank': - edjdata.player.rank.cqc.rank = logItem.CQC; - edjdata.player.rank.combat.rank = logItem.Combat; - edjdata.player.rank.empire.rank = logItem.Empire; - edjdata.player.rank.explore.rank = logItem.Explore; - edjdata.player.rank.federation.rank = logItem.Federation; - edjdata.player.rank.trade.rank = logItem.Trade; - break; - case 'Progress': - edjdata.player.rank.cqc.progress = logItem.CQC; - edjdata.player.rank.combat.progress = logItem.Combat; - edjdata.player.rank.empire.progress = logItem.Empire; - edjdata.player.rank.explore.progress = logItem.Explore; - edjdata.player.rank.federation.progress = logItem.Federation; - edjdata.player.rank.trade.progress = logItem.Trade; - break; - case 'Loadout': - // We want to see what type of ship the user is using. - console.log(logItem); - break; - case 'SRVDestroyed': - console.log(logItem); - break; - case 'SendText': - case 'ReceiveText': - // TODO: Add a chatbox, where you can see all communication - console.log(logItem); - break; - case 'Materials': - let hasIronForSynth = false; - let hasNickelForSynth = false; + case 'EjectCargo': + case 'EndCrewSession': + case 'EngineerApply': + case 'EngineerContribution': + case 'EngineerCraft': + case 'EngineerLegacyConvert': + case 'EngineerProgress': + case 'FactionKillBond': + case 'FetchRemoteModule': + case 'FighterDestroyed': + case 'FighterRebuilt': + case 'Fileheader': + case 'Friends': + case 'Interdiction': + case 'HeatWarning': + case 'JetConeBoost': + case 'JetConeDamage': + case 'JoinACrew': + case 'KickCrewMember': + case 'MarketBuy': + case 'MarketSell': + case 'MassModuleStore': + case 'MiningRefined': + case 'MissionAccepted': + case 'MissionAbandoned': + case 'MissionCompleted': + case 'MissionFailed': + case 'MissionRedirected': + case 'Missions': + case 'ModuleInfo': + case 'ModuleBuy': + case 'ModuleRetrieve': + case 'ModuleSell': + case 'ModuleSellRemote': + case 'ModuleStore': + case 'ModuleSwap': + case 'NavBeaconScan': + case 'NewCommander': + case 'NpcCrewPaidWage': + case 'NpcCrewRank': + case 'LaunchDrone': + case 'LaunchFighter': + case 'LaunchSRV': + case 'LeaveBody': + case 'Outfitting': + case 'Passengers': + case 'PayBounties': + case 'PayFines': + case 'PayLegacyFines': + case 'Powerplay': + case 'PowerplayCollect': + case 'PowerplayDefect': + case 'PowerplayDeliver': + case 'PowerplayFastTrack': + case 'PowerplayJoin': + case 'PowerplayLeave': + case 'PowerplaySalary': + case 'PowerplayVote': + case 'PowerplayVoucher': + case 'Promotion': + case 'PVPKill': + case 'QuitACrew': + case 'RebootRepair': + case 'RedeemVoucher': + case 'Repair': + case 'RepairDrone': + case 'RepairAll': + case 'Reputation': + case 'Ressurect': + case 'RestockVehicle': + case 'Scan': + case 'Scanned': + case 'ScientificResearch': + case 'Screenshot': + case 'SearchAndRescue': + case 'SellExplorationData': + case 'SellDrones': + case 'SellShipOnRebuy': + case 'SetUserShipName': + case 'Shipyard': + case 'ShipyardBuy': + case 'ShipyardNew': + case 'ShipyardSell': + case 'ShipyardTransfer': + case 'ShipyardSwap': + case 'ShipTargeted': + case 'Shutdown': + case 'Statistics': + case 'StoredShips': + case 'StoredModules': + case 'TechnologyBroker': + case 'Touchdown': + case 'UnderAttack': + case 'USSDrop': + case 'VehicleSwitch': + // We'll just ignore these events, since they contain nothing funny at the moment. + console.log(line); + break; + case 'DiscoveryScan': + case 'Music': + break; + case 'Died': + // TODO: Notification about client dead + console.log(logItem); + break; + case 'EscapeInterdiction': + console.log(logItem); + break; + case 'HeatDamage': + console.log(logItem); + break; + case 'HullDamage': + console.log(logItem); + break; + case 'Interdicted': + console.log(logItem); + break; + case 'Commander': + edjdata.player.cmdr = { + Commander: logItem.Name, + }; + break; + case 'CommitCrime': + console.log(logItem); + break; + case 'CockpitBreached': + console.log(logItem); + break; + case 'LoadGame': + delete logItem.event; + delete logItem.timestamp; + edjdata.player.cmdr = logItem; + if (typeof logItem.FuelCapacity !== 'undefined') { + edjdata.player.fuel.max = logItem.FuelCapacity; + } + if (typeof logItem.FuelLevel !== 'undefined') { + edjdata.player.fuel.current = logItem.FuelLevel; + } + edjdata.gamemode = logItem.GameMode; + break; + case 'Location': + edjdata.player.pos = { + ...edjdata.player.pos, + ...logItem, + }; + break; + case 'StartJump': + edjdata.player.pos = { + ...edjdata.player.pos, + ...logItem, + }; + edjdata.player.pos.Docked = false; + edjdata.player.pos.Body = null; + edjdata.player.pos.StarPos = null; + edjdata.player.pos.BodyType = null; + edjdata.player.pos.Scoopable = edScoopables.findIndex((item) => item === logItem.StarClass) !== -1; + break; + case 'FSDJump': + edjdata.player.pos = { + ...edjdata.player.pos, + ...logItem, + }; + edjdata.player.pos.Docked = false; + edjdata.player.pos.Body = null; + edjdata.player.pos.BodyType = null; + if (typeof logItem.FuelLevel !== 'undefined') { + edjdata.player.fuel.current = logItem.FuelLevel; + } + break; + case 'Shipyard': + edjdata.player.pos = { + ...edjdata.player.pos, + ...{ + StarSystem: logItem.StarSystem, + Body: logItem.StationName, + }, + }; + break; + case 'Market': + edjdata.player.pos = { + ...edjdata.player.pos, + ...{ + StarSystem: logItem.StarSystem, + Body: logItem.StationName, + }, + }; + break; + case 'ShieldState': + console.log(logItem); + break; + case 'FuelScoop': + edjdata.player.fuel.current = logItem.Total; + break; + case 'RefuelAll': + edjdata.player.fuel.current = edjdata.player.fuel.max; + break; + case 'RefuelPartial': + console.log(logItem); + break; + case 'SupercruiseEntry': + edjdata.player.pos.Docked = false; + edjdata.player.pos.Body = null; + edjdata.player.pos.BodyType = null; + edjdata.player.pos.SuperCruise = true; + break; + case 'SupercruiseExit': + edjdata.player.pos.Docked = false; + edjdata.player.pos.Body = logItem.Body; + edjdata.player.pos.BodyType = logItem.BodyType; + edjdata.player.pos.SuperCruise = false; + break; + case 'Undocked': + edjdata.player.pos.Docked = false; + edjdata.player.pos.Body = null; + edjdata.player.pos.BodyType = null; + break; + case 'Docked': + edjdata.player.pos = { + ...edjdata.player.pos, + ...logItem, + }; + edjdata.player.pos.Docked = true; + edjdata.player.pos.Body = logItem.StationName; + edjdata.player.pos.BodyType = logItem.StationType; + edjdata.player.pos.SuperCruise = false; + break; + case 'DockingCancelled': + console.log(logItem); + break; + case 'DockingDenied': + console.log(logItem); + break; + case 'DockingTimeout': + console.log(logItem); + break; + case 'DockingRequested': + // TODO: Add notification to client-kiwi that they have reached a station + console.log(logItem); + break; + case 'DockingGranted': + // TODO: See above + console.log(logItem); + break; + case 'Rank': + edjdata.player.rank.cqc.rank = logItem.CQC; + edjdata.player.rank.combat.rank = logItem.Combat; + edjdata.player.rank.empire.rank = logItem.Empire; + edjdata.player.rank.explore.rank = logItem.Explore; + edjdata.player.rank.federation.rank = logItem.Federation; + edjdata.player.rank.trade.rank = logItem.Trade; + break; + case 'Progress': + edjdata.player.rank.cqc.progress = logItem.CQC; + edjdata.player.rank.combat.progress = logItem.Combat; + edjdata.player.rank.empire.progress = logItem.Empire; + edjdata.player.rank.explore.progress = logItem.Explore; + edjdata.player.rank.federation.progress = logItem.Federation; + edjdata.player.rank.trade.progress = logItem.Trade; + break; + case 'Loadout': + // We want to see what type of ship the user is using. + console.log(logItem); + break; + case 'SRVDestroyed': + console.log(logItem); + break; + case 'SendText': + case 'ReceiveText': + // TODO: Add a chatbox, where you can see all communication + console.log(logItem); + break; + case 'Materials': + let hasIronForSynth = false; + let hasNickelForSynth = false; - for (let index = 0; index < logItem.Raw.length; index++) { - const element = logItem.Raw[index]; - if (element.Name === 'iron' && element.Count >= 2) { - hasIronForSynth = true; - } else if (element.Name === 'nickel' && element.Count >= 1) { - hasNickelForSynth = true; - } - } - - edjdata.cansynthesizelifesupport = (hasIronForSynth && hasNickelForSynth); - edjdata.player.materials = { - ...edjdata.player.materials, - ...{ - Raw: logItem.Raw, - Manufactured: logItem.Manufactured - } - }; - break; - case 'SelfDestruct': - console.log(logItem); - break; - case 'SystemsShutdown': - console.log(logItem); - break; - case 'MaterialTrade': - console.log(logItem); - break; - case 'MaterialCollected': - // TODO: Increase the stored materials, and update the `cansynthesizelifesupport`-variable - console.log(logItem); - break; - case 'MaterialDiscovered': - console.log(logItem); - break; - case 'MaterialDiscarded': - console.log(logItem); - break; - case 'Synthesis': - // TODO: Decrease the stored materials, and update the `cansynthesizelifesupport`-variable - console.log(logItem); - break; - case 'WingAdd': - console.log(logItem); - break; - case 'WingInvite': - console.log(logItem); - break; - case 'WingLeave': - console.log(logItem); - break; - case 'WingJoin': - console.log(logItem); - break; - default: - console.log(line); - break; + for (let index = 0; index < logItem.Raw.length; index++) { + const element = logItem.Raw[index]; + if (element.Name === 'iron' && element.Count >= 2) { + hasIronForSynth = true; + } else if (element.Name === 'nickel' && element.Count >= 1) { + hasNickelForSynth = true; } - } - }, -}; \ No newline at end of file + } + + edjdata.cansynthesizelifesupport = (hasIronForSynth && hasNickelForSynth); + edjdata.player.materials = { + ...edjdata.player.materials, + ...{ + Raw: logItem.Raw, + Manufactured: logItem.Manufactured, + }, + }; + break; + case 'SelfDestruct': + console.log(logItem); + break; + case 'SystemsShutdown': + console.log(logItem); + break; + case 'MaterialTrade': + console.log(logItem); + break; + case 'MaterialCollected': + // TODO: Increase the stored materials, and update the `cansynthesizelifesupport`-variable + console.log(logItem); + break; + case 'MaterialDiscovered': + console.log(logItem); + break; + case 'MaterialDiscarded': + console.log(logItem); + break; + case 'Synthesis': + // TODO: Decrease the stored materials, and update the `cansynthesizelifesupport`-variable + console.log(logItem); + break; + case 'WingAdd': + console.log(logItem); + break; + case 'WingInvite': + console.log(logItem); + break; + case 'WingLeave': + console.log(logItem); + break; + case 'WingJoin': + console.log(logItem); + break; + default: + console.log(line); + break; + } + } + }, +}; diff --git a/edj.main.js b/edj.main.js index d941faa..1a05a62 100644 --- a/edj.main.js +++ b/edj.main.js @@ -37,6 +37,7 @@ edjdata = { Docked: true, Body: null, BodyType: null, + DistanceToArrival: 0, StarPos: null, Scoopable: null, Supercruise: null, @@ -62,4 +63,4 @@ if (edjApp.is_electron) { document.querySelector('.winpathButton').addEventListener('click', () => { edj.copyFilePath('#winpath'); }); -} \ No newline at end of file +} diff --git a/index.html b/index.html index 3a3b009..9fa8b4c 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,6 @@ - Elite Dangerous: Journal Reader @@ -32,9 +31,13 @@

Welcome Commander

CMDR <Load the journal> <Load the journal> +
+ + +

Fuel Level:

-
+

@@ -44,6 +47,7 @@

Welcome Commander

+ - \ No newline at end of file + diff --git a/package.json b/package.json index b10ca6f..bbe33f4 100644 --- a/package.json +++ b/package.json @@ -37,4 +37,4 @@ "dependencies": { "tail": "^1.2.4" } -} \ No newline at end of file +} diff --git a/start.js b/start.js index de04062..b821e03 100644 --- a/start.js +++ b/start.js @@ -38,4 +38,4 @@ app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } -}); \ No newline at end of file +});