2
0
luboslenco 1 жил өмнө
parent
commit
1be5278ef4

+ 31 - 0
base/sources/plugin_api.c

@@ -8,6 +8,8 @@
 
 extern JSRuntime *js_runtime;
 extern JSContext *js_ctx;
+void js_call(void *p);
+void js_call_arg(void *p, int argc, void *argv);
 
 #define MAKE_FN(name)\
     static JSValue js_##name(JSContext *ctx, JSValue this_val, int argc, JSValue *argv)
@@ -55,6 +57,33 @@ MAKE_VOID_FN_STR(console_info)
 MAKE_PTR_FN(plugin_create)
 MAKE_VOID_FN_PTR_CB(plugin_notify_on_ui)
 
+static JSObject *ui_files_cb;
+static void ui_files_done(char *path) {
+    JSValue path_val = JS_NewString(js_ctx, path);
+    JSValue argv[] = { path_val };
+    js_call_arg(ui_files_cb, 1, argv);
+}
+
+void ui_files_show(char *s, bool b0, bool b1, void(*f)(char *));
+MAKE_FN(ui_files_show) {
+    char *filters = (char *)JS_ToCString(ctx, argv[0]);
+    bool is_save = JS_ToBool(ctx, argv[1]);
+    bool open_multiple = JS_ToBool(ctx, argv[2]);
+    ui_files_cb = malloc(sizeof(JSValue));
+    JSValue dup = JS_DupValue(ctx, argv[3]);
+    memcpy(ui_files_cb, &dup, sizeof(JSValue));
+    ui_files_show(filters, is_save, open_multiple, ui_files_done);
+    return JS_UNDEFINED;
+}
+
+void *data_get_blob(char *s);
+MAKE_FN(data_get_blob) {
+    char *s = (char *)JS_ToCString(ctx, argv[0]);
+    buffer_t *b = data_get_blob(s);
+    JSValue val = JS_NewArrayBuffer(ctx, b->buffer, b->length, NULL, NULL, 0);
+    return val;
+}
+
 MAKE_FN(zui_handle_create) {
     int64_t result = (int64_t)zui_handle_create();
     return JS_NewInt64(ctx, result);
@@ -156,6 +185,8 @@ void plugin_api_init() {
     BIND_FN(console_info, 1);
     BIND_FN(plugin_create, 0);
     BIND_FN(plugin_notify_on_ui, 2);
+    BIND_FN(ui_files_show, 4);
+    BIND_FN(data_get_blob, 1);
 
     BIND_FN(zui_handle_create, 0);
     BIND_FN(zui_panel, 2);