fix channel reload
This commit is contained in:
@@ -16,6 +16,14 @@ import { whatsAppLoginManager } from '../../utils/whatsapp-login';
|
|||||||
import type { HostApiContext } from '../context';
|
import type { HostApiContext } from '../context';
|
||||||
import { parseJsonBody, sendJson } from '../route-utils';
|
import { parseJsonBody, sendJson } from '../route-utils';
|
||||||
|
|
||||||
|
function scheduleGatewayChannelRestart(ctx: HostApiContext, reason: string): void {
|
||||||
|
if (ctx.gatewayManager.getStatus().state === 'stopped') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ctx.gatewayManager.debouncedRestart();
|
||||||
|
void reason;
|
||||||
|
}
|
||||||
|
|
||||||
async function ensureDingTalkPluginInstalled(): Promise<{ installed: boolean; warning?: string }> {
|
async function ensureDingTalkPluginInstalled(): Promise<{ installed: boolean; warning?: string }> {
|
||||||
const targetDir = join(homedir(), '.openclaw', 'extensions', 'dingtalk');
|
const targetDir = join(homedir(), '.openclaw', 'extensions', 'dingtalk');
|
||||||
const targetManifest = join(targetDir, 'openclaw.plugin.json');
|
const targetManifest = join(targetDir, 'openclaw.plugin.json');
|
||||||
@@ -168,6 +176,7 @@ export async function handleChannelRoutes(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
await saveChannelConfig(body.channelType, body.config);
|
await saveChannelConfig(body.channelType, body.config);
|
||||||
|
scheduleGatewayChannelRestart(ctx, `channel:saveConfig:${body.channelType}`);
|
||||||
sendJson(res, 200, { success: true });
|
sendJson(res, 200, { success: true });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
sendJson(res, 500, { success: false, error: String(error) });
|
sendJson(res, 500, { success: false, error: String(error) });
|
||||||
@@ -179,6 +188,7 @@ export async function handleChannelRoutes(
|
|||||||
try {
|
try {
|
||||||
const body = await parseJsonBody<{ channelType: string; enabled: boolean }>(req);
|
const body = await parseJsonBody<{ channelType: string; enabled: boolean }>(req);
|
||||||
await setChannelEnabled(body.channelType, body.enabled);
|
await setChannelEnabled(body.channelType, body.enabled);
|
||||||
|
scheduleGatewayChannelRestart(ctx, `channel:setEnabled:${body.channelType}`);
|
||||||
sendJson(res, 200, { success: true });
|
sendJson(res, 200, { success: true });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
sendJson(res, 500, { success: false, error: String(error) });
|
sendJson(res, 500, { success: false, error: String(error) });
|
||||||
@@ -203,6 +213,7 @@ export async function handleChannelRoutes(
|
|||||||
try {
|
try {
|
||||||
const channelType = decodeURIComponent(url.pathname.slice('/api/channels/config/'.length));
|
const channelType = decodeURIComponent(url.pathname.slice('/api/channels/config/'.length));
|
||||||
await deleteChannelConfig(channelType);
|
await deleteChannelConfig(channelType);
|
||||||
|
scheduleGatewayChannelRestart(ctx, `channel:deleteConfig:${channelType}`);
|
||||||
sendJson(res, 200, { success: true });
|
sendJson(res, 200, { success: true });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
sendJson(res, 500, { success: false, error: String(error) });
|
sendJson(res, 500, { success: false, error: String(error) });
|
||||||
|
|||||||
@@ -1323,6 +1323,15 @@ function registerGatewayHandlers(
|
|||||||
* For checking package status and channel configuration
|
* For checking package status and channel configuration
|
||||||
*/
|
*/
|
||||||
function registerOpenClawHandlers(gatewayManager: GatewayManager): void {
|
function registerOpenClawHandlers(gatewayManager: GatewayManager): void {
|
||||||
|
const scheduleGatewayChannelRestart = (reason: string): void => {
|
||||||
|
if (gatewayManager.getStatus().state !== 'stopped') {
|
||||||
|
logger.info(`Scheduling Gateway restart after ${reason}`);
|
||||||
|
gatewayManager.debouncedRestart();
|
||||||
|
} else {
|
||||||
|
logger.info(`Gateway is stopped; skip immediate restart after ${reason}`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
async function ensureDingTalkPluginInstalled(): Promise<{ installed: boolean; warning?: string }> {
|
async function ensureDingTalkPluginInstalled(): Promise<{ installed: boolean; warning?: string }> {
|
||||||
const targetDir = join(homedir(), '.openclaw', 'extensions', 'dingtalk');
|
const targetDir = join(homedir(), '.openclaw', 'extensions', 'dingtalk');
|
||||||
const targetManifest = join(targetDir, 'openclaw.plugin.json');
|
const targetManifest = join(targetDir, 'openclaw.plugin.json');
|
||||||
@@ -1485,12 +1494,7 @@ function registerOpenClawHandlers(gatewayManager: GatewayManager): void {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
await saveChannelConfig(channelType, config);
|
await saveChannelConfig(channelType, config);
|
||||||
if (gatewayManager.getStatus().state !== 'stopped') {
|
scheduleGatewayChannelRestart(`channel:saveConfig (${channelType})`);
|
||||||
logger.info(`Scheduling Gateway reload after channel:saveConfig (${channelType})`);
|
|
||||||
gatewayManager.debouncedReload();
|
|
||||||
} else {
|
|
||||||
logger.info(`Gateway is stopped; skip immediate reload after channel:saveConfig (${channelType})`);
|
|
||||||
}
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
pluginInstalled: installResult.installed,
|
pluginInstalled: installResult.installed,
|
||||||
@@ -1506,12 +1510,7 @@ function registerOpenClawHandlers(gatewayManager: GatewayManager): void {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
await saveChannelConfig(channelType, config);
|
await saveChannelConfig(channelType, config);
|
||||||
if (gatewayManager.getStatus().state !== 'stopped') {
|
scheduleGatewayChannelRestart(`channel:saveConfig (${channelType})`);
|
||||||
logger.info(`Scheduling Gateway reload after channel:saveConfig (${channelType})`);
|
|
||||||
gatewayManager.debouncedReload();
|
|
||||||
} else {
|
|
||||||
logger.info(`Gateway is stopped; skip immediate reload after channel:saveConfig (${channelType})`);
|
|
||||||
}
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
pluginInstalled: installResult.installed,
|
pluginInstalled: installResult.installed,
|
||||||
@@ -1519,12 +1518,7 @@ function registerOpenClawHandlers(gatewayManager: GatewayManager): void {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
await saveChannelConfig(channelType, config);
|
await saveChannelConfig(channelType, config);
|
||||||
if (gatewayManager.getStatus().state !== 'stopped') {
|
scheduleGatewayChannelRestart(`channel:saveConfig (${channelType})`);
|
||||||
logger.info(`Scheduling Gateway reload after channel:saveConfig (${channelType})`);
|
|
||||||
gatewayManager.debouncedReload();
|
|
||||||
} else {
|
|
||||||
logger.info(`Gateway is stopped; skip immediate reload after channel:saveConfig (${channelType})`);
|
|
||||||
}
|
|
||||||
return { success: true };
|
return { success: true };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to save channel config:', error);
|
console.error('Failed to save channel config:', error);
|
||||||
@@ -1558,12 +1552,7 @@ function registerOpenClawHandlers(gatewayManager: GatewayManager): void {
|
|||||||
ipcMain.handle('channel:deleteConfig', async (_, channelType: string) => {
|
ipcMain.handle('channel:deleteConfig', async (_, channelType: string) => {
|
||||||
try {
|
try {
|
||||||
await deleteChannelConfig(channelType);
|
await deleteChannelConfig(channelType);
|
||||||
if (gatewayManager.getStatus().state !== 'stopped') {
|
scheduleGatewayChannelRestart(`channel:deleteConfig (${channelType})`);
|
||||||
logger.info(`Scheduling Gateway reload after channel:deleteConfig (${channelType})`);
|
|
||||||
gatewayManager.debouncedReload();
|
|
||||||
} else {
|
|
||||||
logger.info(`Gateway is stopped; skip immediate reload after channel:deleteConfig (${channelType})`);
|
|
||||||
}
|
|
||||||
return { success: true };
|
return { success: true };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to delete channel config:', error);
|
console.error('Failed to delete channel config:', error);
|
||||||
@@ -1586,12 +1575,7 @@ function registerOpenClawHandlers(gatewayManager: GatewayManager): void {
|
|||||||
ipcMain.handle('channel:setEnabled', async (_, channelType: string, enabled: boolean) => {
|
ipcMain.handle('channel:setEnabled', async (_, channelType: string, enabled: boolean) => {
|
||||||
try {
|
try {
|
||||||
await setChannelEnabled(channelType, enabled);
|
await setChannelEnabled(channelType, enabled);
|
||||||
if (gatewayManager.getStatus().state !== 'stopped') {
|
scheduleGatewayChannelRestart(`channel:setEnabled (${channelType}, enabled=${enabled})`);
|
||||||
logger.info(`Scheduling Gateway reload after channel:setEnabled (${channelType}, enabled=${enabled})`);
|
|
||||||
gatewayManager.debouncedReload();
|
|
||||||
} else {
|
|
||||||
logger.info(`Gateway is stopped; skip immediate reload after channel:setEnabled (${channelType})`);
|
|
||||||
}
|
|
||||||
return { success: true };
|
return { success: true };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to set channel enabled:', error);
|
console.error('Failed to set channel enabled:', error);
|
||||||
|
|||||||
Reference in New Issue
Block a user