Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • gajim/gajim-plugins
  • lovetox/gajim-plugins
  • ag/gajim-plugins
  • FlorianMuenchbach/gajim-plugins
  • rom1dep/gajim-plugins
  • pitchum/gajim-plugins
  • wurstsalat/gajim-plugins
  • Dicson/gajim-plugins
  • andre/gajim-plugins
  • link2xt/gajim-plugins
  • marmistrz/gajim-plugins
  • Jens/gajim-plugins
  • muelli/gajim-plugins
  • asterix/gajim-plugins
  • orhideous/gajim-plugins
  • ngvelprz/gajim-plugins
  • appleorange1/gajim-plugins
  • Martin/gajim-plugins
  • maltel/gajim-plugins
  • Seve/gajim-plugins
  • evert-mouw/gajim-plugins
  • Yuki/gajim-plugins
  • mxre/gajim-plugins
  • ValdikSS/gajim-plugins
  • SaltyBones/gajim-plugins
  • comradekingu/gajim-plugins
  • ritzmann/gajim-plugins
  • genofire/gajim-plugins
  • jjrh/gajim-plugins
  • yarmak/gajim-plugins
  • PapaTutuWawa/gajim-plugins
  • weblate/gajim-plugins
  • XutaxKamay/gajim-plugins
  • nekk/gajim-plugins
  • principis/gajim-plugins
  • cbix/gajim-plugins
  • bodqhrohro/gajim-plugins
  • airtower-luna/gajim-plugins
  • toms/gajim-plugins
  • mesonium/gajim-plugins
  • lissine/gajim-plugins
  • anviar/gajim-plugins
