mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-03-09 15:40:26 +00:00
Merge 08935ceabd
into 42ae8e76a6
This commit is contained in:
commit
6252d11303
4 changed files with 91 additions and 23 deletions
|
@ -13,4 +13,5 @@ export const levelKeys = {
|
||||||
userPreferences: "userPreferences",
|
userPreferences: "userPreferences",
|
||||||
language: "language",
|
language: "language",
|
||||||
sqliteMigrationDone: "sqliteMigrationDone",
|
sqliteMigrationDone: "sqliteMigrationDone",
|
||||||
|
screenState: "screenState",
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,34 +17,15 @@ import { HydraApi } from "./hydra-api";
|
||||||
import UserAgent from "user-agents";
|
import UserAgent from "user-agents";
|
||||||
import { db, gamesSublevel, levelKeys } from "@main/level";
|
import { db, gamesSublevel, levelKeys } from "@main/level";
|
||||||
import { slice, sortBy } from "lodash-es";
|
import { slice, sortBy } from "lodash-es";
|
||||||
import type { UserPreferences } from "@types";
|
import type { ScreenState, UserPreferences } from "@types";
|
||||||
import { AuthPage } from "@shared";
|
import { AuthPage } from "@shared";
|
||||||
import { isStaging } from "@main/constants";
|
import { isStaging } from "@main/constants";
|
||||||
|
|
||||||
export class WindowManager {
|
export class WindowManager {
|
||||||
public static mainWindow: Electron.BrowserWindow | null = null;
|
public static mainWindow: Electron.BrowserWindow | null = null;
|
||||||
|
|
||||||
private static loadMainWindowURL(hash = "") {
|
private static initialConfigInitializationMainWindow: Electron.BrowserWindowConstructorOptions =
|
||||||
// HMR for renderer base on electron-vite cli.
|
{
|
||||||
// Load the remote URL for development or the local html file for production.
|
|
||||||
if (is.dev && process.env["ELECTRON_RENDERER_URL"]) {
|
|
||||||
this.mainWindow?.loadURL(
|
|
||||||
`${process.env["ELECTRON_RENDERER_URL"]}#/${hash}`
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.mainWindow?.loadFile(
|
|
||||||
path.join(__dirname, "../renderer/index.html"),
|
|
||||||
{
|
|
||||||
hash,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static createMainWindow() {
|
|
||||||
if (this.mainWindow) return;
|
|
||||||
|
|
||||||
this.mainWindow = new BrowserWindow({
|
|
||||||
width: 1200,
|
width: 1200,
|
||||||
height: 720,
|
height: 720,
|
||||||
minWidth: 1024,
|
minWidth: 1024,
|
||||||
|
@ -63,7 +44,69 @@ export class WindowManager {
|
||||||
sandbox: false,
|
sandbox: false,
|
||||||
},
|
},
|
||||||
show: false,
|
show: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
private static async saveScreenConfig({
|
||||||
|
...configScreenWhenClosed
|
||||||
|
}: {
|
||||||
|
x: number | undefined;
|
||||||
|
y: number | undefined;
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
|
isMaximized: boolean;
|
||||||
|
}) {
|
||||||
|
await db.put(levelKeys.screenState, configScreenWhenClosed, {
|
||||||
|
valueEncoding: "json",
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async loadScreenConfig() {
|
||||||
|
const data = await db.get<string, ScreenState>(levelKeys.screenState, {
|
||||||
|
valueEncoding: "json",
|
||||||
|
});
|
||||||
|
return data ?? {};
|
||||||
|
}
|
||||||
|
private static updateInitialConfig(
|
||||||
|
newConfig: Partial<Electron.BrowserWindowConstructorOptions>
|
||||||
|
) {
|
||||||
|
this.initialConfigInitializationMainWindow = {
|
||||||
|
...this.initialConfigInitializationMainWindow,
|
||||||
|
...newConfig,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static loadMainWindowURL(hash = "") {
|
||||||
|
// HMR for renderer base on electron-vite cli.
|
||||||
|
// Load the remote URL for development or the local html file for production.
|
||||||
|
if (is.dev && process.env["ELECTRON_RENDERER_URL"]) {
|
||||||
|
this.mainWindow?.loadURL(
|
||||||
|
`${process.env["ELECTRON_RENDERER_URL"]}#/${hash}`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.mainWindow?.loadFile(
|
||||||
|
path.join(__dirname, "../renderer/index.html"),
|
||||||
|
{
|
||||||
|
hash,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async createMainWindow() {
|
||||||
|
if (this.mainWindow) return;
|
||||||
|
|
||||||
|
const { isMaximized = false, ...configWithoutMaximized } =
|
||||||
|
await this.loadScreenConfig();
|
||||||
|
|
||||||
|
this.updateInitialConfig(configWithoutMaximized);
|
||||||
|
|
||||||
|
this.mainWindow = new BrowserWindow(
|
||||||
|
this.initialConfigInitializationMainWindow
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isMaximized) {
|
||||||
|
this.mainWindow.maximize();
|
||||||
|
}
|
||||||
|
|
||||||
this.mainWindow.webContents.session.webRequest.onBeforeSendHeaders(
|
this.mainWindow.webContents.session.webRequest.onBeforeSendHeaders(
|
||||||
(details, callback) => {
|
(details, callback) => {
|
||||||
|
@ -141,9 +184,26 @@ export class WindowManager {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (this.mainWindow) {
|
||||||
|
const lastBounds = this.mainWindow.getBounds();
|
||||||
|
const isMaximized = this.mainWindow.isMaximized() ?? false;
|
||||||
|
const screenConfig = isMaximized
|
||||||
|
? {
|
||||||
|
x: undefined,
|
||||||
|
y: undefined,
|
||||||
|
height: this.initialConfigInitializationMainWindow.height!,
|
||||||
|
width: this.initialConfigInitializationMainWindow.width!,
|
||||||
|
isMaximized: true,
|
||||||
|
}
|
||||||
|
: { ...lastBounds, isMaximized };
|
||||||
|
|
||||||
|
await this.saveScreenConfig(screenConfig);
|
||||||
|
}
|
||||||
|
|
||||||
if (userPreferences?.preferQuitInsteadOfHiding) {
|
if (userPreferences?.preferQuitInsteadOfHiding) {
|
||||||
app.quit();
|
app.quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowManager.mainWindow?.setProgressBar(-1);
|
WindowManager.mainWindow?.setProgressBar(-1);
|
||||||
WindowManager.mainWindow = null;
|
WindowManager.mainWindow = null;
|
||||||
});
|
});
|
||||||
|
|
|
@ -196,7 +196,6 @@ export function HeroPanelActions() {
|
||||||
{game.favorite ? <HeartFillIcon /> : <HeartIcon />}
|
{game.favorite ? <HeartFillIcon /> : <HeartIcon />}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
onClick={() => setShowGameOptionsModal(true)}
|
onClick={() => setShowGameOptionsModal(true)}
|
||||||
theme="outline"
|
theme="outline"
|
||||||
|
|
|
@ -81,3 +81,11 @@ export interface UserPreferences {
|
||||||
repackUpdatesNotificationsEnabled?: boolean;
|
repackUpdatesNotificationsEnabled?: boolean;
|
||||||
achievementNotificationsEnabled?: boolean;
|
achievementNotificationsEnabled?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ScreenState {
|
||||||
|
x?: number;
|
||||||
|
y?: number;
|
||||||
|
height: number;
|
||||||
|
width: number;
|
||||||
|
isMaximized: boolean;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue