54 QOhosJsState(
const QOhosJsState &) =
delete;
55 QOhosJsState &operator=(
const QOhosJsState &) =
delete;
57 virtual ~QOhosJsState();
59 virtual napi_env env() = 0;
61 virtual QNapi::Object defaultWindowStageOrEmpty() = 0;
62 virtual QNapi::Object defaultUiContextOrEmpty() = 0;
64 virtual std::optional<QNapi::Object> tryGetJsWindowByQWindow(QtOhos::QObjectThreadSafeRef qwindow) = 0;
65 virtual std::optional<QNapi::Object> tryGetQAbilityByQWindow(QtOhos::QObjectThreadSafeRef qwindow) = 0;
66 virtual std::optional<QNapi::Object> defaultQAbility() = 0;
68 virtual QNapi::Object appLaunchWant() = 0;
69 virtual std::optional<QNapi::Object> optAppLaunchParam() = 0;
71 virtual void startAppProcess(
72 const std::string &processId, QNapi::Object requestWant,
73 QNapi::Object optStartOptions, std::function<
void(QOhosJsState &)> continueFunc) = 0;
75 virtual void startNoUiChildProcess(
const std::string &libraryName,
const std::vector<std::string> &args) = 0;
77 virtual void addNewWantConsumer(
78 QOhosConsumer<QOhosJsState &, QNapi::Object, QNapi::Object> wantConsumer) = 0;
81 virtual void setOnContinueRequestsHandler(
82 QNapi::Object qAbility,
83 std::function<
void(QOhosJsState &, QNapi::Object, QOhosConsumer<QOhosJsState &, QNapi::Number>)> requestsHandler) = 0;
85 virtual void setDestroyFromSystemAllowed(QNapi::Object qAbility,
bool destroyAllowed) = 0;
87 template<
typename T = QNapi::Value>
88 T eval(
const std::string &expr,
const std::vector<QNapi::ValueWrapper> &exprArgs = {});
90 QNapi::Promise evalToPromiseOrRejectOnThrow(
91 const std::string &expr,
const std::vector<QNapi::ValueWrapper> &exprArgs = {});
93 template<
typename Enum>
94 QNapi::Number mapOhosEnumToJs(Enum enumValue);
96 template<
typename Enum>
97 std::optional<Enum> tryMapOhosEnumFromJs(QNapi::Number enumJsValue);
99 template<
typename Enum>
100 Enum mapOhosEnumFromJs(QNapi::Number enumJsValue);
105 std::string fullTypeName;
106 std::vector<std::pair<
int,
const char *>> enumeratorsNames;
112 template<
typename Enum,
typename =
void>
113 struct OhosEnumFullTypeNameFetcher
115 static std::string fullTypeName()
117 return QtOhos::OhosEnumMeta<Enum>::moduleName + std::string(
".") + QtOhos::OhosEnumMeta<Enum>::typeName;
121 template<
typename Enum>
122 struct OhosEnumFullTypeNameFetcher<Enum,
decltype(
static_cast<
void>(&QtOhos::OhosEnumMeta<Enum>::fullTypeName))>
124 static std::string fullTypeName()
126 return QtOhos::OhosEnumMeta<Enum>::fullTypeName;
130 template<
typename Enum>
131 static OhosEnumInfo makeOhosEnumInfo();
133 virtual std::tuple<QNapi::Object, std::string> extractModuleFromEvalExpr(
const std::string &expr) = 0;
134 virtual QNapi::Number mapOhosEnumToJs(
int enumValue,
const std::type_info &enumTypeInfo, OhosEnumInfo (*ohosEnumInfoFactory)()) = 0;
135 virtual std::optional<
int> tryMapOhosEnumFromJs(QNapi::Number enumJsValue,
const std::type_info &enumTypeInfo, OhosEnumInfo (*ohosEnumInfoFactory)()) = 0;
136 virtual int mapOhosEnumFromJs(QNapi::Number enumJsValue,
const std::type_info &enumTypeInfo, OhosEnumInfo (*ohosEnumInfoFactory)()) = 0;
149Q_CORE_EXPORT
void invoke(std::function<
void(QOhosJsState &)> task);
152 std::function<
void(QOhosJsState &, QOhosTaskPromise<>)> &&task,
153 std::string callerContextName = {});
156 const std::function<
void(QOhosJsState &)> &task,
157 std::string callerContextName = {});
159template<
typename Func>
160auto eval(Func &&func,
std::string callerContextName = {})
165 std::function<
void(QOhosJsState &, QOhosTaskPromise<T>)> evalFunc,
166 std::string callerContextName = {});
171T
evalWithConsumer(std::function<
void(QOhosJsState &, std::function<
void(T)>)> evalFunc);
178 virtual ~QOhosJsThreadOps();
180 virtual QOhosJsState &jsState() = 0;
182 virtual void invoke(std::function<
void(QOhosJsState &)> task) = 0;
183 virtual void invokeAndWaitForContinue(
184 std::function<
void(QOhosJsState &, QOhosTaskPromise<>)> &&task,
185 std::string callerContextName) = 0;
186 virtual void runAndWait(
187 const std::function<
void(QOhosJsState &)> &task,
188 std::string callerContextName) = 0;
190 static void registerInstance(QOhosJsThreadOps *ops);
191 static QOhosJsThreadOps &instance();