42 results
Show changes
Showing
with 220 additions and 90 deletions
......@@ -13,8 +13,6 @@ class ClickableNicknames(GajimPlugin):
@log_calls('ClickableNicknamesPlugin')
def init(self):
self.description = _('Clickable nicknames '
'in the conversation textview.')
self.config_dialog = None # ClickableNicknamesPluginConfigDialog(self)
self.gui_extension_points = {
'chat_control_base': (self.connect_with_chat_control,
......@@ -122,12 +120,21 @@ class Base(object):
if nick.startswith('* '):
nick = nick.lstrip('* ').split(' ')[0]
nick = nick.lstrip(gajim.config.get('before_nickname'))
nick = nick.lstrip(u'\u200E').rstrip(u'\u200E')
nick = nick.lstrip(u'\u200F').rstrip(u'\u200F')
nicks = gajim.contacts.get_nick_list(self.chat_control.account,
self.chat_control.room_jid)
if nick not in nicks:
return
nick = nick + gajim.config.get('gc_refer_to_nick_char') + ' '
return
message_buffer = self.chat_control.msg_textview.get_buffer()
if message_buffer.get_char_count() < 1:
nick = nick + gajim.config.get('gc_refer_to_nick_char')
else:
start, end = message_buffer.get_bounds()
if message_buffer.get_text(start, end, True)[-1] != ' ':
nick = ' ' + nick
nick += ' '
message_buffer.insert_at_cursor(nick)
self.chat_control.msg_textview.grab_focus()
......
[info]
name: Clickable Nicknames
short_name: clickable_nicknames
version: 0.2.1
version: 0.3.2
description: Clickable nicknames in the conversation textview.
authors: Denis Fomin <fominde@gmail.com>
authors: Andrey Musikhin <melomansegfault@gmail.com>
Denis Fomin <fominde@gmail.com>
homepage: http://trac-plugins.gajim.org/wiki/ClickableNicknamesPlugin
max_gajim_version: 0.16.9
......@@ -25,37 +25,33 @@ clients = {
'http://bombusmod.net.ru': ['bombusmod.png', 'Bombusmod'],
'http://ex-im.name/caps': ['bombusmod.png', 'Bombusmod'],
'http://bombusmod.eu,http://bombus.pl': ['bombuspl.png', 'Bombusmod'],
'http://mcabber.com/caps': ['mcabber.png', 'MCabber'],
'http://miranda-im.org/caps': ['miranda.png', 'Miranda'],
'http://www.asterisk.org/xmpp/client/caps': ['asterisk.png', 'Asterisk'],
'http://www.google.com/xmpp/client/caps': ['talkonaut.png', 'Talkonaut'],
'http://talkgadget.google.com/client/caps': ['google.png', 'GTalk'],
'http://oneteam.im/caps': ['oneteamiphone.png', 'OneTeam'],
'http://tkabber.jabber.ru/': ['tkabber.png', 'Tkabber'],
'http://pidgin.im/': ['pidgin.png', 'Pidgin'],
'http://pidgin.im/caps': ['pidgin.png', 'Pidgin'],
'http://qutim.org': ['qutim.png', 'QutIM'],
'http://qutim.org/': ['qutim.png', 'QutIM'],
'http://exodus.jabberstudio.org/caps': ['exodus.png', 'Exodus'],
'http://bitlbee.org/xmpp/caps': ['bitlbee.png', 'Bitlbee'],
'http://coccinella.sourceforge.net/protocol/caps': ['coccinella.png', 'Coccinella'],
'http://mcabber.lilotux.net/caps': ['mcabber.png', 'MCabber'],
'http://dev.jabbim.cz/jabbim/caps': ['jabbim.png', 'Jabbim'],
'http://palringo.com/caps': ['palringo.png', 'Palringo'],
'http://vacuum-im.googlecode.com': ['vacuum.png', 'Vacuum'],
'http://code.google.com/p/vacuum-im/': ['vacuum.png', 'Vacuum'],
'http://vacuum-im.googlecode.com': ['vacuum.png', 'Vacuum-im'],
'http://code.google.com/p/vacuum-im/': ['vacuum.png', 'Vacuum-im'],
'http://jajc.jrudevels.org/caps': ['jajc.png', 'JAJC'],
'http://gaim.sf.net/caps': ['gaim.png', 'Gaim'],
'http://mchat.mgslab.com/': ['mchat.png', 'Mchat'],
'http://online.yandex.ru/caps': ['yaonline.png', 'Yaonline'],
'http://psi-im.org/caps': ['psi.png', 'Psi'],
'http://jimm.net.ru/caps': ['jimm-aspro.png', 'Jimm'],
'http://stranger.kiev.ua/caps': ['fin.png', 'Fin-bot'],
'http://jabga.ru': ['fin.png', 'Fin jabber'],
'http://bluendo.com/protocol/caps': ['lampiro.png', 'Lampiro'],
'nimbuzz:caps': ['nimbuzz.png', 'Nimbuzz'],
'http://nimbuzz.com/caps': ['nimbuzz.png', 'Nimbuzz'],
'http://isida.googlecode.com': ['isida-bot.png', 'Isida'],
'http://isida-bot.com': ['isida-bot.png', 'Isida'],
'http://isida.googlecode.com': ['isida-bot.png', 'iSida Jabber Bot'],
'http://isida-bot.com': ['isida-bot.png', 'iSida Jabber Bot'],
'http://apps.radio-t.com/caps': ['radio-t.png', 'Radio-t'],
'http://pda.qip.ru/caps': ['qippda.png', 'Qip-PDA'],
'http://kopete.kde.org/jabber/caps': ['kopete.png', 'Kopete'],
......@@ -121,8 +117,7 @@ clients = {
'http://sim-im.org/caps': ['sim.png', 'Sim'],
'http://www.igniterealtime.org/project/spark/caps': ['spark.png', 'Spark'],
'http://emess.eqx.su/caps': ['emess.png', 'Emess'],
'http://fin.jabber.ru/caps': ['bot.png', 'Fin-bot'],
'https://www.jappix.com/': ['jappix.png', 'Jappix'],
'http://jappix.org/': ['jappix.png', 'Jappix'],
'http://japyt.googlecode.com': ['japyt.png', 'Japyt'],
'http://www.xfire.com/': ['xfire.png', 'Xfire'],
'http://www.xfire.com/caps': ['xfire.png', 'Xfire'],
......@@ -134,10 +129,8 @@ clients = {
'http://jasmineicq.ru/caps': ['jasmine.png', 'Jasmine'],
'http://tomclaw.com/mandarin_im/caps': ['mandarin.png', 'Mandarin'],
'http://gabber.sourceforge.net': ['gabber.png', 'Gabber'],
'http://www.igniterealtime.org/projects/smack/': ['xabber.png', 'Xabber'],
'http://megafonvolga.ru/': ['megafon.png', 'Megafon'],
'rss@isida-bot.com': ['osiris.png', 'Osiris'],
'libpurple': ['libpurple.png', 'Libpurple'],
'http://www.adium.im/': ['adium.png', 'Adium'],
'http://eqo.com/': ['libpurple.png', 'Eqo'],
'http://instantbird.com/': ['instantbird.png', 'Instantbird'],
......@@ -145,31 +138,35 @@ clients = {
'http://opensource.palm.com/packages.html': ['palm.png', 'Palm'],
'http://spectrum.im/': ['spectrum.png', 'Spectrum'],
'http://tigase.org/messenger': ['tigase.png', 'Tigase'],
'http://jitsi.org' :['jitsi.png', 'Jitsi'],
'http://miranda-ng.org/caps' :['miranda_ng.png', 'Miranda NG'],
'http://monal.im/caps': ['monal.png', 'Monal'],
'http://leechcraft.org/': ['leechcraft.png', 'Leechcraft'],
'http://sawim.ru/caps': ['sawim.png', 'Sawim'],
#
'Poezio' :['poezio.png', 'Poezio'],
'Emacs' :['emacs.png', ''],
'mcabber' :['mcabber.png', ''],
'yaxim' :['yaxim.png', ''],
'Xabber' :['xabber.png', ''],
'Adium' :['adium.png', ''],
'Pidgin': ['pidgin.png', ''],
'Leechcraft': ['leechcraft.png', ''],
'Conversations': ['conversations.png', 'Conversations'],
'ChatSecure': ['chatsecure.png', 'ChatSecure'],
'SecuGab': ['secugab.png', 'Secugab'],
}
libpurple_clients ={
'adium': 'http://www.adium.im/',
'eqo': 'http://eqo.com/',
'finch': 'http://pidgin.im/',
'instantbird': 'http://instantbird.com/',
'meebo': 'https://www.meebo.com/',
'palm': 'http://opensource.palm.com/packages.html',
'pidgin': 'http://pidgin.im/',
'spectrum': 'http://spectrum.im/',
'telepathy-haze': 'http://pidgin.im/'
}
class ClientsIconsPlugin(GajimPlugin):
@log_calls('ClientsIconsPlugin')
def init(self):
self.description = _('Shows the client icons in the roster'
' and in groupchats.\nFor icons in tooltip support, '
'you need to install Gajim r14117 or above.')
self.pos_list = [_('after statusicon'), _('before avatar')]
self.events_handlers = {'presence-received':
self.events_handlers = {'caps-presence-received':
(ged.POSTGUI, self.presence_received),
'gc-presence-received':
(ged.POSTGUI, self.gc_presence_received), }
'caps-disco-received':
(ged.POSTGUI, self.caps_disco_received), }
self.gui_extension_points = {
'groupchat_control': (self.connect_with_groupchat_control,
self.disconnect_from_groupchat_control),
......@@ -206,6 +203,10 @@ class ClientsIconsPlugin(GajimPlugin):
caps = contact.client_caps._node
caps_image , client_name = self.get_icon(caps, contact)
identities = contact.client_caps._lookup_in_cache(
gajim.caps_cache.capscache).identities
if identities and client_name == _('Unknown'):
client_name = identities[0].get('name', _('Unknown'))
caps_image.set_alignment(0, 0)
self.table.attach(caps_image, 1, 2, vcard_current_row,
vcard_current_row + 1, 0, 0, 0, 0)
......@@ -226,6 +227,8 @@ class ClientsIconsPlugin(GajimPlugin):
# rewrite avatar
if vcard_table.get_property('n-columns') == 4:
if tooltip.avatar_image not in vcard_table.get_children():
return
avatar_widget_idx = vcard_table.get_children().index(
tooltip.avatar_image)
vcard_table.remove(vcard_table.get_children()[avatar_widget_idx])
......@@ -254,18 +257,25 @@ class ClientsIconsPlugin(GajimPlugin):
else:
contacts_dict[contact.priority] = [contact]
contact_keys = sorted(contacts_dict.keys())
if not contact_keys:
# contact have not resource
contacts_dict[0] = [contact]
contact_keys = sorted(contacts_dict.keys())
contact_keys.reverse()
#fill clients table
self.table = gtk.Table(4, 1)
self.table.set_property('column-spacing', 2)
first_place = vcard_current_row = vcard_table.get_property('n-rows')
vcard_current_row = 0
for priority in contact_keys:
for acontact in contacts_dict[priority]:
caps = acontact.client_caps._node
caps_image , client_name = self.get_icon(caps, acontact)
identities = acontact.client_caps._lookup_in_cache(
gajim.caps_cache.capscache).identities
if identities and client_name == _('Unknown'):
client_name = identities[0].get('name', _('Unknown'))
caps_image.set_alignment(0, 0)
self.table.attach(caps_image, 1, 2, vcard_current_row,
vcard_current_row + 1, gtk.FILL, gtk.FILL, 0, 0)
......@@ -292,6 +302,8 @@ class ClientsIconsPlugin(GajimPlugin):
# rewrite avatar
if vcard_table.get_property('n-columns') == 4:
if tooltip.avatar_image not in vcard_table.get_children():
return
avatar_widget_idx = vcard_table.get_children().index(
tooltip.avatar_image)
vcard_table.remove(vcard_table.get_children()[avatar_widget_idx])
......@@ -303,12 +315,7 @@ class ClientsIconsPlugin(GajimPlugin):
if not caps:
return gtk.image_new_from_pixbuf(self.default_pixbuf), _('Unknown')
if 'pidgin.im' in caps:
caps = 'libpurple'
for client in libpurple_clients:
if client in contact.resource.lower():
caps = libpurple_clients[client]
client_name = _('Unknown')
caps_from_jid = self.check_jid(contact.jid)
if caps_from_jid:
caps = caps_from_jid
......@@ -319,6 +326,12 @@ class ClientsIconsPlugin(GajimPlugin):
client_name = clients.get(caps_[0].split()[0], ('', _('Unknown')))[1]
else:
client_icon = None
if client_name == _('Unknown'):
identities = contact.client_caps._lookup_in_cache(
gajim.caps_cache.capscache).identities
if identities:
client_name = identities[0].get('name', _('Unknown'))
client_icon = clients.get(client_name.split()[0], (None,))[0]
if not client_icon:
return gtk.image_new_from_pixbuf(self.default_pixbuf), _('Unknown')
......@@ -344,7 +357,7 @@ class ClientsIconsPlugin(GajimPlugin):
caps = 'facebook.com'
elif '@vk.com' in jid and self.config['show_facebook']:
caps = 'vk.com'
elif jid == 'juick@juick.com':
elif 'juick.com' in jid:
caps = 'http://juick.com/caps'
elif jid == 'psto@psto.net':
caps = 'psto@psto.net'
......@@ -362,12 +375,13 @@ class ClientsIconsPlugin(GajimPlugin):
roster.model)
if not child_iters:
return
if roster.model[child_iters[0]][self.renderer_num] is None:
caps = contact.client_caps._node
if not caps:
caps = self.check_jid(jid)
self.set_icon(roster.model, child_iters[0], self.renderer_num,
caps)
for iter_ in child_iters:
if roster.model[iter_][self.renderer_num] is None:
caps = contact.client_caps._node
if not caps:
caps = self.check_jid(jid)
self.set_icon(roster.model, iter_, self.renderer_num,
caps, contact)
@log_calls('ClientsIconsPlugin')
def connect_with_groupchat_control(self, chat_control):
......@@ -411,7 +425,7 @@ class ClientsIconsPlugin(GajimPlugin):
continue
caps = gc_contact.client_caps._node
self.set_icon(chat_control.model, iter_, self.muc_renderer_num,
caps)
caps, gc_contact)
chat_control.draw_all_roles()
# Recalculate column width for ellipsizin
chat_control.list_treeview.columns_autosize()
......@@ -488,81 +502,120 @@ class ClientsIconsPlugin(GajimPlugin):
self.renderer_num + 1:]
roster.setup_and_draw_roster()
def presence_received(self, iq_obj):
def caps_disco_received(self, iq_obj):
if not self.config['show_in_roster']:
return
roster = gajim.interface.roster
contact = gajim.contacts.get_contact_with_highest_priority(
iq_obj.conn.name, iq_obj.jid)
contact = gajim.contacts.get_contact_from_full_jid(iq_obj.conn.name,
iq_obj.jid)
if contact is None:
room_jid, nick = gajim.get_room_and_nick_from_fjid(iq_obj.fjid)
contact = gajim.contacts.get_gc_contact(iq_obj.conn.name, room_jid,
nick)
if contact:
gc_control = gajim.interface.msg_win_mgr.get_gc_control(
iq_obj.jid, iq_obj.conn.name)
iter_ = gc_control.get_contact_iter(nick)
self.set_icon(gc_control.model, iter_, self.muc_renderer_num,
None, contact)
return
if not contact:
return
child_iters = roster._get_contact_iter(iq_obj.jid, iq_obj.conn.name,
contact, roster.model)
if not child_iters:
return
for iter_ in child_iters:
caps = contact.client_caps._node
caps_ = self.check_jid(iq_obj.jid)
if caps_:
caps = caps_
self.set_icon(roster.model, iter_, self.renderer_num,
caps, contact)
def presence_received(self, iq_obj):
roster = gajim.interface.roster
contact = gajim.contacts.get_contact_from_full_jid(iq_obj.conn.name,
iq_obj.jid)
if contact is None:
room_jid, nick = gajim.get_room_and_nick_from_fjid(iq_obj.fjid)
contact = gajim.contacts.get_gc_contact(iq_obj.conn.name, room_jid,
nick)
if contact:
self.gc_presence_received(iq_obj, contact)
return
if not contact:
return
if not self.config['show_in_roster']:
return
contact = gajim.contacts.get_contact_with_highest_priority(
iq_obj.conn.name, iq_obj.jid)
if iq_obj.resource == 'local':
# zeroconf
return
iter_ = roster._get_contact_iter(iq_obj.jid, iq_obj.conn.name, contact,
roster.model)[0]
iters = roster._get_contact_iter(iq_obj.jid, iq_obj.conn.name, contact,
roster.model)
iter_ = iters[0]
if contact.show == 'error':
self.set_icon(roster.model, iter_, self.renderer_num, None)
self.set_icon(roster.model, iter_, self.renderer_num, None, contact)
return
if contact != iq_obj.contact:
if contact.get_full_jid() != iq_obj.fjid:
# higest contact changed
if roster.model[iter_][self.renderer_num] is not None:
caps = contact.client_caps._node
if caps:
self.set_icon(roster.model, iter_, self.renderer_num, caps)
self.set_icon(roster.model, iter_, self.renderer_num,
caps, contact)
return
caps = None
tag = iq_obj.stanza.getTags('c')
if tag:
caps = tag[0].getAttr('node')
if caps:
if 'pidgin.im' in caps:
caps = 'libpurple'
for client in libpurple_clients:
if client in contact.resource.lower():
caps = libpurple_clients[client]
caps_from_jid = self.check_jid(iq_obj.jid)
if caps_from_jid:
caps = caps_from_jid
self.set_icon(roster.model, iter_, self.renderer_num, caps)
for iter_ in iters:
self.set_icon(roster.model, iter_, self.renderer_num, caps, contact)
def gc_presence_received(self, iq_obj):
def gc_presence_received(self, iq_obj, contact):
if not self.config['show_in_groupchats']:
return
contact = gajim.contacts.get_gc_contact(iq_obj.conn.name,
iq_obj.presence_obj.jid, iq_obj.nick.decode('utf-8'))
if not contact:
return
caps = None
tag = iq_obj.stanza.getTags('c')
if tag:
caps = tag[0].getAttr('node')
if 'pidgin.im' in caps:
caps = 'libpurple'
iter_ = iq_obj.gc_control.get_contact_iter(iq_obj.nick.decode('utf-8'))
model = iq_obj.gc_control.model
if model[iter_][self.muc_renderer_num] is not None:
return
self.set_icon(model, iter_, self.muc_renderer_num, caps)
def set_icon(self, model, iter_, pos, caps):
if not caps:
if self.config['show_unknown_icon']:
model[iter_][pos] = self.default_pixbuf
gc_control = gajim.interface.msg_win_mgr.get_gc_control(iq_obj.jid,
iq_obj.conn.name)
iter_ = gc_control.get_contact_iter(iq_obj.resource.decode('utf-8'))
model = gc_control.model
if model[iter_][self.muc_renderer_num] is not None:
return
self.set_icon(model, iter_, self.muc_renderer_num, caps, contact)
caps_ = caps.split('#')[0].split()
if caps_:
client_icon = clients.get(caps_[0].split()[0], (None,))[0]
def set_icon(self, model, iter_, pos, caps, contact):
if caps:
caps_ = caps.split('#')[0].split()
if caps_:
client_icon = clients.get(caps_[0].split()[0], (None,))[0]
else:
client_icon = None
if not client_icon:
identities = contact.client_caps._lookup_in_cache(
gajim.caps_cache.capscache).identities
if identities:
client_name = identities[0].get('name', _('Unknown'))
client_icon = clients.get(client_name.split()[0], (None,))[0]
if not client_icon:
if self.config['show_unknown_icon']:
model[iter_][pos] = self.default_pixbuf
......
......@@ -6,6 +6,7 @@
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="border_width">9</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkCheckButton" id="show_in_roster">
......
clients_icons/icons/chatsecure.png

999 B

clients_icons/icons/conversations.png

1.82 KiB

clients_icons/icons/emacs.png

955 B

clients_icons/icons/jitsi.png

594 B

clients_icons/icons/leechcraft.png

3.38 KiB

clients_icons/icons/miranda_ng.png

827 B

clients_icons/icons/monal.png

1.59 KiB

clients_icons/icons/poezio.png

3.2 KiB

clients_icons/icons/sawim.png

1.32 KiB

clients_icons/icons/secugab.png

1.48 KiB

clients_icons/icons/yaxim.png

1.03 KiB

[info]
name: Clients icons
short_name: clients_icons
version: 3.1
description: Shows the client icons in the roster
and in groupchats.
For icons in tooltip support, you need to install Gajim r14117 or above.
authors = Denis Fomin <fominde@gmail.com>
version: 5.6
description: Shows the client icons in the roster and in groupchats.
authors: Denis Fomin <fominde@gmail.com>
Artem Klyop <art.klyop@gmail.com>
homepage = http://trac-plugins.gajim.org/wiki/ClientsIconsPlugin
max_gajim_version: 0.16.9
from .colored_traceback import ColoredTracebackPlugin
colored_traceback/colored_traceback.png

582 B

# -*- coding: utf-8 -*-
##
from common import gajim
from plugins import GajimPlugin
from plugins.helpers import log_calls
import sys
import os
import traceback
import threading
from cStringIO import StringIO
have_pygments = True
try:
from pygments import highlight
from pygments.lexers import PythonConsoleLexer
from pygments.formatters import TerminalFormatter
test = PythonConsoleLexer.name
except ImportError:
have_pygments = False
import catcher
class ColoredTracebackPlugin(GajimPlugin):
@log_calls('ColoredTracebackPlugin')
def init(self):
self.config_dialog = None # ColoredTracebackPluginConfigDialog(self)
if not have_pygments:
self.available_text = _('Pygments are not available. '
'Install python-pygments.')
self.activatable = False
self._excepthook_save = None
@log_calls('ColoredTracebackPlugin')
def activate(self):
# gdb/kdm etc if we use startx this is not True
if os.name == 'nt' or sys.stderr.isatty():
self._exception_in_progress = threading.Lock()
self._excepthook_save = sys.excepthook
sys.excepthook = self._info
@log_calls('ColoredTracebackPlugin')
def deactivate(self):
if self._excepthook_save:
sys.excepthook = self._excepthook_save
def _info(self, type_, value, tb):
if not self._exception_in_progress.acquire(False):
# Exceptions have piled up, so we use the default exception
# handler for such exceptions
self._excepthook_save(type_, value, tb)
return
trace = StringIO()
traceback.print_exception(type_, value, tb, None, trace)
print highlight(trace.getvalue(), PythonConsoleLexer(),
TerminalFormatter())
self._exception_in_progress.release()
[info]
name: Colored traceback
short_name: colored_traceback
#version: 0.0.0
description: colored text for traceback in console
authors: Denis Fomin <fominde@gmail.com>
homepage: http://trac-plugins.gajim.org/wiki/
max_gajim_version: 0.16.9