create branch dev and commit code

This commit is contained in:
thanawat saiyota 2026-06-09 10:50:59 +07:00
parent 3b70cc9fe8
commit ea68fa5cc4
44 changed files with 12421 additions and 214 deletions

View file

@ -1,42 +1,73 @@
import { updateMachineStatus } from '../stores/machineInfoStore';
import { addNotification } from '../stores/noti';
import {
loadAndroidRecipeExportFromDevice,
saveAndroidRecipeExportPayload
} from '../services/androidRecipeExportService';
import { handleIncomingMessages } from './messageHandler';
import { setMenuSaved, setMenuSaveError } from '../stores/menuSaveStore';
type AdbPayload = { type: string; payload: any };
async function handleAdbPayload(raw_payload: string) {
console.log('get payload', raw_payload);
console.log('[ADB] Received payload:', raw_payload.slice(0, 300));
try {
const payload: AdbPayload = JSON.parse(raw_payload);
console.log('[ADB] Parsed type:', payload.type, 'payload:', payload.payload);
switch (payload.type) {
case 'log':
let log_level = payload.payload['level'] ?? 'INFO';
let log_message = payload.payload['msg'] ?? '';
if (log_message !== '') addNotification(`${log_level}`);
if (log_message !== '') {
console.log('[ADB LOG]', log_level, log_message);
addNotification(`${log_level}:${log_message}`);
}
break;
case 'response':
if (payload.payload instanceof String) {
if (typeof payload.payload === 'string' || payload.payload instanceof String) {
// single message response
let raw_payload = payload.payload.toString();
if (raw_payload.startsWith('save_recipe_machine')) {
if (
raw_payload.startsWith('save_recipe_machine') ||
raw_payload.startsWith('save_recipe_menu_file')
) {
let res = raw_payload.split('/');
let pd = res[1] ?? '';
let action = res[2] ?? '';
let uiAction = res[3] ?? '';
handleIncomingMessages(
JSON.stringify({
type: 'ui_action',
payload: {
action: uiAction,
from: 'brew',
ref: `${pd}.${action}`
}
})
);
console.log('[ADB] Save response parsed:', { pd, action, uiAction, raw_payload });
// Track menu save status
if (raw_payload.startsWith('save_recipe_menu_file') && pd) {
if (action === 'success' || action === 'ok' || uiAction === 'refreshNow') {
setMenuSaved(pd);
addNotification(`INFO:Menu saved: ${pd}`);
} else if (action === 'error' || action === 'fail') {
setMenuSaveError(pd, 'Save failed');
addNotification(`ERR:Failed to save menu: ${pd}`);
} else {
// Assume success if we get a response
setMenuSaved(pd);
addNotification(`INFO:Menu saved: ${pd}`);
}
}
if (raw_payload.startsWith('save_recipe_machine')) {
handleIncomingMessages(
JSON.stringify({
type: 'ui_action',
payload: {
action: uiAction,
from: 'brew',
ref: `${pd}.${action}`
}
})
);
}
} else if (raw_payload.startsWith('state')) {
let res = raw_payload.split('/');
let new_machine_state = res[1] ?? '';
@ -84,6 +115,39 @@ async function handleAdbPayload(raw_payload: string) {
addNotification(`ERR:${payload.payload}`);
// send message to server if needed
break;
case 'recipe-export':
if (payload.payload?.content) {
saveAndroidRecipeExportPayload({
content: payload.payload.content,
exportedAt: payload.payload.exportedAt,
source: payload.payload.source,
fileSizeBytes: payload.payload.fileSizeBytes,
lineCount: payload.payload.lineCount,
message: payload.payload.message
});
addNotification('INFO:Recipe export received from Android');
} else if (payload.payload?.message) {
addNotification(`ERR:${payload.payload.message}`);
}
break;
case 'recipe-export-ready':
if (payload.payload?.message && payload.payload?.fileSizeBytes === 0) {
addNotification(`ERR:${payload.payload.message}`);
break;
}
void loadAndroidRecipeExportFromDevice({
exportedAt: payload.payload?.exportedAt,
source: payload.payload?.source,
fileSizeBytes: payload.payload?.fileSizeBytes,
lineCount: payload.payload?.lineCount,
message: payload.payload?.message
})
.then(() => addNotification('INFO:Recipe export loaded from Android'))
.catch((error: any) =>
addNotification(`ERR:${error?.message ?? 'Unable to load recipe export from Android'}`)
);
break;
default:
}
} catch (error: any) {