From a8a932864d5ac670a23bfb8012180ad246dd4169 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Fri, 18 Aug 2023 18:05:57 +0200 Subject: [PATCH 01/14] More reliable canva project detection, fix designing category --- src/wakatimeScript.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/wakatimeScript.ts b/src/wakatimeScript.ts index 028fec21..0847a7ae 100644 --- a/src/wakatimeScript.ts +++ b/src/wakatimeScript.ts @@ -10,13 +10,18 @@ interface DesignProject { } const parseCanva = (): DesignProject | undefined => { - const canvaProject = document.getElementsByClassName('rF765A'); - if (canvaProject.length === 0) return; - const projectName = (document.head.querySelector('meta[property="og:title"]') as HTMLMetaElement) .content; + if (!projectName) return; + + // make sure the page title matches the design input element's value, meaning this is a design file + const canvaProjectInput = Array.from( + document.querySelector('nav')?.querySelectorAll('input') ?? [], + ).find((inp) => inp.value === projectName); + if (!canvaProjectInput) return; + return { - category: 'Designing', + category: 'designing', editor: 'Canva', language: 'Canva Design', project: projectName, @@ -30,7 +35,7 @@ const parseFigma = (): DesignProject | undefined => { const projectName = (document.querySelector('span[data-testid="filename"]') as HTMLElement) .innerText; return { - category: 'Designing', + category: 'designing', editor: 'Figma', language: 'Figma Design', project: projectName, From 720211fef2d7106177288e844d152b418429359e Mon Sep 17 00:00:00 2001 From: Juan Sebastian velez Posada Date: Fri, 18 Aug 2023 11:50:36 -0500 Subject: [PATCH 02/14] Bump version to 3.0.18 (#226) --- src/manifests/chrome.json | 2 +- src/manifests/firefox.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/manifests/chrome.json b/src/manifests/chrome.json index 3d7d131b..eafac279 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.17" + "version": "3.0.18" } diff --git a/src/manifests/firefox.json b/src/manifests/firefox.json index f3170357..17622a8b 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.17" + "version": "3.0.18" } From 4c8fee9931fa5bdeae38d548dcd054bf4f42f1a5 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Mon, 21 Aug 2023 08:50:57 +0200 Subject: [PATCH 03/14] Edge manifest --- src/manifests/edge.json | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/manifests/edge.json diff --git a/src/manifests/edge.json b/src/manifests/edge.json new file mode 100644 index 00000000..eb23c135 --- /dev/null +++ b/src/manifests/edge.json @@ -0,0 +1,37 @@ +{ + "action": { + "default_icon": { + "19": "graphics/wakatime-logo-19.png", + "38": "graphics/wakatime-logo-38.png" + }, + "default_popup": "popup.html", + "default_title": "WakaTime" + }, + "background": { + "service_worker": "background.js", + "type": "module" + }, + "content_scripts": [ + { + "matches": [""], + "js": ["wakatimeScript.js"], + "run_at": "document_end" + } + ], + "description": "Automatic time tracking for Edge.", + "devtools_page": "devtools.html", + "homepage_url": "https://wakatime.com", + "host_permissions": ["https://api.wakatime.com/*", "https://wakatime.com/*"], + "icons": { + "16": "graphics/wakatime-logo-16.png", + "48": "graphics/wakatime-logo-48.png", + "128": "graphics/wakatime-logo-128.png" + }, + "manifest_version": 3, + "name": "WakaTime", + "options_ui": { + "page": "options.html" + }, + "permissions": ["alarms", "tabs", "storage", "idle"], + "version": "3.0.18" +} From 7d4fb6b90f3092421d37ff9947db077a73bcc746 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Mon, 21 Aug 2023 08:58:07 +0200 Subject: [PATCH 04/14] build for edge --- webpack.config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webpack.config.ts b/webpack.config.ts index 42f180dc..d38934d0 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -4,7 +4,7 @@ import * as webpack from 'webpack'; // eslint-disable-next-line import CopyPlugin from 'copy-webpack-plugin'; -type BrowserTypes = 'chrome' | 'firefox'; +type BrowserTypes = 'chrome' | 'firefox' | 'edge'; const publicFolder = join(__dirname, 'public'); const cssFolder = join(publicFolder, 'css'); @@ -75,5 +75,5 @@ export default ( arv: Record, ): webpack.Configuration[] => { const isProd = arv.mode !== 'development'; - return [getConfigByBrowser(isProd, 'chrome'), getConfigByBrowser(isProd, 'firefox')]; + return [getConfigByBrowser(isProd, 'chrome'), getConfigByBrowser(isProd, 'firefox'), getConfigByBrowser(isProd, 'edge')]; }; From 3a430d66ce1b1f4212ff925a6ea3ff97b979ef17 Mon Sep 17 00:00:00 2001 From: Sebastian Velez Date: Mon, 28 Aug 2023 19:01:47 -0500 Subject: [PATCH 05/14] 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 }); } }; From 91c89692f76047c2fa150365bfcfe9d2d599d322 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Tue, 29 Aug 2023 13:51:18 +0200 Subject: [PATCH 06/14] Bump edge version to match Firefox and Chrome --- src/manifests/edge.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/manifests/edge.json b/src/manifests/edge.json index eb23c135..2c6321a2 100644 --- a/src/manifests/edge.json +++ b/src/manifests/edge.json @@ -33,5 +33,5 @@ "page": "options.html" }, "permissions": ["alarms", "tabs", "storage", "idle"], - "version": "3.0.18" + "version": "3.0.19" } From 15a110bc234d7a036fe29dbd81a4446e0cd95ba7 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Tue, 29 Aug 2023 14:14:39 +0200 Subject: [PATCH 07/14] install links for all browsers --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 338e5af9..01da5b77 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,9 @@ Note: Activity from this Chrome extension will not display on leaderboards, so i 1. Install the extension: -[![Chrome Web Store](https://wakatime.com/static/img/chrome-web-store.png)](https://chrome.google.com/webstore/detail/wakatime/jnbbnacmeggbgdjgaoojpmhdlkkpblgi) +[![Chrome](https://wakatime.com/static/img/chrome-web-store.png)](https://chrome.google.com/webstore/detail/wakatime/jnbbnacmeggbgdjgaoojpmhdlkkpblgi) +[![Firefox](https://wakatime.com/static/img/firefox-addon.png)](https://addons.mozilla.org/en-US/firefox/addon/wakatimes/) +[![Edge](https://wakatime.com/static/img/microsoft-extension.png)](https://microsoftedge.microsoft.com/addons/detail/wakatime/cdnpfnaadjmaplhghnlonephmabegadl) 2. Login to [WakaTime](https://wakatime.com/). From 562189c9f1946a0eb377fa2a5d4de79816f9f5ad Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Tue, 29 Aug 2023 14:15:54 +0200 Subject: [PATCH 08/14] newlines --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 01da5b77..82948287 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,9 @@ Note: Activity from this Chrome extension will not display on leaderboards, so i 1. Install the extension: [![Chrome](https://wakatime.com/static/img/chrome-web-store.png)](https://chrome.google.com/webstore/detail/wakatime/jnbbnacmeggbgdjgaoojpmhdlkkpblgi) + [![Firefox](https://wakatime.com/static/img/firefox-addon.png)](https://addons.mozilla.org/en-US/firefox/addon/wakatimes/) + [![Edge](https://wakatime.com/static/img/microsoft-extension.png)](https://microsoftedge.microsoft.com/addons/detail/wakatime/cdnpfnaadjmaplhghnlonephmabegadl) 2. Login to [WakaTime](https://wakatime.com/). From c57818bec78d7f51a26ecc20fddf85dc42ea9a84 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Tue, 17 Oct 2023 21:14:35 +0200 Subject: [PATCH 09/14] Use last branch same as last project --- src/core/WakaTimeCore.ts | 1 + src/types/heartbeats.ts | 1 + src/types/user.ts | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/WakaTimeCore.ts b/src/core/WakaTimeCore.ts index 321ad46a..c74a2c8b 100644 --- a/src/core/WakaTimeCore.ts +++ b/src/core/WakaTimeCore.ts @@ -354,6 +354,7 @@ class WakaTimeCore { }; payload.project = heartbeat.project ?? '<>'; + payload.branch= heartbeat.branch ?? '<>'; return payload; } diff --git a/src/types/heartbeats.ts b/src/types/heartbeats.ts index 1522fdb8..4c0bb207 100644 --- a/src/types/heartbeats.ts +++ b/src/types/heartbeats.ts @@ -30,6 +30,7 @@ export interface Datum { export interface SendHeartbeat { hostname: string; project: string | null; + branch: string | null; url: string; } diff --git a/src/types/user.ts b/src/types/user.ts index c5edc51c..d19e8922 100644 --- a/src/types/user.ts +++ b/src/types/user.ts @@ -28,7 +28,8 @@ export interface User { last_heartbeat_at: string; last_plugin: string; last_plugin_name: string; - last_project: string; + last_project?: string; + last_branch?: string; location: string; logged_time_public: boolean; modified_at: string; From 625410df1a4b4b1a16c01ca45d9712839df9f90c Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Tue, 17 Oct 2023 21:56:16 +0200 Subject: [PATCH 10/14] linter --- src/core/WakaTimeCore.ts | 2 +- src/types/heartbeats.ts | 2 +- src/types/user.ts | 2 +- webpack.config.ts | 6 +++++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/core/WakaTimeCore.ts b/src/core/WakaTimeCore.ts index c74a2c8b..1d699316 100644 --- a/src/core/WakaTimeCore.ts +++ b/src/core/WakaTimeCore.ts @@ -354,7 +354,7 @@ class WakaTimeCore { }; payload.project = heartbeat.project ?? '<>'; - payload.branch= heartbeat.branch ?? '<>'; + payload.branch = heartbeat.branch ?? '<>'; return payload; } diff --git a/src/types/heartbeats.ts b/src/types/heartbeats.ts index 4c0bb207..69734144 100644 --- a/src/types/heartbeats.ts +++ b/src/types/heartbeats.ts @@ -28,9 +28,9 @@ export interface Datum { } export interface SendHeartbeat { + branch: string | null; hostname: string; project: string | null; - branch: string | null; url: string; } diff --git a/src/types/user.ts b/src/types/user.ts index d19e8922..860e899e 100644 --- a/src/types/user.ts +++ b/src/types/user.ts @@ -25,11 +25,11 @@ export interface User { is_hireable: boolean; is_onboarding_finished: boolean; languages_used_public: boolean; + last_branch?: string; last_heartbeat_at: string; last_plugin: string; last_plugin_name: string; last_project?: string; - last_branch?: string; location: string; logged_time_public: boolean; modified_at: string; diff --git a/webpack.config.ts b/webpack.config.ts index d38934d0..51a99e07 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -75,5 +75,9 @@ export default ( arv: Record, ): webpack.Configuration[] => { const isProd = arv.mode !== 'development'; - return [getConfigByBrowser(isProd, 'chrome'), getConfigByBrowser(isProd, 'firefox'), getConfigByBrowser(isProd, 'edge')]; + return [ + getConfigByBrowser(isProd, 'chrome'), + getConfigByBrowser(isProd, 'firefox'), + getConfigByBrowser(isProd, 'edge'), + ]; }; From 03ae1f55de5a309e4372117b4ca250c73fc76ce0 Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Tue, 17 Oct 2023 21:57:00 +0200 Subject: [PATCH 11/14] Link to new firefox namespace --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 82948287..c47ff1ce 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Note: Activity from this Chrome extension will not display on leaderboards, so i [![Chrome](https://wakatime.com/static/img/chrome-web-store.png)](https://chrome.google.com/webstore/detail/wakatime/jnbbnacmeggbgdjgaoojpmhdlkkpblgi) -[![Firefox](https://wakatime.com/static/img/firefox-addon.png)](https://addons.mozilla.org/en-US/firefox/addon/wakatimes/) +[![Firefox](https://wakatime.com/static/img/firefox-addon.png)](https://addons.mozilla.org/en-US/firefox/addon/wakatime/) [![Edge](https://wakatime.com/static/img/microsoft-extension.png)](https://microsoftedge.microsoft.com/addons/detail/wakatime/cdnpfnaadjmaplhghnlonephmabegadl) From db2fbcac5df04f311524eb2325aeb977cae4dd9b Mon Sep 17 00:00:00 2001 From: Juan Sebastian velez Posada Date: Tue, 17 Oct 2023 15:10:04 -0500 Subject: [PATCH 12/14] Bump version to v3.0.20 (#233) --- src/manifests/chrome.json | 2 +- src/manifests/edge.json | 2 +- src/manifests/firefox.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/manifests/chrome.json b/src/manifests/chrome.json index 3204bdc3..bfe16ab7 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.19" + "version": "3.0.20" } diff --git a/src/manifests/edge.json b/src/manifests/edge.json index 2c6321a2..b1579c57 100644 --- a/src/manifests/edge.json +++ b/src/manifests/edge.json @@ -33,5 +33,5 @@ "page": "options.html" }, "permissions": ["alarms", "tabs", "storage", "idle"], - "version": "3.0.19" + "version": "3.0.20" } diff --git a/src/manifests/firefox.json b/src/manifests/firefox.json index a120ecb3..431f2649 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.19" + "version": "3.0.20" } From 3a8e718857e3096ce928481a8ab21a1e5e55170a Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Tue, 21 Nov 2023 11:27:51 +0100 Subject: [PATCH 13/14] Send heartbeats to api servers subdomain instead of root domain --- src/components/Options.tsx | 4 ++-- src/config/config.test.ts | 2 +- src/config/config.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/Options.tsx b/src/components/Options.tsx index ec3c0312..e2d7e6fb 100644 --- a/src/components/Options.tsx +++ b/src/components/Options.tsx @@ -308,9 +308,9 @@ export default function Options(): JSX.Element { className="form-control" value={state.apiUrl} onChange={(e) => setState({ ...state, apiUrl: e.target.value })} - placeholder="https://wakatime.com/api/v1" + placeholder="https://api.wakatime.com/api/v1" /> - https://wakatime.com/api/v1 + https://api.wakatime.com/api/v1 diff --git a/src/config/config.test.ts b/src/config/config.test.ts index 7987e4b0..7d357eb5 100644 --- a/src/config/config.test.ts +++ b/src/config/config.test.ts @@ -25,7 +25,7 @@ describe('wakatime config', () => { }, }, "apiKey": "", - "apiUrl": "https://wakatime.com/api/v1", + "apiUrl": "https://api.wakatime.com/api/v1", "colors": { "allGood": "", "lightTheme": "white", diff --git a/src/config/config.ts b/src/config/config.ts index 1f24c91a..f10f19c5 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -120,7 +120,7 @@ const config: Config = { apiKey: '', - apiUrl: process.env.API_URL ?? 'https://wakatime.com/api/v1', + apiUrl: process.env.API_URL ?? 'https://api.wakatime.com/api/v1', colors: { allGood: '', From ca79adc4e5d3f755bd33ad7d3ff1592da9c9965d Mon Sep 17 00:00:00 2001 From: Juan Sebastian velez Posada Date: Tue, 21 Nov 2023 14:21:27 -0500 Subject: [PATCH 14/14] bump version to 3.0.21 (#242) --- src/manifests/chrome.json | 2 +- src/manifests/edge.json | 2 +- src/manifests/firefox.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/manifests/chrome.json b/src/manifests/chrome.json index bfe16ab7..58aad161 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.20" + "version": "3.0.21" } diff --git a/src/manifests/edge.json b/src/manifests/edge.json index b1579c57..34ad2d9f 100644 --- a/src/manifests/edge.json +++ b/src/manifests/edge.json @@ -33,5 +33,5 @@ "page": "options.html" }, "permissions": ["alarms", "tabs", "storage", "idle"], - "version": "3.0.20" + "version": "3.0.21" } diff --git a/src/manifests/firefox.json b/src/manifests/firefox.json index 431f2649..30a57bb3 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.20" + "version": "3.0.21" }