From 3a430d66ce1b1f4212ff925a6ea3ff97b979ef17 Mon Sep 17 00:00:00 2001 From: Sebastian Velez Date: Mon, 28 Aug 2023 19:01:47 -0500 Subject: [PATCH] Post message to service worker to sendHeartbeat --- src/background.ts | 9 ++++++++- src/manifests/chrome.json | 2 +- src/manifests/firefox.json | 2 +- src/types/heartbeats.ts | 12 ++++++++++++ src/wakatimeScript.ts | 5 +---- 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/background.ts b/src/background.ts index f652d34d..0eb455a7 100644 --- a/src/background.ts +++ b/src/background.ts @@ -1,5 +1,6 @@ import browser from 'webextension-polyfill'; import WakaTimeCore from './core/WakaTimeCore'; +import { PostHeartbeatMessage } from './types/heartbeats'; // Add a listener to resolve alarms browser.alarms.onAlarm.addListener(async (alarm) => { @@ -22,7 +23,7 @@ browser.alarms.create('heartbeatAlarm', { periodInMinutes: 2 }); * Whenever a active tab is changed it records a heartbeat with that tab url. */ browser.tabs.onActivated.addListener(async () => { - console.log('recording a heartbeat - active tab changed '); + console.log('recording a heartbeat - active tab changed'); await WakaTimeCore.recordHeartbeat(); }); @@ -62,6 +63,12 @@ self.addEventListener('activate', async () => { await WakaTimeCore.createDB(); }); +browser.runtime.onMessage.addListener(async (request: PostHeartbeatMessage) => { + if (request.recordHeartbeat === true) { + await WakaTimeCore.recordHeartbeat(request.projectDetails); + } +}); + /** * "Persistent" service worker via bug exploit * https://stackoverflow.com/questions/66618136/persistent-service-worker-in-chrome-extension diff --git a/src/manifests/chrome.json b/src/manifests/chrome.json index eafac279..3204bdc3 100644 --- a/src/manifests/chrome.json +++ b/src/manifests/chrome.json @@ -33,5 +33,5 @@ "page": "options.html" }, "permissions": ["alarms", "tabs", "storage", "idle"], - "version": "3.0.18" + "version": "3.0.19" } diff --git a/src/manifests/firefox.json b/src/manifests/firefox.json index 17622a8b..a120ecb3 100644 --- a/src/manifests/firefox.json +++ b/src/manifests/firefox.json @@ -39,5 +39,5 @@ "page": "options.html" }, "permissions": ["", "alarms", "tabs", "storage", "idle"], - "version": "3.0.18" + "version": "3.0.19" } diff --git a/src/types/heartbeats.ts b/src/types/heartbeats.ts index f418e0d2..1522fdb8 100644 --- a/src/types/heartbeats.ts +++ b/src/types/heartbeats.ts @@ -32,3 +32,15 @@ export interface SendHeartbeat { project: string | null; url: string; } + +export interface ProjectDetails { + category: string; + editor: string; + language: string; + project: string; +} + +export interface PostHeartbeatMessage { + projectDetails?: ProjectDetails; + recordHeartbeat: boolean; +} diff --git a/src/wakatimeScript.ts b/src/wakatimeScript.ts index 0847a7ae..63649fbc 100644 --- a/src/wakatimeScript.ts +++ b/src/wakatimeScript.ts @@ -1,5 +1,3 @@ -import WakaTimeCore from './core/WakaTimeCore'; - const twoMinutes = 120000; interface DesignProject { @@ -55,9 +53,8 @@ const init = async () => { const { hostname } = document.location; const projectDetails = getParser[hostname]?.(); - if (projectDetails) { - await WakaTimeCore.recordHeartbeat(projectDetails); + chrome.runtime.sendMessage({ projectDetails, recordHeartbeat: true }); } };