Skip to content

接口说明

Serein edited this page Aug 31, 2024 · 14 revisions

Important

如果需要更多公共接口,请提交 issue 请求,请勿直接修改

UI (Slint) 接口

Token ui/global.slint

property:

  • is-darkmode (out bool)
  • surrealism-ui-default-theme (out Themes) surrealism 组件主题
  • image 详见 ui/assets/image/image_token.slint
  • font 详见 ui/logic/style_token.slint
  • color 详见 ui/logic/style_token.slint

function:

  • set-display-mode(ColorScheme)
  • switch-display-mode() 切换日夜模式

ViewManager ui/logic/index.slint

function:

  • navigate-to(ViewName): 与Controller接口同义,下同
  • clean-navigate-to(ViewName)
  • replace-navigate-to(ViewName)
  • prior-view()

ViewName (enum):

  • DiscoveryPage
  • SearchPage
  • HistoryPage
  • MyEventPage
  • DetailPage
  • AboutPage
  • SettingPage
  • LoginOverlay
  • MenuOverlay

AccountManager ui/logic/index.slint

property:

  • is-login (out bool)

function:

  • request-login(): 与Controller接口同义,下同
  • request-logout()

MessageManager ui/logic/index.slint

function:

  • show-message(string, MessageType)

MessageType (enum):

  • Info
  • Warning
  • Error

Controller 接口

请勿自行创建 manager 及 view 的实例

UiBridge

拥有各 manager 和 view,C++层的桥梁,每个类都会存在一个对 UiBridge 的引用

  • getViewManager()
  • getAccountManager()
  • getMessageManager()
  • template<typename ViewType> T& getView(ViewName target)

ViewManager

负责管理窗口的显示,负责调用部分 on* 接口

  • navigateTo(ViewName newView)
  • cleanNavigateTo(ViewName newView)
  • replaceNavigateTo(ViewName newView)
  • priorView()
  • isVisible(ViewName target)

AccountManager

负责登录请求和刷新 Token,负责调用部分 on* 接口

  • isLogin()
  • requestLogin()
  • requestLogout()
  • getUserInfo()

MessageManager

负责在 UI 层展示信息,最好不要太长

  • showMessage(std::string content,MessageType type,std::chrono::milliseconds timeout)
    • type: 与 MessageManager 中要求的 MessageType 相同
    • timeout: 信息显示的时长

BasicView

每个 view 均将 BasicView 作为基类,继承8个接口,会在相应时间被调用,保证在主线程上调用,详细请见 src/Controller/Core/BasicView.h

  • onCreate()
  • onStart()
  • onLogin()
  • onShow()
  • onHide()
  • onLogout()
  • onStop()
  • onDestroy()

GlobalAgent

模板类,作为基类,提供访问对应 global 的能力,重载了 ->,使用方式:

auto& self = *this;
self->(some functions here)

AsyncExecutor

包含头文件 Controller/AsyncExectuor.hh,该类允许在普通函数中调用协程并在协程完成时 在主线程中 调用回调。

使用单例指针 evento::executor() 调用内部公有方法

  • template<typename T, typename CompletionCallback>
    void asyncExecute(Task<T> task, CompletionCallback&& callback);
    • task: Awaiter,即形如 coro() 协程的 调用,可使用 &&|| 重载 同时 调用多个协程
    • callback: void(T) 类型的 函数对象T 为协程返回类型,协程完成时在主线程被调用
  • template<typename TaskFunc, typename CompletionCallback>
    void asyncExecute(TaskFunc&& func, 
                      CompletionCallback&& callback,
                      std::chrono::steady_clock::duration interval,
                      int flag = TimerFlag::Immediate | TimerFlag::Periodic);
    • funcTask<void>() 类型的 函数对象,本函数会根据flag以相应的模式完成对func的定时调用

    • callback: void(T) 类型的 函数对象T 为协程返回类型,协程完成时在主线程被调用

    • flag: 一个枚举值,用以明确定时任务的执行模式

      • Once: 只执行一次任务
      • Periodic: 每隔 interval 时间执行一次任务
      • Immediate: 调用时执行第一次任务
      • Delay: 调用后 interval 时间执行第一次任务

      执行策略 必须 使用 | 符号组合两种枚举值,断言禁止出现 Once | PeriodicImmediate | Delay 两种特定组合

System Tray

包含头文件 Infrastructure/IPC/SocketClient.h

可以使用系统托盘进行系统消息推送,使用 evento::ipc() 全局单例对象和系统托盘通信,可使用的接口如下:

startTray():开始执行托盘子进程,并建立 socket 连接

exitTray():托盘退出

showOrUpdateMessage(int messageId, std::string const& message, std::chrono::steady_clock::time_point time):在 time 时刻进行消息推送,对于同一个消息id,多次调用等同修改消息内容和消息推送时间

cancelMessage(int messageId):取消指定消息的推送任务