Skip to content

Commit

Permalink
refactor: refactor FormAPI
Browse files Browse the repository at this point in the history
  • Loading branch information
engsr6982 committed Feb 8, 2025
1 parent 4f8e592 commit 7091a24
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 83 deletions.
26 changes: 5 additions & 21 deletions src/api/form/ActionFormAPI.cc
Original file line number Diff line number Diff line change
Expand Up @@ -44,48 +44,32 @@ Local<Value> ActionFormAPI::toString(Arguments const& /* args */) {

Local<Value> ActionFormAPI::getContent(Arguments const& /* args */) {
try {
return detail::ConvertVariantToScriptX(get().getContent());
return ConvertToScript(get().getContent());
}
Catch;
}

Local<Value> ActionFormAPI::setContent(Arguments const& args) {
CheckArgsCount(args, 1);
try {
// if (args[0].isString()) {
// mActionForm.setContent(ConvertToCpp<string>(args[0]));
// } else if (args[0].isObject() && IsInstanceOf<TranslatableAPI>(args[0])) {
// mActionForm.setContent(GetScriptClass(TranslatableAPI, args[0])->get());
// } else {
// throw script::Exception(ERR_WRONG_ARG_TYPE);
// }
mActionForm.setContent(ConvertToCpp<endstone::Message>(args[0]));
return args.thiz();
}
Catch;
}

endstone::Message ArgHelper(Local<Value> const& arg) {
if (arg.isString()) {
return ConvertToCpp<string>(arg);
} else if (arg.isObject() && IsInstanceOf<TranslatableAPI>(arg)) {
return GetScriptClass(TranslatableAPI, arg)->get();
} else {
throw script::Exception(ERR_WRONG_ARG_TYPE);
}
}

Local<Value> ActionFormAPI::addButton(Arguments const& args) {
CheckArgsCount(args, 1); // 最少 1 个参数
try {
auto val = ArgHelper(args[0]);
auto val = ConvertToCpp<endstone::Message>(args[0]);
if (args.size() == 1) {
mActionForm.addButton(std::move(val));
mActionForm.addButton(val);
} else if (args.size() == 2) {
mActionForm.addButton(std::move(val), ConvertToCpp<string>(args[1]));
mActionForm.addButton(val, ConvertToCpp<string>(args[1]));
} else if (args.size() == 3) {
auto ptr = SafeTransfer<Function>::make(EngineScope::currentEngine(), script::Global{args[2].asFunction()});
mActionForm.addButton(std::move(val), ConvertToCpp<string>(args[1]), [ptr](endstone::Player* player) {
mActionForm.addButton(val, ConvertToCpp<string>(args[1]), [ptr](endstone::Player* player) {
if (ptr) {
EngineScope enter{ptr->mEngine};
try {
Expand Down
1 change: 0 additions & 1 deletion src/api/form/ActionFormAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include "utils/Using.h"



namespace jse {


Expand Down
30 changes: 3 additions & 27 deletions src/api/form/FormAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "api/PlayerAPI.h"
#include "api/lang/TranslatableAPI.h"
#include "converter/Convert.h"
#include "endstone/message.h"
#include "utils/ResourceSafety.h"
#include "utils/Using.h"

Expand All @@ -11,25 +12,6 @@

namespace jse {

namespace detail {
template <typename Variant>
Local<Value> ConvertVariantToScriptX(Variant&& val) {
return std::visit(
[](auto&& arg) -> Local<Value> {
using T = std::decay_t<decltype(arg)>;
if constexpr (std::is_same_v<T, std::string>) {
return ConvertToScript(arg);
} else if constexpr (std::is_same_v<T, endstone::Translatable>) {
return TranslatableAPI::newInstance(arg);
} else {
throw script::Exception("Unsupported variant type");
}
},
std::forward<Variant>(val)
);
}
} // namespace detail


template <typename T>
class FormAPI {
Expand All @@ -44,22 +26,16 @@ class FormAPI {
public:
Local<Value> getTitle(Arguments const& /* args */) {
try {
// return detail::ConvertVariantToScriptX(mForm.getTitle());
return ConvertToScript(mForm.getTitle());
}
Catch;
}

Local<Value> setTitle(Arguments const& args) {
CheckArgsCount(args, 1);
CheckArgTypeOr(args[0], ValueKind::kString, ValueKind::kObject);
try {
if (args[0].isString()) {
mForm.setTitle(ConvertToCpp<string>(args[0]));
} else if (args[0].isObject() && IsInstanceOf<TranslatableAPI>(args[0])) {
mForm.setTitle(GetScriptClass(TranslatableAPI, args[0])->get());
} else {
throw script::Exception(ERR_WRONG_ARG_TYPE);
}
mForm.setTitle(ConvertToCpp<endstone::Message>(args[0]));
return args.thiz();
}
CatchAndThrow;
Expand Down
31 changes: 7 additions & 24 deletions src/api/form/MessageFormAPI.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "api/form/FormAPI.h"
#include "converter/Convert.h"
#include "endstone/endstone.h"
#include "endstone/message.h"
#include "utils/ResourceSafety.h"
#include "utils/Using.h"
#include <variant>
Expand Down Expand Up @@ -40,65 +41,47 @@ Local<Value> MessageFormAPI::toString(Arguments const& /* args */) {

Local<Value> MessageFormAPI::getContent(Arguments const& /* args */) {
try {
return detail::ConvertVariantToScriptX(get().getContent());
return ConvertToScript(get().getContent());
}
Catch;
}

Local<Value> MessageFormAPI::setContent(Arguments const& args) {
CheckArgsCount(args, 1);
try {
if (args[0].isString()) {
mMessageForm.setContent(ConvertToCpp<string>(args[0]));
} else if (args[0].isObject() && IsInstanceOf<TranslatableAPI>(args[0])) {
mMessageForm.setContent(GetScriptClass(TranslatableAPI, args[0])->get());
} else {
throw script::Exception(ERR_WRONG_ARG_TYPE);
}
mMessageForm.setContent(ConvertToCpp<endstone::Message>(args[0]));
return args.thiz();
}
CatchAndThrow;
}

Local<Value> MessageFormAPI::getButton1(Arguments const& /* args */) {
try {
return detail::ConvertVariantToScriptX(get().getButton1());
return ConvertToScript(get().getButton1());
}
Catch;
}

Local<Value> MessageFormAPI::setButton1(Arguments const& args) {
CheckArgsCount(args, 1);
try {
if (args[0].isString()) {
mMessageForm.setButton1(ConvertToCpp<string>(args[0]));
} else if (args[0].isObject() && IsInstanceOf<TranslatableAPI>(args[0])) {
mMessageForm.setButton1(GetScriptClass(TranslatableAPI, args[0])->get());
} else {
throw script::Exception(ERR_WRONG_ARG_TYPE);
}
mMessageForm.setButton1(ConvertToCpp<endstone::Message>(args[0]));
return args.thiz();
}
CatchAndThrow;
}

Local<Value> MessageFormAPI::getButton2(Arguments const& /* args */) {
try {
return detail::ConvertVariantToScriptX(get().getButton2());
return ConvertToScript(get().getButton2());
}
Catch;
}

Local<Value> MessageFormAPI::setButton2(Arguments const& args) {
CheckArgsCount(args, 1);
try {
if (args[0].isString()) {
mMessageForm.setButton2(ConvertToCpp<string>(args[0]));
} else if (args[0].isObject() && IsInstanceOf<TranslatableAPI>(args[0])) {
mMessageForm.setButton2(GetScriptClass(TranslatableAPI, args[0])->get());
} else {
throw script::Exception(ERR_WRONG_ARG_TYPE);
}
mMessageForm.setButton2(ConvertToCpp<endstone::Message>(args[0]));
return args.thiz();
}
CatchAndThrow;
Expand Down
1 change: 0 additions & 1 deletion src/api/form/MessageFormAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include "utils/Using.h"



namespace jse {

class MessageFormAPI : public FormAPI<endstone::MessageForm>, public ScriptClass {
Expand Down
11 changes: 2 additions & 9 deletions src/api/form/controls/DropdownAPI.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,7 @@ DropdownAPI* DropdownAPI::make(Arguments const& args) {
defaultIndex = ConvertToCpp<int>(args[2]);
}

endstone::Message label;
if (args[0].isString()) {
label = ConvertToCpp<string>(args[0]);
} else if (args[0].isObject() && IsInstanceOf<TranslatableAPI>(args[0])) {
label = GetScriptClass(TranslatableAPI, args[0])->get();
} else {
return nullptr;
}
auto label = ConvertToCpp<endstone::Message>(args[0]);

return new DropdownAPI(args.thiz(), label, ConvertToCpp<std::vector<string>>(args[1]), defaultIndex);
}
Expand All @@ -57,7 +50,7 @@ Local<Value> DropdownAPI::toString(Arguments const& /* args */) {

Local<Value> DropdownAPI::getLabel(Arguments const& /* args */) {
try {
return detail::ConvertVariantToScriptX(get().getLabel());
return ConvertToScript(get().getLabel());
}
Catch;
}
Expand Down

0 comments on commit 7091a24

Please sign in to comment.