51 #define PY_SSIZE_T_CLEAN 53 #include <structmember.h> 72 py_plugin->
gp->
gp = gp;
73 PyObject_CallMethod(py_plugin,
"init",
"O", py_plugin->
gp);
87 PyObject* result = PyObject_CallMethod(py_plugin,
"open_connection",
"O", py_plugin->
gp);
88 return result == Py_True;
101 PyObject* result = PyObject_CallMethod(py_plugin,
"close_connection",
"O", py_plugin->
gp);
102 return result == Py_True;
113 TRACE_CALL(__func__);
115 PyObject* result = PyObject_CallMethod(py_plugin,
"query_feature",
"O", py_plugin->
gp);
116 return result == Py_True;
127 TRACE_CALL(__func__);
129 PyObject* result = PyObject_CallMethod(py_plugin,
"call_feature",
"O", py_plugin->
gp);
140 TRACE_CALL(__func__);
142 PyObject* result = PyObject_CallMethod(py_plugin,
"send_keystrokes",
"O", py_plugin->
gp);
153 TRACE_CALL(__func__);
155 PyObject* result = PyObject_CallMethod(py_plugin,
"get_plugin_screenshot",
"O", py_plugin->
gp);
156 return result == Py_True;
161 PyObject* attr = PyObject_GetAttrString(instance, constant_name);
162 if (attr && PyLong_Check(attr)) {
163 return PyLong_AsLong(attr);
173 if(!PyObject_HasAttrString(pluginInstance,
"icon_name_ssh")) {
174 g_printerr(
"Error creating Remmina plugin. Python plugin instance is missing member: icon_name_ssh\n");
177 else if(!PyObject_HasAttrString(pluginInstance,
"icon_name")) {
178 g_printerr(
"Error creating Remmina plugin. Python plugin instance is missing member: icon_name\n");
181 else if(!PyObject_HasAttrString(pluginInstance,
"features")) {
182 g_printerr(
"Error creating Remmina plugin. Python plugin instance is missing member: features\n");
185 else if(!PyObject_HasAttrString(pluginInstance,
"basic_settings")) {
186 g_printerr(
"Error creating Remmina plugin. Python plugin instance is missing member: basic_settings\n");
189 else if(!PyObject_HasAttrString(pluginInstance,
"advanced_settings")) {
190 g_printerr(
"Error creating Remmina plugin. Python plugin instance is missing member: advanced_settings\n");
193 else if(!PyObject_HasAttrString(pluginInstance,
"ssh_setting")) {
194 g_printerr(
"Error creating Remmina plugin. Python plugin instance is missing member: ssh_setting\n");
199 remmina_plugin->
name = PyUnicode_AsUTF8(PyObject_GetAttrString(pluginInstance,
"name"));
200 remmina_plugin->
description = PyUnicode_AsUTF8(PyObject_GetAttrString(pluginInstance,
"description"));
201 remmina_plugin->
domain = GETTEXT_PACKAGE;
202 remmina_plugin->
version = PyUnicode_AsUTF8(PyObject_GetAttrString(pluginInstance,
"version"));
203 remmina_plugin->
icon_name = PyUnicode_AsUTF8(PyObject_GetAttrString(pluginInstance,
"icon_name"));
204 remmina_plugin->
icon_name_ssh = PyUnicode_AsUTF8(PyObject_GetAttrString(pluginInstance,
"icon_name_ssh"));
206 PyObject* basic_settings_list = PyObject_GetAttrString(pluginInstance,
"basic_settings");
207 Py_ssize_t len = PyList_Size(basic_settings_list);
212 for (Py_ssize_t i = 0; i < len; ++i) {
220 PyObject* advanced_settings_list = PyObject_GetAttrString(pluginInstance,
"advanced_settings");
221 len = PyList_Size(advanced_settings_list);
226 for (Py_ssize_t i = 0; i < len; ++i) {
235 PyObject* features_list = PyObject_GetAttrString(pluginInstance,
"features");
236 len = PyList_Size(features_list);
241 for (Py_ssize_t i = 0; i < len; ++i) {
static void remmina_protocol_call_feature_wrapper(RemminaProtocolPlugin *plugin, RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)
void(* call_feature)(RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)
Maps an instance of a Python plugin to a Remmina one.
void ToRemminaProtocolFeature(RemminaProtocolFeature *dest, PyObject *feature)
RemminaProtocolSSHSetting ssh_setting
void(* init)(RemminaProtocolWidget *gp)
static RemminaProtocolPlugin remmina_plugin
const RemminaProtocolFeature * features
static gboolean remmina_protocol_get_plugin_screenshot_wrapper(RemminaProtocolPlugin *plugin, RemminaProtocolWidget *gp, RemminaPluginScreenshotData *rpsd)
static gboolean remmina_protocol_query_feature_wrapper(RemminaProtocolPlugin *plugin, RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)
RemminaPlugin * remmina_plugin_python_create_file_plugin(pluginInstance)
gboolean(* open_connection)(RemminaProtocolWidget *gp)
static void remmina_protocol_send_keytrokes_wrapper(RemminaProtocolPlugin *plugin, RemminaProtocolWidget *gp, const guint keystrokes[], const gint keylen)
void(* protocol_plugin_signal_connection_opened)(RemminaProtocolWidget *gp)
const gchar * icon_name_ssh
PyRemminaProtocolWidget * gp
RemminaPluginService remmina_plugin_manager_service
PyPlugin * remmina_plugin_python_module_get_plugin(RemminaProtocolWidget *gp)
Returns a pointer to the Python instance, mapped to the RemminaProtocolWidget or null if not found...
RemminaPlugin * remmina_plugin_python_create_secret_plugin(pluginInstance)
const gchar * description
void(* send_keystrokes)(RemminaProtocolWidget *gp, const guint keystrokes[], const gint keylen)
RemminaProtocolSSHSetting
static void remmina_protocol_init_wrapper(RemminaProtocolWidget *gp)
Handles the initialization of the Python plugin.
RemminaPlugin * remmina_plugin_python_create_protocol_plugin(PyObject *pluginInstance)
const RemminaProtocolSetting * basic_settings
static long GetEnumOrDefault(PyObject *instance, gchar *constant_name, long def)
gboolean(* close_connection)(RemminaProtocolWidget *gp)
void ToRemminaProtocolSetting(RemminaProtocolSetting *dest, PyObject *setting)
gboolean(* query_feature)(RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)
const RemminaProtocolSetting * advanced_settings
RemminaPlugin * remmina_plugin_python_create_tool_plugin(pluginInstance)
static gboolean remmina_protocol_close_connection_wrapper(RemminaProtocolWidget *gp)
gboolean(* get_plugin_screenshot)(RemminaProtocolWidget *gp, RemminaPluginScreenshotData *rpsd)
RemminaPlugin * remmina_plugin_python_create_entry_plugin(pluginInstance)
RemminaPlugin * remmina_plugin_python_create_pref_plugin(pluginInstance)
static gboolean remmina_protocol_open_connection_wrapper(RemminaProtocolWidget *gp)