Rearrange and simplify
The auto launcher migration already rolled out months ago, except for rare cases it is safe to remove (impact of non-migration is not critical too).
This commit is contained in:
parent
775dbaf10d
commit
278df2aae8
12 changed files with 76 additions and 141 deletions
|
@ -24,7 +24,7 @@ import { attachFSWatchIPCHandlers, attachIPCHandlers } from "./main/ipc";
|
|||
import log, { initLogging } from "./main/log";
|
||||
import { createApplicationMenu, createTrayContextMenu } from "./main/menu";
|
||||
import { setupAutoUpdater } from "./main/services/app-update";
|
||||
import autoLauncher from "./main/services/autoLauncher";
|
||||
import autoLauncher from "./main/services/auto-launcher";
|
||||
import { initWatcher } from "./main/services/chokidar";
|
||||
import { userPreferences } from "./main/stores/user-preferences";
|
||||
import { registerStreamProtocol } from "./main/stream";
|
||||
|
|
|
@ -7,7 +7,7 @@ import {
|
|||
} from "electron";
|
||||
import { allowWindowClose } from "../main";
|
||||
import { forceCheckForAppUpdates } from "./services/app-update";
|
||||
import autoLauncher from "./services/autoLauncher";
|
||||
import autoLauncher from "./services/auto-launcher";
|
||||
import { userPreferences } from "./stores/user-preferences";
|
||||
import { openLogDirectory } from "./util";
|
||||
|
||||
|
|
51
desktop/src/main/services/auto-launcher.ts
Normal file
51
desktop/src/main/services/auto-launcher.ts
Normal file
|
@ -0,0 +1,51 @@
|
|||
import AutoLaunch from "auto-launch";
|
||||
import { app } from "electron";
|
||||
|
||||
class AutoLauncher {
|
||||
/**
|
||||
* This property will be set and used on Linux and Windows. On macOS,
|
||||
* there's a separate API
|
||||
*/
|
||||
private autoLaunch?: AutoLaunch;
|
||||
|
||||
constructor() {
|
||||
if (process.platform != "darwin") {
|
||||
this.autoLaunch = new AutoLaunch({
|
||||
name: "ente",
|
||||
isHidden: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async isEnabled() {
|
||||
const autoLaunch = this.autoLaunch;
|
||||
if (autoLaunch) {
|
||||
return await autoLaunch.isEnabled();
|
||||
} else {
|
||||
return app.getLoginItemSettings().openAtLogin;
|
||||
}
|
||||
}
|
||||
|
||||
async toggleAutoLaunch() {
|
||||
const isEnabled = await this.isEnabled();
|
||||
const autoLaunch = this.autoLaunch;
|
||||
if (autoLaunch) {
|
||||
if (isEnabled) await autoLaunch.disable();
|
||||
else await autoLaunch.enable();
|
||||
} else {
|
||||
if (isEnabled) app.setLoginItemSettings({ openAtLogin: false });
|
||||
else app.setLoginItemSettings({ openAtLogin: true });
|
||||
}
|
||||
}
|
||||
|
||||
async wasAutoLaunched() {
|
||||
if (this.autoLaunch) {
|
||||
return app.commandLine.hasSwitch("hidden");
|
||||
} else {
|
||||
// TODO(MR): This apparently doesn't work anymore.
|
||||
return app.getLoginItemSettings().wasOpenedAtLogin;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default new AutoLauncher();
|
|
@ -1,41 +0,0 @@
|
|||
import { AutoLauncherClient } from "../../types/main";
|
||||
import { isPlatform } from "../platform";
|
||||
import linuxAndWinAutoLauncher from "./autoLauncherClients/linuxAndWinAutoLauncher";
|
||||
import macAutoLauncher from "./autoLauncherClients/macAutoLauncher";
|
||||
|
||||
class AutoLauncher {
|
||||
private client: AutoLauncherClient;
|
||||
async init() {
|
||||
if (isPlatform("linux") || isPlatform("windows")) {
|
||||
this.client = linuxAndWinAutoLauncher;
|
||||
} else {
|
||||
this.client = macAutoLauncher;
|
||||
}
|
||||
// migrate old auto launch settings for windows from mac auto launcher to linux and windows auto launcher
|
||||
if (isPlatform("windows") && (await macAutoLauncher.isEnabled())) {
|
||||
await macAutoLauncher.toggleAutoLaunch();
|
||||
await linuxAndWinAutoLauncher.toggleAutoLaunch();
|
||||
}
|
||||
}
|
||||
async isEnabled() {
|
||||
if (!this.client) {
|
||||
await this.init();
|
||||
}
|
||||
return await this.client.isEnabled();
|
||||
}
|
||||
async toggleAutoLaunch() {
|
||||
if (!this.client) {
|
||||
await this.init();
|
||||
}
|
||||
await this.client.toggleAutoLaunch();
|
||||
}
|
||||
|
||||
async wasAutoLaunched() {
|
||||
if (!this.client) {
|
||||
await this.init();
|
||||
}
|
||||
return this.client.wasAutoLaunched();
|
||||
}
|
||||
}
|
||||
|
||||
export default new AutoLauncher();
|
|
@ -1,39 +0,0 @@
|
|||
import AutoLaunch from "auto-launch";
|
||||
import { app } from "electron";
|
||||
import { AutoLauncherClient } from "../../../types/main";
|
||||
|
||||
const LAUNCHED_AS_HIDDEN_FLAG = "hidden";
|
||||
|
||||
class LinuxAndWinAutoLauncher implements AutoLauncherClient {
|
||||
private instance: AutoLaunch;
|
||||
constructor() {
|
||||
const autoLauncher = new AutoLaunch({
|
||||
name: "ente",
|
||||
isHidden: true,
|
||||
});
|
||||
this.instance = autoLauncher;
|
||||
}
|
||||
async isEnabled() {
|
||||
return await this.instance.isEnabled();
|
||||
}
|
||||
async toggleAutoLaunch() {
|
||||
if (await this.isEnabled()) {
|
||||
await this.disableAutoLaunch();
|
||||
} else {
|
||||
await this.enableAutoLaunch();
|
||||
}
|
||||
}
|
||||
|
||||
async wasAutoLaunched() {
|
||||
return app.commandLine.hasSwitch(LAUNCHED_AS_HIDDEN_FLAG);
|
||||
}
|
||||
|
||||
private async disableAutoLaunch() {
|
||||
await this.instance.disable();
|
||||
}
|
||||
private async enableAutoLaunch() {
|
||||
await this.instance.enable();
|
||||
}
|
||||
}
|
||||
|
||||
export default new LinuxAndWinAutoLauncher();
|
|
@ -1,28 +0,0 @@
|
|||
import { app } from "electron";
|
||||
import { AutoLauncherClient } from "../../../types/main";
|
||||
|
||||
class MacAutoLauncher implements AutoLauncherClient {
|
||||
async isEnabled() {
|
||||
return app.getLoginItemSettings().openAtLogin;
|
||||
}
|
||||
async toggleAutoLaunch() {
|
||||
if (await this.isEnabled()) {
|
||||
this.disableAutoLaunch();
|
||||
} else {
|
||||
this.enableAutoLaunch();
|
||||
}
|
||||
}
|
||||
|
||||
async wasAutoLaunched() {
|
||||
return app.getLoginItemSettings().wasOpenedAtLogin;
|
||||
}
|
||||
|
||||
private disableAutoLaunch() {
|
||||
app.setLoginItemSettings({ openAtLogin: false });
|
||||
}
|
||||
private enableAutoLaunch() {
|
||||
app.setLoginItemSettings({ openAtLogin: true });
|
||||
}
|
||||
}
|
||||
|
||||
export default new MacAutoLauncher();
|
|
@ -1,12 +1,15 @@
|
|||
import { safeStorage } from "electron/main";
|
||||
import { keysStore } from "../stores/keys.store";
|
||||
import { safeStorageStore } from "../stores/safeStorage.store";
|
||||
import { uploadStatusStore } from "../stores/upload.store";
|
||||
import { safeStorageStore } from "../stores/safe-storage";
|
||||
import { uploadStatusStore } from "../stores/upload-status";
|
||||
import { watchStore } from "../stores/watch";
|
||||
|
||||
/**
|
||||
* Clear all stores except user preferences.
|
||||
*
|
||||
* This is useful to reset state when the user logs out.
|
||||
*/
|
||||
export const clearStores = () => {
|
||||
uploadStatusStore.clear();
|
||||
keysStore.clear();
|
||||
safeStorageStore.clear();
|
||||
watchStore.clear();
|
||||
};
|
||||
|
|
|
@ -2,7 +2,7 @@ import StreamZip from "node-stream-zip";
|
|||
import path from "path";
|
||||
import { ElectronFile, FILE_PATH_TYPE } from "../../types/ipc";
|
||||
import { FILE_PATH_KEYS } from "../../types/main";
|
||||
import { uploadStatusStore } from "../stores/upload.store";
|
||||
import { uploadStatusStore } from "../stores/upload-status";
|
||||
import { getElectronFile, getValidPaths, getZipFileStream } from "./fs";
|
||||
|
||||
export const getPendingUploads = async () => {
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
import Store, { Schema } from "electron-store";
|
||||
import type { SafeStorageStoreType } from "../../types/main";
|
||||
|
||||
const safeStorageSchema: Schema<SafeStorageStoreType> = {
|
||||
interface SafeStorageStore {
|
||||
encryptionKey: string;
|
||||
}
|
||||
|
||||
const safeStorageSchema: Schema<SafeStorageStore> = {
|
||||
encryptionKey: {
|
||||
type: "string",
|
||||
},
|
|
@ -1,7 +1,12 @@
|
|||
import Store, { Schema } from "electron-store";
|
||||
import type { UploadStoreType } from "../../types/main";
|
||||
|
||||
const uploadStoreSchema: Schema<UploadStoreType> = {
|
||||
interface UploadStatusStore {
|
||||
filePaths: string[];
|
||||
zipPaths: string[];
|
||||
collectionName: string;
|
||||
}
|
||||
|
||||
const uploadStatusSchema: Schema<UploadStatusStore> = {
|
||||
filePaths: {
|
||||
type: "array",
|
||||
items: {
|
||||
|
@ -21,5 +26,5 @@ const uploadStoreSchema: Schema<UploadStoreType> = {
|
|||
|
||||
export const uploadStatusStore = new Store({
|
||||
name: "upload-status",
|
||||
schema: uploadStoreSchema,
|
||||
schema: uploadStatusSchema,
|
||||
});
|
|
@ -1,12 +1,12 @@
|
|||
import Store, { Schema } from "electron-store";
|
||||
|
||||
interface UserPreferencesSchema {
|
||||
interface UserPreferences {
|
||||
hideDockIcon: boolean;
|
||||
skipAppVersion?: string;
|
||||
muteUpdateNotificationVersion?: string;
|
||||
}
|
||||
|
||||
const userPreferencesSchema: Schema<UserPreferencesSchema> = {
|
||||
const userPreferencesSchema: Schema<UserPreferences> = {
|
||||
hideDockIcon: {
|
||||
type: "boolean",
|
||||
},
|
||||
|
|
|
@ -1,22 +1,6 @@
|
|||
import { FILE_PATH_TYPE } from "./ipc";
|
||||
|
||||
export interface AutoLauncherClient {
|
||||
isEnabled: () => Promise<boolean>;
|
||||
toggleAutoLaunch: () => Promise<void>;
|
||||
wasAutoLaunched: () => Promise<boolean>;
|
||||
}
|
||||
|
||||
export interface UploadStoreType {
|
||||
filePaths: string[];
|
||||
zipPaths: string[];
|
||||
collectionName: string;
|
||||
}
|
||||
|
||||
export interface KeysStoreType {
|
||||
AnonymizeUserID: {
|
||||
id: string;
|
||||
};
|
||||
}
|
||||
|
||||
/* eslint-disable no-unused-vars */
|
||||
export const FILE_PATH_KEYS: {
|
||||
|
@ -26,6 +10,3 @@ export const FILE_PATH_KEYS: {
|
|||
[FILE_PATH_TYPE.FILES]: "filePaths",
|
||||
};
|
||||
|
||||
export interface SafeStorageStoreType {
|
||||
encryptionKey: string;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue