diff options
author | Antenore Gatta (tmow) <antenore@simbiosi.org> | 2021-01-04 09:10:30 +0300 |
---|---|---|
committer | Antenore Gatta (tmow) <antenore@simbiosi.org> | 2021-01-04 09:10:30 +0300 |
commit | 57f7845e551fd47bcdb46304c64a8a11a94768db (patch) | |
tree | ebfa38fc47ca199497f9a021bbeaf0d6ef2c4db4 /plugins | |
parent | 8220012e15d58f5953ed642a45d20431f77f61b8 (diff) | |
parent | ef3cdec971b7f111b20d5ac5fa11a9c8b8d7459c (diff) |
Merge branch 'master' into 'master'
Add capability to load Python plugins (not finished).
See merge request Remmina/Remmina!2157
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/pyvnc/pyvnc.py | 97 | ||||
-rw-r--r-- | plugins/tool_hello_world_python/toolsdevler.py | 72 |
2 files changed, 169 insertions, 0 deletions
diff --git a/plugins/pyvnc/pyvnc.py b/plugins/pyvnc/pyvnc.py new file mode 100644 index 000000000..362c605ee --- /dev/null +++ b/plugins/pyvnc/pyvnc.py @@ -0,0 +1,97 @@ +import sys +import remmina +import enum +import gi +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk, GLib +import psutil + +class VncFeature: + PrefQuality = 1 + PrefViewonly = 2 + PrefDisableserverinput = 3 + ToolRefresh = 4 + ToolChat = 5 + ToolSendCtrlAltDel = 6 + Scale = 7 + Unfocus = 8 + + +class Plugin: + def __init__(self): + self.name = "PyVNC" + self.type = "protocol" + self.description = "VNC but in Python!" + self.version = "1.0" + self.icon_name = "remmina-vnc-symbolic" + self.icon_name_ssh = "remmina-vnc-ssh-symbolic" + self.ssh_setting = remmina.PROTOCOL_SSH_SETTING_TUNNEL + + self.features = [ + remmina.Feature( + type=remmina.PROTOCOL_FEATURE_TYPE_PREF, + id=VncFeature.PrefQuality, + opt1=remmina.PROTOCOL_FEATURE_PREF_RADIO, + opt2="quality", + opt3=None) + ,remmina.Feature(remmina.PROTOCOL_FEATURE_TYPE_PREF, VncFeature.PrefViewonly, remmina.PROTOCOL_FEATURE_PREF_CHECK, "viewonly", None) + ,remmina.Feature(remmina.PROTOCOL_FEATURE_TYPE_PREF, VncFeature.PrefDisableserverinput, remmina.PROTOCOL_SETTING_TYPE_CHECK, "disableserverinput", "Disable server input") + ,remmina.Feature(remmina.PROTOCOL_FEATURE_TYPE_TOOL, VncFeature.ToolRefresh, "Refresh", None, None) + ,remmina.Feature(remmina.PROTOCOL_FEATURE_TYPE_TOOL, VncFeature.ToolChat, "Open Chat…", "face-smile", None) + ,remmina.Feature(remmina.PROTOCOL_FEATURE_TYPE_TOOL, VncFeature.ToolSendCtrlAltDel, "Send Ctrl+Alt+Delete", None, None) + ,remmina.Feature(remmina.PROTOCOL_FEATURE_TYPE_SCALE, VncFeature.Scale, None, None, None) + ,remmina.Feature(remmina.PROTOCOL_FEATURE_TYPE_UNFOCUS, VncFeature.Unfocus, None, None, None) + ] + + colordepths = ("8", "256 colors (8 bpp)", "16", "High color (16 bpp)", "32", "True color (32 bpp)") + print(type(colordepths)) + qualities = ("0", "Poor (fastest)", "1","Medium", "2","Good", "9","Best (slowest)") + print(type(qualities)) + self.basic_settings = [ + remmina.Setting(type=remmina.PROTOCOL_SETTING_TYPE_SERVER, name="server", label="", compact=False, opt1="_rfb._tcp",opt2=None) + , remmina.Setting(type=remmina.PROTOCOL_SETTING_TYPE_TEXT, name="proxy", label="Repeater", compact=False, opt1=None, opt2=None) + , remmina.Setting(type=remmina.PROTOCOL_SETTING_TYPE_TEXT, name="username", label="Username", compact=False, opt1=None, opt2=None) + , remmina.Setting(type=remmina.PROTOCOL_SETTING_TYPE_PASSWORD,name="password", label="User password",compact=False, opt1=None, opt2=None) + , remmina.Setting(type=remmina.PROTOCOL_SETTING_TYPE_SELECT, name="colordepth",label="Color depth", compact=False, opt1=colordepths,opt2=None) + , remmina.Setting(type=remmina.PROTOCOL_SETTING_TYPE_SELECT, name="quality", label="Quality", compact=False, opt1=qualities,opt2=None) + , remmina.Setting(type=remmina.PROTOCOL_SETTING_TYPE_KEYMAP, name="keymap", label="", compact=False, opt1=None, opt2=None) + ] + self.advanced_settings = [ + remmina.Setting(remmina.PROTOCOL_SETTING_TYPE_CHECK, "showcursor", "Show remote cursor", True, None, None) + , remmina.Setting(remmina.PROTOCOL_SETTING_TYPE_CHECK, "viewonly", "View only", False, None, None) + , remmina.Setting(remmina.PROTOCOL_SETTING_TYPE_CHECK, "disableclipboard", "Disable clipboard sync", True, None, None) + , remmina.Setting(remmina.PROTOCOL_SETTING_TYPE_CHECK, "disableencryption", "Disable encryption", False, None, None) + , remmina.Setting(remmina.PROTOCOL_SETTING_TYPE_CHECK, "disableserverinput", "Disable server input", True, None, None) + , remmina.Setting(remmina.PROTOCOL_SETTING_TYPE_CHECK, "disablepasswordstoring", "Disable password storing", False, None, None) + ] + + def init(self, gp): + print("[PyVNC.init]: Called!") + pass + + def open_connection(self, gp): + print("[PyVNC.open_connection]: Called!") + pass + + def close_connection(self, gp): + print("[PyVNC.close_connection]: Called!") + pass + + def query_feature(self, gp): + print("[PyVNC.query_feature]: Called!") + pass + + def call_feature(self, gp): + print("[PyVNC.call_feature]: Called!") + pass + + def keystroke(self, gp): + print("[PyVNC.keystroke]: Called!") + pass + + def screenshot(self, gp): + print("[PyVNC.screenshot]: Called!") + pass + +myPlugin = Plugin() +remmina.register_plugin(myPlugin)
\ No newline at end of file diff --git a/plugins/tool_hello_world_python/toolsdevler.py b/plugins/tool_hello_world_python/toolsdevler.py new file mode 100644 index 000000000..5e4cab25b --- /dev/null +++ b/plugins/tool_hello_world_python/toolsdevler.py @@ -0,0 +1,72 @@ +import sys + +if not hasattr(sys, 'argv'): + sys.argv = [''] + +import remmina +import gi +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk, GLib +import psutil + +class HelloPlugin: + def __init__(self): + self.name = "Hello" + self.type = "protocol" + self.description = "Hello World!" + self.version = "1.0" + self.icon_name = "remmina-tool" + self.icon_name_ssh = "remmina-tool" + self.btn = Gtk.Button(label="Hello!") + self.btn.connect("clicked", self.callback_add, "hello") + pass + + def callback_add(self, widget, data): + print("Click :)") + + def name(self): + return "Hello" + + def init(self): + print("Init!") + return True + + + def open_connection(self, viewport): + print("open_connection!") + def foreach_child(child): + child.add(self.btn) + self.btn.show() + viewport.foreach(foreach_child) + print("Connected!") + + remmina.log_print("[%s]: Plugin open connection\n" % self.name) + return True + + def draw(self, widget, cr, color): + cr.rectangle(0, 0, 100, 100) + cr.set_source_rgb(color[0], color[1], color[2]) + cr.fill() + cr.queue_draw_area(0, 0, 100, 100) + + return True + + def close_connection(self, viewport): + print("close_connection!") + remmina.log_print("[%s]: Plugin close connection\n" % self.name) + return True + + def query_feature(self): + pass + + def call_feature(self): + pass + + def send_keystrokes(self): + pass + + def get_plugin_screenshot(self): + pass + +myPlugin = HelloPlugin() +remmina.register_plugin(myPlugin) |