9578053 Jan 22 2022 distfiles.gentoo.org/distfiles/gajim-1.3.3-2.tar.gz
This commit is contained in:
parent
a5b3822651
commit
4c1b226bff
1045 changed files with 753037 additions and 18 deletions
137
test/gtk/assistant.py
Normal file
137
test/gtk/assistant.py
Normal file
|
@ -0,0 +1,137 @@
|
|||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
from gajim.common.const import CSSPriority
|
||||
|
||||
from gajim import gui
|
||||
gui.init('gtk')
|
||||
|
||||
from gajim.gui.assistant import Assistant
|
||||
from gajim.gui.assistant import Page
|
||||
|
||||
from test.gtk import util
|
||||
util.load_style('gajim.css', CSSPriority.APPLICATION)
|
||||
|
||||
|
||||
class TestAssistant(Assistant):
|
||||
def __init__(self):
|
||||
Assistant.__init__(self)
|
||||
|
||||
self.add_pages({'start': Start()})
|
||||
|
||||
progress = self.add_default_page('progress')
|
||||
progress.set_title('Executing...')
|
||||
progress.set_text('Something is in progress...')
|
||||
|
||||
error = self.add_default_page('error')
|
||||
error.set_title('Error')
|
||||
error.set_heading('Error Heading')
|
||||
error.set_text('This is the error text')
|
||||
|
||||
success = self.add_default_page('success')
|
||||
success.set_title('Success')
|
||||
success.set_heading('Success Heading')
|
||||
success.set_text('This is the success text')
|
||||
|
||||
self.add_button('forward', 'Forward', 'suggested-action', complete=True)
|
||||
self.add_button('close', 'Close', 'destructive-action')
|
||||
self.add_button('back', 'Back')
|
||||
|
||||
self.set_button_visible_func(self._visible_func)
|
||||
|
||||
self.connect('button-clicked', self._on_button_clicked)
|
||||
self.connect('page-changed', self._on_page_changed)
|
||||
|
||||
self.show_all()
|
||||
|
||||
@staticmethod
|
||||
def _visible_func(_assistant, page_name):
|
||||
if page_name == 'start':
|
||||
return ['forward']
|
||||
|
||||
if page_name == 'progress':
|
||||
return ['forward', 'back']
|
||||
|
||||
if page_name == 'success':
|
||||
return ['forward', 'back']
|
||||
|
||||
if page_name == 'error':
|
||||
return ['back', 'close']
|
||||
raise ValueError('page %s unknown' % page_name)
|
||||
|
||||
def _on_button_clicked(self, _assistant, button_name):
|
||||
page = self.get_current_page()
|
||||
if button_name == 'forward':
|
||||
if page == 'start':
|
||||
self.show_page('progress', Gtk.StackTransitionType.SLIDE_LEFT)
|
||||
elif page == 'progress':
|
||||
self.show_page('success', Gtk.StackTransitionType.SLIDE_LEFT)
|
||||
elif page == 'success':
|
||||
self.show_page('error', Gtk.StackTransitionType.SLIDE_LEFT)
|
||||
return
|
||||
|
||||
if button_name == 'back':
|
||||
if page == 'progress':
|
||||
self.show_page('start')
|
||||
if page == 'success':
|
||||
self.show_page('progress')
|
||||
if page == 'error':
|
||||
self.show_page('success')
|
||||
return
|
||||
|
||||
if button_name == 'close':
|
||||
self.destroy()
|
||||
|
||||
def _on_page_changed(self, _assistant, page_name):
|
||||
if page_name == 'start':
|
||||
self.set_default_button('forward')
|
||||
|
||||
elif page_name == 'progress':
|
||||
self.set_default_button('forward')
|
||||
|
||||
elif page_name == 'success':
|
||||
self.set_default_button('forward')
|
||||
|
||||
elif page_name == 'error':
|
||||
self.set_default_button('back')
|
||||
|
||||
|
||||
class Start(Page):
|
||||
def __init__(self):
|
||||
Page.__init__(self)
|
||||
|
||||
self.title = 'Start'
|
||||
self.complete = False
|
||||
|
||||
heading = Gtk.Label(label='Test Assistant')
|
||||
heading.get_style_context().add_class('large-header')
|
||||
|
||||
label1 = Gtk.Label(label='This is label 1 with some text')
|
||||
label1.set_max_width_chars(50)
|
||||
label1.set_line_wrap(True)
|
||||
label1.set_halign(Gtk.Align.CENTER)
|
||||
label1.set_justify(Gtk.Justification.CENTER)
|
||||
label1.set_margin_bottom(24)
|
||||
|
||||
entry = Gtk.Entry(activates_default=True)
|
||||
entry.connect('changed', self._on_changed)
|
||||
|
||||
self._server = Gtk.CheckButton.new_with_mnemonic('A fancy checkbox')
|
||||
self._server.set_halign(Gtk.Align.CENTER)
|
||||
|
||||
self.pack_start(heading, False, True, 0)
|
||||
self.pack_start(label1, False, True, 0)
|
||||
self.pack_start(entry, False, True, 0)
|
||||
self.pack_start(self._server, False, True, 0)
|
||||
self.show_all()
|
||||
|
||||
def _on_changed(self, entry):
|
||||
self.complete = bool(entry.get_text())
|
||||
self.update_page_complete()
|
||||
|
||||
|
||||
win = TestAssistant()
|
||||
win.connect('destroy', Gtk.main_quit)
|
||||
win.show_all()
|
||||
Gtk.main()
|
54
test/gtk/certificate_dialog.py
Normal file
54
test/gtk/certificate_dialog.py
Normal file
|
@ -0,0 +1,54 @@
|
|||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
import OpenSSL
|
||||
|
||||
from gajim import gui
|
||||
gui.init('gtk')
|
||||
|
||||
from test.gtk import util
|
||||
from gajim.common.const import CSSPriority
|
||||
from gajim.gui.dialogs import CertificateDialog
|
||||
|
||||
util.load_style('gajim.css', CSSPriority.APPLICATION)
|
||||
|
||||
cert = '''
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFhDCCBGygAwIBAgISA4oUEifTr7Y+mcdiwu6KWpcVMA0GCSqGSIb3DQEBCwUA
|
||||
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
|
||||
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA0MDMxODE3NDVaFw0x
|
||||
OTA3MDIxODE3NDVaMBsxGTAXBgNVBAMMECoubGlnaHR3aXRjaC5vcmcwggEiMA0G
|
||||
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/3mcevikse7QwDYwPcGAD9zHw3UWE
|
||||
7J8SJR349/rFTF2tBFDvEa62OUKTCg5vPKVKaXHlzruk/A7blgqsEdugycORwPD1
|
||||
7YNJ27EldrRtotjclurzKL6D/MgcaQ4cTkPOD3cWbf/L+HClGrpFt7su6Z6cTutC
|
||||
wiAYAdlfmVgSSv15F1xOTyFyfGJKQnW628Xs8xUvZh5H/SsEEum4MwVVGW06Z/A/
|
||||
mwX2jmJUb2M25S1Ma025nZpGYyAAqecTmPb3fStnXm4sdytfZhm4+nj9mH9GQIU1
|
||||
t/jO/7X7IFpc9DvVRSumSVqvNaVgiWmTLP4VxlCVJO6mibOXXUUDA5RfAgMBAAGj
|
||||
ggKRMIICjTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
|
||||
AQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFC4/ZRurw2wVFsgJBTb9Fh/3
|
||||
0aV9MB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsGAQUFBwEB
|
||||
BGMwYTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0
|
||||
Lm9yZzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNyeXB0
|
||||
Lm9yZy8wSQYDVR0RBEIwQIIQKi5saWdodHdpdGNoLm9yZ4IOKi5tZXRyb25vbWUu
|
||||
aW2CDmxpZ2h0d2l0Y2gub3JnggxtZXRyb25vbWUuaW0wTAYDVR0gBEUwQzAIBgZn
|
||||
gQwBAgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5s
|
||||
ZXRzZW5jcnlwdC5vcmcwggECBgorBgEEAdZ5AgQCBIHzBIHwAO4AdQB0ftqDMa0z
|
||||
EJEhnM4lT0Jwwr/9XkIgCMY3NXnmEHvMVgAAAWnkosBAAAAEAwBGMEQCICEfmTBk
|
||||
OxS95eiYsfTH5HdL7kfp68BSin5LqeGyyxk9AiA3qeDZNKklJTdWqYjto7kUqJNd
|
||||
YiL99SrqwzR6w+AqSwB1ACk8UZZUyDlluqpQ/FgH1Ldvv1h6KXLcpMMM9OVFR/R4
|
||||
AAABaeSiwEUAAAQDAEYwRAIgFxouOkJeqkQUe6zNI5w/6YBIQFrsrIZdPcX+r6JI
|
||||
is8CIEEETzlEyj9lWR/BSSruSp0FT5CuoNNeEG7HxrJ+gVhZMA0GCSqGSIb3DQEB
|
||||
CwUAA4IBAQAQtfs1NPNMmBQRcKsZyGLZsvpp2hIhdYi72RYnHnIl4MXbhyNj9xtI
|
||||
cJr9PQ+3FsSnxy7LDjZMpbmBuXhawOyPBPw2M0f0Tv6Eo6miwvP/X1kLE3VjTzCo
|
||||
6JPh6bEB5wa+kH/pUcGlV6uyT7IuXOiArx0VmIpTA3uwlVdfynOnR3CF20Ds4FLc
|
||||
JxbGMqRuw/sGiTLKlXc1xVil8WZjL3hokzrgI7K6np2skUjWuMZvhJgwi5QiE7/C
|
||||
ejsJoYkpvcaiaLAyVymTY/n/oM2oQpv5Mqjit+18RB9c2P+ifH5iDKC/jTKn4NNz
|
||||
8xSTlUlCBTCozjzscZVeVDIojmejWclT
|
||||
-----END CERTIFICATE-----'''
|
||||
|
||||
cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
|
||||
win = CertificateDialog(None, 'testacc', cert)
|
||||
win.connect("destroy", Gtk.main_quit)
|
||||
win.show_all()
|
||||
Gtk.main()
|
40
test/gtk/change_password.py
Normal file
40
test/gtk/change_password.py
Normal file
|
@ -0,0 +1,40 @@
|
|||
from functools import partial
|
||||
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
from nbxmpp.modules.dataforms import create_field
|
||||
from nbxmpp.modules.dataforms import SimpleDataForm
|
||||
|
||||
from gajim.common.const import CSSPriority
|
||||
|
||||
from gajim import gui
|
||||
gui.init('gtk')
|
||||
|
||||
from gajim.gui.change_password import ChangePassword
|
||||
|
||||
from test.gtk import util
|
||||
util.load_style('gajim.css', CSSPriority.APPLICATION)
|
||||
|
||||
fields = [
|
||||
create_field(typ='text-single', label='Username', var='username'),
|
||||
create_field(typ='text-single', label='Old Password', var='old_password'),
|
||||
create_field(typ='text-single', label='Mothers name', var='mother', required=True),
|
||||
]
|
||||
|
||||
form = SimpleDataForm(type_='form', fields=fields)
|
||||
|
||||
def _apply(self, next_stage=False):
|
||||
if next_stage:
|
||||
print(self.get_page('next_stage').get_submit_form())
|
||||
else:
|
||||
self.get_page('next_stage').set_form(form)
|
||||
self.show_page('next_stage', Gtk.StackTransitionType.SLIDE_LEFT)
|
||||
|
||||
win = ChangePassword(None)
|
||||
win._on_apply = partial(_apply, win)
|
||||
|
||||
win.connect('destroy', Gtk.main_quit)
|
||||
win.show_all()
|
||||
Gtk.main()
|
133
test/gtk/dataform.py
Normal file
133
test/gtk/dataform.py
Normal file
|
@ -0,0 +1,133 @@
|
|||
from base64 import b64decode
|
||||
|
||||
from gi.repository import Gtk
|
||||
import nbxmpp
|
||||
from nbxmpp.modules.dataforms import extend_form
|
||||
|
||||
from gajim import gui
|
||||
gui.init('gtk')
|
||||
|
||||
from gajim.gui.dataform import DataFormWidget
|
||||
from gajim.common.const import CSSPriority
|
||||
from gajim.common import app
|
||||
|
||||
from test.gtk import util
|
||||
util.load_style('gajim.css', CSSPriority.APPLICATION)
|
||||
|
||||
image = '''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'''
|
||||
|
||||
app.bob_cache['sha1+8f35fef110ffc5df08d579a50083ff9308fb6242'] = b64decode(image)
|
||||
|
||||
FORM = '''
|
||||
<x xmlns='jabber:x:data' type='form'>
|
||||
<title>Bot Configuration</title>
|
||||
<instructions>Fill out this form to configure your new bot!</instructions>
|
||||
<field type='hidden'
|
||||
var='FORM_TYPE'>
|
||||
<value>jabber:bot</value>
|
||||
</field>
|
||||
<field type='fixed'><value>Section 1: Bot Info</value></field>
|
||||
<field type='text-single'
|
||||
label='The name of your bot'
|
||||
var='botname'>
|
||||
<required/>
|
||||
</field>
|
||||
<field type='text-multi'
|
||||
label='Helpful description of your bot'
|
||||
var='description'>
|
||||
<required/>
|
||||
</field>
|
||||
<field type='boolean'
|
||||
label='Public bot?'
|
||||
var='public'/>
|
||||
<field type='text-private'
|
||||
label='Password for special access'
|
||||
var='password'>
|
||||
<required/>
|
||||
</field>
|
||||
<field type='fixed'><value>Section 2: Features</value></field>
|
||||
<field type='list-multi'
|
||||
label='What features will the bot support?'
|
||||
var='features'>
|
||||
<option label='Contests'><value>contests</value></option>
|
||||
<option label='News'><value>news</value></option>
|
||||
<option label='Polls'><value>polls</value></option>
|
||||
<option label='Reminders'><value>reminders</value></option>
|
||||
<option label='Search'><value>search</value></option>
|
||||
<option label='Search1'><value>search1</value></option>
|
||||
<option label='Really long long long long long long long long entry'><value>longentry</value></option>
|
||||
<option label='Search3'><value>search3</value></option>
|
||||
<value>news</value>
|
||||
<value>search</value>
|
||||
</field>
|
||||
<field type='fixed'><value>Section 3: Subscriber List</value></field>
|
||||
<field type='list-single'
|
||||
label='Maximum number of subscribers'
|
||||
var='maxsubs'>
|
||||
<value>20</value>
|
||||
<option label='10'><value>10</value></option>
|
||||
<option label='20'><value>20</value></option>
|
||||
<option label='30'><value>30</value></option>
|
||||
<option label='50'><value>50</value></option>
|
||||
<option label='100'><value>100</value></option>
|
||||
<option label='None'><value>none</value></option>
|
||||
</field>
|
||||
<field type='fixed'><value>Section 4: Invitations</value></field>
|
||||
<field type='jid-multi'
|
||||
label='People to invite'
|
||||
var='invitelist'>
|
||||
<desc>Tell all your friends about your new bot!</desc>
|
||||
<required/>
|
||||
</field>
|
||||
<field var='ocr' type='text-single' label='Fill in what you see'>
|
||||
<media xmlns='urn:xmpp:media-element'>
|
||||
<uri type='image/png'>cid:sha1+8f35fef110ffc5df08d579a50083ff9308fb6242@bob.xmpp.org</uri>
|
||||
</media>
|
||||
<required/>
|
||||
</field>
|
||||
</x>
|
||||
'''
|
||||
|
||||
|
||||
class DataFormWindow(Gtk.Window):
|
||||
def __init__(self):
|
||||
Gtk.Window.__init__(self, title="Data Form Test")
|
||||
self.set_default_size(600, 600)
|
||||
options = {
|
||||
'left-width': 100,
|
||||
'form-width': 435,
|
||||
}
|
||||
self._widget = DataFormWidget(
|
||||
extend_form(node=nbxmpp.Node(node=FORM)), options)
|
||||
self.add(self._widget)
|
||||
self.show()
|
||||
|
||||
win = DataFormWindow()
|
||||
win.connect("destroy", Gtk.main_quit)
|
||||
win.show_all()
|
||||
Gtk.main()
|
50
test/gtk/fake_dataform.py
Normal file
50
test/gtk/fake_dataform.py
Normal file
|
@ -0,0 +1,50 @@
|
|||
from gi.repository import Gtk
|
||||
|
||||
from gajim import gui
|
||||
gui.init('gtk')
|
||||
|
||||
from gajim.gui.dataform import FakeDataFormWidget
|
||||
from gajim.common.const import CSSPriority
|
||||
|
||||
from test.gtk import util
|
||||
util.load_style('gajim.css', CSSPriority.APPLICATION)
|
||||
|
||||
|
||||
fake_form = {
|
||||
'instructions': 'This is the a long long long long long long test instruction',
|
||||
'username': '',
|
||||
'nick': '',
|
||||
'password': '',
|
||||
'name': '',
|
||||
'first': '',
|
||||
'last': '',
|
||||
'email': '',
|
||||
'address': '',
|
||||
'city': '',
|
||||
'state': '',
|
||||
'zip': '',
|
||||
'phone': '',
|
||||
'url': '',
|
||||
'date': '',
|
||||
'misc': '',
|
||||
'text': '',
|
||||
'key': '',
|
||||
}
|
||||
|
||||
fake_form2 = {
|
||||
'instructions': 'To register, visit https://jabber.at/account/register/',
|
||||
'redirect-url': 'https://jabber.at/account/register/'
|
||||
}
|
||||
|
||||
class DataFormWindow(Gtk.Window):
|
||||
def __init__(self):
|
||||
Gtk.Window.__init__(self, title="Data Form Test")
|
||||
self.set_default_size(600, 600)
|
||||
self._widget = FakeDataFormWidget(fake_form2)
|
||||
self.add(self._widget)
|
||||
self.show()
|
||||
|
||||
win = DataFormWindow()
|
||||
win.connect("destroy", Gtk.main_quit)
|
||||
win.show_all()
|
||||
Gtk.main()
|
120
test/gtk/groupchat_info.py
Normal file
120
test/gtk/groupchat_info.py
Normal file
|
@ -0,0 +1,120 @@
|
|||
import time
|
||||
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
from nbxmpp.protocol import Iq
|
||||
from nbxmpp.modules.discovery import parse_disco_info
|
||||
|
||||
from gajim.common.const import CSSPriority
|
||||
|
||||
from gajim import gui
|
||||
gui.init('gtk')
|
||||
|
||||
from test.gtk import util
|
||||
from gajim.gui.groupchat_info import GroupChatInfoScrolled
|
||||
|
||||
util.load_style('gajim.css', CSSPriority.APPLICATION)
|
||||
|
||||
stanza = Iq(node='''
|
||||
<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">
|
||||
<query xmlns="http://jabber.org/protocol/disco#info">
|
||||
<identity name="ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt" type="text" category="conference" />
|
||||
<feature var="vcard-temp" />
|
||||
<feature var="http://jabber.org/protocol/muc" />
|
||||
<feature var="http://jabber.org/protocol/disco#info" />
|
||||
<feature var="http://jabber.org/protocol/disco#items" />
|
||||
<feature var="muc_temporary" />
|
||||
<feature var="muc_moderated" />
|
||||
<feature var="muc_open" />
|
||||
<feature var="muc_hidden" />
|
||||
<feature var="muc_nonanonymous" />
|
||||
<feature var="muc_passwordprotected" />
|
||||
<feature var="urn:xmpp:mam:2" />
|
||||
<feature var="muc_public" />
|
||||
<feature var="muc_persistent" />
|
||||
<feature var="muc_membersonly" />
|
||||
<feature var="muc_semianonymous" />
|
||||
<feature var="muc_unmoderated" />
|
||||
<feature var="muc_unsecured" />
|
||||
<x type="result" xmlns="jabber:x:data">
|
||||
<field var="FORM_TYPE" type="hidden">
|
||||
<value>http://jabber.org/protocol/muc#roominfo</value>
|
||||
</field>
|
||||
<field var="muc#roominfo_occupants" type="text-single" label="Number of occupants">
|
||||
<value>1</value>
|
||||
</field>
|
||||
<field var="muc#roomconfig_roomname" type="text-single" label="Natural-Language Room Name">
|
||||
<value>ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt</value>
|
||||
</field>
|
||||
<field var="muc#roominfo_description" type="text-single" label="Raum Beschreibung">
|
||||
<value>Lorem ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt ut labore et dolore magna</value>
|
||||
</field>
|
||||
<field var="muc#roominfo_contactjid" type="jid-multi" label="Contact Addresses (normally, room owner or owners)">
|
||||
<value>userA@user.us</value>
|
||||
<value>userB@user.us</value>
|
||||
</field>
|
||||
<field var="muc#roominfo_changesubject" type="boolean" label="Occupants May Change the Subject">
|
||||
<value>1</value>
|
||||
</field>
|
||||
<field var="muc#roomconfig_allowinvites" type="boolean" label="Occupants are allowed to invite others">
|
||||
<value>1</value>
|
||||
</field>
|
||||
<field var="muc#roomconfig_allowpm" type="list-single" label="Roles that May Send Private Messages">
|
||||
<value>anyone</value>
|
||||
<option label="Anyone">
|
||||
<value>anyone</value>
|
||||
</option>
|
||||
<option label="Anyone with Voice">
|
||||
<value>participants</value>
|
||||
</option>
|
||||
<option label="Moderators Only">
|
||||
<value>moderators</value>
|
||||
</option>
|
||||
<option label="Nobody">
|
||||
<value>none</value>
|
||||
</option>
|
||||
</field>
|
||||
<field var="muc#roominfo_lang" type="text-single" label="Natural Language for Room Discussions">
|
||||
<value>de</value>
|
||||
</field>
|
||||
<field type="text-single" var="muc#roominfo_logs">
|
||||
<value>https://logs.xmpp.org/xsf/</value>
|
||||
</field>
|
||||
</x>
|
||||
</query>
|
||||
</iq>''')
|
||||
|
||||
disco_info = parse_disco_info(stanza)
|
||||
|
||||
class GroupchatInfo(Gtk.ApplicationWindow):
|
||||
def __init__(self):
|
||||
Gtk.ApplicationWindow.__init__(self)
|
||||
self.set_name('GroupchatJoin')
|
||||
self.set_position(Gtk.WindowPosition.CENTER)
|
||||
self.set_show_menubar(False)
|
||||
self.set_title('Test Group chat info')
|
||||
|
||||
self._main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL,
|
||||
spacing=18)
|
||||
self._main_box.set_valign(Gtk.Align.FILL)
|
||||
|
||||
self._muc_info_box = GroupChatInfoScrolled(None)
|
||||
self._muc_info_box.set_vexpand(True)
|
||||
|
||||
self._main_box.add(self._muc_info_box)
|
||||
|
||||
self.add(self._main_box)
|
||||
self._muc_info_box.set_from_disco_info(disco_info)
|
||||
self._muc_info_box.set_subject(
|
||||
'Lorem ipsum dolor sit amet, consetetur sadipscing elitr sed '
|
||||
'diam nonumy eirmod tempor invidunt ut labore et dolore magna')
|
||||
self._muc_info_box.set_author('userX', None)
|
||||
self.show_all()
|
||||
|
||||
|
||||
win = GroupchatInfo()
|
||||
win.connect('destroy', Gtk.main_quit)
|
||||
win.show_all()
|
||||
Gtk.main()
|
214
test/gtk/htmltextview.py
Normal file
214
test/gtk/htmltextview.py
Normal file
|
@ -0,0 +1,214 @@
|
|||
from unittest.mock import MagicMock
|
||||
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
from gajim.common import app
|
||||
from gajim.common import configpaths
|
||||
configpaths.init()
|
||||
|
||||
|
||||
from gajim import gui
|
||||
gui.init('gtk')
|
||||
|
||||
from gajim.common.helpers import AdditionalDataDict
|
||||
|
||||
from gajim.conversation_textview import ConversationTextview
|
||||
from gajim.gui_interface import Interface
|
||||
|
||||
|
||||
app.settings = MagicMock()
|
||||
app.plugin_manager = MagicMock()
|
||||
app.logger = MagicMock()
|
||||
app.cert_store = MagicMock()
|
||||
app.storage = MagicMock()
|
||||
app.interface = Interface()
|
||||
|
||||
|
||||
XHTML = [
|
||||
'''
|
||||
<div>
|
||||
<span style="color: red; text-decoration:underline">Hello</span>
|
||||
<br/>\n
|
||||
<img src="http://images.slashdot.org/topics/topicsoftware.gif"/>
|
||||
<br/>\n
|
||||
<span style="font-size: 500%; font-family: serif">World</span>\n
|
||||
</div>
|
||||
''',
|
||||
|
||||
'''
|
||||
<hr />
|
||||
''',
|
||||
|
||||
'''
|
||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||
<p xmlns='http://www.w3.org/1999/xhtml'>Look here
|
||||
<a href='http://google.com/'>Google</a>
|
||||
</p>
|
||||
<br/>
|
||||
</body>
|
||||
''',
|
||||
|
||||
'''
|
||||
<hr />
|
||||
''',
|
||||
|
||||
'''
|
||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||
<p style='font-size:large'>
|
||||
<span style='font-style: italic'>O
|
||||
<span style='font-size:larger'>M</span>G
|
||||
</span>, I'm <span style='color:green'>green</span> with
|
||||
<span style='font-weight: bold'>envy</span>!
|
||||
</p>
|
||||
</body>
|
||||
''',
|
||||
|
||||
'''
|
||||
<hr />
|
||||
''',
|
||||
|
||||
'''
|
||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||
<p>
|
||||
As Emerson said in his essay
|
||||
<span style='font-style: italic; background-color:cyan'>
|
||||
Self-Reliance</span>:
|
||||
</p>
|
||||
<p style='margin-left: 5px; margin-right: 2%'>
|
||||
"A foolish consistency is the hobgoblin of little minds."
|
||||
</p>
|
||||
</body>
|
||||
''',
|
||||
|
||||
'''
|
||||
<hr />
|
||||
''',
|
||||
|
||||
'''
|
||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||
<p style='text-align:center'>
|
||||
Hey, are you licensed to <a href='http://www.jabber.org/'>Jabber</a>?
|
||||
</p>
|
||||
<p style='text-align:right'>
|
||||
<img src='http://www.xmpp.org/images/psa-license.jpg'
|
||||
alt='A License to Jabber' width='50%' height='50%'/>
|
||||
</p>
|
||||
</body>
|
||||
''',
|
||||
|
||||
'''
|
||||
<hr />
|
||||
''',
|
||||
|
||||
'''
|
||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||
<ul style='background-color:rgb(120,140,100)'>
|
||||
<li> One </li>
|
||||
<li> Two </li>
|
||||
<li> Three </li>
|
||||
</ul>
|
||||
<hr />
|
||||
<pre style="background-color:rgb(120,120,120)">def fac(n):
|
||||
def faciter(n,acc):
|
||||
if n==0: return acc
|
||||
return faciter(n-1, acc*n)
|
||||
if n<0: raise ValueError('Must be non-negative')
|
||||
return faciter(n,1)</pre>
|
||||
</body>
|
||||
''',
|
||||
|
||||
'''
|
||||
<hr />
|
||||
''',
|
||||
|
||||
'''
|
||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||
<ol style='background-color:rgb(120,140,100)'>
|
||||
<li> One </li>
|
||||
<li>
|
||||
Two is nested:
|
||||
<ul style='background-color:rgb(200,200,100)'>
|
||||
<li> One </li>
|
||||
<li style='font-size:50%'> Two </li>
|
||||
<li style='font-size:200%'> Three </li>
|
||||
<li style='font-size:9999pt'> Four </li>
|
||||
</ul>
|
||||
</li>
|
||||
<li> Three </li>
|
||||
</ol>
|
||||
</body>
|
||||
''',
|
||||
|
||||
'''
|
||||
<hr />
|
||||
''',
|
||||
|
||||
'''
|
||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||
<p>
|
||||
<strong>
|
||||
<a href='xmpp:example@example.org'>xmpp link</a>
|
||||
</strong>:
|
||||
</p>
|
||||
<div xmlns='http://www.w3.org/1999/xhtml'>
|
||||
<cite style='margin: 7px;' title='xmpp:examples@example.org'>
|
||||
<p>
|
||||
<strong>examples@example.org wrote:</strong>
|
||||
</p>
|
||||
<p>this cite - bla bla bla, smile- :-) …</p>
|
||||
</cite>
|
||||
<div>
|
||||
<p>some text</p>
|
||||
</div>
|
||||
</div>
|
||||
<p/>
|
||||
<p>#232/1</p>
|
||||
</body>
|
||||
''',
|
||||
|
||||
'''
|
||||
<hr />
|
||||
''',
|
||||
|
||||
'''
|
||||
<body xmlns='http://www.w3.org/1999/xhtml'>
|
||||
<img src='data:image/png;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\
|
||||
AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\
|
||||
ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\
|
||||
a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\
|
||||
ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\
|
||||
F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\
|
||||
hhx4dbgYKAAA7' alt='Larry'/>
|
||||
</body>
|
||||
''',
|
||||
|
||||
]
|
||||
|
||||
|
||||
class TextviewWindow(Gtk.Window):
|
||||
def __init__(self):
|
||||
Gtk.Window.__init__(self, title="Textview Test")
|
||||
self.set_default_size(600, 600)
|
||||
|
||||
self._textview = ConversationTextview(None)
|
||||
|
||||
scrolled = Gtk.ScrolledWindow()
|
||||
scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
|
||||
scrolled.add(self._textview.tv)
|
||||
self.add(scrolled)
|
||||
self.show()
|
||||
self._print_xhtml()
|
||||
|
||||
def _print_xhtml(self):
|
||||
for xhtml in XHTML:
|
||||
additional_data = AdditionalDataDict()
|
||||
additional_data.set_value('gajim', 'xhtml', xhtml)
|
||||
self._textview.print_real_text(None, additional_data=additional_data)
|
||||
self._textview.print_real_text('\n')
|
||||
|
||||
win = TextviewWindow()
|
||||
win.connect("destroy", Gtk.main_quit)
|
||||
win.show_all()
|
||||
Gtk.main()
|
55
test/gtk/ssl_error_dialog.py
Normal file
55
test/gtk/ssl_error_dialog.py
Normal file
|
@ -0,0 +1,55 @@
|
|||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
import OpenSSL
|
||||
|
||||
from gajim import gui
|
||||
gui.init('gtk')
|
||||
|
||||
from test.gtk import util
|
||||
from gajim.common.const import CSSPriority
|
||||
from gajim.gui.ssl_error_dialog import SSLErrorDialog
|
||||
|
||||
util.load_style('gajim.css', CSSPriority.APPLICATION)
|
||||
|
||||
cert = '''
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFhDCCBGygAwIBAgISA4oUEifTr7Y+mcdiwu6KWpcVMA0GCSqGSIb3DQEBCwUA
|
||||
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
|
||||
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA0MDMxODE3NDVaFw0x
|
||||
OTA3MDIxODE3NDVaMBsxGTAXBgNVBAMMECoubGlnaHR3aXRjaC5vcmcwggEiMA0G
|
||||
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/3mcevikse7QwDYwPcGAD9zHw3UWE
|
||||
7J8SJR349/rFTF2tBFDvEa62OUKTCg5vPKVKaXHlzruk/A7blgqsEdugycORwPD1
|
||||
7YNJ27EldrRtotjclurzKL6D/MgcaQ4cTkPOD3cWbf/L+HClGrpFt7su6Z6cTutC
|
||||
wiAYAdlfmVgSSv15F1xOTyFyfGJKQnW628Xs8xUvZh5H/SsEEum4MwVVGW06Z/A/
|
||||
mwX2jmJUb2M25S1Ma025nZpGYyAAqecTmPb3fStnXm4sdytfZhm4+nj9mH9GQIU1
|
||||
t/jO/7X7IFpc9DvVRSumSVqvNaVgiWmTLP4VxlCVJO6mibOXXUUDA5RfAgMBAAGj
|
||||
ggKRMIICjTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
|
||||
AQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFC4/ZRurw2wVFsgJBTb9Fh/3
|
||||
0aV9MB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsGAQUFBwEB
|
||||
BGMwYTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0
|
||||
Lm9yZzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNyeXB0
|
||||
Lm9yZy8wSQYDVR0RBEIwQIIQKi5saWdodHdpdGNoLm9yZ4IOKi5tZXRyb25vbWUu
|
||||
aW2CDmxpZ2h0d2l0Y2gub3JnggxtZXRyb25vbWUuaW0wTAYDVR0gBEUwQzAIBgZn
|
||||
gQwBAgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5s
|
||||
ZXRzZW5jcnlwdC5vcmcwggECBgorBgEEAdZ5AgQCBIHzBIHwAO4AdQB0ftqDMa0z
|
||||
EJEhnM4lT0Jwwr/9XkIgCMY3NXnmEHvMVgAAAWnkosBAAAAEAwBGMEQCICEfmTBk
|
||||
OxS95eiYsfTH5HdL7kfp68BSin5LqeGyyxk9AiA3qeDZNKklJTdWqYjto7kUqJNd
|
||||
YiL99SrqwzR6w+AqSwB1ACk8UZZUyDlluqpQ/FgH1Ldvv1h6KXLcpMMM9OVFR/R4
|
||||
AAABaeSiwEUAAAQDAEYwRAIgFxouOkJeqkQUe6zNI5w/6YBIQFrsrIZdPcX+r6JI
|
||||
is8CIEEETzlEyj9lWR/BSSruSp0FT5CuoNNeEG7HxrJ+gVhZMA0GCSqGSIb3DQEB
|
||||
CwUAA4IBAQAQtfs1NPNMmBQRcKsZyGLZsvpp2hIhdYi72RYnHnIl4MXbhyNj9xtI
|
||||
cJr9PQ+3FsSnxy7LDjZMpbmBuXhawOyPBPw2M0f0Tv6Eo6miwvP/X1kLE3VjTzCo
|
||||
6JPh6bEB5wa+kH/pUcGlV6uyT7IuXOiArx0VmIpTA3uwlVdfynOnR3CF20Ds4FLc
|
||||
JxbGMqRuw/sGiTLKlXc1xVil8WZjL3hokzrgI7K6np2skUjWuMZvhJgwi5QiE7/C
|
||||
ejsJoYkpvcaiaLAyVymTY/n/oM2oQpv5Mqjit+18RB9c2P+ifH5iDKC/jTKn4NNz
|
||||
8xSTlUlCBTCozjzscZVeVDIojmejWclT
|
||||
-----END CERTIFICATE-----'''
|
||||
|
||||
cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
|
||||
ssl_error_num = 10
|
||||
win = SSLErrorDialog('testacc', None, cert, ssl_error_num)
|
||||
win.connect('destroy', Gtk.main_quit)
|
||||
win.show_all()
|
||||
Gtk.main()
|
23
test/gtk/util.py
Normal file
23
test/gtk/util.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
from pathlib import Path
|
||||
|
||||
from gi.repository import Gdk
|
||||
from gi.repository import Gtk
|
||||
|
||||
|
||||
def get_gajim_dir():
|
||||
gajim_path = Path(__file__) / '..' / '..' / '..' / 'gajim'
|
||||
return gajim_path.resolve()
|
||||
|
||||
def load_style(filename, priority):
|
||||
path = get_gajim_dir() / 'data' / 'style' / filename
|
||||
try:
|
||||
with open(str(path), "r") as file:
|
||||
css = file.read()
|
||||
except Exception as exc:
|
||||
print(exc)
|
||||
return
|
||||
provider = Gtk.CssProvider()
|
||||
provider.load_from_data(bytes(css.encode('utf-8')))
|
||||
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),
|
||||
provider,
|
||||
priority)
|
Loading…
Add table
Add a link
Reference in a new issue