1import time 2 3import gi 4gi.require_version('Gtk', '3.0') 5from gi.repository import Gtk 6 7from nbxmpp.protocol import Iq 8from nbxmpp.modules.discovery import parse_disco_info 9 10from gajim.common.const import CSSPriority 11 12from gajim import gui 13gui.init('gtk') 14 15from test.gtk import util 16from gajim.gui.groupchat_info import GroupChatInfoScrolled 17 18util.load_style('gajim.css', CSSPriority.APPLICATION) 19 20stanza = Iq(node=''' 21<iq xmlns="jabber:client" xml:lang="de-DE" to="user@user.us" from="asd@conference.temptatio.dev" type="result" id="67284933-e526-41f3-8309-9d9475cf9c74"> 22<query xmlns="http://jabber.org/protocol/disco#info"> 23<identity name="ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt" type="text" category="conference" /> 24<feature var="vcard-temp" /> 25<feature var="http://jabber.org/protocol/muc" /> 26<feature var="http://jabber.org/protocol/disco#info" /> 27<feature var="http://jabber.org/protocol/disco#items" /> 28<feature var="muc_temporary" /> 29<feature var="muc_moderated" /> 30<feature var="muc_open" /> 31<feature var="muc_hidden" /> 32<feature var="muc_nonanonymous" /> 33<feature var="muc_passwordprotected" /> 34<feature var="urn:xmpp:mam:2" /> 35<feature var="muc_public" /> 36<feature var="muc_persistent" /> 37<feature var="muc_membersonly" /> 38<feature var="muc_semianonymous" /> 39<feature var="muc_unmoderated" /> 40<feature var="muc_unsecured" /> 41<x type="result" xmlns="jabber:x:data"> 42<field var="FORM_TYPE" type="hidden"> 43<value>http://jabber.org/protocol/muc#roominfo</value> 44</field> 45<field var="muc#roominfo_occupants" type="text-single" label="Number of occupants"> 46<value>1</value> 47</field> 48<field var="muc#roomconfig_roomname" type="text-single" label="Natural-Language Room Name"> 49<value>ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt</value> 50</field> 51<field var="muc#roominfo_description" type="text-single" label="Raum Beschreibung"> 52<value>Lorem ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt ut labore et dolore magna</value> 53</field> 54<field var="muc#roominfo_contactjid" type="jid-multi" label="Contact Addresses (normally, room owner or owners)"> 55<value>userA@user.us</value> 56<value>userB@user.us</value> 57</field> 58<field var="muc#roominfo_changesubject" type="boolean" label="Occupants May Change the Subject"> 59<value>1</value> 60</field> 61<field var="muc#roomconfig_allowinvites" type="boolean" label="Occupants are allowed to invite others"> 62<value>1</value> 63</field> 64<field var="muc#roomconfig_allowpm" type="list-single" label="Roles that May Send Private Messages"> 65<value>anyone</value> 66<option label="Anyone"> 67<value>anyone</value> 68</option> 69<option label="Anyone with Voice"> 70<value>participants</value> 71</option> 72<option label="Moderators Only"> 73<value>moderators</value> 74</option> 75<option label="Nobody"> 76<value>none</value> 77</option> 78</field> 79<field var="muc#roominfo_lang" type="text-single" label="Natural Language for Room Discussions"> 80<value>de</value> 81</field> 82<field type="text-single" var="muc#roominfo_logs"> 83<value>https://logs.xmpp.org/xsf/</value> 84</field> 85</x> 86</query> 87</iq>''') 88 89disco_info = parse_disco_info(stanza) 90 91class GroupchatInfo(Gtk.ApplicationWindow): 92 def __init__(self): 93 Gtk.ApplicationWindow.__init__(self) 94 self.set_name('GroupchatJoin') 95 self.set_position(Gtk.WindowPosition.CENTER) 96 self.set_show_menubar(False) 97 self.set_title('Test Group chat info') 98 99 self._main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, 100 spacing=18) 101 self._main_box.set_valign(Gtk.Align.FILL) 102 103 self._muc_info_box = GroupChatInfoScrolled(None) 104 self._muc_info_box.set_vexpand(True) 105 106 self._main_box.add(self._muc_info_box) 107 108 self.add(self._main_box) 109 self._muc_info_box.set_from_disco_info(disco_info) 110 self._muc_info_box.set_subject( 111 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr sed ' 112 'diam nonumy eirmod tempor invidunt ut labore et dolore magna') 113 self._muc_info_box.set_author('userX', None) 114 self.show_all() 115 116 117win = GroupchatInfo() 118win.connect('destroy', Gtk.main_quit) 119win.show_all() 120Gtk.main() 121