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;
70 virtual void startAppProcess(
71 const std::string &processId, QNapi::Object requestWant,
72 QNapi::Object optStartOptions, std::function<
void(QOhosJsState &)> continueFunc) = 0;
74 virtual void startNoUiChildProcess(
const std::string &libraryName,
const std::vector<std::string> &args) = 0;
76 virtual void addNewWantConsumer(
77 QOhosConsumer<QOhosJsState &, QNapi::Object, QNapi::Object> wantConsumer) = 0;
80 virtual void setOnContinueRequestsHandler(
81 QNapi::Object qAbility,
82 std::function<
void(QOhosJsState &, QNapi::Object, QOhosConsumer<QOhosJsState &, QNapi::Number>)> requestsHandler) = 0;
84 virtual void setDestroyFromSystemAllowed(QNapi::Object qAbility,
bool destroyAllowed) = 0;
86 template<
typename T = QNapi::Value>
87 T eval(
const std::string &expr,
const std::vector<QNapi::ValueWrapper> &exprArgs = {});
89 QNapi::Promise evalToPromiseOrRejectOnThrow(
90 const std::string &expr,
const std::vector<QNapi::ValueWrapper> &exprArgs = {});
92 template<
typename Enum>
93 QNapi::Number mapOhosEnumToJs(Enum enumValue);
95 template<
typename Enum>
96 std::optional<Enum> tryMapOhosEnumFromJs(QNapi::Number enumJsValue);
98 template<
typename Enum>
99 Enum mapOhosEnumFromJs(QNapi::Number enumJsValue);
104 std::string fullTypeName;
105 std::vector<std::pair<
int,
const char *>> enumeratorsNames;
111 template<
typename Enum,
typename =
void>
112 struct OhosEnumFullTypeNameFetcher
114 static std::string fullTypeName()
116 return QtOhos::OhosEnumMeta<Enum>::moduleName + std::string(
".") + QtOhos::OhosEnumMeta<Enum>::typeName;
120 template<
typename Enum>
121 struct OhosEnumFullTypeNameFetcher<Enum,
decltype(
static_cast<
void>(&QtOhos::OhosEnumMeta<Enum>::fullTypeName))>
123 static std::string fullTypeName()
125 return QtOhos::OhosEnumMeta<Enum>::fullTypeName;
129 template<
typename Enum>
130 static OhosEnumInfo makeOhosEnumInfo();
132 virtual std::tuple<QNapi::Object, std::string> extractModuleFromEvalExpr(
const std::string &expr) = 0;
133 virtual QNapi::Number mapOhosEnumToJs(
int enumValue,
const std::type_info &enumTypeInfo, OhosEnumInfo (*ohosEnumInfoFactory)()) = 0;
134 virtual std::optional<
int> tryMapOhosEnumFromJs(QNapi::Number enumJsValue,
const std::type_info &enumTypeInfo, OhosEnumInfo (*ohosEnumInfoFactory)()) = 0;
135 virtual int mapOhosEnumFromJs(QNapi::Number enumJsValue,
const std::type_info &enumTypeInfo, OhosEnumInfo (*ohosEnumInfoFactory)()) = 0;
148Q_CORE_EXPORT
void invoke(std::function<
void(QOhosJsState &)> task);
151 std::function<
void(QOhosJsState &, QOhosTaskPromise<>)> &&task,
152 std::string callerContextName = {});
155 const std::function<
void(QOhosJsState &)> &task,
156 std::string callerContextName = {});
158template<
typename Func>
159auto eval(Func &&func,
std::string callerContextName = {})
164 std::function<
void(QOhosJsState &, QOhosTaskPromise<T>)> evalFunc,
165 std::string callerContextName = {});
170T
evalWithConsumer(std::function<
void(QOhosJsState &, std::function<
void(T)>)> evalFunc);
177 virtual ~QOhosJsThreadOps();
179 virtual QOhosJsState &jsState() = 0;
181 virtual void invoke(std::function<
void(QOhosJsState &)> task) = 0;
182 virtual void invokeAndWaitForContinue(
183 std::function<
void(QOhosJsState &, QOhosTaskPromise<>)> &&task,
184 std::string callerContextName) = 0;
185 virtual void runAndWait(
186 const std::function<
void(QOhosJsState &)> &task,
187 std::string callerContextName) = 0;
189 static void registerInstance(QOhosJsThreadOps *ops);
190 static QOhosJsThreadOps &instance();