Commit df865e3d authored by Martin's avatar Martin

Imported upstream master from 2017-10-01

parent 76f7d45b
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Gajim - Read Me</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>Gajim Read Me</h1>
<p>Welcome to Gajim and thank you for trying out our client.</p>
<h2>Runtime Requirements</h2>
<ul>
<li>python3.4 or higher</li>
<li>python3-gi</li>
<li>python3-gi-cairo</li>
<li>gir1.2-gtk-3.0</li>
<li>python3-nbxmpp</li>
</ul>
<h2>Optional Runtime Requirements</h2>
<ul>
<li>python3-openssl (>=0.14) for <em>secure</em> SSL/TLS. Python's default SSL is insecure, so this package is highly recommended!</li>
<li>python3-pyasn1 to check SSL/TLS certificate</li>
<li>python3-crypto to enable End to end encryption</li>
<li>python3-gnupg to enable GPG encryption</li>
<li>For zeroconf (bonjour), the "enable link-local messaging" checkbox, you need dbus-glib, python-avahi</li>
<li>dnsutils (or whatever package provides the nslookup binary) for SRV support</li>
<li>gir1.2-gtkspell3-3.0 and aspell-LANG where lang is your locale eg. en, fr etc</li>
<li>gir1.2-secret-1 for GNOME Keyring or KDE support as password storage</li>
<li>gir1.2-notify-0.7 to get cooler popups</li>
<li>D-Bus running to have gajim-remote working. Some distributions split dbus-x11, which is needed for dbus to work with Gajim. Version >= 0.80 is required.</li>
<li>python3-dbus bindings (>=1.2.0)</li>
<li>gir1.2-farstream-0.2, gir1.2-gstreamer-1.0 and gir1.2-gst-plugins-base-1.0 for audio and video calls</li>
<li>gir1.2-gupnpigd-1.0 for better NAT traversing</li>
<li>gir1.2-networkmanager-1.0 for network lose detection</li>
<li>python3-idna and python3-precis-i18n for correctly parsing JIDs</li>
</ul>
<p>Some distributions also split too much python standard library. I know SUSE does. In such distros you also need python-xml the xml lib that *comes* with python and not pyxml or whatever.</p>
<h2>Compile-time Requirements</h2>
<ul>
<li>intltool (>= 0.40.1)</li>
<li>pkg-config</li>
<li>libtool</li>
</ul>
<p><strong>NOTE:</strong> If you still have problems compiling, you may want to try removing the gtk1 series of the above dependencies.</p>
<h2>Installation Procedure</h2>
<ol>
<li>tar jxvf gajim-version.tar.bz2</li>
<li>cd gajim</li>
<li>./configure</li>
<li>make (builds translations)</li>
<li>su -c make install</li>
</ol>
<p>To specify where to install do:</p>
<pre>
./configure --prefix=custom_path
</pre>
<h2>Running Gajim</h2>
<p>Just do <em>gajim</em> or you can run Gajim from your GNOME/Xfce/KDE/whatever menus.<br/><br/>
or if you use Git version and you didn't 'make install' you can also run from gajim folder with<em>./launch.py</em></p>
<hr />
<h3>Note for Git users</h3>
<p>You will need GNU autotools in order to install Gajim from Git. This includes:</p>
<ul>
<li>automake &gt;= 1.8 </li>
<li>autoconf &gt;= 2.59 </li>
<li>libtool</li>
<li>intltool-0.40.1 </li>
<li>pkgconfig &gt;= 0.19</li>
</ul>
<p>steps to compile gajim:</p>
<pre>
$ ./autogen.sh
$ ./configure
$ make
</pre>
<p>Alternatively, if you don't want to install all these packages, you can get a nightly snapshot from <a href="http://www.gajim.org/downloads/snap/">here</a> and procede as usual:</p>
<pre>
$ ./configure
$ make
</pre>
<h2>Uninstallation Procedure</h2>
<pre>
su -c make uninstall
</pre>
<p>this will try to remove Gajim from the default directories.
If you want to remove it from custom directory provide it as:
</p>
<pre>
./configure --prefix=custom_path
make uninstall
</pre>
<h2>Miscellaneous</h2>
<h3>XML &amp; Debugging</h3>
<p>If you want to see the xml stanzas and/or help us debugging
you're advised to enable verbose via advanced configuration window.
If you don't want to make this permanent, execute gajim with --verbose
everytime you want to have verbose output.</p>
<h3>FAQ/Wiki</h3>
<p>FAQ can be found at <a href="https://dev.gajim.org/gajim/gajim/wikis/help/gajimfaq">https://dev.gajim.org/gajim/gajim/wikis/help/gajimfaq</a><br/>
Wiki can be found at <a href="https://dev.gajim.org/gajim/gajim/wikis/home">https://dev.gajim.org/gajim/gajim/wikis/home</a></p>
<p>That is all, <strong>enjoy!</strong></p>
<p>
<br/>
<br/>
<br/>
(C) 2003-2017<br/>
The Gajim Team<br/>
https://gajim.org<br/>
<br/>
<br/>
PS.
We use original art and parts of sounds and other art from Psi, Gossip,
Gnomebaker, Gaim and some icons from various gnome-icons
(mostly Dropline Etiquette) we found at art.gnome.org
If you think we're violating a license please inform us. Thank you.</p>
</body></html>
# Welcome to the Gajim project Wiki
The goal of Gajim is to provide a full featured and easy to use Jabber/XMPP client. Gajim works nicely with GNOME, but does not require it to run. It is released under the GNU General Public License. If you find bugs or have ideas how Gajim can be better, please send tickets here.
## Links
- [Help and Documentation](https://dev.gajim.org/gajim/gajim/wikis/help/home)
* FAQ, Did you know that...
* Quickstart guides
* Advanced configuration
- [Community](https://dev.gajim.org/gajim/gajim/wikis/community/home)
* Advanced use of gajim
* User groups
* Reviews
- [Development](https://dev.gajim.org/gajim/gajim/wikis/development/home)
* Guidelines and documentation
* How to contribute
* The Gajim team
- Latest release:
* [Gajim 0.16.8 (.tar.gz)](https://gajim.org/downloads/0.16/gajim-0.16.8.tar.gz)
* [Gajim 0.16.8-2 (.exe)](https://gajim.org/downloads/0.16/gajim-0.16.8-2.exe)
* [Gajim 0.16.8-2 portable (.exe)](https://gajim.org/downloads/0.16/gajim-portable-0.16.8-2.exe)
* [Daily snapshot](https://www.gajim.org/downloads/snap/?M=D)
- [Bug reports and Feature requests](https://dev.gajim.org/gajim/gajim/issues)
\ No newline at end of file
# Welcome to Gajim
### Runtime Requirements
- python3.4 or higher
- python3-gi
- python3-gi-cairo
- gir1.2-gtk-3.0
- python3-nbxmpp
- python3-openssl (>=0.14)
- python3-pyasn1
### Optional Runtime Requirements
- python3-crypto to enable End to end encryption
- python3-gnupg to enable GPG encryption
- For zeroconf (bonjour), the "enable link-local messaging" checkbox, you need dbus-glib, python-avahi
- dnsutils (or whatever package provides the nslookup binary) for SRV support
- gir1.2-gtkspell3-3.0 and aspell-LANG where lang is your locale eg. en, fr etc
- gir1.2-secret-1 for GNOME Keyring or KDE support as password storage
- D-Bus running to have gajim-remote working. Some distributions split dbus-x11, which is needed for dbus to work with Gajim. Version >= 0.80 is required.
- python3-dbus bindings (>=1.2.0)
- gir1.2-farstream-0.2, gir1.2-gstreamer-1.0 and gir1.2-gst-plugins-base-1.0 for audio and video calls
- gir1.2-gupnpigd-1.0 for better NAT traversing
- gir1.2-networkmanager-1.0 for network lose detection
- python3-idna and python3-precis-i18n for correctly parsing JIDs
### Compile-time Requirements
- python-setuptools
### Installation Procedure
##### Linux / Mac
``./setup.py install --root=/``
or
``pip install .`` (python-pip is required)
##### Windows
see [README](./win/README.md)
### Miscellaneous
##### Snapshots
- [Daily Linux](https://www.gajim.org/downloads/snap/?M=D)
- [Daily Windows](https://gajim.org/downloads/snap/win)
##### Debugging
Execute gajim with --verbose
##### Links
- [FAQ](https://dev.gajim.org/gajim/gajim/wikis/help/gajimfaq)
- [Wiki](https://dev.gajim.org/gajim/gajim/wikis/home)
That is all, **enjoy**!
(C) 2003-2017
The Gajim Team
[https://gajim.org](https://gajim.org)
We use original art and parts of sounds and other art from Psi, Gossip, Gnomebaker, Gaim and some icons from various gnome-icons (mostly Dropline Etiquette) we found at art.gnome.org If you think we're violating a license please inform us. Thank you.
\ No newline at end of file
......@@ -22,8 +22,8 @@ install:
}
bash 'pacman -Sy --noconfirm git'
bash 'git clone https://dev.gajim.org/gajim/gajim.git'
bash 'git clone C:/projects/gajim C:/msys64/home/appveyor/gajim'
- cmd: '%MSYS% C:/msys64/home/appveyor/gajim/win/build.sh'
# Ugly workaround, because i found no way to tell when mingw32.exe returns
- cmd: timeout 900
......
......@@ -461,17 +461,17 @@ class ChatControl(ChatControlBase):
else:
banner_image.show()
if state == self.JINGLE_STATE_CONNECTING:
banner_image.set_from_stock(
Gtk.STOCK_CONVERT, 1)
banner_image.set_from_icon_name(
Gtk.STOCK_CONVERT, Gtk.IconSize.MENU)
elif state == self.JINGLE_STATE_CONNECTION_RECEIVED:
banner_image.set_from_stock(
Gtk.STOCK_NETWORK, 1)
banner_image.set_from_icon_name(
"network-workgroup", Gtk.IconSize.MENU)
elif state == self.JINGLE_STATE_CONNECTED:
banner_image.set_from_stock(
Gtk.STOCK_CONNECT, 1)
banner_image.set_from_icon_name(
Gtk.STOCK_CONNECT, Gtk.IconSize.MENU)
elif state == self.JINGLE_STATE_ERROR:
banner_image.set_from_stock(
Gtk.STOCK_DIALOG_WARNING, 1)
banner_image.set_from_icon_name(
"dialog-warning", Gtk.IconSize.MENU)
self.update_toolbar()
def update_audio(self):
......
......@@ -433,10 +433,10 @@ class CommonConnection:
return
app.logger.insert_into_logs(jid, obj.timestamp, obj.kind,
message=obj.message,
subject=obj.subject,
additional_data=obj.additional_data,
stanza_id=obj.stanza_id)
message=obj.message,
subject=obj.subject,
additional_data=obj.additional_data,
stanza_id=obj.stanza_id)
def ack_subscribed(self, jid):
"""
......@@ -1473,7 +1473,7 @@ class Connection(CommonConnection, ConnectionHandlers):
if not app.config.get_per('accounts', self.name, 'savepass'):
# Forget password, it's wrong
self.password = None
app.log.debug("Couldn't authenticate to %s" % self._hostname)
log.debug("Couldn't authenticate to %s" % self._hostname)
self.disconnect(on_purpose = True)
app.nec.push_incoming_event(OurShowEvent(None, conn=self,
show='offline'))
......
......@@ -1059,10 +1059,10 @@ class ConnectionHandlersBase:
show = app.logger.convert_show_values_to_db_api_values(obj.show)
if show is not None:
app.logger.insert_into_logs(nbxmpp.JID(obj.jid).getStripped(),
time_time(),
KindConstant.STATUS,
message=obj.status,
show=show)
time_time(),
KindConstant.STATUS,
message=obj.status,
show=show)
def _nec_gc_presence_received(self, obj):
if obj.conn.name != self.name:
......@@ -1185,11 +1185,11 @@ class ConnectionHandlersBase:
# usually it hold description and can be send at each connection
# so don't store it in logs
app.logger.insert_into_logs(obj.jid,
obj.timestamp,
KindConstant.GC_MSG,
message=obj.msgtxt,
contact_name=obj.nick,
additional_data=obj.additional_data)
obj.timestamp,
KindConstant.GC_MSG,
message=obj.msgtxt,
contact_name=obj.nick,
additional_data=obj.additional_data)
# store in memory time of last message logged.
# this will also be saved in rooms_last_message_time table
# when we quit this muc
......@@ -1207,10 +1207,10 @@ class ConnectionHandlersBase:
if session.is_loggable():
app.logger.insert_into_logs(nbxmpp.JID(frm).getStripped(),
tim,
KindConstant.ERROR,
message=error_msg,
subject=subject)
tim,
KindConstant.ERROR,
message=error_msg,
subject=subject)
app.nec.push_incoming_event(MessageErrorEvent(None, conn=self,
fjid=frm, error_code=msg.getErrorCode(), error_msg=error_msg,
......
......@@ -869,11 +869,11 @@ class GcPresenceReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
if show is not None:
fjid = nbxmpp.JID(self.fjid)
app.logger.insert_into_logs(fjid.getStripped(),
time_time(),
KindConstant.GCSTATUS,
contact_name=fjid.getResource(),
message=st,
show=show)
time_time(),
KindConstant.GCSTATUS,
contact_name=fjid.getResource(),
message=st,
show=show)
if self.avatar_sha == '':
# contact has no avatar
puny_nick = helpers.sanitize_filename(self.nick)
......
......@@ -25,12 +25,15 @@
##
import os
import logging
from gajim.common import app
from gajim.common import exceptions
_GAJIM_ERROR_IFACE = 'org.gajim.dbus.Error'
log = logging.getLogger('gajim.c.dbus')
try:
import dbus
from dbus.mainloop.glib import DBusGMainLoop
......@@ -155,7 +158,7 @@ def get_interface(interface, path, start_service=True):
obj = bus.get_object(interface, path)
return dbus.Interface(obj, interface)
except Exception as e:
app.log.debug(str(e))
log.debug(str(e))
return None
......
......@@ -23,6 +23,9 @@
from gajim.common import app
import os
import logging
log = logging.getLogger('gajim.c.sleepy')
STATE_UNKNOWN = 'OS probably not supported'
......@@ -52,7 +55,7 @@ try:
from gajim.common import idle
idle.xss_available
except Exception:
app.log.debug('Unable to load idle module')
log.debug('Unable to load idle module')
SUPPORTED = False
class SleepyWindows:
......
......@@ -20,8 +20,11 @@
from gajim.common import app
import select
import re
import logging
from gajim.common.zeroconf.zeroconf import Constant
log = logging.getLogger('gajim.c.z.zeroconf_bonjour')
try:
import pybonjour
except ImportError:
......@@ -56,7 +59,7 @@ class Zeroconf:
def browse_callback(self, sdRef, flags, interfaceIndex, errorCode, serviceName, regtype, replyDomain):
app.log.debug('Found service %s in domain %s on %i(type: %s).' % (serviceName, replyDomain, interfaceIndex, regtype))
log.debug('Found service %s in domain %s on %i(type: %s).' % (serviceName, replyDomain, interfaceIndex, regtype))
if not self.connected:
return
if errorCode != pybonjour.kDNSServiceErr_NoError:
......@@ -72,7 +75,7 @@ class Zeroconf:
while not self.resolved:
ready = select.select([resolve_sdRef], [], [], resolve_timeout)
if resolve_sdRef not in ready[0]:
app.log.debug('Resolve timed out')
log.debug('Resolve timed out')
break
pybonjour.DNSServiceProcessResult(resolve_sdRef)
else:
......@@ -81,7 +84,7 @@ class Zeroconf:
resolve_sdRef.close()
def remove_service_callback(self, name):
app.log.debug('Service %s disappeared.' % name)
log.debug('Service %s disappeared.' % name)
if not self.connected:
return
if name != self.name:
......@@ -121,8 +124,8 @@ class Zeroconf:
txt = pybonjour.TXTRecord.parse(txtRecord)
app.log.debug('Service data for service %s on %i:' % (fullname, interfaceIndex))
app.log.debug('Host %s, port %i, TXT data: %s' % (hosttarget, port, txt._items))
log.debug('Service data for service %s on %i:' % (fullname, interfaceIndex))
log.debug('Host %s, port %i, TXT data: %s' % (hosttarget, port, txt._items))
if not self.connected:
return
......@@ -176,11 +179,11 @@ class Zeroconf:
def service_added_callback(self, sdRef, flags, errorCode, name, regtype, domain):
if errorCode == pybonjour.kDNSServiceErr_NoError:
app.log.debug('Service successfully added')
log.debug('Service successfully added')
def service_add_fail_callback(self, err):
if err[0][0] == pybonjour.kDNSServiceErr_NameConflict:
app.log.debug('Error while adding service. %s' % str(err))
log.debug('Error while adding service. %s' % str(err))
parts = self.username.split(' ')
#check if last part is a number and if, increment it
......@@ -230,7 +233,7 @@ class Zeroconf:
except pybonjour.BonjourError as e:
self.service_add_fail_callback(e)
else:
app.log.debug('Publishing service %s of type %s' % (self.name, self.stype))
log.debug('Publishing service %s of type %s' % (self.name, self.stype))
ready = select.select([sdRef], [], [], resolve_timeout)
if sdRef in ready[0]:
......@@ -252,7 +255,7 @@ class Zeroconf:
self.announced = False
return True
except pybonjour.BonjourError as e:
app.log.debug(e)
log.debug(e)
return False
......@@ -282,7 +285,7 @@ class Zeroconf:
self.remove_announce()
def browse_domain(self, domain=None):
app.log.debug('starting to browse')
log.debug('starting to browse')
try:
self.browse_sdRef = pybonjour.DNSServiceBrowse(regtype=self.stype, domain=domain, callBack=self.browse_callback)
except pybonjour.BonjourError as e:
......@@ -310,7 +313,7 @@ class Zeroconf:
try:
ready = select.select([resolve_sdRef], [], [], resolve_timeout)
if resolve_sdRef not in ready[0]:
app.log.debug('Resolve timed out (in resolve_all)')
log.debug('Resolve timed out (in resolve_all)')
break
pybonjour.DNSServiceProcessResult(resolve_sdRef)
finally:
......
......@@ -2443,7 +2443,7 @@ class AccountCreationWizardWindow:
self.go_online_checkbutton.show()
img = self.xml.get_object('finish_image')
if self.modify:
img.set_from_stock(Gtk.STOCK_APPLY, Gtk.IconSize.DIALOG)
img.set_from_icon_name(Gtk.STOCK_APPLY, Gtk.IconSize.DIALOG)
else:
path_to_file = gtkgui_helpers.get_icon_path('org.gajim.Gajim', 48)
img.set_from_file(path_to_file)
......@@ -2701,7 +2701,7 @@ class AccountCreationWizardWindow:
self.go_online_checkbutton.hide()
self.show_vcard_checkbutton.hide()
img = self.xml.get_object('finish_image')
img.set_from_stock(Gtk.STOCK_DIALOG_ERROR, Gtk.IconSize.DIALOG)
img.set_from_icon_name("dialog-error", Gtk.IconSize.DIALOG)
finish_text = '<big><b>%s</b></big>\n\n%s' % (
_('An error occurred during account creation'), obj.reason)
self.finish_label.set_markup(finish_text)
......@@ -2735,7 +2735,7 @@ class AccountCreationWizardWindow:
if self.account in app.config.get_per('accounts'):
app.config.del_per('accounts', self.account)
img = self.xml.get_object('finish_image')
img.set_from_stock(Gtk.STOCK_DIALOG_ERROR, Gtk.IconSize.DIALOG)
img.set_from_icon_name("dialog-error", Gtk.IconSize.DIALOG)
finish_text = '<big><b>%s</b></big>\n\n%s' % (_(
'An error occurred during account creation'), obj.reason)
self.finish_label.set_markup(finish_text)
......
......@@ -1358,8 +1358,8 @@ class ConversationTextview(GObject.GObject):
self.tv.display_html(xhtml, self.tv, self, iter_=iter_)
return
except Exception as e:
app.log.debug('Error processing xhtml: ' + str(e))
app.log.debug('with |' + xhtml + '|')
log.debug('Error processing xhtml: ' + str(e))
log.debug('with |' + xhtml + '|')
# /me is replaced by name if name is given
if name and (text.startswith('/me ') or text.startswith('/me\n')):
......
......@@ -891,7 +891,7 @@ class AgentBrowser:
self.browse_button = Gtk.Button()
self.browse_button.connect('clicked', self.on_browse_button_clicked)
self.window.action_buttonbox.add(self.browse_button)
image = Gtk.Image.new_from_stock(Gtk.STOCK_OPEN, Gtk.IconSize.BUTTON)
image = Gtk.Image.new_from_icon_name("document-open", Gtk.IconSize.BUTTON)
self.browse_button.set_image(image)
label = _('Browse')
self.browse_button.set_label(label)
......@@ -1299,7 +1299,7 @@ class ToplevelAgentBrowser(AgentBrowser):
self.execute_button = Gtk.Button()
self.execute_button.connect('clicked', self.on_execute_button_clicked)
self.window.action_buttonbox.add(self.execute_button)
image = Gtk.Image.new_from_stock(Gtk.STOCK_EXECUTE, Gtk.IconSize.BUTTON)
image = Gtk.Image.new_from_icon_name("system-run", Gtk.IconSize.BUTTON)
self.execute_button.set_image(image)
label = _('Execute Command')
self.execute_button.set_label(label)
......@@ -1314,8 +1314,6 @@ class ToplevelAgentBrowser(AgentBrowser):
self.join_button = Gtk.Button()
self.join_button.connect('clicked', self.on_join_button_clicked)
self.window.action_buttonbox.add(self.join_button)
image = Gtk.Image.new_from_stock(Gtk.STOCK_CONNECT, Gtk.IconSize.BUTTON)
self.join_button.set_image(image)
label = _('Join')
self.join_button.set_label(label)
self.join_button.show_all()
......@@ -1323,7 +1321,7 @@ class ToplevelAgentBrowser(AgentBrowser):
self.search_button = Gtk.Button()
self.search_button.connect('clicked', self.on_search_button_clicked)
self.window.action_buttonbox.add(self.search_button)
image = Gtk.Image.new_from_stock(Gtk.STOCK_FIND, Gtk.IconSize.BUTTON)
image = Gtk.Image.new_from_icon_name("edit-find", Gtk.IconSize.BUTTON)
self.search_button.set_image(image)
label = _('Search')
self.search_button.set_label(label)
......
......@@ -897,8 +897,8 @@ class FileTransfersWindow:
if status:
label = _('Pause')
self.pause_button.set_label(label)
self.pause_button.set_image(Gtk.Image.new_from_stock(
Gtk.STOCK_MEDIA_PAUSE, Gtk.IconSize.MENU))
self.pause_button.set_image(Gtk.Image.new_from_icon_name(
"media-playback-pause", Gtk.IconSize.MENU))
self.pause_menuitem.set_sensitive(True)
self.pause_menuitem.set_no_show_all(False)
......@@ -908,8 +908,8 @@ class FileTransfersWindow:
else:
label = _('_Continue')
self.pause_button.set_label(label)
self.pause_button.set_image(Gtk.Image.new_from_stock(
Gtk.STOCK_MEDIA_PLAY, Gtk.IconSize.MENU))
self.pause_button.set_image(Gtk.Image.new_from_icon_name(
"media-playback-start", Gtk.IconSize.MENU))
self.pause_menuitem.hide()
self.pause_menuitem.set_no_show_all(True)
self.continue_menuitem.set_sensitive(True)
......
......@@ -2362,7 +2362,7 @@ class Interface:
if pixbuf is None:
return
if typ not in ('jpeg', 'png'):
app.log.info('gtkpixbuf cannot save other than jpeg and '\
log.info('gtkpixbuf cannot save other than jpeg and '\
'png formats. saving \'%s\' avatar as png file (originaly: %s)'\
% (jid, typ))
typ = 'png'
......
......@@ -35,6 +35,11 @@ class OptionsDialog(Gtk.ApplicationWindow):
self.show_all()
self.listbox.connect('row-activated', self.on_row_activated)
self.connect('key-press-event', self.on_key_press)
def on_key_press(self, widget, event):
if event.keyval == Gdk.KEY_Escape:
self.destroy()
@staticmethod
def on_row_activated(listbox, row):
......
......@@ -135,9 +135,6 @@ class PluginsWindow(object):
model, iter = treeview_selection.get_selected()
if iter:
plugin = model.get_value(iter, Column.PLUGIN)
plugin_name = model.get_value(iter, Column.NAME)
is_active = model.get_value(iter, Column.ACTIVE)
self._display_installed_plugin_info(plugin)
else:
self._clear_installed_plugin_info()
......@@ -236,11 +233,11 @@ class PluginsWindow(object):
model, iter = selection.get_selected()
if iter:
plugin = model.get_value(iter, Column.PLUGIN)
plugin_name = model.get_value(iter, Column.NAME)
is_active = model.get_value(iter, Column.ACTIVE)
result = plugin.config_dialog.run(self.window)
if isinstance(plugin.config_dialog, GajimPluginConfigDialog):
plugin.config_dialog.run(self.window)
else:
plugin.config_dialog(self.window)