New NavRoutes detected, read, saved.
This commit is contained in:
parent
3d43590006
commit
6b0e1d8240
5 changed files with 61 additions and 23 deletions
|
@ -68,7 +68,7 @@
|
|||
|
||||
<div class="container-fluid">
|
||||
<div class="row separator align-items-center">
|
||||
<div class="col"><hr class="seperator"></div>
|
||||
<div class="col"><hr class="separator"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
import { Tail as TailType } from 'tail'
|
||||
import type { autoScan, completeFsdJump, detailedScan, journalEntry, planetScan } from '../@types/journalLines'
|
||||
import type { Tail as TailType } from 'tail'
|
||||
import type { autoScan, completeFsdJump, detailedScan, journalEntry, navRoute, planetScan } from '../@types/journalLines'
|
||||
|
||||
const chokidar = require('chokidar')
|
||||
const EventEmitter = require('node:events')
|
||||
const fs = require('node:fs')
|
||||
const { globSync } = require('glob')
|
||||
import { maxBy, findIndex, find } from 'lodash'
|
||||
const os = require('node:os')
|
||||
const path = require('node:path')
|
||||
const { readFile } = require('node:fs/promises')
|
||||
const reverseLineReader = require('reverse-line-reader')
|
||||
const Tail = require('tail').Tail
|
||||
|
||||
import { Body } from '../models/Body'
|
||||
import { System } from '../models/System'
|
||||
|
||||
const EventEmitter = require('events')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const { globSync } = require('glob')
|
||||
const os = require('os')
|
||||
const lineReader = require('reverse-line-reader')
|
||||
const chokidar = require('chokidar')
|
||||
const Tail = require('tail').Tail
|
||||
import { maxBy, findIndex, find } from 'lodash'
|
||||
|
||||
// Set log() to console.log() so whenever I get around to setting up a log file, I don't have to
|
||||
// search and replace all the console.log()'s.
|
||||
const log = console.log.bind(console)
|
||||
|
@ -22,6 +24,7 @@ export class JournalInterface extends EventEmitter {
|
|||
journalPattern: string
|
||||
currentJournal: string|undefined
|
||||
location: System
|
||||
navRoute: System[]
|
||||
|
||||
|
||||
constructor(isPackaged: boolean) {
|
||||
|
@ -43,11 +46,15 @@ export class JournalInterface extends EventEmitter {
|
|||
this.currentJournal = this.getLatestJournal()
|
||||
log(`New journal file found, now watching ${path.basename(this.currentJournal)}.`)
|
||||
|
||||
this.navRoute = []
|
||||
|
||||
// LineReader seems to be async, so start async processes here.
|
||||
this.location = new System('Unknown')
|
||||
|
||||
log('JournalInterface initialized. Attempting to find current location.')
|
||||
this.getCurrentLocation()
|
||||
// -> getScannedBodies()
|
||||
// --> getNavRoute()
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- getLatestJournal ---- */
|
||||
|
@ -56,9 +63,7 @@ export class JournalInterface extends EventEmitter {
|
|||
getLatestJournal(): string|undefined {
|
||||
const journals = globSync(this.journalPattern)
|
||||
|
||||
return maxBy(journals, file => {
|
||||
return fs.statSync(file).mtime
|
||||
})
|
||||
return maxBy(journals, file => fs.statSync(file).mtime)
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ getCurrentLocation ---- */
|
||||
|
@ -66,7 +71,7 @@ export class JournalInterface extends EventEmitter {
|
|||
// Get current location on setup, so if app is restarted, user can pick up where they left off
|
||||
// Rather than waiting til they jump to the next system to use the program again.
|
||||
getCurrentLocation(): void {
|
||||
lineReader.eachLine(this.currentJournal, (raw: string, last: boolean) => {
|
||||
reverseLineReader.eachLine(this.currentJournal, (raw: string, last: boolean) => {
|
||||
if (raw) { // skip blank line at end of file
|
||||
const line = JSON.parse(raw)
|
||||
|
||||
|
@ -81,7 +86,7 @@ export class JournalInterface extends EventEmitter {
|
|||
}
|
||||
}
|
||||
}).then(() => {
|
||||
lineReader.eachLine(this.currentJournal, (raw: string, last: boolean) => {
|
||||
reverseLineReader.eachLine(this.currentJournal, (raw: string, last: boolean) => {
|
||||
if (raw) {
|
||||
const line = JSON.parse(raw)
|
||||
|
||||
|
@ -110,7 +115,7 @@ export class JournalInterface extends EventEmitter {
|
|||
getScannedBodies(): void {
|
||||
let detailedScanLine: detailedScan|null = null
|
||||
|
||||
lineReader.eachLine(this.currentJournal, (raw: string, last: boolean) => {
|
||||
reverseLineReader.eachLine(this.currentJournal, (raw: string, last: boolean) => {
|
||||
|
||||
if (raw) { // Skip blank line at end of file.
|
||||
const line: journalEntry = JSON.parse(raw)
|
||||
|
@ -168,7 +173,7 @@ export class JournalInterface extends EventEmitter {
|
|||
}
|
||||
}).then(() => {
|
||||
log('Scanned bodies found.')
|
||||
this.emit('INIT_COMPLETE')
|
||||
this.getNavRoute(true)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -223,8 +228,30 @@ export class JournalInterface extends EventEmitter {
|
|||
|
||||
/* ------------------------------------------------------------------------- getNavRoute ---- */
|
||||
|
||||
getNavRoute() {
|
||||
async getNavRoute(init: boolean = false) {
|
||||
let routeFile: string|null = null
|
||||
|
||||
try {
|
||||
routeFile = await readFile(this.journalDir + 'NavRoute.json', { encoding: 'utf8' })
|
||||
} catch (err) {
|
||||
log(`Error getting NavRoute: ${err.message}.`)
|
||||
}
|
||||
|
||||
if (routeFile) {
|
||||
const route: navRoute = JSON.parse(routeFile)
|
||||
|
||||
route.Route.forEach((system) => {
|
||||
this.navRoute.push(new System(system.StarSystem, system.StarClass))
|
||||
})
|
||||
|
||||
log('NavRoute set.')
|
||||
|
||||
if (init) {
|
||||
this.emit('INIT_COMPLETE')
|
||||
} else {
|
||||
this.emit('SET_NAV_ROUTE')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------- parseLine ---- */
|
||||
|
|
|
@ -2,12 +2,14 @@ import { Body } from "./Body"
|
|||
|
||||
export class System {
|
||||
name: string
|
||||
starClass: string|null
|
||||
bodies: Body[]
|
||||
|
||||
constructor(StarSystem: string) {
|
||||
constructor(StarSystem: string, StarClass: string|null = null) {
|
||||
// In future, this is where we preform EDSM lookup
|
||||
|
||||
this.name = StarSystem
|
||||
this.starClass = StarClass
|
||||
this.bodies = []
|
||||
}
|
||||
}
|
|
@ -34,6 +34,7 @@ const { app } = require('electron')
|
|||
import { JournalInterface } from './interfaces/JournalInterface'
|
||||
import { UI } from './models/UI'
|
||||
import { Body } from './models/Body'
|
||||
import { sep } from 'path'
|
||||
|
||||
// Grab app.isPackaged from main process
|
||||
let isPackaged = false
|
||||
|
@ -109,3 +110,9 @@ journal.on('BODY_SCANNED', (body, DSS) => {
|
|||
$('#lowValueScans').appendChild(row)
|
||||
}
|
||||
})
|
||||
|
||||
/* --------------------------------------------------------------------------- nav route set ---- */
|
||||
|
||||
journal.on('SET_NAV_ROUTE', () => {
|
||||
// clear previous nav route, if any
|
||||
})
|
|
@ -1,6 +1,8 @@
|
|||
{
|
||||
"extends": "@tsconfig/node20/tsconfig.json",
|
||||
"compilerOptions": {},
|
||||
"compilerOptions": {
|
||||
"useUnknownInCatchVariables": false,
|
||||
},
|
||||
"include": ["src"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
Loading…
Reference in a new issue