Source code for ReFreSH.MobileSuit.Core.Middlewares.PromptMiddleware

from typing import List

from ..ISuitMiddleware import ISuitMiddleware, SuitRequestDelegate
from ..Services.AppInfo import ISuitAppInfo
from ..Services.HistoryService import IHistoryService
from ..Services.TaskService import ITaskService
from ..SuitContext import SuitContext
from ...IIOHub import IIOHub
from ...OutputType import OutputType
from ...RequestStatus import RequestStatus
from ...Resources import Lang


[docs] class PromptMiddleware(ISuitMiddleware): """Middleware which provides the prompt output before user input.""" def __init__(self): self.Lang = Lang
[docs] async def InvokeAsync(self, context: SuitContext, nextStep: SuitRequestDelegate) -> None: """Inherited from base class.""" # TODO: CancellationToken # if context.CancellationToken.IsCancellationRequested: # context.RequestStatus = RequestStatus.Interrupt # await next(context) if context.RequestStatus == RequestStatus.NoRequest: io = context.ServiceProvider.GetRequiredService(IIOHub) tasks = context.ServiceProvider.GetRequiredService(ITaskService) history = context.ServiceProvider.GetRequiredService(IHistoryService) info = context.ServiceProvider.GetRequiredService(ISuitAppInfo) prompt: List = [] if tasks.RunningCount > 0: prompt.append((f"{self.Lang.Tasks}{tasks.RunningCount}", io.ColorSetting.SystemColor)) if info.AppName: prompt.append((info.AppName, io.ColorSetting.PromptColor)) if history.Response is not None: prompt.append((history.Response, io.ColorSetting.InformationColor)) prompt.append({ RequestStatus.Ok: (self.Lang.AllOK, io.ColorSetting.OkColor), RequestStatus.NoRequest: (self.Lang.AllOK, io.ColorSetting.OkColor), RequestStatus.Running: (self.Lang.Running, io.ColorSetting.WarningColor), RequestStatus.CommandParsingFailure: (self.Lang.InvalidCommand, io.ColorSetting.ErrorColor), RequestStatus.CommandNotFound: (self.Lang.MemberNotFound, io.ColorSetting.ErrorColor), RequestStatus.Interrupt: (self.Lang.Interrupt, io.ColorSetting.ErrorColor), }.get(history.Status, (self.Lang.OnError, io.ColorSetting.ErrorColor))) io.Write(prompt, OutputType.Prompt) await nextStep(context)