53 QOhosJsState(
const QOhosJsState &) =
delete;
54 QOhosJsState &operator=(
const QOhosJsState &) =
delete;
56 virtual ~QOhosJsState();
58 virtual napi_env env() = 0;
60 virtual QNapi::Object defaultWindowStageOrEmpty() = 0;
61 virtual QNapi::Object defaultUiContextOrEmpty() = 0;
63 virtual std::optional<QNapi::Object> tryGetJsWindowByQWindow(QtOhos::QObjectThreadSafeRef qwindow) = 0;
64 virtual std::optional<QNapi::Object> tryGetQAbilityByQWindow(QtOhos::QObjectThreadSafeRef qwindow) = 0;
65 virtual std::optional<QNapi::Object> defaultQAbility() = 0;
67 virtual QNapi::Object appLaunchWant() = 0;
68 virtual std::optional<QNapi::Object> optAppLaunchParam() = 0;
71 virtual std::optional<QNapi::Object> tryGetModule(
const std::string &moduleName) = 0;
74 std::enable_if_t<std::is_default_constructible<T>::value, T> &getAttachedObjectWithLazyCreate();
76 virtual void startAppProcess(
77 const std::string &processId, QNapi::Object requestWant,
78 QNapi::Object optStartOptions, std::function<
void(QOhosJsState &)> continueFunc) = 0;
80 virtual void startNoUiChildProcess(
const std::string &libraryName,
const std::vector<std::string> &args) = 0;
83 [[nodiscard]]
virtual std::shared_ptr<
void> registerNewWantConsumer(
84 QOhosConsumer<QOhosJsState &, QNapi::Object, QNapi::Object, QNapi::Object> wantConsumer) = 0;
87 virtual void setOnContinueRequestsHandler(
88 QNapi::Object qAbility,
89 std::function<
void(QOhosJsState &, QNapi::Object, QOhosConsumer<QOhosJsState &, QNapi::Number>)> requestsHandler) = 0;
91 virtual void setDestroyFromSystemAllowed(QNapi::Object qAbility,
bool destroyAllowed) = 0;
93 template<
typename T = QNapi::Value>
94 T eval(
const std::string &expr,
const std::vector<QNapi::ValueWrapper> &exprArgs = {});
96 QNapi::Promise evalToPromiseOrRejectOnThrow(
97 const std::string &expr,
const std::vector<QNapi::ValueWrapper> &exprArgs = {});
99 template<
typename Enum>
100 QNapi::Number mapOhosEnumToJs(Enum enumValue);
102 template<
typename Enum>
103 std::optional<Enum> tryMapOhosEnumFromJs(QNapi::Number enumJsValue);
105 template<
typename Enum>
106 Enum mapOhosEnumFromJs(QNapi::Number enumJsValue);
111 std::string fullTypeName;
112 std::vector<std::pair<
int,
const char *>> enumeratorsNames;
118 template<
typename Enum,
typename =
void>
119 struct OhosEnumFullTypeNameFetcher
121 static std::string fullTypeName()
123 return QtOhos::OhosEnumMeta<Enum>::moduleName + std::string(
".") + QtOhos::OhosEnumMeta<Enum>::typeName;
127 template<
typename Enum>
128 struct OhosEnumFullTypeNameFetcher<Enum,
decltype(
static_cast<
void>(&QtOhos::OhosEnumMeta<Enum>::fullTypeName))>
130 static std::string fullTypeName()
132 return QtOhos::OhosEnumMeta<Enum>::fullTypeName;
136 template<
typename Enum>
137 static OhosEnumInfo makeOhosEnumInfo();
139 virtual std::tuple<QNapi::Object, std::string> extractModuleFromEvalExpr(
const std::string &expr) = 0;
140 virtual void *getAttachedObjectWithLazyCreate(
141 const std::type_info &objectTypeInfo, QOhosSupplier<std::shared_ptr<
void>> objectFactory) = 0;
142 virtual QNapi::Number mapOhosEnumToJs(
int enumValue,
const std::type_info &enumTypeInfo, OhosEnumInfo (*ohosEnumInfoFactory)()) = 0;
143 virtual std::optional<
int> tryMapOhosEnumFromJs(QNapi::Number enumJsValue,
const std::type_info &enumTypeInfo, OhosEnumInfo (*ohosEnumInfoFactory)()) = 0;
144 virtual int mapOhosEnumFromJs(QNapi::Number enumJsValue,
const std::type_info &enumTypeInfo, OhosEnumInfo (*ohosEnumInfoFactory)()) = 0;
157Q_CORE_EXPORT
void invoke(std::function<
void(QOhosJsState &)> &&task);
160 std::function<
void(QOhosJsState &, QOhosTaskPromise<>)> &&task,
161 std::string callerContextName = {});
164 const std::function<
void(QOhosJsState &)> &task,
165 std::string callerContextName = {});
167template<
typename Func>
168auto eval(Func &&func,
std::string callerContextName = {})
173 std::function<
void(QOhosJsState &, QOhosTaskPromise<T>)> evalFunc,
174 std::string callerContextName = {});
179T
evalWithConsumer(std::function<
void(QOhosJsState &, std::function<
void(T)>)> evalFunc);
186 virtual ~QOhosJsThreadOps();
188 virtual QOhosJsState &jsState() = 0;
190 virtual void invoke(std::function<
void(QOhosJsState &)> &&task) = 0;
191 virtual void invokeAndWaitForContinue(
192 std::function<
void(QOhosJsState &, QOhosTaskPromise<>)> &&task,
193 std::string callerContextName) = 0;
194 virtual void runAndWait(
195 const std::function<
void(QOhosJsState &)> &task,
196 std::string callerContextName) = 0;
198 static void registerInstance(QOhosJsThreadOps *ops);
199 static QOhosJsThreadOps &instance();