...
 
Commits (168)
Gajim 0.13.4 (02 April 2010)
* Add japanese translation
* Fix some TLS connection
* Don't raise a lot of "DB Error" dialog
* Fix contact synchronisation
* Minor fixes
Gajim 0.13.3 (23 February 2010)
* Fix facebook xmpp server connection
* Fix copy / paste with Ctrl+C on non-latin keyboard
* Fix sending PEP information when connecting
* Fix parsing HTML messages that have ascii markup
Gajim 0.13.2 (14 January 2010)
* Fix some translations
* Fix string comparison according to locales
* Fix resizing of groupchat occupant treeview
* Fix some gnomekeyring glitches
* better SRV usage with libasyncns
* copy emoticons when we copy / paste in conversations
Gajim 0.13.1 (28 November 2009)
* Fix a bug when no account exists and bonjour is not available
* Fix a bug when opening advanced option in MUC
* Fix a bug when using non-BOSH proxies
Gajim 0.13 (24 November 2009)
* Improve gtkspell (fix memleak)
* BOSH connection
* Roster versioning
* Ability to send contacts
* GUI to send XHTML messages
* Improve sessions handling
* pubsub storage (for bookmarks)
* Ability to select account when joining a groupchat
* Better Gnome keyring support
* Ability to ignore occupants in groupchats
* Ability to show / hide self contact row
* Automatically go away when screensaver is enabled under windows
* Ability to enable / disable accounts
* better URL recognition
* groupchat autoreconnect
* Store passwords in KDE wallet if available
* Better MUC errors handling
* Fix sound player launch (don't create zombies anymore)
* Optional shell like completion
* New color theme
Gajim 0.12.5 (08 August 2009)
* Don't depend on GTK 2.14
Gajim 0.12.4 (07 August 2009)
* Fix History manager
* Fix file transfer proxy discovering at connection
* Improve filetransfer with IPv6
* Fix zeroconf when receiving badly encoded info
Gajim 0.12.3 (12 June 2009)
* Fix PLAIN authentication (in particular with Gtalk
* fix PEP discovery
Gajim 0.12.2 (07 June 2009)
* Better keepalive / ping behaviour
* Fix custom port handling
* Improve error messages handling
* Totem support for played music
* Fix SSL with some servers
* Handle XFCE notification-daemon
* Restore old behaviour of click on systray: left click to open events
* Network manager 0.7 support
* Move logs file under windows to $APPDATA/gajim
* Improve Kerberos support
* Many bugfixes here and there
* Add -c option to history_manager
Gajim 0.12.1 (21 December 2008)
* Fix filetransfer
......
......@@ -38,7 +38,7 @@ Gajim is a GTK+ app that loves GNOME. You can do 'make' so you don't require gno
<li>gnome-python-desktop (for GnomeKeyring support)</li>
<li>notification-daemon or notify-python (and D-Bus) 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>python-dbus bindings (>=0.80)</li>
<li>python-dbus bindings (>=0.81)</li>
<li>python-sexy to have clickable URLs in chat windows</li>
<li>python-kerberos to use GSSAPI authentification. Note: version1.1 or higher is required</li>
</ul>
......
......@@ -2,7 +2,9 @@ Anders Ström
Christophe Got
Dennis Craven
Guillaume Morin
Gvorcek Spajreh
Josef Vybíral
Membris Khan
Rederick Asher
Jakub Szypulka
AC_INIT([Gajim - A Jabber Instant Messager],
[0.12.5.7-dev],[http://trac.gajim.org/],[gajim])
[0.13.4],[http://trac.gajim.org/],[gajim])
AC_PREREQ([2.59])
AC_CONFIG_HEADER(config.h)
......
......@@ -6,7 +6,7 @@
<property name="border_width">6</property>
<property name="type_hint">dialog</property>
<property name="has_separator">False</property>
<signal name="delete_event" handler="on_input_dialog_delete_event"/>
<signal name="destroy" handler="on_input_dialog_distroy"/>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox10">
<property name="visible">True</property>
......
......@@ -14,6 +14,7 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="scrollable">True</property>
<property name="tab_border">0</property>
<child>
<widget class="GtkVBox" id="chat_child_vbox">
<property name="can_focus">True</property>
......@@ -510,7 +511,6 @@
<child>
<widget class="GtkImage" id="image1329">
<property name="visible">True</property>
<property name="ypad">6</property>
<property name="stock">gtk-close</property>
<property name="icon_size">1</property>
</widget>
......
......@@ -85,12 +85,42 @@
</child>
<child>
<widget class="GtkButton" id="accept_button">
<property name="label" translatable="yes">gtk-ok</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_accept_button_clicked"/>
<child>
<widget class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<child>
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="spacing">3</property>
<child>
<widget class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="stock">gtk-ok</property>
</widget>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="accept_button_label">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">_OK</property>
<property name="use_underline">True</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
......
......@@ -2507,3 +2507,48 @@ FS5/y1Et5gKksLNPQqaYEVFuvB4AGTp2HkdUGo8Oz9Dd4zTcvTSTeo/9mVxqdxKa
lhMZMHD/ivqg8faZSQNYMg6xq7I=
-----END CERTIFICATE-----
StartCom_root_Certificate
-----BEGIN CERTIFICATE-----
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
-----END CERTIFICATE-----
gajim (0.13.1-1) unstable; urgency=low
* New upstream release. Closes: #559905
* Update PyGTK requirement to 2.12.0 minimum
* Fix filetransfer proxies testing, keepalive handling, memory leak.
Closes: #524514
* Better connection. Closes: #547267
* Fix proxy test on startup. Closes: #453910
* Fix sound playing. Closes: #527275
* Update debhelper compatibility level to 7
-- Yann Leboulanger <asterix@lagaule.org> Sun, 29 Nov 2009 01:21:04 +0100
gajim (0.12.5-1) unstable; urgency=low
* New upstream release which fixes file transfer. Closes: #544466
* Fix history manager. Closes: #539109
* Fix custom host / port usage. Closes: #539267
* update python-gnome* dependancies. Closes: #541553
-- Yann Leboulanger <asterix@lagaule.org> Sun, 08 Aug 2009 00:06:15 +0100
gajim (0.12.3-1) unstable; urgency=low
* New upstream release.
* OS info are now caches. Closes: #509675
* keepalive system has been improved. Closes: #521144
* Recommends python-crypto for encryption. Closes: #513892
* update to 3.8.2 Debian Policy
* update to debhelper V6
* added watch file
-- Yann Leboulanger <asterix@lagaule.org> Sun, 24 Jun 2009 20:46:15 +0100
gajim (0.12.1-1) unstable; urgency=low
* New upstream release.
......
Source: gajim
Section: net
Priority: optional
Maintainer: Yann Le Boulanger <asterix@lagaule.org>
Build-Depends: debhelper (>= 5.0.37.2), cdbs (>= 0.4.43), python-support (>= 0.7.1), python-dev, libgtk2.0-dev, python-gtk2-dev, libgtkspell-dev, gettext (>= 0.17-4), libxss-dev, intltool (>= 0.40.1), imagemagick, python-central (>= 0.5), libdbus-1-dev
Maintainer: Yann Leboulanger <asterix@lagaule.org>
Build-Depends: debhelper (>= 7), cdbs (>= 0.4.43), python-support (>= 0.7.1), python-dev, libgtk2.0-dev, python-gtk2-dev, gettext (>= 0.17-4), intltool (>= 0.40.1), imagemagick, python-central (>= 0.5)
Build-Conflicts: python2.3
XS-Python-Version: >= 2.4
Standards-Version: 3.7.3
Standards-Version: 3.8.3
Homepage: http://www.gajim.org
Vcs-Svn: svn://svn.gajim.org/gajim/
Vcs-Browser: http://trac.gajim.org/browser
Vcs-Hg: http://hg.gajim.org/gajim/
Vcs-Browser: http://hg.gajim.org/gajim/file
Package: gajim
Architecture: any
XB-Python-Version: ${python:Versions}
Depends: python (>= 2.4), python-support (>= 0.7.1), python-glade2 (>= 2.8.0), python-gtk2 (>= 2.12.0), python-pysqlite2 | python (>= 2.5), dnsutils, libc6
Recommends: dbus, python-dbus, notification-daemon, python-gnupginterface, python-openssl
Suggests: python-gnome2, nautilus-sendto, avahi-daemon, python-avahi, network-manager, libgtkspell0, aspell-en, python-gnome2-desktop (>= 2.16.0), gnome-keyring, python-sexy, python-kerberos (>= 1.1)
Depends: ${misc:Depends}, ${shlibs:Depends}, ${python:Depends}, python-support (>= 0.7.1), python-glade2 (>= 2.12.0), python-gtk2 (>= 2.12.0), dnsutils
Recommends: dbus, python-dbus, notification-daemon, python-gnupginterface, python-openssl, python-crypto
Suggests: python-gconf, python-gnome2, nautilus-sendto, avahi-daemon, python-avahi, network-manager, libgtkspell0, aspell-en, python-gnomekeyring, gnome-keyring, python-sexy, python-kerberos (>= 1.1), texlive-latex-base, dvipng
Description: Jabber client written in PyGTK
Gajim is a Jabber client. It has a tabbed user interface with normal chats,
group chats, and has many features such as, TLS, GPG, SSL, multiple accounts,
......
......@@ -2,12 +2,12 @@ This package was debianized by Yann Leboulanger asterix@lagaule.org on
Wed, 16 Jun 2005 20:00:00 +0100.
It was downloaded from:
http://www.gajim.org/downloads/gajim-0.11.0.tar.gz
http://www.gajim.org/downloads/
Upstream Authors:
- Yann Le Boulanger <asterix@lagaule.org>
- Dimitur Kirov <dkirov@gmail.com>
- Travis Shirk <travis@pobox.com>
- Jean-Marie Traissard <jim@lapin.org>
- Stephan Erb <steve-e@h3c.de>
Copyright: (c) 2003-2009 Gajim Team
......@@ -22,7 +22,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Debian system; see the file /usr/share/common-licenses/GPL. If not,
along with Debian system; see the file /usr/share/common-licenses/GPL-3. If not,
write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
gajim binary: script-not-executable
data/gajim.1
data/gajim-remote.1
debian/gajim-history-manager.1
......@@ -16,4 +16,3 @@ binary-install/gajim::
rm $(DEB_DESTDIR)/usr/share/gajim/src/common/GnuPGInterface.py*
dh_pysupport -pgajim
convert $(DEB_DESTDIR)/usr/share/pixmaps/gajim.png -resize 32x32 $(DEB_DESTDIR)/usr/share/pixmaps/gajim.xpm
install -m 0644 debian/gajim.lintian $(DEB_DESTDIR)/usr/share/lintian/overrides/gajim
......@@ -174,7 +174,6 @@ Section "Gajim" SecGajim
File "bin\pywintypes25.dll"
File "bin\OpenSSL.rand.pyd"
File "bin\select.pyd"
File "bin\Crypto.Hash.SHA256.pyd"
File "bin\sqlite3.dll"
File "bin\ssleay32.dll"
File "bin\OpenSSL.SSL.pyd"
......@@ -190,7 +189,7 @@ Section "Gajim" SecGajim
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayName" "Gajim"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "UninstallString" "$INSTDIR\Uninstall.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayIcon" "$INSTDIR\bin\Gajim.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayVersion" "0.12.1"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayVersion" "0.13.4"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "URLInfoAbout" "http://www.gajim.org/"
WriteUninstaller "$INSTDIR\Uninstall.exe"
......@@ -286,6 +285,11 @@ Section "sun" SecIconsetsSun
File /r "data\iconsets\sun"
SectionEnd
Section "wroop" SecIconsetsWroop
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\wroop"
SectionEnd
Section "transports" SecIconsetsTransports
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\transports"
......@@ -646,7 +650,6 @@ Section "Uninstall"
Delete "$INSTDIR\bin\bz2.pyd"
Delete "$INSTDIR\bin\cairo._cairo.pyd"
Delete "$INSTDIR\bin\Crypto.Cipher.AES.pyd"
Delete "$INSTDIR\bin\Crypto.Hash.SHA256.pyd"
Delete "$INSTDIR\bin\gajim.exe"
Delete "$INSTDIR\bin\gobject._gobject.pyd"
Delete "$INSTDIR\bin\gtk._gtk.pyd"
......@@ -692,6 +695,7 @@ Section "Uninstall"
RMDir /r "$INSTDIR\data\iconsets\gota"
RMDir /r "$INSTDIR\data\iconsets\jabberbulb"
RMDir /r "$INSTDIR\data\iconsets\sun"
RMDir /r "$INSTDIR\data\iconsets\wroop"
RMDir /r "$INSTDIR\data\iconsets\transports"
RMDir "$INSTDIR\data\iconsets"
RMDir "$INSTDIR\data"
......
#!/bin/sh
cd "$(dirname $0)/src"
exec python -OOt gajim.py $@
exec python -OOt gajim.py "$@"
......@@ -29,3 +29,4 @@ gl
lt
da
uk
ja
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -65,13 +65,14 @@ opts = {
'excludes': [
'docutils'
],
'optimize': 2,
}
}
setup(
name = 'Gajim',
version = '0.12.1',
version = '0.13.4',
description = 'A full featured Jabber client',
author = 'Gajim Development Team',
url = 'http://www.gajim.org/',
......
......@@ -525,8 +525,13 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
self.connect_style_event(widget, opts[0], opts[1])
def _conv_textview_key_press_event(self, widget, event):
if (event.state & gtk.gdk.CONTROL_MASK and event.keyval in (gtk.keysyms.c,
gtk.keysyms.Insert)) or (event.state & gtk.gdk.SHIFT_MASK and \
# translate any layout to latin_layout
keymap = gtk.gdk.keymap_get_default()
keycode = keymap.get_entries_for_keyval(event.keyval)[0][0]
keycode_c = keymap.get_entries_for_keyval(gtk.keysyms.c)[0][0]
keycode_ins = keymap.get_entries_for_keyval(gtk.keysyms.Insert)[0][0]
if (event.state & gtk.gdk.CONTROL_MASK and keycode in (keycode_c,
keycode_ins)) or (event.state & gtk.gdk.SHIFT_MASK and \
event.keyval in (gtk.keysyms.Page_Down, gtk.keysyms.Page_Up)):
return False
self.parent_win.notebook.emit('key_press_event', event)
......@@ -1235,7 +1240,6 @@ class ChatControl(ChatControlBase):
# Add lock image to show chat encryption
self.lock_image = self.xml.get_widget('lock_image')
self.lock_tooltip = gtk.Tooltips()
# Convert to GC icon
img = self.xml.get_widget('convert_to_gc_button_image')
......@@ -1325,8 +1329,6 @@ class ChatControl(ChatControlBase):
self._show_lock_image(self.gpg_is_active, 'GPG', self.gpg_is_active,
self.session and self.session.is_loggable(), True)
self.status_tooltip = gtk.Tooltips()
self.update_ui()
# restore previous conversation
self.restore_conversation()
......@@ -1516,6 +1518,8 @@ class ChatControl(ChatControlBase):
# do we have something bigger to show?
if avatar_w > scaled_buf_w or avatar_h > scaled_buf_h:
# wait for 0.5 sec in case we leave earlier
if self.show_bigger_avatar_timeout_id is not None:
gobject.source_remove(self.show_bigger_avatar_timeout_id)
self.show_bigger_avatar_timeout_id = gobject.timeout_add(500,
self.show_bigger_avatar, widget)
......@@ -1524,6 +1528,7 @@ class ChatControl(ChatControlBase):
# did we add a timeout? if yes remove it
if self.show_bigger_avatar_timeout_id is not None:
gobject.source_remove(self.show_bigger_avatar_timeout_id)
self.show_bigger_avatar_timeout_id = None
def on_avatar_eventbox_button_press_event(self, widget, event):
'''If right-clicked, show popup'''
......@@ -1604,7 +1609,6 @@ class ChatControl(ChatControlBase):
jid = contact.jid
banner_name_label = self.xml.get_widget('banner_name_label')
banner_name_tooltip = gtk.Tooltips()
name = contact.get_shown_name()
if self.resource:
......@@ -1679,8 +1683,7 @@ class ChatControl(ChatControlBase):
status_text = '<span %s>%s</span>' % (font_attrs_small, status_text)
else:
status_text = '<span %s>%s</span>' % (font_attrs_small, status_escaped)
self.status_tooltip.set_tip(self.banner_status_label,
status)
self.banner_status_label.set_tooltip_text(status)
self.banner_status_label.show()
self.banner_status_label.set_no_show_all(False)
else:
......@@ -1691,7 +1694,7 @@ class ChatControl(ChatControlBase):
self.banner_status_label.set_markup(status_text)
# setup the label that holds name and jid
banner_name_label.set_markup(label_text)
banner_name_tooltip.set_tip(banner_name_label, label_tooltip)
banner_name_label.set_tooltip_text(label_tooltip)
def _toggle_gpg(self):
if not self.gpg_is_active and not self.contact.keyID:
......@@ -1768,7 +1771,7 @@ class ChatControl(ChatControlBase):
'status': status_string, 'authenticated': authenticated_string,
'logged': logged_string}
self.lock_tooltip.set_tip(self.authentication_button, tooltip)
self.authentication_button.set_tooltip_text(tooltip)
self.widget_set_visible(self.authentication_button, not visible)
self.lock_image.set_sensitive(enc_enabled)
......@@ -2171,9 +2174,6 @@ class ChatControl(ChatControlBase):
self.reset_kbd_mouse_timeout_vars()
def shutdown(self):
# destroy banner tooltip - bug #pygtk for that!
self.status_tooltip.destroy()
# Send 'gone' chatstate
self.send_chatstate('gone', self.contact)
self.contact.chatstate = None
......
......@@ -20,13 +20,15 @@ class BaseError(Exception):
"""
def __init__(self, message, command=None, name=None):
self.message = message
self.command = command
self.name = name
if command and not name:
self.name = command.first_name
super(BaseError, self).__init__(message)
super(BaseError, self).__init__()
class DefinitionError(BaseError):
"""
......
......@@ -65,7 +65,9 @@ class CommandProcessor(object):
Try to process text as a command. Returns True if it has been processed
as a command and False otherwise.
"""
if not text.startswith(self.COMMAND_PREFIX):
prefix = text.startswith(self.COMMAND_PREFIX)
length = len(text) > len(self.COMMAND_PREFIX)
if not (prefix and length):
return False
body = text[len(self.COMMAND_PREFIX):]
......@@ -158,7 +160,7 @@ class Command(object):
# in case if they was not set by the one who raised an exception.
except CommandError, error:
if not error.command and not error.name:
raise CommandError(exception.message, self)
raise CommandError(error.message, self)
raise
# This one is a little bit too wide, but as Python does not have
......
......@@ -22,6 +22,7 @@ from common import gajim
from common import helpers
from common.exceptions import GajimGeneralException
from ..errors import CommandError
from ..framework import CommandContainer, command, documentation
from ..mapping import generate_usage
......
......@@ -263,7 +263,7 @@ class ConnectionCaps(object):
# improper caps in stanza, ignoring
contact.caps_node = None
contact.caps_hash = None
contact.hash_method = None
contact.caps_hash_method = None
return
# start disco query...
......
......@@ -326,8 +326,7 @@ class Config:
'http_auth': [opt_str, 'ask'], # yes, no, ask
'dont_ack_subscription': [opt_bool, False, _('Jabberd2 workaround')],
# proxy65 for FT
'file_transfer_proxies': [opt_str,
'proxy65.talkonaut.com, proxy.jabber.org, proxy.netlab.cz, transfer.jabber.freenet.de, proxy.jabber.cd.chalmers.se'],
'file_transfer_proxies': [opt_str, 'proxy.eu.jabber.org, proxy.jabber.ru, proxy.jabbim.cz'],
'use_ft_proxies': [opt_bool, True, _('If checked, Gajim will use your IP and proxies defined in file_transfer_proxies option for file transfer.'), True],
'msgwin-x-position': [opt_int, -1], # Default is to let the wm decide
'msgwin-y-position': [opt_int, -1], # Default is to let the wm decide
......
......@@ -217,6 +217,7 @@ class Connection(ConnectionHandlers):
# We are doing disconnect at so many places, better use one function in all
def disconnect(self, on_purpose=False):
gajim.interface.music_track_changed(None, None, self.name)
self.reset_awaiting_pep()
self.on_purpose = on_purpose
self.connected = 0
self.time_to_reconnect = None
......@@ -777,7 +778,10 @@ class Connection(ConnectionHandlers):
self.server_resource = con.Resource
if gajim.config.get_per('accounts', self.name, 'anonymous_auth'):
# Get jid given by server
old_jid = gajim.get_jid_from_account(self.name)
gajim.config.set_per('accounts', self.name, 'name', con.User)
new_jid = gajim.get_jid_from_account(self.name)
self.dispatch('NEW_JID', (old_jid, new_jid))
if auth:
self.last_io = gajim.idlequeue.current_time()
self.connected = 2
......@@ -970,16 +974,16 @@ class Connection(ConnectionHandlers):
self.priority = priority
self.dispatch('STATUS', 'invisible')
if initial:
#ask our VCard
# ask our VCard
self.request_vcard(None)
#Get bookmarks from private namespace
# Get bookmarks from private namespace
self.get_bookmarks()
#Get annotations
# Get annotations
self.get_annotations()
#Inform GUI we just signed in
# Inform GUI we just signed in
self.dispatch('SIGNED_IN', ())
def test_gpg_passphrase(self, password):
......@@ -1363,13 +1367,14 @@ class Connection(ConnectionHandlers):
try:
gajim.logger.write(kind, jid, log_msg)
except exceptions.PysqliteOperationalError, e:
self.dispatch('ERROR', (_('Disk Write Error'), str(e)))
self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
except exceptions.DatabaseMalformed:
pritext = _('Database Error')
sectext = _('The database file (%s) cannot be read. Try to '
'repair it (see http://trac.gajim.org/wiki/DatabaseBackup)'
' or remove it (all history will be lost).') % \
common.logger.LOG_DB_PATH
self.dispatch('DB_ERROR', (pritext, sectext))
self.dispatch('MSGSENT', (jid, msg, keyID))
if callback:
......@@ -1582,8 +1587,8 @@ class Connection(ConnectionHandlers):
to_whom_jid = jid
if resource:
to_whom_jid += '/' + resource
iq = common.xmpp.Iq(to=to_whom_jid, typ='get', queryNS=\
common.xmpp.NS_TIME_REVISED)
iq = common.xmpp.Iq(to=to_whom_jid, typ='get')
iq.addChild('time', namespace=common.xmpp.NS_TIME_REVISED)
id_ = self.connection.getAnID()
iq.setID(id_)
if groupchat_jid:
......@@ -1788,7 +1793,7 @@ class Connection(ConnectionHandlers):
last_date = time.time() - gajim.config.get(
'muc_restore_timeout') * 60
else:
last_time = min(last_date, time.time() - gajim.config.get(
last_date = min(last_date, time.time() - gajim.config.get(
'muc_restore_timeout') * 60)
last_date = time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime(last_date))
t.setTag('history', {'maxstanzas': gajim.config.get(
......
......@@ -987,7 +987,7 @@ class ConnectionVcard:
fil.write(str(card))
fil.close()
except IOError, e:
self.dispatch('ERROR', (_('Disk Write Error'), str(e)))
self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
def get_cached_vcard(self, fjid, is_fake_jid = False):
'''return the vcard as a dict
......@@ -1182,9 +1182,14 @@ class ConnectionVcard:
else:
if iq_obj.getErrorCode() not in ('403', '406', '404'):
self.private_storage_supported = False
# We can now continue connection by requesting the roster
version = gajim.config.get_per('accounts', self.name,
'roster_version')
version = None
if con.Stream.features and con.Stream.features.getTag('ver',
namespace=common.xmpp.NS_ROSTER_VER):
version = gajim.config.get_per('accounts', self.name,
'roster_version')
iq_id = self.connection.initRoster(version=version)
self.awaiting_answers[iq_id] = (ROSTER_ARRIVED, )
elif self.awaiting_answers[id_][0] == ROSTER_ARRIVED:
......@@ -1475,6 +1480,7 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
self.gmail_last_tid = None
self.gmail_last_time = None
self.reset_awaiting_pep()
def build_http_auth_answer(self, iq_obj, answer):
if not self.connection or self.connected < 2:
......@@ -1891,6 +1897,7 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
except helpers.InvalidFormat:
self.dispatch('ERROR', (_('Invalid Jabber ID'),
_('A message from a non-valid JID arrived, it has been ignored.')))
return
addressTag = msg.getTag('addresses', namespace = common.xmpp.NS_ADDRESS)
......@@ -2068,13 +2075,13 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
gajim.logger.write('error', frm, error_msg, tim=tim,
subject=subject)
except exceptions.PysqliteOperationalError, e:
self.dispatch('ERROR', (_('Disk Write Error'), str(e)))
self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
except exceptions.DatabaseMalformed:
pritext = _('Database Error')
sectext = _('The database file (%s) cannot be read. Try to repair '
'it (see http://trac.gajim.org/wiki/DatabaseBackup) or remove '
'it (all history will be lost).') % common.logger.LOG_DB_PATH
self.dispatch('ERROR', (pritext, sectext))
self.dispatch('DB_ERROR', (pritext, sectext))
self.dispatch('MSGERROR', (frm, msg.getErrorCode(), error_msg, msgtxt,
tim, session))
......@@ -2114,13 +2121,13 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
try:
gajim.logger.write('gc_msg', frm, msgtxt, tim=tim)
except exceptions.PysqliteOperationalError, e:
self.dispatch('ERROR', (_('Disk Write Error'), str(e)))
self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
except exceptions.DatabaseMalformed:
pritext = _('Database Error')
sectext = _('The database file (%s) cannot be read. Try to repair '
'it (see http://trac.gajim.org/wiki/DatabaseBackup) or remove '
'it (all history will be lost).') % common.logger.LOG_DB_PATH
self.dispatch('ERROR', (pritext, sectext))
self.dispatch('DB_ERROR', (pritext, sectext))
def dispatch_invite_message(self, invite, frm):
item = invite.getTag('invite')
......@@ -2139,6 +2146,26 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
self.dispatch('GC_INVITATION',(frm, jid_from, reason, password,
is_continued))
def reset_awaiting_pep(self):
self.to_be_sent_activity = None
self.to_be_sent_mood = None
self.to_be_sent_tune = None
self.to_be_sent_nick = None
def send_awaiting_pep(self):
"""
Send pep info that were waiting for connection
"""
if self.to_be_sent_activity:
pep.user_send_activity(self.name, *self.to_be_sent_activity)
if self.to_be_sent_mood:
pep.user_send_mood(self.name, *self.to_be_sent_mood)
if self.to_be_sent_tune:
pep.user_send_tune(self.name, *self.to_be_sent_tune)
if self.to_be_sent_nick:
pep.user_send_nick(self.name, self.to_be_sent_nick)
self.reset_awaiting_pep()
def _pubsubEventCB(self, con, msg):
''' Called when we receive <message/> with pubsub event. '''
# TODO: Logging? (actually services where logging would be useful, should
......@@ -2291,10 +2318,11 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
self.dispatch('NOTIFY', (jid_stripped, 'error', errmsg, resource,
prio, keyID, timestamp, None))
elif (errcode == '503'):
# maximum user number reached
self.dispatch('ERROR', (_('Unable to join group chat'),
_('Maximum number of users for %s has been reached') % \
room_jid))
if gc_control is None or gc_control.autorejoin is None:
# maximum user number reached
self.dispatch('ERROR', (_('Unable to join group chat'),
_('Maximum number of users for %s has been reached') % \
room_jid))
elif (errcode == '401') or (errcon == 'not-authorized'):
# password required to join
self.dispatch('GC_PASSWORD_REQUIRED', (room_jid, nick))
......@@ -2342,14 +2370,14 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
try:
gajim.logger.write('gcstatus', who, st, show)
except exceptions.PysqliteOperationalError, e:
self.dispatch('ERROR', (_('Disk Write Error'), str(e)))
self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
except exceptions.DatabaseMalformed:
pritext = _('Database Error')
sectext = _('The database file (%s) cannot be read. Try to '
'repair it (see http://trac.gajim.org/wiki/DatabaseBackup)'
' or remove it (all history will be lost).') % \
common.logger.LOG_DB_PATH
self.dispatch('ERROR', (pritext, sectext))
self.dispatch('DB_ERROR', (pritext, sectext))
if avatar_sha or avatar_sha == '':
if avatar_sha == '':
# contact has no avatar
......@@ -2484,14 +2512,14 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
try:
gajim.logger.write('status', jid_stripped, status, show)
except exceptions.PysqliteOperationalError, e:
self.dispatch('ERROR', (_('Disk Write Error'), str(e)))
self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
except exceptions.DatabaseMalformed:
pritext = _('Database Error')
sectext = _('The database file (%s) cannot be read. Try to '
'repair it (see http://trac.gajim.org/wiki/DatabaseBackup) '
'or remove it (all history will be lost).') % \
common.logger.LOG_DB_PATH
self.dispatch('ERROR', (pritext, sectext))
self.dispatch('DB_ERROR', (pritext, sectext))
our_jid = gajim.get_jid_from_account(self.name)
if jid_stripped == our_jid and resource == self.server_resource:
# We got our own presence
......@@ -2688,6 +2716,7 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
# Inform GUI we just signed in
self.dispatch('SIGNED_IN', ())
self.send_awaiting_pep()
self.continue_connect_info = None
def request_gmail_notifications(self):
......
......@@ -178,6 +178,17 @@ class Contacts:
del self._gc_contacts[old_name]
del self._metacontacts_tags[old_name]
def change_contact_jid(self, old_jid, new_jid, account):
if account not in self._contacts:
return
if old_jid not in self._contacts[account]:
return
self._contacts[account][new_jid] = []
for _contact in self._contacts[account][old_jid]:
_contact.jid = new_jid
self._contacts[account][new_jid].append(_contact)
del self._contacts[account][old_jid]
def add_account(self, account):
self._contacts[account] = {}
self._gc_contacts[account] = {}
......@@ -582,6 +593,10 @@ class Contacts:
def get_jid_list(self, account):
return self._contacts[account].keys()
def get_contacts_jid_list(self, account):
return [jid for jid, contact in self._contacts[account].iteritems() if \
not contact[0].is_groupchat()]
def contact_from_gc_contact(self, gc_contact):
'''Create a Contact instance from a GC_Contact instance'''
jid = gc_contact.get_full_jid()
......
......@@ -42,6 +42,7 @@ except ImportError:
else:
try:
# test if dbus-x11 is installed
bus = dbus.SystemBus()
bus = dbus.SessionBus()
supported = True # does user have D-Bus bindings?
except dbus.DBusException:
......@@ -49,6 +50,12 @@ else:
if not os.name == 'nt': # only say that to non Windows users
print _('D-Bus does not run correctly on this machine')
print _('D-Bus capabilities of Gajim cannot be used')
except exceptions.SystemBusNotPresent:
print _('D-Bus does not run correctly on this machine: system bus not '
'present')
except exceptions.SessionBusNotPresent:
print _('D-Bus does not run correctly on this machine: session bus not '
'present')
class SystemBus:
'''A Singleton for the DBus SystemBus'''
......@@ -60,7 +67,7 @@ class SystemBus:
raise exceptions.DbusNotSupported
if not self.present():
raise exceptions.SystemBusNotPresent
raise exceptions.SystemBusNotPresent
return self.system_bus
def bus(self):
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.