diff --git a/configure.ac b/configure.ac index 39962bbe6..4a1f08987 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_INIT([Gajim - A Jabber Instant Messager], - [0.12-beta1],[http://trac.gajim.org/],[gajim]) + [0.12.0.1-svn],[http://trac.gajim.org/],[gajim]) AC_PREREQ([2.59]) AM_INIT_AUTOMAKE([1.8]) AC_CONFIG_HEADER(config.h) diff --git a/src/common/config.py b/src/common/config.py index 6b56b94f3..b5cc1d620 100644 --- a/src/common/config.py +++ b/src/common/config.py @@ -264,7 +264,7 @@ class Config: 'attach_notifications_to_systray': [opt_bool, False, _('If True, notification windows from notification-daemon will be attached to systray icon.')], 'check_idle_every_foo_seconds': [opt_int, 2, _('Choose interval between 2 checks of idleness.')], 'latex_png_dpi': [opt_str, '108',_('Change the value to change the size of latex formulas displayed. The higher is larger.') ], - 'uri_schemes': [opt_str, 'aaa aaas acap cap cid crid data dav dict dns fax file ftp go gopher h323 http https icap im imap info ipp iris iris.beep iris.xpc iris.xpcs iris.lwz ldap mailto mid modem msrp msrps mtqp mupdate news nfs nntp opaquelocktoken pop pres rtsp service shttp sip sips snmp soap.beep soap.beeps tag tel telnet tftp thismessage tip tv urn vemmi xmlrpc.beep xmlrpc.beeps xmpp z39.50r z39.50s about cvs daap ed2k feed fish git iax2 irc ircs ldaps magnet mms rsync ssh svn sftp smb webcal', _('Valid uri schemes. Only schemes in this list will be made accepted as "real" uri.')], + 'uri_schemes': [opt_str, 'aaa aaas acap cap cid crid data dav dict dns fax file ftp go gopher h323 http https icap im imap info ipp iris iris.beep iris.xpc iris.xpcs iris.lwz ldap mid modem msrp msrps mtqp mupdate news nfs nntp opaquelocktoken pop pres rtsp service shttp sip sips snmp soap.beep soap.beeps tag tel telnet tftp thismessage tip tv urn vemmi xmlrpc.beep xmlrpc.beeps z39.50r z39.50s about cvs daap ed2k feed fish git iax2 irc ircs ldaps magnet mms rsync ssh svn sftp smb webcal', _('Valid uri schemes. Only schemes in this list will be accepted as "real" uri. (mailto and xmpp are handled seperately)')], } __options_per_key = { diff --git a/src/common/defs.py b/src/common/defs.py index 1c418a180..0a217feff 100644 --- a/src/common/defs.py +++ b/src/common/defs.py @@ -28,7 +28,7 @@ import re docdir = '../' datadir = '../' -version = '0.12-beta1' +version = '0.12.0.1-svn' import sys, os.path for base in ('.', 'common'): diff --git a/src/common/helpers.py b/src/common/helpers.py index 1adb9aff6..aa2184b6d 100644 --- a/src/common/helpers.py +++ b/src/common/helpers.py @@ -454,7 +454,7 @@ def launch_browser_mailer(kind, uri): pass else: - if kind == 'mail' and not uri.startswith('mailto:'): + if kind in ('mail', 'sth_at_sth') and not uri.startswith('mailto:'): uri = 'mailto:' + uri if gajim.config.get('openwith') == 'gnome-open': @@ -469,7 +469,7 @@ def launch_browser_mailer(kind, uri): elif gajim.config.get('openwith') == 'custom': if kind == 'url': command = gajim.config.get('custombrowser') - if kind == 'mail': + if kind in ('mail', 'sth_at_sth'): command = gajim.config.get('custommailapp') if command == '': # if no app is configured return diff --git a/src/common/optparser.py b/src/common/optparser.py index f5b0969d7..d8ac20d60 100644 --- a/src/common/optparser.py +++ b/src/common/optparser.py @@ -185,6 +185,8 @@ class OptionsParser: self.update_config_to_01143() if old < [0, 11, 4, 4] and new >= [0, 11, 4, 4]: self.update_config_to_01144() + if old < [0, 12, 0, 1] and new >= [0, 12, 0, 1]: + self.update_config_to_01201() gajim.logger.init_vars() gajim.config.set('version', new_version) @@ -599,4 +601,11 @@ class OptionsParser: con.close() gajim.config.set('version', '0.11.4.4') + def update_config_to_01201(self): + if 'uri_schemes' in self.old_values: + new_value = self.old_values['uri_schemes'].replace(' mailto', '').\ + replace(' xmpp', '') + gajim.config.set('uri_schemes', new_values) + gajim.config.set('version', '0.12.0.1') + # vim: se ts=3: diff --git a/src/conversation_textview.py b/src/conversation_textview.py index 32166b224..db8f66c58 100644 --- a/src/conversation_textview.py +++ b/src/conversation_textview.py @@ -267,6 +267,18 @@ class ConversationTextview: id = self.tagMail.connect('event', self.hyperlink_handler, 'mail') self.handlers[id] = self.tagMail + self.tagXMPP = buffer.create_tag('xmpp') + self.tagXMPP.set_property('foreground', color) + self.tagXMPP.set_property('underline', pango.UNDERLINE_SINGLE) + id = self.tagXMPP.connect('event', self.hyperlink_handler, 'xmpp') + self.handlers[id] = self.tagXMPP + + self.tagSthAtSth = buffer.create_tag('sth_at_sth') + self.tagSthAtSth.set_property('foreground', color) + self.tagSthAtSth.set_property('underline', pango.UNDERLINE_SINGLE) + id = self.tagSthAtSth.connect('event', self.hyperlink_handler, 'sth_at_sth') + self.handlers[id] = self.tagSthAtSth + tag = buffer.create_tag('bold') tag.set_property('weight', pango.WEIGHT_BOLD) @@ -610,7 +622,8 @@ class ConversationTextview: over_line = False xep0184_warning = False for tag in tags: - if tag in (tag_table.lookup('url'), tag_table.lookup('mail')): + if tag in (tag_table.lookup('url'), tag_table.lookup('mail'), \ + tag_table.lookup('xmpp'), tag_table.lookup('sth_at_sth')): self.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor( gtk.gdk.Cursor(gtk.gdk.HAND2)) self.change_cursor = tag @@ -755,7 +768,7 @@ class ConversationTextview: if tags: # we clicked on sth special (it can be status message too) for tag in tags: tag_name = tag.get_property('name') - if tag_name in ('url', 'mail'): + if tag_name in ('url', 'mail', 'xmpp', 'sth_at_sth'): return True # we block normal context menu # we check if sth was selected and if it was we assign @@ -828,6 +841,8 @@ class ConversationTextview: join_group_chat_menuitem.set_image(muc_icon) text = text.lower() + if text.startswith('xmpp:'): + text = text[5:] id = childs[2].connect('activate', self.on_copy_link_activate, text) self.handlers[id] = childs[2] id = childs[3].connect('activate', self.on_open_link_activate, kind, @@ -855,6 +870,16 @@ class ConversationTextview: else: childs[7].hide() # hide add to roster menuitem + if kind == 'xmpp': + childs[2].hide() # copy mail address + childs[3].hide() # open mail composer + childs[4].hide() # jid section separator + elif kind == 'mail': + childs[4].hide() # jid section separator + childs[5].hide() # start chat + childs[6].hide() # join group chat + childs[7].hide() # add to roster + childs[0].hide() # copy link location childs[1].hide() # open link in browser @@ -876,7 +901,18 @@ class ConversationTextview: self.make_link_menu(event, kind, word) else: # we launch the correct application - helpers.launch_browser_mailer(kind, word) + if kind == 'xmpp': + word = word[5:] + if '?' in word: + (jid, action) = word.split('?') + if action == 'join': + self.on_join_group_chat_menuitem_activate(None, jid) + else: + self.on_start_chat_activate(None, jid) + else: + self.on_start_chat_activate(None, word) + else: + helpers.launch_browser_mailer(kind, word) def html_hyperlink_handler(self, texttag, widget, event, iter_, kind, href): if event.type == gtk.gdk.BUTTON_PRESS: @@ -1040,11 +1076,16 @@ class ConversationTextview: text_is_valid_uri: tags.append('url') use_other_tags = False - elif special_text.startswith('mailto:') or \ - gajim.interface.sth_at_sth_dot_sth_re.match(special_text): - # it's a mail + elif special_text.startswith('mailto:'): tags.append('mail') use_other_tags = False + elif special_text.startswith('xmpp:'): + tags.append('xmpp') + use_other_tags = False + elif gajim.interface.sth_at_sth_dot_sth_re.match(special_text): + # it's a JID or mail + tags.append('sth_at_sth') + use_other_tags = False elif special_text.startswith('*'): # it's a bold text tags.append('bold') if special_text[1] == '/' and special_text[-2] == '/' and\