Skip to content

Commit 1697824

Browse files
committed
修復タイマーを実装
1 parent 06675d8 commit 1697824

17 files changed

+302
-16
lines changed

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
"jstorm": "^0.17.0",
2020
"react": "^18.2.0",
2121
"react-dom": "^18.2.0",
22-
"react-router-dom": "^6.17.0"
22+
"react-router-dom": "^6.17.0",
23+
"tesseract.js": "^5.1.1"
2324
},
2425
"devDependencies": {
2526
"@testing-library/jest-dom": "^6.5.0",

pnpm-lock.yaml

+98
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/background.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ chrome.notifications.onClicked.addListener(onClicked.listener());
1919
// queueを見てるcronを起動
2020
chrome.alarms.create('/cron/queues', { periodInMinutes: 0.5 });
2121

22-
import { Launcher } from "./services/Launcher";
23-
import { Frame } from "./models/Frame";
24-
(async () => {
25-
const launcher = new Launcher();
26-
const frame = await Frame.memory();
27-
launcher.launch(frame);
28-
})();
22+
// import { Launcher } from "./services/Launcher";
23+
// import { Frame } from "./models/Frame";
24+
// (async () => {
25+
// const launcher = new Launcher();
26+
// const frame = await Frame.memory();
27+
// launcher.launch(frame);
28+
// })();
29+
30+

src/controllers/Message.ts

+18-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1-
import { Router } from "chromite";
1+
import { Logger, Router } from "chromite";
22
import { Frame } from "../models/Frame";
3+
import { type Page } from "tesseract.js";
4+
import { EntryType, Recovery } from "../models/entry";
5+
import { H, M, S, sleep } from "../utils";
6+
import Queue from "../models/Queue";
7+
import { TriggerType } from "../models/entry/Base";
38

49
const onMessage = new Router<chrome.runtime.ExtensionMessageEvent>();
510

@@ -8,4 +13,16 @@ onMessage.on("/frame/memory:track", async (req) => {
813
return await frame.update({ position: req.position, size: req.size });
914
});
1015

16+
onMessage.on("/injected/dmm/ocr:result", async (req) => {
17+
const data = req.data as Page;
18+
const dock = req[EntryType.RECOVERY].dock;
19+
const [h, m, s] = data.text.split(":").map(Number);
20+
new Logger("ocr").info({ h, m, s });
21+
const r = new Recovery(dock, (h * H + m * M + s * S));
22+
await Queue.create({ type: EntryType.RECOVERY, params: r, scheduled: Date.now() + r.time });
23+
await chrome.notifications.create(r.$n.id(TriggerType.START), r.$n.options(TriggerType.START));
24+
await sleep(6 * 1000);
25+
await chrome.notifications.clear(r.$n.id(TriggerType.START));
26+
});
27+
1128
export { onMessage };

src/controllers/WebRequest/datatypes.ts

+6
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,9 @@ export interface MissionStartFormData {
88
// api_token: string[];
99
// api_verno: string[];
1010
}
11+
12+
export interface RecoveryStartFormData {
13+
api_highspeed: string[];
14+
api_ndock_id: string[];
15+
api_ship_id: string[];
16+
}

src/controllers/WebRequest/index.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
import { Router } from "chromite";
1+
import {
2+
// Logger,
3+
Router,
4+
} from "chromite";
25

36
import {
47
onPort,
58
onMissionStart,
69
onMissionReturnInstruction,
710
onMissionResult,
11+
onRecoveryStart,
812
} from "./kcsapi";
913

1014
const onBeforeRequest = new Router<chrome.webRequest.WebRequestBodyEvent>(async (details) => {
@@ -16,6 +20,7 @@ onBeforeRequest.on("/kcsapi/api_port/port", onPort);
1620
onBeforeRequest.on("/kcsapi/api_req_mission/start", onMissionStart); // 遠征に出したとき
1721
onBeforeRequest.on("/kcsapi/api_req_mission/return_instruction", onMissionReturnInstruction); // 遠征帰還命令出したとき
1822
onBeforeRequest.on("/kcsapi/api_req_mission/result", onMissionResult); // 遠征結果の回収をしたとき
23+
onBeforeRequest.on("/kcsapi/api_req_nyukyo/start", onRecoveryStart); // 修復用の入渠をしようとしたとき
1924

2025
onBeforeRequest.onNotFound(async (
2126
// detail: chrome.webRequest.WebRequestBodyDetails,

src/controllers/WebRequest/kcsapi.ts

+15-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import { Logger } from "chromite";
22
import { missions } from "../../catalog";
33
import { sleep } from "../../utils";
44
import Queue from "../../models/Queue";
5-
import { MissionStartFormData } from "./datatypes";
5+
import { MissionStartFormData, RecoveryStartFormData } from "./datatypes";
66
import { EntryType, Mission } from "../../models/entry";
77
import { TriggerType } from "../../models/entry/Base";
8+
import { TabService } from "../../services/TabService";
89

910
const log = new Logger("WebRequest");
1011

@@ -29,4 +30,16 @@ export async function onMissionReturnInstruction(details: chrome.webRequest.WebR
2930

3031
export async function onMissionResult(details: chrome.webRequest.WebRequestBodyDetails) {
3132
log.info("onMissionResult", details);
32-
}
33+
}
34+
35+
export async function onRecoveryStart(details: chrome.webRequest.WebRequestBodyDetails) {
36+
const data = details.requestBody?.formData as unknown as RecoveryStartFormData;
37+
const dock = data.api_ndock_id[0];
38+
const tab = await new TabService().get(details.tabId);
39+
const url = await chrome.tabs.captureVisibleTab(tab.windowId, { format: "jpeg" });
40+
await chrome.tabs.sendMessage(details.tabId, {
41+
__action__: "/injected/dmm/ocr",
42+
url, purpose: EntryType.RECOVERY,
43+
[EntryType.RECOVERY]: { dock }
44+
});
45+
}

0 commit comments

Comments
 (0)