diff --git a/discord-wakatime.plugin.js b/discord-wakatime.plugin.js
index c6e38ba..7b57811 100644
--- a/discord-wakatime.plugin.js
+++ b/discord-wakatime.plugin.js
@@ -16,8 +16,7 @@ module.exports = class WakaTime {
start() {
console.log(`Initializing WakaTime plugin v${this.meta.version}`);
- this.home = getHomeDirectory();
- if (readSetting(this.home + '/.wakatime.cfg', 'settings', 'debug') == 'true') {
+ if (readSetting(this.homeDirectory() + '/.wakatime.cfg', 'settings', 'debug') == 'true') {
this.debug = true;
console.log('WakaTime debug mode enabled');
}
@@ -31,7 +30,7 @@ module.exports = class WakaTime {
}
getSettingsPanel() {
- const key = readSetting(this.home + '/.wakatime.cfg', 'settings', 'api_key') || '';
+ const key = readSetting(this.homeDirectory() + '/.wakatime.cfg', 'settings', 'api_key') || '';
let template = document.createElement('template');
template.innerHTML = `
`;
template.content.firstElementChild.querySelector('input').addEventListener('keyup', this.onChangeApiKey);
@@ -40,7 +39,7 @@ module.exports = class WakaTime {
onChangeApiKey(e) {
const key = e.target.value;
- setSetting(this.home + '/.wakatime.cfg', 'settings', 'api_key', key);
+ setSetting(this.homeDirectory() + '/.wakatime.cfg', 'settings', 'api_key', key);
}
enoughTimePassed() {
@@ -55,7 +54,7 @@ module.exports = class WakaTime {
}
async sendHeartbeat(time) {
- const key = readSetting(this.home + '/.wakatime.cfg', 'settings', 'api_key');
+ const key = readSetting(this.homeDirectory() + '/.wakatime.cfg', 'settings', 'api_key');
if (!key) return;
if (this.debug) {
console.log(`Sending heartbeat to WakaTime API.`);
@@ -69,14 +68,17 @@ module.exports = class WakaTime {
//project: project,
plugin: `${this.osName()} betterdiscord/${BdApi.version} discord-wakatime/${this.meta.version}`,
});
+ const headers = {
+ Authorization: `Basic ${key}`,
+ 'Content-Type': 'application/json',
+ 'Content-Length': new TextEncoder().encode(body).length,
+ };
+ const machine = this.machineName();
+ if (machine) headers['X-Machine-Name'] = machine;
const response = await BdApi.Net.fetch(url, {
method: 'POST',
body: body,
- headers: {
- Authorization: `Basic ${key}`,
- 'Content-Type': 'application/json',
- 'Content-Length': new TextEncoder().encode(body).length,
- },
+ headers: headers,
});
const data = await response.text();
if (response.status < 200 || response.status >= 300) console.warn(`WakaTime API Error ${response.status}: ${data}`);
@@ -87,15 +89,46 @@ module.exports = class WakaTime {
if (osname == 'win32') osname = 'windows';
return osname;
}
-};
-function getHomeDirectory() {
- let home = process.env.WAKATIME_HOME;
- if (home && home.trim() && fs.existsSync(home.trim())) return home.trim();
- if (process.env.USERPROFILE) return process.env.USERPROFILE;
- if (process.env.HOME) return process.env.HOME;
- return process.cwd();
-}
+ machineName() {
+ if (this.machine) return this.machine;
+ const osname = this.osName();
+ if (osname == 'darwin') {
+ const content = readFile('/Library/Preferences/SystemConfiguration/com.apple.smb.server.plist');
+ const lines = content.split('\n');
+ let found = false;
+ for (var i = 0; i < lines.length; i++) {
+ let line = lines[i];
+ if (found && line.includes('')) {
+ this.machine = line.trim().replace('', '').replace('', '').trim();
+ found = false;
+ } else if (line.trim() == 'NetBIOSName') {
+ found = true;
+ }
+ }
+ } else if (osname == 'windows') {
+ this.machine = process.env.COMPUTERNAME;
+ } else {
+ this.machine = readFile('/etc/hostname').trim();
+ }
+ return this.machine;
+ }
+
+ homeDirectory() {
+ if (this.home) return this.home;
+ let home = process.env.WAKATIME_HOME;
+ if (home && home.trim() && fs.existsSync(home.trim())) {
+ this.home = home.trim();
+ } else if (process.env.USERPROFILE) {
+ this.home = process.env.USERPROFILE;
+ } else if (process.env.HOME) {
+ this.home = process.env.HOME;
+ } else {
+ this.home = process.cwd();
+ }
+ return this.home;
+ }
+};
function readSetting(file, section, key) {
try {