Merge pull request #205 from wakatime/sebas-bug-fixes

Bug fixes
This commit is contained in:
Alan Hamlett
2023-05-10 17:26:44 +02:00
committed by GitHub
8 changed files with 105 additions and 43 deletions

View File

@@ -43,9 +43,12 @@ browser.windows.onFocusChanged.addListener(async (windowId) => {
browser.tabs.onUpdated.addListener(async (tabId, changeInfo) => {
if (changeInfo.status === 'complete') {
// Get current tab URL.
const [tab] = await browser.tabs.query({ active: true, currentWindow: true });
const tabs: browser.Tabs.Tab[] = await browser.tabs.query({
active: true,
currentWindow: true,
});
// If tab updated is the same as active tab
if (tabId == tab.id) {
if (tabId == tabs[0]?.id) {
await WakaTimeCore.recordHeartbeat();
}
}

View File

@@ -16,7 +16,7 @@ interface State {
loading: boolean;
loggingStyle: string;
loggingType: string;
socialMediaSites: string;
socialMediaSites: string[];
theme: string;
trackSocialMedia: boolean;
whitelist: string;
@@ -62,7 +62,7 @@ export default function Options(): JSX.Element {
hostname: items.hostname as string,
loggingStyle: items.loggingStyle as string,
loggingType: items.loggingType as string,
socialMediaSites: items.socialMediaSites as string,
socialMediaSites: items.socialMediaSites as string[],
theme: items.theme as string,
trackSocialMedia: items.trackSocialMedia as boolean,
whitelist: items.whitelist as string,
@@ -143,6 +143,10 @@ export default function Options(): JSX.Element {
});
};
const toggleSocialMedia = () => {
setState({ ...state, trackSocialMedia: !state.trackSocialMedia });
};
const loggingStyle = function () {
if (state.loggingStyle == 'blacklist') {
return (
@@ -299,11 +303,13 @@ export default function Options(): JSX.Element {
<div className="form-group row">
<div className="col-lg-10 col-lg-offset-2 space-between align-items-center">
<div
onClick={() => setState({ ...state, trackSocialMedia: !state.trackSocialMedia })}
>
<input type="checkbox" defaultChecked={state.trackSocialMedia} />
<span>Track social media sites</span>
<div>
<input
type="checkbox"
checked={state.trackSocialMedia}
onChange={toggleSocialMedia}
/>
<span onClick={toggleSocialMedia}>Track social media sites</span>
</div>
<button
type="button"
@@ -336,14 +342,14 @@ export default function Options(): JSX.Element {
</div>
<div className="modal-body">
<SitesList
handleChange={(sites: string) =>
handleChange={(sites: string) => {
setState({
...state,
socialMediaSites: sites,
})
}
socialMediaSites: sites.split('\n'),
});
}}
label="Social"
sites={state.socialMediaSites}
sites={state.socialMediaSites.join('\n')}
helpText="Sites that you don't want to show in your reports."
rows={5}
/>

View File

@@ -34,16 +34,18 @@ describe('wakatime config', () => {
},
"currentUserApiEndPoint": "/users/current",
"detectionIntervalInSeconds": 60,
"devSites": "https://codepen.io/
https://www.codewars.com/
https://dev.to/
https://github.com/
https://www.hackerrank.com/
https://leetcode.com/
https://developer.mozilla.org/en-US/
https://stackoverflow.com/
https://www.udemy.com/
https://www.w3schools.com/",
"devSites": [
"codepen.io",
"codewars.com",
"dev.to",
"github.com",
"hackerrank.com",
"leetcode.com",
"developer.mozilla.org",
"stackoverflow.com",
"udemy.com",
"w3schools.com",
],
"heartbeatApiEndPoint": "/users/current/heartbeats",
"hostname": "",
"loggingEnabled": true,
@@ -51,16 +53,22 @@ describe('wakatime config', () => {
"loggingType": "domain",
"logoutUserUrl": "https://wakatime.com/logout",
"name": "WakaTime",
"socialMediaSites": "https://www.facebook.com/
https://www.instagram.com/
https://www.linkedin.com/
https://www.pinterest.com/
https://www.reddit.com/
https://www.snapchat.com/
https://www.tiktok.com/
https://twitter.com/
https://www.whatsapp.com/
https://www.youtube.com/",
"nonTrackableSites": [
"chrome://",
"about:",
],
"socialMediaSites": [
"facebook.com",
"instagram.com",
"linkedin.com",
"pinterest.com",
"reddit.com",
"snapchat.com",
"tiktok.com",
"twitter.com",
"whatsapp.com",
"youtube.com",
],
"states": [
"allGood",
"notLogging",

View File

@@ -66,7 +66,7 @@ export interface Config {
*/
detectionIntervalInSeconds: number;
devSites: string;
devSites: string[];
/**
* Url to which to send the heartbeat
*/
@@ -87,7 +87,8 @@ export interface Config {
* Extension name
*/
name: string;
socialMediaSites: string;
nonTrackableSites: string[];
socialMediaSites: string[];
states: ApiStates[];
/**
* Get stats from the wakatime api
@@ -132,8 +133,18 @@ const config: Config = {
detectionIntervalInSeconds: 60,
devSites:
'https://codepen.io/\nhttps://www.codewars.com/\nhttps://dev.to/\nhttps://github.com/\nhttps://www.hackerrank.com/\nhttps://leetcode.com/\nhttps://developer.mozilla.org/en-US/\nhttps://stackoverflow.com/\nhttps://www.udemy.com/\nhttps://www.w3schools.com/',
devSites: [
'codepen.io',
'codewars.com',
'dev.to',
'github.com',
'hackerrank.com',
'leetcode.com',
'developer.mozilla.org',
'stackoverflow.com',
'udemy.com',
'w3schools.com',
],
heartbeatApiEndPoint: process.env.HEARTBEAT_API_URL ?? '/users/current/heartbeats',
@@ -149,7 +160,20 @@ const config: Config = {
name: 'WakaTime',
socialMediaSites: `https://www.facebook.com/\nhttps://www.instagram.com/\nhttps://www.linkedin.com/\nhttps://www.pinterest.com/\nhttps://www.reddit.com/\nhttps://www.snapchat.com/\nhttps://www.tiktok.com/\nhttps://twitter.com/\nhttps://www.whatsapp.com/\nhttps://www.youtube.com/`,
nonTrackableSites: ['chrome://', 'about:'],
socialMediaSites: [
'facebook.com',
'instagram.com',
'linkedin.com',
'pinterest.com',
'reddit.com',
'snapchat.com',
'tiktok.com',
'twitter.com',
'whatsapp.com',
'youtube.com',
],
states: ['allGood', 'notLogging', 'notSignedIn', 'blacklisted', 'whitelisted'],

View File

@@ -12,7 +12,7 @@ import { IS_FIREFOX, generateProjectFromDevSites } from '../utils';
import { getApiKey } from '../utils/apiKey';
import changeExtensionState from '../utils/changeExtensionState';
import contains from '../utils/contains';
import getDomainFromUrl from '../utils/getDomainFromUrl';
import getDomainFromUrl, { getDomain } from '../utils/getDomainFromUrl';
class WakaTimeCore {
tabsWithDevtoolsOpen: Tabs.Tab[];
@@ -149,8 +149,16 @@ class WakaTimeCore {
url = document.URL;
}
for (const site of config.nonTrackableSites) {
if (url.startsWith(site)) {
// Don't send a heartbeat on sites like 'chrome://newtab/' or 'about:newtab'
return;
}
}
const hostname = getDomain(url);
if (!items.trackSocialMedia) {
if (contains(url, items.socialMediaSites as string)) {
if ((items.socialMediaSites as string[]).includes(hostname)) {
return changeExtensionState('blacklisted');
}
}

View File

@@ -33,5 +33,5 @@
"page": "options.html"
},
"permissions": ["alarms", "tabs", "storage", "idle"],
"version": "3.0.12"
"version": "3.0.13"
}

View File

@@ -46,5 +46,5 @@
"storage",
"idle"
],
"version": "3.0.12"
"version": "3.0.13"
}

View File

@@ -6,3 +6,16 @@ export default function getDomainFromUrl(url: string): string {
return parts[0] + '//' + parts[2];
}
/**
* Returns domain from given URL.
*/
export function getDomain(url: string): string {
const splittedUrl = url.replace(/(https?:\/\/)?(www.)?/i, '').split('.');
const domain = splittedUrl.slice(splittedUrl.length - 2).join('.');
if (domain.includes('/')) {
return domain.split('/')[0];
}
return domain;
}