feat: migrate recipe editor

- using eventbus in recipe editor
- migrate to logging instead of console log
- fix case swap not saved, value not update after change, topping slot bug

Signed-off-by: pakintada@gmail.com <Pakin>
This commit is contained in:
pakintada@gmail.com 2026-06-19 17:27:28 +07:00
parent 270faf6b34
commit f0619c5a10
65 changed files with 1600 additions and 557 deletions

View file

@ -1,3 +1,4 @@
import { logger } from '$lib/core/utils/logger';
import { get } from 'svelte/store';
import { updateMachineStatus } from '../stores/machineInfoStore';
import { addNotification } from '../stores/noti';
@ -19,13 +20,13 @@ type AdbPayload = { type: string; payload: any };
let queuedPromises = new Array<Promise<void>>();
async function handleAdbPayload(raw_payload: string) {
// console.log('[ADB] Received payload:', raw_payload.slice(0, 300));
// logger.info('[ADB] Received payload:', raw_payload.slice(0, 300));
const APP_VERSION = env.PUBLIC_APP_SEMVER;
// const bus = useEventBus();
try {
const payload: AdbPayload = JSON.parse(raw_payload);
// console.log('[ADB] Parsed type:', payload.type, 'payload:', payload.payload);
// logger.info('[ADB] Parsed type:', payload.type, 'payload:', payload.payload);
// Emit payload event for terminal drawer payload viewer
GlobalEventBus.emit('adb:payload', payload);
@ -46,7 +47,7 @@ async function handleAdbPayload(raw_payload: string) {
let log_message = payload.payload['msg'] ?? '';
if (log_message !== '') {
console.log('[ADB LOG]', log_level, log_message);
logger.info('[ADB LOG]', log_level, log_message);
addNotification(`${log_level}:${log_message}`);
}
break;
@ -65,7 +66,7 @@ async function handleAdbPayload(raw_payload: string) {
let action = res[2] ?? '';
let uiAction = res[3] ?? '';
console.log('[ADB] Save response parsed:', { pd, action, uiAction, raw_payload });
// logger.info('[ADB] Save response parsed:', { pd, action, uiAction, raw_payload });
// Track menu save status
if (raw_payload.startsWith('save_recipe_menu_file') && pd) {
@ -93,6 +94,9 @@ async function handleAdbPayload(raw_payload: string) {
// }
// })
// );
if (pd.length > 0) {
setMenuSaved(pd);
}
}
} else if (raw_payload.startsWith('state')) {
let res = raw_payload.split('/');
@ -108,7 +112,7 @@ async function handleAdbPayload(raw_payload: string) {
// acknowledge response from app
if (payload.payload !== 'OK') {
// abnormal
console.error('error from ACK', payload.payload);
logger.error('error from ACK', payload.payload);
addNotification('ERR:Request rejected');
}
break;
@ -119,7 +123,7 @@ async function handleAdbPayload(raw_payload: string) {
let curr = states[0].replace('MACHINE_STATE_', '');
let next = states[1].replace('MACHINE_STATE_', '');
console.log('current state', curr, 'next state', next);
logger.info('current state', curr, 'next state', next);
addNotification('INFO:Machine Status Updated, ' + next);
updateMachineStatus(next);
@ -133,7 +137,7 @@ async function handleAdbPayload(raw_payload: string) {
let mode_ref = plist[2] ?? '';
// update recipe data store
console.log('brewing finish', pd, 'total time', total_time);
logger.info('brewing finish', pd, 'total time', total_time);
// update recipe from brew now
let recipeDevSnapshot = get(recipeFromMachineQuery) ?? {};
@ -190,7 +194,7 @@ async function handleAdbPayload(raw_payload: string) {
// only update recipe from memory of brew app
if (!semver.satisfies(APP_VERSION, '^0.0.3')) {
// reject
console.log('unsupported version');
logger.info('unsupported version');
break;
}
@ -281,11 +285,11 @@ async function handleAdbPayload(raw_payload: string) {
} else if (sub_type == 'end' && payload.payload.includes('finish')) {
let force_reload = payload.payload.includes('reload');
console.log('queued recipes: ', queuedPromises.length);
logger.info('queued recipes: ', queuedPromises.length);
if (queuedPromises.length > 0) {
try {
await Promise.all(queuedPromises);
console.log('clear all recipe promises');
logger.info('clear all recipe promises');
queuedPromises = new Array();
GlobalEventBus.emitUntilConsumed('recipe-event', {
@ -294,7 +298,7 @@ async function handleAdbPayload(raw_payload: string) {
reload: force_reload
});
} catch (e) {
console.error('some promise failed: ', e);
logger.error('some promise failed: ', e);
GlobalEventBus.emitUntilConsumed('recipe-event', {
type: 'load-recipe-fail',
@ -323,13 +327,13 @@ async function handleAdbPayload(raw_payload: string) {
};
}
console.log('checking add mat', recipeRawFromMachine);
// logger.info('checking add mat', recipeRawFromMachine);
recipeFromMachine.set(recipeRawFromMachine);
} else if (sub_type == 'toppings') {
let recipeRawFromMachine = get(recipeFromMachine);
let topping_raw = JSON.parse(payload.payload);
console.log('receive topping', topping_raw);
logger.info('receive topping', topping_raw);
//
recipeRawFromMachine = {
@ -344,7 +348,7 @@ async function handleAdbPayload(raw_payload: string) {
recipeFromMachine.set(recipeRawFromMachine);
} else {
// unhandled sub type
console.log('unhandled sub type', payload);
logger.info('unhandled sub type', payload);
}
break;