diff --git a/src/components/DbUploader.vue b/src/components/DbUploader.vue index 5dcb89d..18f2067 100644 --- a/src/components/DbUploader.vue +++ b/src/components/DbUploader.vue @@ -58,6 +58,7 @@ import fIo from '@/lib/utils/fileIo' import ChangeDbIcon from '@/components/svg/changeDb' import database from '@/lib/database' import CsvImport from '@/components/CsvImport' +import { send } from '@/lib/utils/events' export default { name: 'DbUploader', @@ -127,6 +128,13 @@ export default { if (fIo.isDatabase(file)) { this.loadDb(file) } else { + send({ + category: 'database', + action: 'import', + value: file.size, + label: 'from=csv new_db=true' + }) + this.file = file await this.$nextTick() const csvImport = this.$refs.addCsv diff --git a/src/lib/database/index.js b/src/lib/database/index.js index 19edbea..16f1704 100644 --- a/src/lib/database/index.js +++ b/src/lib/database/index.js @@ -7,6 +7,8 @@ import Worker from './_worker.js' // https://github.com/nolanlawson/promise-worker import PromiseWorker from 'promise-worker' +import { send } from '@/lib/utils/events' + function getNewDatabase () { const worker = new Worker() return new Database(worker) @@ -76,6 +78,15 @@ class Database { this.dbName = file ? fu.getFileName(file) : 'database' this.refreshSchema() + + send({ + category: 'database', + action: 'import', + value: file ? file.size : 0, + label: file + ? 'from=sqlite new_db=true' + : 'from=none new_db=true' + }) } async refreshSchema () { @@ -114,6 +125,12 @@ class Database { throw new Error(data.error) } fu.exportToFile(data, fileName) + send({ + category: 'database', + action: 'export', + value: data.byteLength, + label: 'to=sqlite' + }) } async validateTableName (name) { diff --git a/src/lib/storedInquiries/index.js b/src/lib/storedInquiries/index.js index 05994c9..5421d32 100644 --- a/src/lib/storedInquiries/index.js +++ b/src/lib/storedInquiries/index.js @@ -1,5 +1,6 @@ import { nanoid } from 'nanoid' import fu from '@/lib/utils/fileIo' +import { send } from '@/lib/utils/events' import migration from './_migrations' const migrate = migration._migrate @@ -103,9 +104,27 @@ export default { importInquiries () { return fu.importFile() .then(str => { - return this.deserialiseInquiries(str) + const inquires = this.deserialiseInquiries(str) + + send({ + category: 'inquiry', + action: 'import', + value: inquires.length + }) + + return inquires }) }, + export (inquiryList, fileName) { + const jsonStr = this.serialiseInquiries(inquiryList) + fu.exportToFile(jsonStr, fileName) + + send({ + category: 'inquiry', + action: 'export', + value: inquiryList.length + }) + }, async readPredefinedInquiries () { const res = await fu.readFile('./inquiries.json') diff --git a/src/lib/utils/events.js b/src/lib/utils/events.js new file mode 100644 index 0000000..bf4792d --- /dev/null +++ b/src/lib/utils/events.js @@ -0,0 +1,11 @@ +export function send (payload) { + console.log(payload) + if (!window.sendEvent) { + return + } + + const event = new CustomEvent('sqliteviz-app-event', { + detail: payload + }) + window.dispatchEvent(event) +} diff --git a/src/registerServiceWorker.js b/src/registerServiceWorker.js index d62cbd8..2255438 100644 --- a/src/registerServiceWorker.js +++ b/src/registerServiceWorker.js @@ -1,3 +1,4 @@ +import { send } from '@/lib/utils/events' let refresh = false function invokeServiceWorkerUpdateFlow (registration) { @@ -41,4 +42,11 @@ if ('serviceWorker' in navigator) { } }) }) + + window.addEventListener('appinstalled', () => { + send({ + category: 'pwa', + action: 'install' + }) + }) } diff --git a/src/views/Main/Inquiries/index.vue b/src/views/Main/Inquiries/index.vue index 8895f7e..97efa4d 100644 --- a/src/views/Main/Inquiries/index.vue +++ b/src/views/Main/Inquiries/index.vue @@ -159,7 +159,6 @@ import TextField from '@/components/TextField' import CheckBox from '@/components/CheckBox' import tooltipMixin from '@/tooltipMixin' import storedInquiries from '@/lib/storedInquiries' -import fu from '@/lib/utils/fileIo' export default { name: 'Inquiries', @@ -385,8 +384,7 @@ export default { return this.$store.state.tabs.findIndex(tab => tab.id === id) }, exportToFile (inquiryList, fileName) { - const jsonStr = storedInquiries.serialiseInquiries(inquiryList) - fu.exportToFile(jsonStr, fileName) + storedInquiries.export(inquiryList, fileName) }, exportSelectedInquiries () { const inquiryList = this.allInquiries.filter( diff --git a/src/views/Main/MainMenu.vue b/src/views/Main/MainMenu.vue index d8c491e..cea5ae7 100644 --- a/src/views/Main/MainMenu.vue +++ b/src/views/Main/MainMenu.vue @@ -57,6 +57,7 @@ import TextField from '@/components/TextField' import CloseIcon from '@/components/svg/close' import storedInquiries from '@/lib/storedInquiries' import AppDiagnosticInfo from './AppDiagnosticInfo' +import { send } from '@/lib/utils/events' export default { name: 'MainMenu', @@ -110,6 +111,12 @@ export default { this.$router.push('/workspace') } }) + + send({ + category: 'inquiry', + action: 'create', + label: 'auto=false' + }) }, cancelSave () { this.$modal.hide('save') @@ -163,6 +170,10 @@ export default { // Signal about saving this.$root.$emit('inquirySaved') + send({ + category: 'inquiry', + action: 'save' + }) }, _keyListener (e) { if (this.$route.path === '/workspace') { diff --git a/src/views/Main/Workspace/Schema/index.vue b/src/views/Main/Workspace/Schema/index.vue index bf0588a..e19e2ea 100644 --- a/src/views/Main/Workspace/Schema/index.vue +++ b/src/views/Main/Workspace/Schema/index.vue @@ -33,6 +33,7 @@