1+ import { useTimeoutPoll } from '@vueuse/core'
12import { computed , ref , useCommand , useStatusBarItem , watchEffect } from 'reactive-vscode'
23import { StatusBarAlignment , ThemeColor , window } from 'vscode'
34import { config } from './config'
@@ -9,33 +10,57 @@ export async function useCrabuMockStatus() {
910 const crabuMockStatus = ref ( false )
1011 const crabuMockStatusError = ref ( false )
1112
12- const statusBarItemText = computed ( ( ) => {
13+ const crabuStatusBarItemText = computed ( ( ) => {
1314 if ( crabuMockStatusError . value )
1415 return 'Crabu 服务异常'
1516
1617 return crabuMockStatus . value ? 'Mock 已启动' : 'Mock 未启动'
1718 } )
1819
19- const statusBarItemColor = computed ( ( ) => {
20+ const crabuStatusBarItemColor = computed ( ( ) => {
2021 return crabuMockStatus . value
2122 ? new ThemeColor ( 'statusBarItem.prominentBackground' )
2223 : undefined
2324 } )
2425
25- const statusBarItemBackgroundColor = computed ( ( ) => {
26+ const crabuStatusBarItemBackgroundColor = computed ( ( ) => {
2627 return crabuMockStatusError . value
2728 ? new ThemeColor ( 'statusBarItem.warningBackground' )
2829 : undefined
2930 } )
3031
31- const statusBarItem = useStatusBarItem ( {
32+ const crabuStatusBarItem = useStatusBarItem ( {
3233 alignment : StatusBarAlignment . Left ,
33- text : statusBarItemText ,
34- color : statusBarItemColor ,
35- backgroundColor : statusBarItemBackgroundColor ,
34+ text : crabuStatusBarItemText ,
35+ color : crabuStatusBarItemColor ,
36+ backgroundColor : crabuStatusBarItemBackgroundColor ,
3637 command : commands . switchMockStatus ,
3738 } )
3839
40+ const aiQueueStatusBarItemText = ref ( '' )
41+ const { pause, resume } = useTimeoutPoll ( updateAiQueueStatus , 1000 )
42+
43+ async function updateAiQueueStatus ( ) {
44+ logger . info ( '更新 AI 队列状态中...' )
45+ const aiQueue = await ofetch < {
46+ processing : number
47+ waiting : number
48+ } > ( `${ config . crabuServerBaseUrl } /mock/template/ai/process` )
49+
50+ if ( aiQueue . processing + aiQueue . waiting === 0 ) {
51+ pause ( )
52+ aiQueueStatusBarItemText . value = ''
53+ return
54+ }
55+ aiQueueStatusBarItemText . value = `$(loading~spin) 进行中 ${ aiQueue . processing } 排队中 ${ aiQueue . waiting } `
56+ }
57+
58+ useStatusBarItem ( {
59+ alignment : StatusBarAlignment . Left ,
60+ text : aiQueueStatusBarItemText ,
61+ color : new ThemeColor ( 'statusBarItem.prominentBackground' ) ,
62+ } )
63+
3964 window . onDidChangeWindowState ( ( e ) => {
4065 if ( e . focused ) {
4166 updateCrabuMockStatus ( )
@@ -61,7 +86,7 @@ export async function useCrabuMockStatus() {
6186 return
6287
6388 isSwitching = true
64- statusBarItem . text = `$(loading~spin) ${ crabuMockStatus . value ? '停止中...' : '启动中...' } `
89+ crabuStatusBarItem . text = `$(loading~spin) ${ crabuMockStatus . value ? '停止中...' : '启动中...' } `
6590 await sleep ( 1000 )
6691 await ofetch ( `${ config . crabuServerBaseUrl } /mock/on` , {
6792 method : 'POST' ,
@@ -71,4 +96,13 @@ export async function useCrabuMockStatus() {
7196
7297 logger . info ( 'Mock 状态更新为:' , crabuMockStatus . value )
7398 } )
99+
100+ useCommand ( commands . updateAiQueueStatus , async ( action : 'start' | 'stop' ) => {
101+ if ( action === 'start' ) {
102+ resume ( )
103+ }
104+ else {
105+ pause ( )
106+ }
107+ } )
74108}
0 commit comments