67 lines
1.8 KiB
TypeScript
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);
|
|
} |