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:
Manav Rathi 2024-04-18 10:40:34 +05:30
parent 775dbaf10d
commit 278df2aae8
No known key found for this signature in database
12 changed files with 76 additions and 141 deletions

View file

@ -24,7 +24,7 @@ import { attachFSWatchIPCHandlers, attachIPCHandlers } from "./main/ipc";
import log, { initLogging } from "./main/log"; import log, { initLogging } from "./main/log";
import { createApplicationMenu, createTrayContextMenu } from "./main/menu"; import { createApplicationMenu, createTrayContextMenu } from "./main/menu";
import { setupAutoUpdater } from "./main/services/app-update"; 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 { initWatcher } from "./main/services/chokidar";
import { userPreferences } from "./main/stores/user-preferences"; import { userPreferences } from "./main/stores/user-preferences";
import { registerStreamProtocol } from "./main/stream"; import { registerStreamProtocol } from "./main/stream";

View file

@ -7,7 +7,7 @@ import {
} from "electron"; } from "electron";
import { allowWindowClose } from "../main"; import { allowWindowClose } from "../main";
import { forceCheckForAppUpdates } from "./services/app-update"; import { forceCheckForAppUpdates } from "./services/app-update";
import autoLauncher from "./services/autoLauncher"; import autoLauncher from "./services/auto-launcher";
import { userPreferences } from "./stores/user-preferences"; import { userPreferences } from "./stores/user-preferences";
import { openLogDirectory } from "./util"; import { openLogDirectory } from "./util";

View 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();

View file

@ -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();

View file

@ -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();

View file

@ -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();

View file

@ -1,12 +1,15 @@
import { safeStorage } from "electron/main"; import { safeStorage } from "electron/main";
import { keysStore } from "../stores/keys.store"; import { safeStorageStore } from "../stores/safe-storage";
import { safeStorageStore } from "../stores/safeStorage.store"; import { uploadStatusStore } from "../stores/upload-status";
import { uploadStatusStore } from "../stores/upload.store";
import { watchStore } from "../stores/watch"; 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 = () => { export const clearStores = () => {
uploadStatusStore.clear(); uploadStatusStore.clear();
keysStore.clear();
safeStorageStore.clear(); safeStorageStore.clear();
watchStore.clear(); watchStore.clear();
}; };

View file

@ -2,7 +2,7 @@ import StreamZip from "node-stream-zip";
import path from "path"; import path from "path";
import { ElectronFile, FILE_PATH_TYPE } from "../../types/ipc"; import { ElectronFile, FILE_PATH_TYPE } from "../../types/ipc";
import { FILE_PATH_KEYS } from "../../types/main"; 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"; import { getElectronFile, getValidPaths, getZipFileStream } from "./fs";
export const getPendingUploads = async () => { export const getPendingUploads = async () => {

View file

@ -1,7 +1,10 @@
import Store, { Schema } from "electron-store"; 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: { encryptionKey: {
type: "string", type: "string",
}, },

View file

@ -1,7 +1,12 @@
import Store, { Schema } from "electron-store"; 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: { filePaths: {
type: "array", type: "array",
items: { items: {
@ -21,5 +26,5 @@ const uploadStoreSchema: Schema<UploadStoreType> = {
export const uploadStatusStore = new Store({ export const uploadStatusStore = new Store({
name: "upload-status", name: "upload-status",
schema: uploadStoreSchema, schema: uploadStatusSchema,
}); });

View file

@ -1,12 +1,12 @@
import Store, { Schema } from "electron-store"; import Store, { Schema } from "electron-store";
interface UserPreferencesSchema { interface UserPreferences {
hideDockIcon: boolean; hideDockIcon: boolean;
skipAppVersion?: string; skipAppVersion?: string;
muteUpdateNotificationVersion?: string; muteUpdateNotificationVersion?: string;
} }
const userPreferencesSchema: Schema<UserPreferencesSchema> = { const userPreferencesSchema: Schema<UserPreferences> = {
hideDockIcon: { hideDockIcon: {
type: "boolean", type: "boolean",
}, },

View file

@ -1,22 +1,6 @@
import { FILE_PATH_TYPE } from "./ipc"; 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 */ /* eslint-disable no-unused-vars */
export const FILE_PATH_KEYS: { export const FILE_PATH_KEYS: {
@ -26,6 +10,3 @@ export const FILE_PATH_KEYS: {
[FILE_PATH_TYPE.FILES]: "filePaths", [FILE_PATH_TYPE.FILES]: "filePaths",
}; };
export interface SafeStorageStoreType {
encryptionKey: string;
}