Lightcord/src/autoStart/linux.ts

67 lines
1.8 KiB
TypeScript

import * as fs from "fs"
import * as path from "path"
import * as electron from "electron"
import * as buildInfo from "../buildInfo"
// TODO: We should use Constant's APP_NAME, but only once
// we set up backwards compat with this.
const appName = path.basename(process.execPath, '.exe');
const exePath = electron.app.getPath('exe');
const exeDir = path.dirname(exePath);
const iconPath = path.join(exeDir, 'discord.png');
const autostartDir = path.join(electron.app.getPath('appData'), 'autostart');
const electronAppName = electron.app.name ? electron.app.name : electron.app.getName();
const autostartFileName = path.join(autostartDir, electronAppName + '-' + buildInfo.releaseChannel + '.desktop');
const desktopFile = `[Desktop Entry]
Type=Application
Exec=${exePath}
Hidden=false
NoDisplay=false
Name=${appName}
Icon=${iconPath}
Comment=Text and voice chat for gamers.
X-GNOME-Autostart-enabled=true
`;
function ensureDir() {
try {
fs.mkdirSync(autostartDir);
return true;
} catch (e) {
// catch for when it already exists.
}
return false;
}
export function install(callback) {
// TODO: This could fail. We should read its return value
ensureDir();
try {
return fs.writeFile(autostartFileName, desktopFile, callback);
} catch (e) {
// I guess we don't autostart then
return callback();
}
}
export function update(callback) {
// TODO: We might need to implement this later on
return callback();
}
export function isInstalled(callback) {
try {
fs.stat(autostartFileName, (err, stats) => {
if (err) {
return callback(false);
}
return callback(stats.isFile());
});
} catch (e) {
return callback(false);
}
}
export function uninstall(callback) {
return fs.unlink(autostartFileName, callback);
}