diff --git a/package-lock.json b/package-lock.json index eb0a788..f686d50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6395,6 +6395,11 @@ "randombytes": "^2.0.0" } }, + "dijkstrajs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", + "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=" + }, "dir-glob": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", diff --git a/package.json b/package.json index d368510..e2d3fcf 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,7 @@ "dependencies": { "@turf/turf": "^5.1.6", "axios": "^0.18.0", + "dijkstrajs": "^1.0.1", "electron-debug": "^3.0.1", "element-ui": "^2.12.0", "file-url": "^3.0.0", diff --git a/src/renderer/components/CheckPanel.vue b/src/renderer/components/CheckPanel.vue new file mode 100644 index 0000000..1fd936d --- /dev/null +++ b/src/renderer/components/CheckPanel.vue @@ -0,0 +1,46 @@ + + + + Check Result + + + + + + + {{ result.id }} + {{ result.message }} + + + + + + + + diff --git a/src/renderer/components/EditBar.vue b/src/renderer/components/EditBar.vue index 43d6aaa..49e23ad 100644 --- a/src/renderer/components/EditBar.vue +++ b/src/renderer/components/EditBar.vue @@ -1,7 +1,12 @@ - + Reload from last save? You will lose the current edits. @@ -14,9 +19,25 @@ - - + + + + + + + + @@ -24,10 +45,14 @@ /* eslint-disable */ import EditButton from './EditButton' import Vue from 'vue' + + import fileUrl from 'file-url' + const path = require('path') + export default { components: { EditButton }, data () { - return {isEditing: false, centerDialogVisible: false, saveDialogVisible: false} + return {isEditing: false, centerDialogVisible: false, saveDialogVisible: false, checkDialogVisible: false, checking: false, progress: 0, max: 0} }, created () { }, @@ -58,6 +83,75 @@ Vue.set(this, 'saveDialogVisible', false) }, this) }, + pollData () { + var workery = this.worker + var view = this + workery.polling = setInterval(() => { + if (workery != null) { + view.max = Number(workery.max) + view.progress = Number(workery.progress) + view.scanning = Boolean(workery.checking) + workery.view = view + } + }, 1000) + }, + + check () { + try { + this.scanning = true + const winURL = process.env.NODE_ENV === 'development' + ? `http://localhost:9080/src/renderer/utils/check.js` + : `file://${__dirname}/check.js` + console.log('make a worker: ', path.resolve(__dirname, 'check.js')) + + const worker = new Worker(winURL) + console.log(fileUrl('src/renderer/utils/check.js')) + + worker.checking = this.checking + worker.max = this.max + worker.view = this + worker.editLayer = this.$parent.$parent.$refs.editLayer + worker.progress = 0 + // var worker = new Worker(fileUrl('src/renderer/utils/worker.js')) + this.worker = worker + var xml = [] + this.$parent.$parent.$refs.editLayer.groundnetLayerGroup.eachLayer(l => { + console.log(l) + xml.push(l) + }) + + var features = xml.map(this.featuresMapper).filter(n => n) + + worker.postMessage(['check', features ] ) + this.pollData() + // the reply + var store = this.$store + worker.onmessage = function (e) { + if (e.data === 'checkStarted') { + this.progress = 0 + this.max = 4 + } else if (e.data[0] === 'DONE') { + console.log('DONE') + store.dispatch('setResults', e.data[1]) + worker.terminate() + worker.view.max = 0 + worker.view.checkDialogVisible = false + clearInterval(this.polling) + this.checking = false + } else if (e.data.length > 0) { + if (e.data[0] === 'max') { + this.max = e.data[1] + } + if (e.data[0] === 'progress') { + this.progress += e.data[1] + } + } + // console.log(e.data) + } + } catch (err) { + console.error(err) + } + }, drawPolyline () { this.$parent.$parent.$refs.editLayer.drawPolyline() }, @@ -66,6 +160,24 @@ }, deleteFeature () { this.$parent.$parent.$refs.editLayer.deleteFeature() + }, + showCheck() { + Vue.set(this, 'checkDialogVisible', true) + this.check() + }, + featuresMapper(o) { + if (o instanceof L.ParkingSpot) { + return { 'index': Number(o['id']), '_leaflet_id': o._leaflet_id, 'type': 'parking', 'name': o.options.attributes.name, 'radius': String(o.options.attributes.radius) }; + } else if (o instanceof L.RunwayNode) { + console.log(o) + return { 'index': Number(o['glueindex']), '_leaflet_id': o._leaflet_id, 'type': 'runway' }; + } else if (o instanceof L.Polyline) { + console.log(o) + return { 'start': Number(o['begin']), 'end': Number(o['end']), '_leaflet_id': o._leaflet_id, 'type': 'poly' }; + } else { + console.log('Unknown Type ') + console.log(typeof o) + } } }, computed: { diff --git a/src/renderer/components/EditLayer.vue b/src/renderer/components/EditLayer.vue index 366e1cc..8dab128 100644 --- a/src/renderer/components/EditLayer.vue +++ b/src/renderer/components/EditLayer.vue @@ -1,7 +1,4 @@ - - edit-layer Component -