diff --git a/package-lock.json b/package-lock.json
index b87ccc3..29412c6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6385,6 +6385,11 @@
}
}
},
+ "flatted": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg=="
+ },
"flatten": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
@@ -16043,6 +16048,22 @@
"electron-store": "^2.0.0"
}
},
+ "vuex-persist": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/vuex-persist/-/vuex-persist-2.2.0.tgz",
+ "integrity": "sha512-o/qbBeMcKZZqMvCXc7kfIew/5cjHxlP1f53rx5YYp3r2tk2kxXYK/UZumxKn7OXywlurl2r0mgkuBzH6nIWFjw==",
+ "requires": {
+ "flatted": "^2.0.0",
+ "lodash.merge": "^4.6.2"
+ },
+ "dependencies": {
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ }
+ }
+ },
"vuex-persistedstate": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-2.7.0.tgz",
diff --git a/package.json b/package.json
index 51a4f7a..5ed4550 100644
--- a/package.json
+++ b/package.json
@@ -78,6 +78,7 @@
"vuetify": "^2.1.9",
"vuex": "^3.0.1",
"vuex-electron": "^1.0.0",
+ "vuex-persist": "^2.2.0",
"vuex-persistedstate": "^2.7.0",
"worker-threads": "^1.0.0",
"xamel": "^0.3.1"
diff --git a/src/renderer/aptdb.js b/src/renderer/aptdb.js
new file mode 100644
index 0000000..5f51977
--- /dev/null
+++ b/src/renderer/aptdb.js
@@ -0,0 +1,5 @@
+function getApts (params) {
+ console.log('Log')
+}
+
+export {getApts}
diff --git a/src/renderer/components/AirportEdit.vue b/src/renderer/components/AirportEdit.vue
new file mode 100644
index 0000000..5d4416f
--- /dev/null
+++ b/src/renderer/components/AirportEdit.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+ ICAO :
+ {{ this.$store.state.Editable.data.properties.icao }}
+
+
+ Name :
+ {{ this.$store.state.Editable.data.properties.name }}
+
+
+ Flights :
+ {{ this.$store.state.Editable.data.properties.flights }}
+
+
+ Airlines :
+ {{ this.$store.state.Editable.data.properties.airlines }}
+
+
+
+
+
+
diff --git a/src/renderer/components/EditLayer.vue b/src/renderer/components/EditLayer.vue
index 5332941..de774a0 100644
--- a/src/renderer/components/EditLayer.vue
+++ b/src/renderer/components/EditLayer.vue
@@ -5,30 +5,40 @@
diff --git a/src/renderer/components/LeafletSidebar.vue b/src/renderer/components/LeafletSidebar.vue
index effec4d..10d67a1 100644
--- a/src/renderer/components/LeafletSidebar.vue
+++ b/src/renderer/components/LeafletSidebar.vue
@@ -4,6 +4,7 @@
+
+
+ Airports Directory
+ {{ airports_directory }}
+
+
+
+
Flightgear Directory
{{ flightgear_directory }}
-
+
@@ -33,14 +40,21 @@
}
},
methods: {
- directorySelect: function (flightgearDirectory) {
+ flightgearDirectorySelect: function (flightgearDirectory) {
console.log(flightgearDirectory)
- this.$store.commit('SETTINGS_DIRECTORY', flightgearDirectory.path)
+ this.$store.commit('FLIGHTGEAR_DIRECTORY', flightgearDirectory.path)
+ },
+ airportsDirectorySelect: function (flightgearDirectory) {
+ console.log(flightgearDirectory)
+ this.$store.commit('AIPORTS_DIRECTORY', flightgearDirectory.path)
}
},
computed: {
flightgear_directory: function () {
return this.$store.state.Settings.settings.flightgearDirectory
+ },
+ airports_directory: function () {
+ return this.$store.state.Settings.settings.airportsDirectory
}
}
}
diff --git a/src/renderer/db/index.js b/src/renderer/db/index.js
index e5fbf9e..48afa67 100644
--- a/src/renderer/db/index.js
+++ b/src/renderer/db/index.js
@@ -13,7 +13,6 @@ export default new VueIdb({
},
apis: {
bigs: {
- all: () => axios.get('/dev/data/data.json')
}
}
})
diff --git a/src/renderer/store/api/airports.js b/src/renderer/store/api/airports.js
new file mode 100644
index 0000000..308dbcd
--- /dev/null
+++ b/src/renderer/store/api/airports.js
@@ -0,0 +1,90 @@
+/* eslint-disable */
+const DB_NAME = 'flightgear';
+const DB_VERSION = 2;
+let DB;
+
+export default {
+
+ async getDb() {
+ return new Promise((resolve, reject) => {
+
+ if(DB) { return resolve(DB); }
+ console.log('OPENING DB', DB);
+ let request = window.indexedDB.open(DB_NAME, DB_VERSION);
+
+ request.onerror = e => {
+ console.log('Error opening db', e);
+ reject('Error');
+ };
+
+ request.onsuccess = e => {
+ DB = e.target.result;
+ resolve(DB);
+ };
+
+ request.onupgradeneeded = e => {
+ console.log('onupgradeneeded');
+ let db = e.target.result;
+ db.createObjectStore("airports", { autoIncrement: true, keyPath:'properties.icao' });
+ };
+ });
+ },
+ async deleteAirport(airport) {
+
+ let db = await this.getDb();
+
+ return new Promise(resolve => {
+
+ let trans = db.transaction(['airports'],'readwrite');
+ trans.oncomplete = () => {
+ resolve();
+ };
+
+ let store = trans.objectStore('airports');
+ store.delete(airport.features.icao);
+ });
+ },
+ async getAirports() {
+
+ let db = await this.getDb();
+
+ return new Promise(resolve => {
+
+ let trans = db.transaction(['airports'],'readonly');
+ trans.oncomplete = () => {
+ resolve(airports);
+ };
+
+ let store = trans.objectStore('airports');
+ let airports = [];
+
+ store.openCursor().onsuccess = e => {
+ let cursor = e.target.result;
+ if (cursor) {
+ airports.push(cursor.value)
+ cursor.continue();
+ }
+ };
+
+ });
+ },
+
+ async saveAirport(airport) {
+
+ let db = await this.getDb();
+
+ return new Promise(resolve => {
+
+ let trans = db.transaction(['airports'],'readwrite');
+ trans.oncomplete = () => {
+ resolve();
+ };
+
+ let store = trans.objectStore('airports');
+ store.put(airport);
+
+ });
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/renderer/store/index.js b/src/renderer/store/index.js
index d8c338b..cebc05d 100644
--- a/src/renderer/store/index.js
+++ b/src/renderer/store/index.js
@@ -1,7 +1,7 @@
import Vue from 'vue'
import Vuex from 'vuex'
-// import from 'electron-settings'
-// import the auto exporter
+import createPersistedState from 'vuex-persistedstate'
+
import createLogger from 'vuex/dist/logger'
import modules from './modules'
@@ -12,5 +12,5 @@ const debug = process.env.NODE_ENV !== 'production'
export default new Vuex.Store({
modules,
strict: debug,
- plugins: debug ? [createLogger()] : [] // set logger only for development
+ plugins: debug ? [createLogger(), createPersistedState({paths: ['Settings']})] : [] // set logger only for development
})
diff --git a/src/renderer/store/modules/Airports.js b/src/renderer/store/modules/Airports.js
index 44a8ab4..11c44d4 100644
--- a/src/renderer/store/modules/Airports.js
+++ b/src/renderer/store/modules/Airports.js
@@ -1,22 +1,46 @@
+/* eslint-disable */
+import idb from '../api/airports';
+
+const ADD_AIRPORT = 'ADD_AIRPORT';
+const SET_AIRPORTS = 'SET_AIRPORTS';
+const RESET_AIRPORTS = 'RESET_AIRPORTS';
+
const state = {
- main: 0
+ airports: []
}
const mutations = {
- DECREMENT_MAIN_COUNTER (state) {
- state.main--
+ 'DELETE_INDEXED_DB' () { },
+ ADD_AIRPORT (state, airports) {
+ state.airports.push(airports);
},
- INCREMENT_MAIN_COUNTER (state) {
- state.main++
- }
+ SET_AIRPORTS (state, airports) {
+ state.airports = airports;
+ },
+ RESET_AIRPORTS (state) {
+ state.airports = [];
+ },
+
}
const actions = {
- someAsyncTask ({ commit }) {
- // do something async
- commit('INCREMENT_MAIN_COUNTER')
- }
-}
+ async deleteAirport(context, airport) {
+ await idb.deleteAirport(airport);
+ },
+ async getAirports(context) {
+ context.commit(RESET_AIRPORTS);
+ let airports = await idb.getAirports();
+// let newAirports = [];
+// airports.forEach(c => {
+// newAirports.push(c);
+// });
+ context.commit(SET_AIRPORTS, airports
+ .filter(point => typeof point.geometry.coordinates !== "undefined" )
+ .filter(point => point.properties.flights > 0 ));
+ },
+ async saveAirport(context, airport) {
+ await idb.saveAirport(airport);
+ }}
export default {
state,
diff --git a/src/renderer/store/modules/Counter.js b/src/renderer/store/modules/Counter.js
deleted file mode 100644
index 44a8ab4..0000000
--- a/src/renderer/store/modules/Counter.js
+++ /dev/null
@@ -1,25 +0,0 @@
-const state = {
- main: 0
-}
-
-const mutations = {
- DECREMENT_MAIN_COUNTER (state) {
- state.main--
- },
- INCREMENT_MAIN_COUNTER (state) {
- state.main++
- }
-}
-
-const actions = {
- someAsyncTask ({ commit }) {
- // do something async
- commit('INCREMENT_MAIN_COUNTER')
- }
-}
-
-export default {
- state,
- mutations,
- actions
-}
diff --git a/src/renderer/store/modules/Editable.js b/src/renderer/store/modules/Editable.js
new file mode 100644
index 0000000..9813e6b
--- /dev/null
+++ b/src/renderer/store/modules/Editable.js
@@ -0,0 +1,25 @@
+const state = {
+ type: 'airport',
+ data: Object
+}
+
+const SET_EDIT_AIRPORT = 'SET_EDIT_AIRPORT'
+
+const mutations = {
+ SET_EDIT_AIRPORT (state, airport) {
+ state.data = airport
+ state.type = 'airport'
+ }
+}
+
+const actions = {
+ async setAirport (context, airport) {
+ context.commit(SET_EDIT_AIRPORT, airport)
+ }
+}
+
+export default {
+ state,
+ mutations,
+ actions
+}
diff --git a/src/renderer/store/modules/Settings.js b/src/renderer/store/modules/Settings.js
index e8b7cd4..f09b46a 100644
--- a/src/renderer/store/modules/Settings.js
+++ b/src/renderer/store/modules/Settings.js
@@ -1,17 +1,27 @@
-import createPersistedState from 'vuex-persistedstate'
-
const state = {
- settings: { flightgearDirectory: '.' }
+ settings: { flightgearDirectory: '.' },
+ zoom: 14,
+ center: [47.413220, -1.219482]
}
const mutations = {
'DELETE_INDEXED_DB' () { },
- 'SETTINGS_DIRECTORY' (state, flightgearDirectory) {
+ 'FLIGHTGEAR_DIRECTORY' (state, flightgearDirectory) {
state.settings.flightgearDirectory = flightgearDirectory
+ },
+ 'AIPORTS_DIRECTORY' (state, airportsDirectory) {
+ state.settings.airportsDirectory = airportsDirectory
+ },
+ 'ZOOM' (state, zoom) {
+ state.zoom = zoom
+ },
+ 'CENTER' (state, center) {
+ state.center = center
}
+
}
-const plugins = [createPersistedState()]
+const plugins = []
const actions = {
}
diff --git a/src/renderer/utils/airports.js b/src/renderer/utils/airports.js
index ba94f96..c1a416d 100644
--- a/src/renderer/utils/airports.js
+++ b/src/renderer/utils/airports.js
@@ -8,15 +8,6 @@ async function initDB() {
if (features == null) {
console.log("Loading DB");
console.log(this.indexedDB);
-// var deleteRequest = indexedDB.deleteDatabase("flightgear");
-// deleteRequest.onerror = function (event) {
-// console.log(event);
-// reject(event);
-// };
-// deleteRequest.onsuccess = function (event) {
-// console.log(event);
-// };
-
var request = this.indexedDB.open("flightgear", 2);
request.onerror = function (event) {
reject(event);
@@ -58,25 +49,6 @@ async function initDB() {
}
};
- // db.loadDatabase({}, function (err) {
- // if (err) {
- // console.error("Error loading DB");
- // console.error(err);
- // db.addCollection('features', {
- // unique: ["properties.icao"], autoupdate: true
- // });
- // features = db.getCollection('features');
- // }
- // features = db.getCollection('features');
- // if( features == null ){
- // db.addCollection('features', {
- // unique: ["properties.icao"], autoupdate: true
- // });
- // features = db.getCollection('features');
- // }
- // console.log("Loaded " + features.count() + " features");
- // resolve(features);
- // });
}
else {
resolve(features);
diff --git a/src/renderer/utils/apt.js b/src/renderer/utils/apt.js
index 8660900..418f551 100644
--- a/src/renderer/utils/apt.js
+++ b/src/renderer/utils/apt.js
@@ -1,89 +1,147 @@
/* eslint-disable */
const lineReader = require('readline');
+var icao;
+
var scanMethods = {
- 1: (l, apts) => {
- console.log('Airport:', l);
- saveName(apts, l[4], l.slice(5).join(' ').replace('\t', ' '));
- },
- 99: (l) => {
- console.log('Finished');
- }
+ 1: (l, apts) => {
+ console.log('Airport:', l);
+ icao = l[4];
+ saveName(apts, l[4], l.slice(5).join(' ').replace('\t', ' '));
+ },
+ 14: (l, apts) => {
+ console.log('Viewport:', l);
+ saveCoordinates(apts, icao, l[1], l[2]);
+ },
+ 99: (l) => {
+ console.log('Finished');
+ }
};
async function saveName(features, icao, name) {
- var promise = new Promise(function (resolve, reject) {
+ var promise = new Promise(function (resolve, reject) {
- var transaction = features.transaction("airports", "readwrite");
- var objectStore = transaction.objectStore("airports");
- var objectStoreRequest = objectStore.get(icao);
-
- objectStoreRequest.onsuccess = function (event) {
- console.log(event);
- var feature = objectStoreRequest.result;
- if (!feature) {
- feature = {
- "type": "Feature",
- 'properties': { 'icao': icao, 'twr': false, 'threshold': false, 'flights': 0, airlines: [] },
- 'geometry': {
- "type": "Point"
- }
- };
+ var transaction = features.transaction("airports", "readwrite");
+ var objectStore = transaction.objectStore("airports");
+ var objectStoreRequest = objectStore.get(icao);
+
+ objectStoreRequest.onsuccess = function (event) {
+ console.log(event);
+ var feature = objectStoreRequest.result;
+ if (!feature) {
+ feature = {
+ "type": "Feature",
+ 'properties': { 'icao': icao, 'twr': false, 'threshold': false, 'flights': 0, airlines: [] },
+ 'geometry': {
+ "type": "Point"
}
- feature.properties.name = name;
- feature.properties.icao = icao;
- console.log("ICAO : " + feature.properties.icao);
- // Create another request that inserts the item back into the database
- var updateAirportRequest = objectStore.put(feature);
-
- // Log the transaction that originated this request
- console.log("The transaction that originated this request is " + updateAirportRequest.updateAirportRequest);
-
- // When this new request succeeds, run the displayData() function again to update the display
- updateAirportRequest.onsuccess = function () {
- console.log("Stored");
- resolve();
- };
- updateAirportRequest.onerror = function (event) {
- console.log("Error " + event);
- reject(event);
- };
};
- objectStoreRequest.onerror = function (event) {
- console.log("Error " + event);
- reject(event);
- };
- });
+ }
+ feature.properties.name = name;
+ feature.properties.icao = icao;
+ console.log("ICAO : " + feature.properties.icao);
+ // Create another request that inserts the item back into the database
+ var updateAirportRequest = objectStore.put(feature);
- return promise;
+ // Log the transaction that originated this request
+ console.log("The transaction that originated this request is " + updateAirportRequest.updateAirportRequest);
+
+ // When this new request succeeds, run the displayData() function again to update the display
+ updateAirportRequest.onsuccess = function () {
+ console.log("Stored");
+ resolve();
+ };
+ updateAirportRequest.onerror = function (event) {
+ console.log("Error " + event);
+ reject(event);
+ };
+ };
+ objectStoreRequest.onerror = function (event) {
+ console.log("Error " + event);
+ reject(event);
+ };
+ });
+ return promise;
}
-function scanAPTIntoDB(f, apts) {
- console.log(f);
- lineReader.createInterface({
+async function saveCoordinates(features, icao, lat, lon) {
+ var promise = new Promise(function (resolve, reject) {
+
+ var transaction = features.transaction("airports", "readwrite");
+ var objectStore = transaction.objectStore("airports");
+ var objectStoreRequest = objectStore.get(icao);
+
+ objectStoreRequest.onsuccess = function (event) {
+ console.log(event);
+ var feature = objectStoreRequest.result;
+ if (!feature) {
+ feature = {
+ "type": "Feature",
+ 'properties': { 'icao': icao, 'twr': false, 'threshold': false, 'flights': 0, airlines: [] },
+ 'geometry': {
+ "type": "Point"
+ }
+ };
+ }
+ feature.geometry.coordinates = [lon, lat];
+ console.log("ICAO : " + feature.properties.icao);
+ // Create another request that inserts the item back into the database
+ var updateAirportRequest = objectStore.put(feature);
+
+ // Log the transaction that originated this request
+ console.log("The transaction that originated this request is " + updateAirportRequest.updateAirportRequest);
+
+ // When this new request succeeds, run the displayData() function again to update the display
+ updateAirportRequest.onsuccess = function () {
+ console.log("Stored");
+ resolve();
+ };
+ updateAirportRequest.onerror = function (event) {
+ console.log("Error " + event);
+ reject(event);
+ };
+ };
+ objectStoreRequest.onerror = function (event) {
+ console.log("Error " + event);
+ reject(event);
+ };
+ });
+ return promise;
+}
+
+async function scanAPTIntoDB(f, features) {
+ var promise = new Promise(function (resolve, reject) {
+ try {
+ lineReader.createInterface({
input: fs.createReadStream(f)
- }).on('line', function (line) {
+ }).on('line', function (line) {
var fields = line.split(/[ ]+/);
// var fields = line.match('([0-9]+)');
if (fields == null)
- return;
+ return;
var scanMethod = scanMethods[fields[0]];
if (scanMethod != null) {
- scanMethod(fields, apts);
+ scanMethod(fields, features);
}
else {
- if (fields[0] == '99') {
- lineReader.close();
- }
- // console.log('Ignored:', line);
+ if (fields[0] == '99') {
+ lineReader.close();
+ }
+ // console.log('Ignored:', line);
}
- }).on('error', function (err) {
+ }).on('error', function (err) {
console.log(err);
lr.close();
- }).on('close', function () {
+ }).on('close', function () {
console.log("End");
- apts.close();
- });
+ features.close();
+ this.postMessage('DONE');
+ });
+ } catch (error) {
+ console.log(error);
+ reject(error);
+ }
+ });
}
// export default { scan, name }
diff --git a/src/renderer/utils/scan.js b/src/renderer/utils/scan.js
index 8837b77..79674a7 100644
--- a/src/renderer/utils/scan.js
+++ b/src/renderer/utils/scan.js
@@ -9,7 +9,7 @@
// const apt = require('apt.js');
async function asyncForEach(array, callback) {
- console.log("Len " + array.length);
+ console.log("AsyncForEach Len " + array.length);
for (let index = 0; index < array.length; index++) {
try {
var res = await callback(array[index], index, array);
@@ -32,6 +32,7 @@ async function waitFor(milliseconds) {
return new Promise(resolve => setTimeout(resolve, milliseconds));
}
+
async function scanGroundnetFiles(p, features) {
var promise = new Promise(function (resolve, reject) {
try {
@@ -68,6 +69,50 @@ async function scanGroundnetFiles(p, features) {
});
}
+async function scanTrafficFiles(p, features) {
+ var promise = new Promise(function (resolve, reject) {
+ try {
+ console.log('Start Groundnets ' + p);
+ var files = traverseDir(p);
+ console.log(files);
+
+ asyncForEach(files, async f => {
+ //await waitFor(5000);
+ try {
+ var text = await readAI(f, features);
+ console.log(text);
+ resolve(text);
+ } catch (error) {
+ console.error(error);
+ reject(error);
+ }
+ }).then(t => {
+ console.log("Finished");
+ features.close();
+ resolve();
+ this.postMessage('DONE');
+ }).catch(reason => {
+ console.log("Crashed");
+ console.log(reason);
+ features.close()
+ this.postMessage('DONE');
+ });
+
+ //walkDir(p, f => { readGroundnet(f, features) });
+
+ } catch (error) {
+ console.log(error);
+ reject(error);
+ }
+ });
+}
+
+/**
+ *
+ * @param {*} p
+ * @param {*} features
+ */
+
function scanTrafficIntoDB(p, features) {
try {
console.log('Start Traffic ' + p + ' ' + features);
@@ -85,9 +130,11 @@ function scanTrafficIntoDB(p, features) {
console.log("No more entries!");
}
};
+
walkDir(p, f => { readAI(f, features) });
console.log("Closing");
features.close();
+ this.postMessage('DONE');
console.log("End Traffic");
} catch (error) {
console.log(error);
@@ -123,56 +170,88 @@ function walkDir(dir, callback) {
});
}
+/**
+ *
+ * @param {*} f
+ * @param {*} apts
+ */
+
function readAI(f, apts) {
- try {
- console.log(path.basename(f));
- // Reset
- var airline = path.basename(f).match('([^.]+)');
- if (airline == null)
- return;
- var xmlSource = fs.readFileSync(f, 'utf8').toString();
- console.debug("read " + path.basename(f));
- // var doc = new domParser().parseFromString(xmlSource );
- // console.log("parsed ");
- // var flights = xpath.select("/trafficlist/flight", doc);
- // console.log("selected flight ");
- // console.log(flights);
- var dat = tXml(xmlSource);
- // console.log(dat);
- console.log(dat[0].children[0]);
+ var promise = new Promise(function (resolve, reject) {
+ try {
+ console.log(path.basename(f));
+ // Reset
+ var airline = path.basename(f).match('([^.]+)\.xml');
+ if (airline == null){
+ resolve();
+ return;
+ }
+ var xmlSource = fs.readFileSync(f, 'utf8').toString();
+ console.debug("read airline " + path.basename(f));
+ // var doc = new domParser().parseFromString(xmlSource );
+ // console.log("parsed ");
+ // var flights = xpath.select("/trafficlist/flight", doc);
+ // console.log("selected flight ");
+ // console.log(flights);
+ var dat = tXml(xmlSource);
+ // console.log(dat);
+ if( !dat || !dat[0] || !dat[0].children || !dat[0].children[0] ) {
+ resolve();
+ return;
+ }
- var flightNodes = dat[0].children[0].children.filter(e => e.tagName === 'flight');
- flightNodes = tXml.simplify(flightNodes);
+ console.log(dat[0].children[0]);
- console.log(flightNodes.flight);
+ var flightNodes = dat[0].children[0].children.filter(e => e.tagName === 'flight');
+ flightNodes = tXml.simplify(flightNodes);
+ if (!flightNodes || !flightNodes.flight) {
+ resolve();
+ return;
+ }
- console.log("Departure flights " + flightNodes.flight.length);
+ console.log(flightNodes.flight);
- var merged = new Array();
+ console.log("Departure flights " + flightNodes.flight.length);
- flightNodes.flight.map(n => {
- merged.push(n.departure.port);
- merged.push(n.arrival.port);
- }).sort();
+ var merged = new Array();
- var counts = {};
- for (var i = 0; i < merged.length; i++) {
- counts[merged[i]] = 1 + (counts[merged[i]] || 0);
+ flightNodes.flight.map(n => {
+ merged.push(n.departure.port);
+ merged.push(n.arrival.port);
+ }).sort();
+
+ var counts = {};
+ for (var i = 0; i < merged.length; i++) {
+ counts[merged[i]] = 1 + (counts[merged[i]] || 0);
+ }
+
+ asyncForEach(Object.keys(counts), async key => {
+ console.log(key);
+ await store(key, airline[0], counts[key]);
+ }).then(t => {
+ console.log("Finished");
+ resolve();
+ }).catch(reason => {
+ console.log("Crashed");
+ console.log(reason);
+ features.close()
+ });
+ //for (var key in counts) {
+ // store(key, airline[0], counts[key]);
+ //}
+
+ // var flights = xpath.select("/trafficlist/flight/departure/port/text()", doc);
+ // console.log(nodes);
+ // console.log(nodes);
+ // nodes = xpath.select("/trafficlist/flight/arrival/port/text()", doc);
+ // console.log(nodes);
+
+ } catch (error) {
+ console.error(error);
+ reject(error);
}
-
- for (var key in counts) {
- store(key, airline[0], counts[key]);
- }
-
- // var flights = xpath.select("/trafficlist/flight/departure/port/text()", doc);
- // console.log(nodes);
- // console.log(nodes);
- // nodes = xpath.select("/trafficlist/flight/arrival/port/text()", doc);
- // console.log(nodes);
-
- } catch (error) {
- console.error(error);
- }
+ });
+ return promise;
}
/**
@@ -184,7 +263,7 @@ function readAI(f, apts) {
function store(icao, airline, value) {
var promise = new Promise(function (resolve, reject) {
- console.log("Airport " + icao + " has " + value + " flights");
+ console.log("Airport " + icao + " has " + value + " new flights");
// Make a request to get a record by key from the object store
var transaction = features.transaction("airports", "readwrite");
var objectStore = transaction.objectStore("airports");
@@ -313,10 +392,15 @@ async function readGroundnet(f, features) {
}
} else if (filename[2] == 'groundnet') {
console.log('groundnet : ' + filename[1]);
- var nodes = dat['?xml'].groundnet.TaxiNodes;
- feature['properties']['groundnet'] = nodes ? true : false;
- var nodes = dat['?xml'].groundnet.Parking;
- feature['properties']['parking'] = nodes ? true : false;
+ if (dat['?xml'].groundnet) {
+ var nodes = dat['?xml'].groundnet.TaxiNodes;
+ if (nodes && nodes.node) {
+ console.log(nodes);
+ }
+ feature['properties']['groundnet'] = nodes && nodes.node ? nodes.node.length : 0;
+ var nodes = dat['?xml'].groundnet.parkingList;
+ feature['properties']['parking'] = nodes && nodes.Parking ? nodes.Parking.length : 0;
+ }
} else if (filename[2] == 'ils') {
console.log('ils : ' + filename[1]);
if (dat['?xml'].PropertyList.runways) {
@@ -380,7 +464,6 @@ function createFeature(icao) {
}
function mean(coord1, coord2) {
-
return (coord1 + coord2) / 2;
}
// export default { scanAPT, scanTraffic, scanGroundnet }
diff --git a/src/renderer/utils/worker.js b/src/renderer/utils/worker.js
index 92e0f84..a016aae 100644
--- a/src/renderer/utils/worker.js
+++ b/src/renderer/utils/worker.js
@@ -18,8 +18,8 @@ function errorReceiver(event) {
onmessage = function (event) {
postMessage('scanStarted');
console.log(event.data);
- if (event.data === 'scan') {
- scanGroundnet().then(result => {
+ if (event.data[0] === 'scan') {
+ scanGroundnet(event.data[1]).then(result => {
console.log("DONE Scanning");
postMessage('DONE', 'this');
// event.origin.webContents.send('scanFinished');
@@ -28,8 +28,8 @@ onmessage = function (event) {
console.log('Crashed');
console.log(result);
});
- } else if (event.data === 'scanai') {
- scanai().then(result => {
+ } else if (event.data[0] === 'scanai') {
+ scanai(event.data[1]).then(result => {
console.log("DONE Scanning");
postMessage('DONE');
// event.origin.webContents.send('scanFinished');
@@ -39,8 +39,8 @@ onmessage = function (event) {
console.log(result);
});
}
- else if (event.data === 'scanapt') {
- scanAPT().then(result => {
+ else if (event.data[0] === 'scanapt') {
+ scanAPT(event.data[1]).then(result => {
console.log("DONE Scanning");
postMessage('DONE');
// event.origin.webContents.send('scanFinished');
@@ -53,28 +53,34 @@ onmessage = function (event) {
}
};
-async function scanGroundnet() {
+async function scanGroundnet(fdir) {
var promise = new Promise(function (resolve, reject) {
return initDB().then(features => {
- var d = path.join(homedir, '/Documents/Flightgear/main/Airports/A');
+ var d = path.join(fdir);
scanGroundnetFiles(d, features);
});
});
return promise;
}
-function scanai() {
- return initDB().then(features => {
- scanTrafficIntoDB("C:/GIT/fgmeta/fgdata/AI/Traffic", features);
+async function scanai(fdir) {
+ var promise = new Promise(function (resolve, reject) {
+ return initDB().then(features => {
+ var d = path.join(fdir);
+ scanTrafficFiles(d, features);
+ });
});
+ return promise;
}
async function scanAPT() {
- return initDB().then(features => {
- var d = path.join(homedir, 'Documents/apt.dat');
- scanAPTIntoDB(d, features);
- console.log("Closed DB");
+ var promise = new Promise(function (resolve, reject) {
+ return initDB().then(features => {
+ var d = path.join(homedir, 'Documents/apt.dat');
+ scanAPTIntoDB(d, features);
+ });
});
+ return promise;
}