Skip to content

Commit

Permalink
Merge branch 'main' into feature/#2011
Browse files Browse the repository at this point in the history
  • Loading branch information
jdkfx authored Jan 20, 2025
2 parents 6f7c945 + 7b1f36d commit ea58503
Show file tree
Hide file tree
Showing 44 changed files with 485 additions and 183 deletions.
7 changes: 5 additions & 2 deletions build/installer_linux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,12 @@ elif command -v 7zr &> /dev/null; then
elif command -v 7za &> /dev/null; then
# CentOS/Fedora
COMMAND_7Z=7za
elif command -v 7zz &> /dev/null; then
# Official 7zip
COMMAND_7Z=7zz
else
cat << 'EOS' && exit 1
[!] Command '7z', '7zr' or '7za' not found
[!] Command '7z', '7zr', '7za' or '7zz' not found
Required to extract compressed files
Expand All @@ -115,7 +118,7 @@ Or
sudo yum install p7zip
Arch Linux:
sudo pacman -S p7zip
sudo pacman -S 7zip
MacOS:
brew install p7zip
Expand Down
7 changes: 7 additions & 0 deletions public/updateInfos.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
[
{
"version": "0.22.4",
"descriptions": [
"ソング:トークエディタを開かないと保存できない問題を修正"
],
"contributors": ["sigprogramming"]
},
{
"version": "0.22.3",
"descriptions": ["キャラクター「ぞん子」を追加"],
Expand Down
2 changes: 1 addition & 1 deletion src/backend/browser/fakePath.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { uuid4 } from "@/helpers/random";

const fakePathSchema = z
.string()
.regex(/^<browser-dummy-[0-9a-f]+>-.+$/)
.regex(/^<browser-dummy-[-0-9a-f]+>-.+$/)
.brand("FakePath");
export type FakePath = z.infer<typeof fakePathSchema>;

Expand Down
2 changes: 1 addition & 1 deletion src/backend/browser/fileImpl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { openDB } from "./browserConfig";
import { createFakePath, FakePath, isFakePath } from "./fakePath";
import { SandboxKey } from "@/type/preload";
import { failure, success } from "@/type/result";
import { createLogger } from "@/domain/frontend/log";
import { createLogger } from "@/helpers/log";
import { normalizeError } from "@/helpers/normalizeError";
import path from "@/helpers/path";
import { ExhaustiveError } from "@/type/utility";
Expand Down
4 changes: 3 additions & 1 deletion src/backend/electron/engineAndVvppController.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import path from "path";
import fs from "fs";
import { ReadableStream } from "node:stream/web";
import log from "electron-log/main";
import { dialog } from "electron";

import { getConfigManager } from "./electronConfig";
Expand All @@ -24,6 +23,9 @@ import {
} from "@/domain/defaultEngine/latetDefaultEngine";
import { loadEnvEngineInfos } from "@/domain/defaultEngine/envEngineInfo";
import { UnreachableError } from "@/type/utility";
import { createLogger } from "@/helpers/log";

const log = createLogger("EngineAndVvppController");

/**
* エンジンとVVPP周りの処理の流れを制御するクラス。
Expand Down
4 changes: 3 additions & 1 deletion src/backend/electron/fileHelper.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import fs from "fs";
import log from "electron-log/main";
import { moveFileSync } from "move-file";
import { uuid4 } from "@/helpers/random";
import { createLogger } from "@/helpers/log";

const log = createLogger("fileHelper");

/**
* 書き込みに失敗したときにファイルが消えないように、
Expand Down
4 changes: 3 additions & 1 deletion src/backend/electron/ipc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import {
IpcMainInvokeEvent,
IpcRendererEvent,
} from "electron";
import log from "electron-log/main";
import { IpcIHData, IpcSOData } from "@/type/ipc";
import { createLogger } from "@/helpers/log";

const log = createLogger("ipc");

export type IpcRendererInvoke = {
[K in keyof IpcIHData]: (
Expand Down
17 changes: 10 additions & 7 deletions src/backend/electron/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { pathToFileURL } from "url";
import { app, dialog, Menu, nativeTheme, net, protocol, shell } from "electron";
import installExtension, { VUEJS_DEVTOOLS } from "electron-devtools-installer";

import log from "electron-log/main";
import electronLog from "electron-log/main";
import dayjs from "dayjs";
import { hasSupportedGpu } from "./device";
import {
Expand Down Expand Up @@ -39,6 +39,7 @@ import {
TextAsset,
} from "@/type/preload";
import { isMac } from "@/helpers/platform";
import { createLogger } from "@/helpers/log";

type SingleInstanceLockData = {
filePath: string | undefined;
Expand Down Expand Up @@ -88,16 +89,18 @@ if (!isDevelopment) {
configMigration014({ fixedUserDataDir, beforeUserDataDir }); // 以前のファイルがあれば持ってくる
}

log.initialize({ preload: false });
electronLog.initialize({ preload: false });
// silly以上のログをコンソールに出力
log.transports.console.format = "[{h}:{i}:{s}.{ms}] [{level}] {text}";
log.transports.console.level = "silly";
electronLog.transports.console.format = "[{h}:{i}:{s}.{ms}] [{level}] {text}";
electronLog.transports.console.level = "silly";

// warn以上のログをファイルに出力
const prefix = dayjs().format("YYYYMMDD_HHmmss");
log.transports.file.format = "[{h}:{i}:{s}.{ms}] [{level}] {text}";
log.transports.file.level = "warn";
log.transports.file.fileName = `${prefix}_error.log`;
electronLog.transports.file.format = "[{h}:{i}:{s}.{ms}] [{level}] {text}";
electronLog.transports.file.level = "warn";
electronLog.transports.file.fileName = `${prefix}_error.log`;

const log = createLogger("main");

if (errorForRemoveBeforeUserDataDir != undefined) {
log.error(errorForRemoveBeforeUserDataDir);
Expand Down
4 changes: 3 additions & 1 deletion src/backend/electron/manager/RuntimeInfoManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
*/

import AsyncLock from "async-lock";
import log from "electron-log/main";
import type { AltPortInfos } from "@/store/type";
import { EngineId, EngineInfo } from "@/type/preload";
import { writeFileSafely } from "@/backend/electron/fileHelper";
import { createEngineUrl } from "@/domain/url";
import { createLogger } from "@/helpers/log";

const log = createLogger("RuntimeInfoManager");

/**
* ランタイム情報書き出しに必要なEngineInfo
Expand Down
11 changes: 6 additions & 5 deletions src/backend/electron/manager/engineInfoManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import shlex from "shlex";

import { dialog } from "electron"; // FIXME: ここでelectronをimportするのは良くない

import log from "electron-log/main";

import { getConfigManager } from "../electronConfig";
import {
EngineInfo,
Expand All @@ -17,6 +15,9 @@ import {
import { AltPortInfos } from "@/store/type";
import { loadEnvEngineInfos } from "@/domain/defaultEngine/envEngineInfo";
import { failure, Result, success } from "@/type/result";
import { createLogger } from "@/helpers/log";

const log = createLogger("EngineInfoManager");

/** 利用可能なエンジンの情報を管理するクラス */
export class EngineInfoManager {
Expand Down Expand Up @@ -109,15 +110,15 @@ export class EngineInfoManager {
for (const dirName of fs.readdirSync(this.vvppEngineDir)) {
const engineDir = path.join(this.vvppEngineDir, dirName);
if (!fs.statSync(engineDir).isDirectory()) {
log.log(`${engineDir} is not directory`);
log.info(`${engineDir} is not directory`);
continue;
}
if (dirName === ".tmp") {
continue;
}
const result = this.loadEngineInfo(engineDir, "vvpp");
if (!result.ok) {
log.log(`Failed to load engine: ${result.code}, ${engineDir}`);
log.info(`Failed to load engine: ${result.code}, ${engineDir}`);
continue;
}
engineInfos.push(result.value);
Expand All @@ -135,7 +136,7 @@ export class EngineInfoManager {
for (const engineDir of configManager.get("registeredEngineDirs")) {
const result = this.loadEngineInfo(engineDir, "path");
if (!result.ok) {
log.log(`Failed to load engine: ${result.code}, ${engineDir}`);
log.error(`Failed to load engine: ${result.code}, ${engineDir}`);
// 動かないエンジンは追加できないので削除
// FIXME: エンジン管理UIで削除可能にする
dialog.showErrorBox(
Expand Down
4 changes: 3 additions & 1 deletion src/backend/electron/manager/engineProcessManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import treeKill from "tree-kill";

import { app, dialog } from "electron"; // FIXME: ここでelectronをimportするのは良くない

import log from "electron-log/main";
import {
findAltPort,
getPidFromPort,
Expand All @@ -16,6 +15,9 @@ import {
import { getConfigManager } from "../electronConfig";
import { getEngineInfoManager } from "./engineInfoManager";
import { EngineId, EngineInfo } from "@/type/preload";
import { createLogger } from "@/helpers/log";

const log = createLogger("EngineProcessManager");

type EngineProcessContainer = {
willQuitEngine: boolean;
Expand Down
28 changes: 15 additions & 13 deletions src/backend/electron/manager/vvppManager.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import fs from "fs";
import path from "path";
import { spawn } from "child_process";
import log from "electron-log/main";
import { moveFile } from "move-file";
import { app, dialog } from "electron";
import MultiStream from "multistream";
Expand All @@ -15,6 +14,9 @@ import {
MinimumEngineManifestType,
} from "@/type/preload";
import { errorToMessage } from "@/helpers/errorHelper";
import { createLogger } from "@/helpers/log";

const log = createLogger("VvppManager");

const isNotWin = process.platform !== "win32";

Expand All @@ -40,7 +42,7 @@ async function getArchiveFileParts(
let archiveFileParts: string[];
// 名前.数値.vvpppの場合は分割されているとみなして連結する
if (vvppLikeFilePath.match(/\.[0-9]+\.vvppp$/)) {
log.log("vvpp is split, finding other parts...");
log.info("vvpp is split, finding other parts...");
const vvpppPathGlob = vvppLikeFilePath
.replace(/\.[0-9]+\.vvppp$/, ".*.vvppp")
.replace(/\\/g, "/"); // node-globはバックスラッシュを使えないので、スラッシュに置換する
Expand All @@ -49,7 +51,7 @@ async function getArchiveFileParts(
if (!p.match(/\.[0-9]+\.vvppp$/)) {
continue;
}
log.log(`found ${p}`);
log.info(`found ${p}`);
filePaths.push(p);
}
filePaths.sort((a, b) => {
Expand All @@ -62,7 +64,7 @@ async function getArchiveFileParts(
});
archiveFileParts = filePaths;
} else {
log.log("Not a split file");
log.info("Not a split file");
archiveFileParts = [vvppLikeFilePath];
}
return archiveFileParts;
Expand All @@ -75,12 +77,12 @@ async function concatenateVvppFiles(
) {
// -siオプションでの7z解凍はサポートされていないため、
// ファイルを連結した一次ファイルを作成し、それを7zで解凍する。
log.log(`Concatenating ${archiveFileParts.length} files...`);
log.info(`Concatenating ${archiveFileParts.length} files...`);
const tmpConcatenatedFile = path.join(
app.getPath("temp"),
`vvpp-${new Date().getTime()}.${format}`,
);
log.log("Temporary file:", tmpConcatenatedFile);
log.info("Temporary file:", tmpConcatenatedFile);
await new Promise<void>((resolve, reject) => {
if (!tmpConcatenatedFile) throw new Error("tmpFile is undefined");
const inputStreams = archiveFileParts.map((f) => fs.createReadStream(f));
Expand All @@ -93,7 +95,7 @@ async function concatenateVvppFiles(
})
.on("error", reject);
});
log.log("Concatenated");
log.info("Concatenated");
return tmpConcatenatedFile;
}

Expand Down Expand Up @@ -123,7 +125,7 @@ async function unarchive(
if (import.meta.env.PROD) {
sevenZipPath = path.join(path.dirname(app.getPath("exe")), sevenZipPath);
}
log.log("Spawning 7z:", sevenZipPath, args.join(" "));
log.info("Spawning 7z:", sevenZipPath, args.join(" "));
await new Promise<void>((resolve, reject) => {
const child = spawn(sevenZipPath, args, {
stdio: ["pipe", "pipe", "pipe"],
Expand Down Expand Up @@ -253,8 +255,8 @@ export class VvppManager {
if (!format) {
throw new Error(`Unknown file format: ${archiveFileParts[0]}`);
}
log.log("Format:", format);
log.log("Extracting vvpp to", outputDir);
log.info("Format:", format);
log.info("Extracting vvpp to", outputDir);
try {
let tmpConcatenatedFile: string | undefined;
let archiveFile: string;
Expand All @@ -267,13 +269,13 @@ export class VvppManager {
archiveFile = tmpConcatenatedFile;
} else {
archiveFile = archiveFileParts[0];
log.log("Single file, not concatenating");
log.info("Single file, not concatenating");
}

await unarchive({ archiveFile, outputDir, format }, callbacks);
} finally {
if (tmpConcatenatedFile) {
log.log("Removing temporary file", tmpConcatenatedFile);
log.info("Removing temporary file", tmpConcatenatedFile);
await fs.promises.rm(tmpConcatenatedFile);
}
}
Expand All @@ -292,7 +294,7 @@ export class VvppManager {
};
} catch (e) {
if (fs.existsSync(outputDir)) {
log.log("Failed to extract vvpp, removing", outputDir);
log.info("Failed to extract vvpp, removing", outputDir);
await fs.promises.rm(outputDir, { recursive: true });
}
throw e;
Expand Down
4 changes: 3 additions & 1 deletion src/backend/electron/manager/windowManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@ import {
OpenDialogSyncOptions,
SaveDialogOptions,
} from "electron";
import log from "electron-log/main";
import windowStateKeeper from "electron-window-state";
import { getConfigManager } from "../electronConfig";
import { getEngineAndVvppController } from "../engineAndVvppController";
import { ipcMainSendProxy } from "../ipc";
import { isMac } from "@/helpers/platform";
import { themes } from "@/domain/theme";
import { createLogger } from "@/helpers/log";

const log = createLogger("WindowManager");

type WindowManagerOption = {
appStateGetter: () => { willQuit: boolean };
Expand Down
4 changes: 3 additions & 1 deletion src/backend/electron/portHelper.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { execFileSync } from "child_process";
import { createServer } from "net";
import log from "electron-log/main";
import { createLogger } from "@/helpers/log";

const log = createLogger("portHelper");

const isWindows = process.platform === "win32";

Expand Down
1 change: 1 addition & 0 deletions src/components/Base/BaseListItem.vue
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ defineEmits<{
border: none;
padding: vars.$padding-1 vars.$padding-2;
border-radius: vars.$radius-1;
text-align: left;
&:not(.selected):hover {
background-color: colors.$clear-hovered;
Expand Down
Loading

0 comments on commit ea58503

Please sign in to comment.