fix imports and many py3 changements
This commit is contained in:
parent
d27591076f
commit
912f0e921d
|
@ -407,7 +407,7 @@ if dbus_support.supported:
|
|||
return DBUS_DICT_SV()
|
||||
jid = self._get_real_jid(jid)
|
||||
|
||||
cached_vcard = gajim.connections.values()[0].get_cached_vcard(jid)
|
||||
cached_vcard = list(gajim.connections.values())[0].get_cached_vcard(jid)
|
||||
if cached_vcard:
|
||||
return get_dbus_struct(cached_vcard)
|
||||
|
||||
|
|
|
@ -311,7 +311,6 @@ class AdvancedConfigurationWindow(object):
|
|||
value = str(option)
|
||||
except:
|
||||
value = option
|
||||
value = helpers.ensure_utf8_string(value)
|
||||
self.model.append(parent, [name, value, type_])
|
||||
|
||||
def visible_func(self, model, treeiter, data):
|
||||
|
|
|
@ -1785,7 +1785,7 @@ class ChatControl(ChatControlBase):
|
|||
pep = self.contact.pep
|
||||
img = self._pep_images[pep_type]
|
||||
if pep_type in pep:
|
||||
img.set_from_pixbuf(pep[pep_type].asPixbufIcon())
|
||||
img.set_from_pixbuf(gtkgui_helpers.get_pep_as_pixbuf(pep[pep_type]))
|
||||
img.set_tooltip_markup(pep[pep_type].asMarkupText())
|
||||
img.show()
|
||||
else:
|
||||
|
@ -3020,7 +3020,7 @@ class ChatControl(ChatControlBase):
|
|||
# It's why I set it transparent.
|
||||
image = self.xml.get_object('avatar_image')
|
||||
pixbuf = image.get_pixbuf()
|
||||
pixbuf.fill(0xffffff00L) # RGBA
|
||||
pixbuf.fill(0xffffff00) # RGBA
|
||||
image.queue_draw()
|
||||
|
||||
screen_w = Gdk.Screen.width()
|
||||
|
|
|
@ -31,7 +31,6 @@ to automatic discovery and dispatching, also features manual control
|
|||
over the process.
|
||||
"""
|
||||
|
||||
from types import NoneType
|
||||
from .tools import remove
|
||||
|
||||
COMMANDS = {}
|
||||
|
@ -71,7 +70,7 @@ def is_command(attribute):
|
|||
return isinstance(attribute, Command)
|
||||
|
||||
def is_root(namespace):
|
||||
metaclass = namespace.get("__metaclass__", NoneType)
|
||||
metaclass = namespace.get("__metaclass__", None)
|
||||
return issubclass(metaclass, Dispatchable)
|
||||
|
||||
def get_command(host, name):
|
||||
|
@ -83,7 +82,7 @@ def get_command(host, name):
|
|||
def list_commands(host):
|
||||
for container in CONTAINERS[host]:
|
||||
commands = COMMANDS[container]
|
||||
for name, command in commands.iteritems():
|
||||
for name, command in commands.items():
|
||||
yield name, command
|
||||
|
||||
class Dispatchable(type):
|
||||
|
|
|
@ -25,7 +25,7 @@ from inspect import getargspec, getdoc
|
|||
|
||||
from .dispatcher import Host, Container
|
||||
from .dispatcher import get_command, list_commands
|
||||
from mmapping import parse_arguments, adapt_arguments
|
||||
from .mapping import parse_arguments, adapt_arguments
|
||||
from .errors import DefinitionError, CommandError, NoCommandError
|
||||
|
||||
class CommandHost(object):
|
||||
|
@ -153,7 +153,7 @@ class Command(object):
|
|||
|
||||
# Automatically set all the properties passed to a constructor
|
||||
# by the command decorator.
|
||||
for key, value in properties.iteritems():
|
||||
for key, value in properties.items():
|
||||
setattr(self, key, value)
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
|
|
|
@ -35,7 +35,7 @@ commands as a frontend.
|
|||
from subprocess import Popen, PIPE
|
||||
from os.path import expanduser
|
||||
|
||||
from glib import timeout_add
|
||||
from gi.repository import GObject
|
||||
|
||||
from ..framework import CommandContainer, command, doc
|
||||
from .hosts import *
|
||||
|
@ -64,7 +64,7 @@ class Execute(CommandContainer):
|
|||
@classmethod
|
||||
def monitor(cls, processor, popen):
|
||||
poller = cls.poller(processor, popen)
|
||||
timeout_add(cls.POLL_INTERVAL, poller.next)
|
||||
GObject.timeout_add(cls.POLL_INTERVAL, poller.next)
|
||||
|
||||
@classmethod
|
||||
def poller(cls, processor, popen):
|
||||
|
|
|
@ -31,7 +31,6 @@ support interaction between the two and a few utility methods so you
|
|||
don't need to dig up the code itself to write basic commands.
|
||||
"""
|
||||
|
||||
from types import StringTypes
|
||||
from traceback import print_exc
|
||||
|
||||
from gi.repository import Pango
|
||||
|
@ -98,7 +97,7 @@ class ChatCommandProcessor(CommandProcessor):
|
|||
def command_postprocessor(self, command, name, arguments, args, kwargs, value):
|
||||
# If command returns a string - print it to a user. A convenient
|
||||
# and sufficient in most simple cases shortcut to a using echo.
|
||||
if value and isinstance(value, StringTypes):
|
||||
if value and isinstance(value, str):
|
||||
self.echo(value)
|
||||
|
||||
class CommandTools:
|
||||
|
|
|
@ -23,7 +23,6 @@ according to the command properties.
|
|||
"""
|
||||
|
||||
import re
|
||||
from types import BooleanType, UnicodeType
|
||||
from operator import itemgetter
|
||||
|
||||
from .errors import DefinitionError, CommandError
|
||||
|
@ -62,7 +61,7 @@ def parse_arguments(arguments):
|
|||
"""
|
||||
args, opts = [], []
|
||||
|
||||
def intersects_opts((given_start, given_end)):
|
||||
def intersects_opts(given_start, given_end):
|
||||
"""
|
||||
Check if given span intersects with any of options.
|
||||
"""
|
||||
|
@ -71,7 +70,7 @@ def parse_arguments(arguments):
|
|||
return True
|
||||
return False
|
||||
|
||||
def intersects_args((given_start, given_end)):
|
||||
def intersects_args(given_start, given_end):
|
||||
"""
|
||||
Check if given span intersects with any of arguments.
|
||||
"""
|
||||
|
@ -97,14 +96,14 @@ def parse_arguments(arguments):
|
|||
# conflicted sectors. Remove any arguments that intersect with
|
||||
# options.
|
||||
for arg, position in args[:]:
|
||||
if intersects_opts(position):
|
||||
if intersects_opts(*position):
|
||||
args.remove((arg, position))
|
||||
|
||||
# Primitive but sufficiently effective way of disposing of
|
||||
# conflicted sectors. Remove any options that intersect with
|
||||
# arguments.
|
||||
for key, value, position in opts[:]:
|
||||
if intersects_args(position):
|
||||
if intersects_args(*position):
|
||||
opts.remove((key, value, position))
|
||||
|
||||
return args, opts
|
||||
|
@ -207,7 +206,7 @@ def adapt_arguments(command, arguments, args, opts):
|
|||
# corresponding optin has been given.
|
||||
if command.expand:
|
||||
expanded = []
|
||||
for spec_key, spec_value in norm_kwargs.iteritems():
|
||||
for spec_key, spec_value in norm_kwargs.items():
|
||||
letter = spec_key[0] if len(spec_key) > 1 else None
|
||||
if letter and letter not in expanded:
|
||||
for index, (key, value, position) in enumerate(opts):
|
||||
|
@ -219,7 +218,7 @@ def adapt_arguments(command, arguments, args, opts):
|
|||
# Detect switches and set their values accordingly. If any of them
|
||||
# carries a value - append it to args.
|
||||
for index, (key, value, position) in enumerate(opts):
|
||||
if isinstance(norm_kwargs.get(key), BooleanType):
|
||||
if isinstance(norm_kwargs.get(key), bool):
|
||||
opts[index] = (key, True, position)
|
||||
if value:
|
||||
args.append((value, position))
|
||||
|
@ -231,8 +230,8 @@ def adapt_arguments(command, arguments, args, opts):
|
|||
|
||||
# Stripping down position information supplied with arguments and
|
||||
# options as it won't be needed again.
|
||||
args = map(lambda (arg, position): arg, args)
|
||||
opts = map(lambda (key, value, position): (key, value), opts)
|
||||
args = map(lambda t: t[0], t[1])
|
||||
opts = map(lambda t: (t[0], t[1]), opts)
|
||||
|
||||
# If command has extra option enabled - collect all extra arguments
|
||||
# and pass them to a last positional argument command defines as a
|
||||
|
@ -265,8 +264,8 @@ def adapt_arguments(command, arguments, args, opts):
|
|||
# Normally this does not happen unless overlapping is enabled.
|
||||
for key, value in opts:
|
||||
initial = norm_kwargs.get(key)
|
||||
if isinstance(initial, BooleanType):
|
||||
if not isinstance(value, BooleanType):
|
||||
if isinstance(initial, bool):
|
||||
if not isinstance(value, bool):
|
||||
raise CommandError("%s: Switch can not take an argument" % key, command)
|
||||
|
||||
# Inject the source arguments as a string as a first argument, if
|
||||
|
@ -299,7 +298,7 @@ def generate_usage(command, complete=True):
|
|||
letter = key[0]
|
||||
key = key.replace('_', '-')
|
||||
|
||||
if isinstance(value, BooleanType):
|
||||
if isinstance(value, bool):
|
||||
value = str()
|
||||
else:
|
||||
value = '=%s' % value
|
||||
|
|
|
@ -130,7 +130,8 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
|
|||
return 1
|
||||
|
||||
S = ''
|
||||
identities.sort(cmp=sort_identities_func)
|
||||
from functools import cmp_to_key
|
||||
identities.sort(key=cmp_to_key(sort_identities_func))
|
||||
for i in identities:
|
||||
c = i['category']
|
||||
type_ = i.get('type', '')
|
||||
|
@ -140,7 +141,7 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
|
|||
features.sort()
|
||||
for f in features:
|
||||
S += '%s<' % f
|
||||
dataforms.sort(cmp=sort_dataforms_func)
|
||||
dataforms.sort(key=cmp_to_key(sort_dataforms_func))
|
||||
for dataform in dataforms:
|
||||
# fields indexed by var
|
||||
fields = {}
|
||||
|
@ -157,9 +158,9 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
|
|||
S += '%s<' % value
|
||||
|
||||
if hash_method == 'sha-1':
|
||||
hash_ = hashlib.sha1(S)
|
||||
hash_ = hashlib.sha1(S.encode('utf-8'))
|
||||
elif hash_method == 'md5':
|
||||
hash_ = hashlib.md5(S)
|
||||
hash_ = hashlib.md5(S.encode('utf-8'))
|
||||
else:
|
||||
return ''
|
||||
return base64.b64encode(hash_.digest())
|
||||
|
|
|
@ -38,7 +38,7 @@ import sqlite3 as sqlite
|
|||
def create_log_db():
|
||||
print(_('creating logs database'))
|
||||
con = sqlite.connect(logger.LOG_DB_PATH)
|
||||
os.chmod(logger.LOG_DB_PATH, 0600) # rw only for us
|
||||
os.chmod(logger.LOG_DB_PATH, 0o600) # rw only for us
|
||||
cur = con.cursor()
|
||||
# create the tables
|
||||
# kind can be
|
||||
|
@ -86,7 +86,7 @@ def create_log_db():
|
|||
def create_cache_db():
|
||||
print(_('creating cache database'))
|
||||
con = sqlite.connect(logger.CACHE_DB_PATH)
|
||||
os.chmod(logger.CACHE_DB_PATH, 0600) # rw only for us
|
||||
os.chmod(logger.CACHE_DB_PATH, 0o600) # rw only for us
|
||||
cur = con.cursor()
|
||||
cur.executescript(
|
||||
'''
|
||||
|
@ -177,7 +177,7 @@ def check_and_possibly_move_config():
|
|||
vars['MY_ICONSETS_PATH'] = gajim.MY_ICONSETS_PATH
|
||||
vars['MY_MOOD_ICONSETS_PATH'] = gajim.MY_MOOD_ICONSETS_PATH
|
||||
vars['MY_ACTIVITY_ICONSETS_PATH'] = gajim.MY_ACTIVITY_ICONSETS_PATH
|
||||
import configpaths
|
||||
from common import configpaths
|
||||
MY_DATA = configpaths.gajimpaths['MY_DATA']
|
||||
MY_CONFIG = configpaths.gajimpaths['MY_CONFIG']
|
||||
MY_CACHE = configpaths.gajimpaths['MY_CACHE']
|
||||
|
@ -263,7 +263,7 @@ def check_and_possibly_create_paths():
|
|||
|
||||
VCARD_PATH = gajim.VCARD_PATH
|
||||
AVATAR_PATH = gajim.AVATAR_PATH
|
||||
import configpaths
|
||||
from common import configpaths
|
||||
MY_DATA = configpaths.gajimpaths['MY_DATA']
|
||||
MY_CONFIG = configpaths.gajimpaths['MY_CONFIG']
|
||||
MY_CACHE = configpaths.gajimpaths['MY_CACHE']
|
||||
|
@ -364,4 +364,4 @@ def create_path(directory):
|
|||
if os.path.exists(directory):
|
||||
return
|
||||
print(('creating %s directory') % directory)
|
||||
os.mkdir(directory, 0700)
|
||||
os.mkdir(directory, 0o700)
|
||||
|
|
|
@ -363,7 +363,7 @@ class ConnectionCommands:
|
|||
# buildReply don't copy the node attribute. Re-add it
|
||||
q.setAttr('node', nbxmpp.NS_COMMANDS)
|
||||
|
||||
for node, cmd in self.__commands.iteritems():
|
||||
for node, cmd in self.__commands.items():
|
||||
if cmd.isVisibleFor(self.isSameJID(jid)):
|
||||
q.addChild('item', {
|
||||
# TODO: find the jid
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
import sys
|
||||
import re
|
||||
import copy
|
||||
import defs
|
||||
from common import defs
|
||||
from gi.repository import GObject
|
||||
|
||||
(
|
||||
|
@ -568,7 +568,7 @@ class Config:
|
|||
Tree-like interface
|
||||
"""
|
||||
if node is None:
|
||||
for child, option in self.__options[1].iteritems():
|
||||
for child, option in self.__options[1].items():
|
||||
yield (child, ), option
|
||||
for grandparent in self.__options_per_key:
|
||||
yield (grandparent, ), None
|
||||
|
@ -579,7 +579,7 @@ class Config:
|
|||
elif len(node) == 2:
|
||||
grandparent, parent = node
|
||||
children = self.__options_per_key[grandparent][1][parent]
|
||||
for child, option in children.iteritems():
|
||||
for child, option in children.items():
|
||||
yield (grandparent, parent, child), option
|
||||
else:
|
||||
raise ValueError('Invalid node')
|
||||
|
@ -625,11 +625,9 @@ class Config:
|
|||
|
||||
def set(self, optname, value):
|
||||
if optname not in self.__options[1]:
|
||||
# raise RuntimeError, 'option %s does not exist' % optname
|
||||
return
|
||||
value = self.is_valid(self.__options[0][optname][OPT_TYPE], value)
|
||||
if value is None:
|
||||
# raise RuntimeError, 'value of %s cannot be None' % optname
|
||||
return
|
||||
|
||||
self.__options[1][optname] = value
|
||||
|
@ -666,7 +664,6 @@ class Config:
|
|||
|
||||
def add_per(self, typename, name): # per_group_of_option
|
||||
if typename not in self.__options_per_key:
|
||||
# raise RuntimeError, 'option %s does not exist' % typename
|
||||
return
|
||||
|
||||
opt = self.__options_per_key[typename]
|
||||
|
@ -680,7 +677,6 @@ class Config:
|
|||
|
||||
def del_per(self, typename, name, subname = None): # per_group_of_option
|
||||
if typename not in self.__options_per_key:
|
||||
# raise RuntimeError, 'option %s does not exist' % typename
|
||||
return
|
||||
|
||||
opt = self.__options_per_key[typename]
|
||||
|
@ -693,22 +689,18 @@ class Config:
|
|||
|
||||
def set_per(self, optname, key, subname, value): # per_group_of_option
|
||||
if optname not in self.__options_per_key:
|
||||
# raise RuntimeError, 'option %s does not exist' % optname
|
||||
return
|
||||
if not key:
|
||||
return
|
||||
dict_ = self.__options_per_key[optname][1]
|
||||
if key not in dict_:
|
||||
# raise RuntimeError, '%s is not a key of %s' % (key, dict_)
|
||||
self.add_per(optname, key)
|
||||
obj = dict_[key]
|
||||
if subname not in obj:
|
||||
# raise RuntimeError, '%s is not a key of %s' % (subname, obj)
|
||||
return
|
||||
typ = self.__options_per_key[optname][0][subname][OPT_TYPE]
|
||||
value = self.is_valid(typ, value)
|
||||
if value is None:
|
||||
# raise RuntimeError, '%s of %s cannot be None' % optname
|
||||
return
|
||||
obj[subname] = value
|
||||
self._timeout_save()
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import defs
|
||||
from common import defs
|
||||
HAVE_XDG = True
|
||||
try:
|
||||
__import__(xdg)
|
||||
|
@ -130,7 +130,7 @@ class ConfigPaths:
|
|||
except KeyError:
|
||||
return default
|
||||
|
||||
def iteritems(self):
|
||||
def items(self):
|
||||
for key in self.paths.iterkeys():
|
||||
yield (key, self[key])
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ from common import gpg
|
|||
from common import passwords
|
||||
from common import exceptions
|
||||
from common import check_X509
|
||||
from connection_handlers import *
|
||||
from common.connection_handlers import *
|
||||
|
||||
from nbxmpp import Smacks
|
||||
from string import Template
|
||||
|
|
|
@ -322,7 +322,7 @@ class ConnectionVcard:
|
|||
os.remove(path)
|
||||
# create folder if needed
|
||||
if not os.path.isdir(path):
|
||||
os.mkdir(path, 0700)
|
||||
os.mkdir(path, 0o700)
|
||||
puny_nick = helpers.sanitize_filename(nick)
|
||||
path_to_file = os.path.join(gajim.VCARD_PATH, puny_jid, puny_nick)
|
||||
else:
|
||||
|
@ -706,7 +706,7 @@ class ConnectionVcard:
|
|||
puny_nick = helpers.sanitize_filename(resource)
|
||||
# create folder if needed
|
||||
if not os.path.isdir(begin_path):
|
||||
os.mkdir(begin_path, 0700)
|
||||
os.mkdir(begin_path, 0o700)
|
||||
begin_path = os.path.join(begin_path, puny_nick)
|
||||
frm_jid += '/' + resource
|
||||
if photo_decoded:
|
||||
|
|
|
@ -39,8 +39,6 @@ from nbxmpp.protocol import NS_CHATSTATES
|
|||
from common.jingle_transport import JingleTransportSocks5
|
||||
from common.file_props import FilesProp
|
||||
|
||||
from . import gtkgui_helpers
|
||||
|
||||
import logging
|
||||
log = logging.getLogger('gajim.c.connection_handlers_events')
|
||||
|
||||
|
@ -2181,8 +2179,6 @@ class NotificationEvent(nec.NetworkIncomingEvent):
|
|||
self.popup_title = _('New Message from %(nickname)s') % \
|
||||
{'nickname': nick}
|
||||
|
||||
self.popup_image = gtkgui_helpers.get_icon_path(self.popup_image, 48)
|
||||
|
||||
if not gajim.config.get('notify_on_new_message') or \
|
||||
not self.first_unread:
|
||||
self.do_popup = False
|
||||
|
@ -2237,6 +2233,28 @@ class NotificationEvent(nec.NetworkIncomingEvent):
|
|||
|
||||
self.do_popup = False
|
||||
|
||||
def get_path_to_generic_or_avatar(self, generic, jid=None, suffix=None):
|
||||
"""
|
||||
Choose between avatar image and default image
|
||||
|
||||
Returns full path to the avatar image if it exists, otherwise returns full
|
||||
path to the image. generic must be with extension and suffix without
|
||||
"""
|
||||
if jid:
|
||||
# we want an avatar
|
||||
puny_jid = helpers.sanitize_filename(jid)
|
||||
path_to_file = os.path.join(gajim.AVATAR_PATH, puny_jid) + suffix
|
||||
path_to_local_file = path_to_file + '_local'
|
||||
for extension in ('.png', '.jpeg'):
|
||||
path_to_local_file_full = path_to_local_file + extension
|
||||
if os.path.exists(path_to_local_file_full):
|
||||
return path_to_local_file_full
|
||||
for extension in ('.png', '.jpeg'):
|
||||
path_to_file_full = path_to_file + extension
|
||||
if os.path.exists(path_to_file_full):
|
||||
return path_to_file_full
|
||||
return os.path.abspath(generic)
|
||||
|
||||
def handle_incoming_pres_event(self, pres_obj):
|
||||
if gajim.jid_is_transport(pres_obj.jid):
|
||||
return True
|
||||
|
@ -2315,8 +2333,8 @@ class NotificationEvent(nec.NetworkIncomingEvent):
|
|||
iconset = gajim.config.get('iconset')
|
||||
img_path = os.path.join(helpers.get_iconset_path(iconset),
|
||||
'48x48', show_image)
|
||||
self.popup_image = gtkgui_helpers.get_path_to_generic_or_avatar(
|
||||
img_path, jid=self.jid, suffix=suffix)
|
||||
self.popup_image = self.get_path_to_generic_or_avatar(img_path,
|
||||
jid=self.jid, suffix=suffix)
|
||||
|
||||
self.popup_timeout = gajim.config.get('notification_timeout')
|
||||
|
||||
|
|
|
@ -94,6 +94,8 @@ class Contact(CommonContact):
|
|||
sub='', ask='', resource='', priority=0, keyID='', client_caps=None,
|
||||
our_chatstate=None, chatstate=None, last_status_time=None, msg_id=None,
|
||||
last_activity_time=None):
|
||||
if not isinstance(jid, str):
|
||||
print('no str')
|
||||
|
||||
CommonContact.__init__(self, jid, account, resource, show, status, name,
|
||||
our_chatstate, chatstate, client_caps=client_caps)
|
||||
|
@ -494,7 +496,7 @@ class Contacts():
|
|||
return self._contacts.keys()
|
||||
|
||||
def get_contacts_jid_list(self):
|
||||
return [jid for jid, contact in self._contacts.iteritems() if not
|
||||
return [jid for jid, contact in self._contacts.items() if not
|
||||
contact[0].is_groupchat()]
|
||||
|
||||
def get_contact_from_full_jid(self, fjid):
|
||||
|
|
|
@ -34,7 +34,7 @@ import locale
|
|||
from common import config
|
||||
import nbxmpp
|
||||
from common import defs
|
||||
from common import ged
|
||||
from common import ged as ged_module
|
||||
|
||||
interface = None # The actual interface (the gtk one for the moment)
|
||||
thread_interface = None # Interface to run a thread and then a callback
|
||||
|
@ -43,16 +43,15 @@ version = config.get('version')
|
|||
connections = {} # 'account name': 'account (connection.Connection) instance'
|
||||
ipython_window = None
|
||||
|
||||
ged = common.ged.GlobalEventsDispatcher() # Global Events Dispatcher
|
||||
ged = ged_module.GlobalEventsDispatcher() # Global Events Dispatcher
|
||||
nec = None # Network Events Controller
|
||||
plugin_manager = None # Plugins Manager
|
||||
|
||||
log = logging.getLogger('gajim')
|
||||
|
||||
import logger
|
||||
logger = logger.Logger() # init the logger
|
||||
logger = None
|
||||
|
||||
import configpaths
|
||||
from common import configpaths
|
||||
gajimpaths = configpaths.gajimpaths
|
||||
|
||||
VCARD_PATH = gajimpaths['VCARD']
|
||||
|
@ -84,8 +83,8 @@ else:
|
|||
|
||||
os_info = None # used to cache os information
|
||||
|
||||
from contacts import LegacyContactsAPI
|
||||
from events import Events
|
||||
from common.contacts import LegacyContactsAPI
|
||||
from common.events import Events
|
||||
|
||||
gmail_domains = ['gmail.com', 'googlemail.com']
|
||||
|
||||
|
@ -221,9 +220,6 @@ gajim_optional_features = {}
|
|||
# Capabilities hash per account
|
||||
caps_hash = {}
|
||||
|
||||
import caps_cache
|
||||
caps_cache.initialize(logger)
|
||||
|
||||
global_id = 0
|
||||
def get_an_id():
|
||||
global global_id
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
from gajim import HAVE_GPG
|
||||
from common.gajim import HAVE_GPG
|
||||
import os
|
||||
|
||||
if HAVE_GPG:
|
||||
|
|
|
@ -35,7 +35,7 @@ import locale
|
|||
import os
|
||||
import subprocess
|
||||
import urllib
|
||||
import urllib2
|
||||
import urllib
|
||||
import webbrowser
|
||||
import errno
|
||||
import select
|
||||
|
@ -50,8 +50,8 @@ from gi.repository import GObject
|
|||
from encodings.punycode import punycode_encode
|
||||
from string import Template
|
||||
|
||||
from i18n import Q_
|
||||
from i18n import ngettext
|
||||
from common.i18n import Q_
|
||||
from common.i18n import ngettext
|
||||
|
||||
try:
|
||||
import winsound # windows-only built-in module for playing wav
|
||||
|
@ -122,7 +122,7 @@ def idn_to_ascii(host):
|
|||
labels = idna.dots.split(host)
|
||||
converted_labels = []
|
||||
for label in labels:
|
||||
converted_labels.append(idna.ToASCII(label))
|
||||
converted_labels.append(idna.ToASCII(label).decode('utf-8'))
|
||||
return ".".join(converted_labels)
|
||||
|
||||
def ascii_to_idn(host):
|
||||
|
@ -146,7 +146,7 @@ def parse_resource(resource):
|
|||
from nbxmpp.stringprepare import resourceprep
|
||||
return resourceprep.prepare(resource)
|
||||
except UnicodeError:
|
||||
raise InvalidFormat, 'Invalid character in resource.'
|
||||
raise InvalidFormat('Invalid character in resource.')
|
||||
|
||||
def prep(user, server, resource):
|
||||
"""
|
||||
|
@ -156,34 +156,34 @@ def prep(user, server, resource):
|
|||
#http://svn.twistedmatrix.com/cvs/trunk/twisted/words/protocols/jabber/jid.py
|
||||
if user is not None:
|
||||
if len(user) < 1 or len(user) > 1023:
|
||||
raise InvalidFormat, _('Username must be between 1 and 1023 chars')
|
||||
raise InvalidFormat(_('Username must be between 1 and 1023 chars'))
|
||||
try:
|
||||
from nbxmpp.stringprepare import nodeprep
|
||||
user = nodeprep.prepare(user)
|
||||
except UnicodeError:
|
||||
raise InvalidFormat, _('Invalid character in username.')
|
||||
raise InvalidFormat(_('Invalid character in username.'))
|
||||
else:
|
||||
user = None
|
||||
|
||||
if server is not None:
|
||||
if len(server) < 1 or len(server) > 1023:
|
||||
raise InvalidFormat, _('Server must be between 1 and 1023 chars')
|
||||
raise InvalidFormat(_('Server must be between 1 and 1023 chars'))
|
||||
try:
|
||||
from nbxmpp.stringprepare import nameprep
|
||||
server = nameprep.prepare(server)
|
||||
except UnicodeError:
|
||||
raise InvalidFormat, _('Invalid character in hostname.')
|
||||
raise InvalidFormat(_('Invalid character in hostname.'))
|
||||
else:
|
||||
raise InvalidFormat, _('Server address required.')
|
||||
raise InvalidFormat(_('Server address required.'))
|
||||
|
||||
if resource is not None:
|
||||
if len(resource) < 1 or len(resource) > 1023:
|
||||
raise InvalidFormat, _('Resource must be between 1 and 1023 chars')
|
||||
raise InvalidFormat(_('Resource must be between 1 and 1023 chars'))
|
||||
try:
|
||||
from nbxmpp.stringprepare import resourceprep
|
||||
resource = resourceprep.prepare(resource)
|
||||
except UnicodeError:
|
||||
raise InvalidFormat, _('Invalid character in resource.')
|
||||
raise InvalidFormat(_('Invalid character in resource.'))
|
||||
else:
|
||||
resource = None
|
||||
|
||||
|
@ -493,7 +493,7 @@ def get_windows_reg_env(varname, default=''):
|
|||
'AppData' = %USERPROFILE%\Application Data (also an ENV)
|
||||
'Desktop' = %USERPROFILE%\Desktop
|
||||
'Favorites' = %USERPROFILE%\Favorites
|
||||
'NetHood' = %USERPROFILE%\NetHood
|
||||
'NetHood' = %USERPROFILE%\ NetHood
|
||||
'Personal' = D:\My Documents (PATH TO MY DOCUMENTS)
|
||||
'PrintHood' = %USERPROFILE%\PrintHood
|
||||
'Programs' = %USERPROFILE%\Start Menu\Programs
|
||||
|
@ -555,7 +555,8 @@ def sanitize_filename(filename):
|
|||
hash = hashlib.md5(filename)
|
||||
filename = base64.b64encode(hash.digest())
|
||||
|
||||
filename = punycode_encode(filename) # make it latin chars only
|
||||
# make it latin chars only
|
||||
filename = punycode_encode(filename).decode('utf-8')
|
||||
filename = filename.replace('/', '_')
|
||||
if os.name == 'nt':
|
||||
filename = filename.replace('?', '_').replace(':', '_')\
|
||||
|
@ -634,10 +635,10 @@ def datetime_tuple(timestamp):
|
|||
|
||||
# import gajim only when needed (after decode_string is defined) see #4764
|
||||
|
||||
import gajim
|
||||
from common import gajim
|
||||
if gajim.HAVE_PYCURL:
|
||||
import pycurl
|
||||
from cStringIO import StringIO
|
||||
from io import StringIO
|
||||
|
||||
def convert_bytes(string):
|
||||
suffix = ''
|
||||
|
@ -1462,9 +1463,9 @@ def _get_img_direct(attrs):
|
|||
# Wait maximum 5s for connection
|
||||
socket.setdefaulttimeout(5)
|
||||
try:
|
||||
req = urllib2.Request(attrs['src'])
|
||||
req = urllib.request.Request(attrs['src'])
|
||||
req.add_header('User-Agent', 'Gajim ' + gajim.version)
|
||||
f = urllib2.urlopen(req)
|
||||
f = urllib.request.urlopen(req)
|
||||
except Exception as ex:
|
||||
log.debug('Error loading image %s ' % attrs['src'] + str(ex))
|
||||
pixbuf = None
|
||||
|
|
|
@ -63,7 +63,7 @@ if os.name == 'nt':
|
|||
|
||||
gettext.install(APP, DIR)
|
||||
if gettext._translations:
|
||||
_translation = gettext._translations.values()[0]
|
||||
_translation = list(gettext._translations.values())[0]
|
||||
else:
|
||||
_translation = gettext.NullTranslations()
|
||||
|
||||
|
|
|
@ -27,14 +27,14 @@ Handles the jingle signalling protocol
|
|||
# - codecs
|
||||
|
||||
import nbxmpp
|
||||
import helpers
|
||||
import gajim
|
||||
from common import helpers
|
||||
from common import gajim
|
||||
|
||||
from jingle_session import JingleSession, JingleStates
|
||||
from common.jingle_session import JingleSession, JingleStates
|
||||
if gajim.HAVE_FARSTREAM:
|
||||
from jingle_rtp import JingleAudio, JingleVideo
|
||||
from jingle_ft import JingleFileTransfer
|
||||
from jingle_transport import JingleTransportSocks5, JingleTransportIBB
|
||||
from common.jingle_rtp import JingleAudio, JingleVideo
|
||||
from common.jingle_ft import JingleFileTransfer
|
||||
from common.jingle_transport import JingleTransportSocks5, JingleTransportIBB
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger('gajim.c.jingle')
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
Handles Jingle contents (XEP 0166)
|
||||
"""
|
||||
|
||||
import gajim
|
||||
from common import gajim
|
||||
import nbxmpp
|
||||
from jingle_transport import JingleTransportIBB
|
||||
from common.jingle_transport import JingleTransportIBB
|
||||
|
||||
contents = {}
|
||||
|
||||
|
|
|
@ -20,16 +20,16 @@ Handles Jingle File Transfer (XEP 0234)
|
|||
"""
|
||||
|
||||
import hashlib
|
||||
import gajim
|
||||
from common import gajim
|
||||
import nbxmpp
|
||||
from jingle_content import contents, JingleContent
|
||||
from jingle_transport import *
|
||||
from common.jingle_content import contents, JingleContent
|
||||
from common.jingle_transport import *
|
||||
from common import helpers
|
||||
from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
|
||||
from common.connection_handlers_events import FileRequestReceivedEvent
|
||||
import threading
|
||||
import logging
|
||||
from jingle_ftstates import *
|
||||
from common.jingle_ftstates import *
|
||||
log = logging.getLogger('gajim.c.jingle_ft')
|
||||
|
||||
STATE_NOT_STARTED = 0
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
## GNU General Public License for more details.
|
||||
##
|
||||
|
||||
import gajim
|
||||
from common import gajim
|
||||
import nbxmpp
|
||||
from jingle_transport import *
|
||||
from common.jingle_transport import *
|
||||
from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
|
||||
|
||||
|
||||
|
|
|
@ -21,14 +21,15 @@ from gi.repository import GObject
|
|||
import socket
|
||||
|
||||
import nbxmpp
|
||||
import farstream, gst
|
||||
import farstream
|
||||
import gst
|
||||
from glib import GError
|
||||
|
||||
import gajim
|
||||
from common import gajim
|
||||
|
||||
from jingle_transport import JingleTransportICEUDP
|
||||
from jingle_content import contents, JingleContent, JingleContentSetupException
|
||||
from connection_handlers_events import InformationEvent
|
||||
from common.jingle_transport import JingleTransportICEUDP
|
||||
from common.jingle_content import contents, JingleContent, JingleContentSetupException
|
||||
from common.connection_handlers_events import InformationEvent
|
||||
|
||||
|
||||
import logging
|
||||
|
|
|
@ -26,12 +26,12 @@ Handles Jingle sessions (XEP 0166)
|
|||
# - Tie-breaking
|
||||
# * timeout
|
||||
|
||||
import gajim #Get rid of that?
|
||||
from common import gajim
|
||||
import nbxmpp
|
||||
from jingle_transport import get_jingle_transport, JingleTransportIBB
|
||||
from jingle_content import get_jingle_content, JingleContentSetupException
|
||||
from jingle_content import JingleContent
|
||||
from jingle_ft import STATE_TRANSPORT_REPLACE
|
||||
from common.jingle_transport import get_jingle_transport, JingleTransportIBB
|
||||
from common.jingle_content import get_jingle_content, JingleContentSetupException
|
||||
from common.jingle_content import JingleContent
|
||||
from common.jingle_ft import STATE_TRANSPORT_REPLACE
|
||||
from common.connection_handlers_events import *
|
||||
import logging
|
||||
log = logging.getLogger("gajim.c.jingle_session")
|
||||
|
@ -73,7 +73,6 @@ class JingleSession(object):
|
|||
self.contents = {} # negotiated contents
|
||||
self.connection = con # connection to use
|
||||
# our full jid
|
||||
#FIXME: Get rid of gajim here?
|
||||
self.ourjid = gajim.get_jid_from_account(self.connection.name)
|
||||
if con.server_resource:
|
||||
self.ourjid = self.ourjid + '/' + con.server_resource
|
||||
|
|
|
@ -296,7 +296,7 @@ class JingleTransportSocks5(JingleTransport):
|
|||
cid = host['candidate_id']
|
||||
break
|
||||
if cid is None:
|
||||
raise Exception, 'cid is missing'
|
||||
raise Exception('cid is missing')
|
||||
activated.setAttr('cid', cid)
|
||||
transport.addChild(node=activated)
|
||||
content.addChild(node=transport)
|
||||
|
|
|
@ -20,7 +20,6 @@ import os
|
|||
import nbxmpp
|
||||
|
||||
import logging
|
||||
import common
|
||||
from common import gajim
|
||||
log = logging.getLogger('gajim.c.jingle_xtls')
|
||||
|
||||
|
@ -201,7 +200,7 @@ def createCertRequest(pkey, digest="md5", **name):
|
|||
req.sign(pkey, digest)
|
||||
return req
|
||||
|
||||
def createCertificate(req, (issuerCert, issuerKey), serial, (notBefore, notAfter), digest="md5"):
|
||||
def createCertificate(req, issuerCert, issuerKey, serial, notBefore, notAfter, digest="md5"):
|
||||
"""
|
||||
Generate a certificate given a certificate request.
|
||||
|
||||
|
@ -235,7 +234,7 @@ def make_certs(filepath, CN):
|
|||
"""
|
||||
key = createKeyPair(TYPE_RSA, 1024)
|
||||
req = createCertRequest(key, CN=CN)
|
||||
cert = createCertificate(req, (req, key), 0, (0, 60*60*24*365*5)) # five years
|
||||
cert = createCertificate(req, req, key, 0, 0, 60*60*24*365*5) # five years
|
||||
open(filepath + '.pkey', 'w').write(crypto.dump_privatekey(
|
||||
crypto.FILETYPE_PEM, key))
|
||||
open(filepath + '.cert', 'w').write(crypto.dump_certificate(
|
||||
|
|
|
@ -33,16 +33,16 @@ import sys
|
|||
import time
|
||||
import datetime
|
||||
from gzip import GzipFile
|
||||
from cStringIO import StringIO
|
||||
from io import BytesIO
|
||||
from gi.repository import GObject
|
||||
|
||||
import exceptions
|
||||
import gajim
|
||||
import ged
|
||||
from common import exceptions
|
||||
from common import gajim
|
||||
from common import ged
|
||||
|
||||
import sqlite3 as sqlite
|
||||
|
||||
import configpaths
|
||||
from common import configpaths
|
||||
LOG_DB_PATH = configpaths.gajimpaths['LOG_DB']
|
||||
LOG_DB_FOLDER, LOG_DB_FILE = os.path.split(LOG_DB_PATH)
|
||||
CACHE_DB_PATH = configpaths.gajimpaths['CACHE_DB']
|
||||
|
@ -884,7 +884,7 @@ class Logger:
|
|||
# ..., 'FEAT', feature1, feature2, ...).join(' '))
|
||||
# NOTE: if there's a need to do more gzip, put that to a function
|
||||
try:
|
||||
data = GzipFile(fileobj=StringIO(str(data))).read().split('\0')
|
||||
data = GzipFile(fileobj=BytesIO(data)).read().decode('utf-8').split('\0')
|
||||
except IOError:
|
||||
# This data is corrupted. It probably contains non-ascii chars
|
||||
to_be_removed.append((hash_method, hash_))
|
||||
|
@ -1046,8 +1046,8 @@ class Logger:
|
|||
FROM roster_entry re, jids j
|
||||
WHERE re.account_jid_id=? AND j.jid_id=re.jid_id''', (account_jid_id,))
|
||||
for jid, jid_id, name, subscription, ask in self.cur:
|
||||
jid = jid.encode('utf-8')
|
||||
name = name.encode('utf-8')
|
||||
jid = jid
|
||||
name = name
|
||||
data[jid] = {}
|
||||
if name:
|
||||
data[jid]['name'] = name
|
||||
|
@ -1071,7 +1071,7 @@ class Logger:
|
|||
WHERE account_jid_id=? AND jid_id=?''',
|
||||
(account_jid_id, data[jid]['id']))
|
||||
for (group_name,) in self.cur:
|
||||
group_name = group_name.encode('utf-8')
|
||||
group_name = group_name
|
||||
data[jid]['groups'].append(group_name)
|
||||
del data[jid]['id']
|
||||
|
||||
|
|
|
@ -153,7 +153,7 @@ class NetworkEvent(object):
|
|||
return True
|
||||
|
||||
def _set_kwargs_as_attributes(self, **kwargs):
|
||||
for k, v in kwargs.iteritems():
|
||||
for k, v in kwargs.items():
|
||||
setattr(self, k, v)
|
||||
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ from common import helpers
|
|||
from common import caps_cache
|
||||
|
||||
import sqlite3 as sqlite
|
||||
import logger
|
||||
from common import logger
|
||||
|
||||
class OptionsParser:
|
||||
def __init__(self, filename):
|
||||
|
@ -60,10 +60,6 @@ class OptionsParser:
|
|||
regex = re.compile(r"(?P<optname>[^.]+)(?:(?:\.(?P<key>.+))?\.(?P<subname>[^.]+))?\s=\s(?P<value>.*)")
|
||||
|
||||
for line in fd:
|
||||
try:
|
||||
line = helpers.ensure_utf8_string(line)
|
||||
except UnicodeDecodeError:
|
||||
line = line.decode(locale.getpreferredencoding())
|
||||
optname, key, subname, value = regex.match(line).groups()
|
||||
if key is None:
|
||||
self.old_values[optname] = value
|
||||
|
@ -122,7 +118,7 @@ class OptionsParser:
|
|||
os.rename(self.__tempfile, self.__filename)
|
||||
except IOError as e:
|
||||
return str(e)
|
||||
os.chmod(self.__filename, 0600)
|
||||
os.chmod(self.__filename, 0o600)
|
||||
|
||||
def update_config(self, old_version, new_version):
|
||||
old_version_list = old_version.split('.') # convert '0.x.y' to (0, x, y)
|
||||
|
|
|
@ -225,8 +225,6 @@ from common import helpers
|
|||
import nbxmpp
|
||||
from common import gajim
|
||||
|
||||
import gtkgui_helpers
|
||||
|
||||
|
||||
class AbstractPEP(object):
|
||||
|
||||
|
@ -269,10 +267,6 @@ class AbstractPEP(object):
|
|||
else:
|
||||
acc.pep[self.type_] = self
|
||||
|
||||
def asPixbufIcon(self):
|
||||
'''SHOULD be implemented by subclasses'''
|
||||
return None
|
||||
|
||||
def asMarkupText(self):
|
||||
'''SHOULD be implemented by subclasses'''
|
||||
return ''
|
||||
|
@ -300,13 +294,6 @@ class UserMoodPEP(AbstractPEP):
|
|||
retracted = items.getTag('retract') or not 'mood' in mood_dict
|
||||
return (mood_dict, retracted)
|
||||
|
||||
def asPixbufIcon(self):
|
||||
assert not self._retracted
|
||||
received_mood = self._pep_specific_data['mood']
|
||||
mood = received_mood if received_mood in MOODS else 'unknown'
|
||||
pixbuf = gtkgui_helpers.load_mood_icon(mood).get_pixbuf()
|
||||
return pixbuf
|
||||
|
||||
def asMarkupText(self):
|
||||
assert not self._retracted
|
||||
untranslated_mood = self._pep_specific_data['mood']
|
||||
|
@ -346,11 +333,6 @@ class UserTunePEP(AbstractPEP):
|
|||
'title' in tune_dict)
|
||||
return (tune_dict, retracted)
|
||||
|
||||
def asPixbufIcon(self):
|
||||
import os
|
||||
path = os.path.join(gajim.DATA_DIR, 'emoticons', 'static', 'music.png')
|
||||
return GdkPixbuf.Pixbuf.new_from_file(path)
|
||||
|
||||
def asMarkupText(self):
|
||||
assert not self._retracted
|
||||
tune = self._pep_specific_data
|
||||
|
@ -396,24 +378,6 @@ class UserActivityPEP(AbstractPEP):
|
|||
retracted = items.getTag('retract') or not 'activity' in activity_dict
|
||||
return (activity_dict, retracted)
|
||||
|
||||
def asPixbufIcon(self):
|
||||
assert not self._retracted
|
||||
pep = self._pep_specific_data
|
||||
activity = pep['activity']
|
||||
|
||||
has_known_activity = activity in ACTIVITIES
|
||||
has_known_subactivity = (has_known_activity and ('subactivity' in pep)
|
||||
and (pep['subactivity'] in ACTIVITIES[activity]))
|
||||
|
||||
if has_known_activity:
|
||||
if has_known_subactivity:
|
||||
subactivity = pep['subactivity']
|
||||
return gtkgui_helpers.load_activity_icon(activity, subactivity).get_pixbuf()
|
||||
else:
|
||||
return gtkgui_helpers.load_activity_icon(activity).get_pixbuf()
|
||||
else:
|
||||
return gtkgui_helpers.load_activity_icon('unknown').get_pixbuf()
|
||||
|
||||
def asMarkupText(self):
|
||||
assert not self._retracted
|
||||
pep = self._pep_specific_data
|
||||
|
@ -491,10 +455,6 @@ class UserLocationPEP(AbstractPEP):
|
|||
con = gajim.connections[account].location_info = \
|
||||
self._pep_specific_data
|
||||
|
||||
def asPixbufIcon(self):
|
||||
path = gtkgui_helpers.get_icon_path('gajim-earth')
|
||||
return GdkPixbuf.Pixbuf.new_from_file(path)
|
||||
|
||||
def asMarkupText(self):
|
||||
assert not self._retracted
|
||||
location = self._pep_specific_data
|
||||
|
|
|
@ -898,7 +898,7 @@ class ConnectionIBBytestream(ConnectionBytestream):
|
|||
else:
|
||||
if not data:
|
||||
err = nbxmpp.ERR_BAD_REQUEST
|
||||
elif seq <> file_props.seq:
|
||||
elif seq != file_props.seq:
|
||||
err = nbxmpp.ERR_UNEXPECTED_REQUEST
|
||||
else:
|
||||
log.debug('Successfull receive sid->%s %s+%s bytes' % (sid,
|
||||
|
|
|
@ -29,7 +29,7 @@ log = logging.getLogger('gajim.c.proxy65_manager')
|
|||
import nbxmpp
|
||||
from common import gajim
|
||||
from common import helpers
|
||||
from socks5 import Socks5
|
||||
from common.socks5 import Socks5
|
||||
from nbxmpp.idlequeue import IdleObject
|
||||
from common.file_props import FilesProp
|
||||
|
||||
|
|
|
@ -22,11 +22,13 @@
|
|||
##
|
||||
|
||||
import nbxmpp
|
||||
import gajim
|
||||
import connection_handlers
|
||||
import ged
|
||||
from connection_handlers_events import PubsubReceivedEvent
|
||||
from connection_handlers_events import PubsubBookmarksReceivedEvent
|
||||
from common import gajim
|
||||
#TODO: Doesn't work
|
||||
#from common.connection_handlers import PEP_CONFIG
|
||||
PEP_CONFIG = 'pep_config'
|
||||
from common import ged
|
||||
from common.connection_handlers_events import PubsubReceivedEvent
|
||||
from common.connection_handlers_events import PubsubBookmarksReceivedEvent
|
||||
import logging
|
||||
log = logging.getLogger('gajim.c.pubsub')
|
||||
|
||||
|
@ -218,5 +220,5 @@ class ConnectionPubSub:
|
|||
e = e.addChild('configure', {'node': node})
|
||||
id_ = self.connection.getAnID()
|
||||
query.setID(id_)
|
||||
self.awaiting_answers[id_] = (connection_handlers.PEP_CONFIG,)
|
||||
self.awaiting_answers[id_] = (PEP_CONFIG,)
|
||||
self.connection.send(query)
|
||||
|
|
|
@ -22,7 +22,8 @@
|
|||
##
|
||||
|
||||
from common import gajim
|
||||
import os, sys
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
STATE_UNKNOWN = 'OS probably not supported'
|
||||
|
|
|
@ -33,9 +33,9 @@ from errno import EISCONN
|
|||
from errno import EINPROGRESS
|
||||
from errno import EAFNOSUPPORT
|
||||
from nbxmpp.idlequeue import IdleObject
|
||||
from file_props import FilesProp
|
||||
from common.file_props import FilesProp
|
||||
from common import gajim
|
||||
import jingle_xtls
|
||||
from common import jingle_xtls
|
||||
if jingle_xtls.PYOPENSSL_PRESENT:
|
||||
import OpenSSL
|
||||
import logging
|
||||
|
@ -535,7 +535,7 @@ class Socks5:
|
|||
self.file_props.received_len = self.size
|
||||
except IOError as e:
|
||||
self.close_file()
|
||||
raise IOError, e
|
||||
raise IOError(str(e))
|
||||
|
||||
def close_file(self):
|
||||
if self.file:
|
||||
|
|
|
@ -45,7 +45,7 @@ if gajim.HAVE_PYCRYPTO:
|
|||
from Crypto.PublicKey import RSA
|
||||
|
||||
from common import dh
|
||||
import secrets
|
||||
from . import secrets
|
||||
|
||||
XmlDsig = 'http://www.w3.org/2000/09/xmldsig#'
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ from common import gajim
|
|||
from common import ged
|
||||
from common.zeroconf import client_zeroconf
|
||||
from common.zeroconf import zeroconf
|
||||
from connection_handlers_zeroconf import *
|
||||
from common.zeroconf.connection_handlers_zeroconf import *
|
||||
from common.connection_handlers_events import *
|
||||
|
||||
import locale
|
||||
|
|
|
@ -239,7 +239,7 @@ class Zeroconf:
|
|||
txt = {}
|
||||
|
||||
# remove empty keys
|
||||
for key, val in self.txt.iteritems():
|
||||
for key, val in self.txt.items():
|
||||
if val:
|
||||
txt[key] = val
|
||||
|
||||
|
|
|
@ -455,8 +455,8 @@ class PreferencesWindow:
|
|||
else:
|
||||
config = gajim.config.get(opt_name + '_device')
|
||||
|
||||
for index, (name, value) in enumerate(sorted(device_dict.\
|
||||
iteritems(), key=key)):
|
||||
for index, (name, value) in enumerate(sorted(device_dict.items(),
|
||||
key=key)):
|
||||
model.append((name, value))
|
||||
if config == value:
|
||||
combobox.set_active(index)
|
||||
|
|
|
@ -38,7 +38,7 @@ import os
|
|||
import tooltips
|
||||
import dialogs
|
||||
import locale
|
||||
import Queue
|
||||
import queue
|
||||
import urllib
|
||||
|
||||
import gtkgui_helpers
|
||||
|
@ -335,7 +335,7 @@ class ConversationTextview(GObject.GObject):
|
|||
# One mark at the begining then 2 marks between each lines
|
||||
size = gajim.config.get('max_conversation_lines')
|
||||
size = 2 * size - 1
|
||||
self.marks_queue = Queue.Queue(size)
|
||||
self.marks_queue = queue.Queue(size)
|
||||
|
||||
self.allow_focus_out_line = True
|
||||
# holds a mark at the end of --- line
|
||||
|
@ -709,7 +709,7 @@ class ConversationTextview(GObject.GObject):
|
|||
buffer_.delete(start, end)
|
||||
size = gajim.config.get('max_conversation_lines')
|
||||
size = 2 * size - 1
|
||||
self.marks_queue = Queue.Queue(size)
|
||||
self.marks_queue = queue.Queue(size)
|
||||
self.focus_out_end_mark = None
|
||||
self.just_cleared = True
|
||||
|
||||
|
@ -1171,7 +1171,7 @@ class ConversationTextview(GObject.GObject):
|
|||
all_tags = [(ttt.lookup(t) if isinstance(t, str) else t) for t in all_tags]
|
||||
buffer_.insert_with_tags(end_iter, special_text, *all_tags)
|
||||
if 'url' in tags:
|
||||
puny_text = puny_encode(special_text)
|
||||
puny_text = puny_encode(special_text).decode('utf-8')
|
||||
if not puny_text.endswith('-'):
|
||||
end_iter = buffer_.get_end_iter()
|
||||
buffer_.insert(end_iter, " (%s)" % puny_text)
|
||||
|
|
|
@ -1297,13 +1297,12 @@ class AboutDialog:
|
|||
if thanks_file_path:
|
||||
authors.append('\n' + _('THANKS:'))
|
||||
|
||||
text = helpers.ensure_utf8_string(open(thanks_file_path).read())
|
||||
text = open(thanks_file_path).read()
|
||||
text_splitted = text.split('\n')
|
||||
text = '\n'.join(text_splitted[:-2]) # remove one english sentence
|
||||
# and add it manually as translatable
|
||||
text += helpers.ensure_utf8_string('\n%s\n' % _('Last but not '
|
||||
'least, we would like to thank all the package maintainers.'
|
||||
))
|
||||
text += '\n%s\n' % _('Last but not least, we would like to '
|
||||
'thank all the package maintainers.')
|
||||
authors.append(text)
|
||||
|
||||
dlg.set_authors(authors)
|
||||
|
@ -2322,13 +2321,13 @@ class JoinGroupchatWindow:
|
|||
if room_jid != '' and room_jid in gajim.gc_connected[account] and\
|
||||
gajim.gc_connected[account][room_jid]:
|
||||
ErrorDialog(_('You are already in group chat %s') % room_jid)
|
||||
raise GajimGeneralException, 'You are already in this group chat'
|
||||
raise GajimGeneralException('You are already in this group chat')
|
||||
if nick == '':
|
||||
nick = gajim.nicks[account]
|
||||
if gajim.connections[account].connected < 2:
|
||||
ErrorDialog(_('You are not connected to the server'),
|
||||
_('You can not join a group chat unless you are connected.'))
|
||||
raise GajimGeneralException, 'You must be connected to join a groupchat'
|
||||
raise GajimGeneralException('You must be connected to join a groupchat')
|
||||
|
||||
self.xml = gtkgui_helpers.get_gtk_builder('join_groupchat_window.ui')
|
||||
|
||||
|
@ -2565,7 +2564,7 @@ class SynchroniseSelectAccountDialog:
|
|||
if not account or gajim.connections[account].connected < 2:
|
||||
ErrorDialog(_('You are not connected to the server'),
|
||||
_('Without a connection, you can not synchronise your contacts.'))
|
||||
raise GajimGeneralException, 'You are not connected to the server'
|
||||
raise GajimGeneralException('You are not connected to the server')
|
||||
self.account = account
|
||||
self.xml = gtkgui_helpers.get_gtk_builder('synchronise_select_account_dialog.ui')
|
||||
self.dialog = self.xml.get_object('synchronise_select_account_dialog')
|
||||
|
@ -2754,7 +2753,7 @@ class ChangePasswordDialog:
|
|||
if not account or gajim.connections[account].connected < 2:
|
||||
ErrorDialog(_('You are not connected to the server'),
|
||||
_('Without a connection, you can not change your password.'))
|
||||
raise GajimGeneralException, 'You are not connected to the server'
|
||||
raise GajimGeneralException('You are not connected to the server')
|
||||
self.account = account
|
||||
self.on_response = on_response
|
||||
self.xml = gtkgui_helpers.get_gtk_builder('change_password_dialog.ui')
|
||||
|
|
|
@ -223,7 +223,7 @@ class Closure(object):
|
|||
self.removeargs = removeargs
|
||||
if isinstance(cb, types.MethodType):
|
||||
self.meth_self = weakref.ref(cb.im_self, self._remove)
|
||||
self.meth_name = cb.func_name
|
||||
self.meth_name = cb.__name__
|
||||
elif callable(cb):
|
||||
self.meth_self = None
|
||||
self.cb = weakref.ref(cb, self._remove)
|
||||
|
@ -515,7 +515,7 @@ class ServiceDiscoveryWindow(object):
|
|||
if gajim.connections[account].connected < 2:
|
||||
dialogs.ErrorDialog(_('You are not connected to the server'),
|
||||
_('Without a connection, you can not browse available services'))
|
||||
raise RuntimeError, 'You must be connected to browse services'
|
||||
raise RuntimeError('You must be connected to browse services')
|
||||
|
||||
# Get a ServicesCache object.
|
||||
try:
|
||||
|
|
|
@ -219,6 +219,10 @@ except exceptions.DatabaseMalformed:
|
|||
'http://trac.gajim.org/wiki/DatabaseBackup) or remove it (all history '
|
||||
'will be lost).') % common.logger.LOG_DB_PATH
|
||||
else:
|
||||
from common import logger
|
||||
gajim.logger = logger.Logger()
|
||||
from common import caps_cache
|
||||
caps_cache.initialize(gajim.logger)
|
||||
from common import dbus_support
|
||||
if dbus_support.supported:
|
||||
from music_track_listener import MusicTrackListener
|
||||
|
|
|
@ -29,9 +29,9 @@ from gi.repository import Gtk
|
|||
from gi.repository import Gdk
|
||||
from gi.repository import Pango
|
||||
from common import i18n # installs _() function
|
||||
import dialogs
|
||||
from dialogs import HigDialog
|
||||
|
||||
from cStringIO import StringIO
|
||||
from io import StringIO
|
||||
from common import helpers
|
||||
|
||||
_exception_in_progress = threading.Lock()
|
||||
|
@ -43,7 +43,7 @@ def _info(type_, value, tb):
|
|||
_excepthook_save(type_, value, tb)
|
||||
return
|
||||
|
||||
dialog = dialogs.HigDialog(None, Gtk.MessageType.WARNING, Gtk.ButtonsType.NONE,
|
||||
dialog = HigDialog(None, Gtk.MessageType.WARNING, Gtk.ButtonsType.NONE,
|
||||
_('A programming error has been detected'),
|
||||
_('It probably is not fatal, but should be reported '
|
||||
'to the developers nonetheless.'))
|
||||
|
|
|
@ -41,6 +41,7 @@ log = logging.getLogger('gajim.gtkgui_helpers')
|
|||
|
||||
from common import i18n
|
||||
from common import gajim
|
||||
from common import pep
|
||||
|
||||
gtk_icon_theme = Gtk.IconTheme.get_default()
|
||||
gtk_icon_theme.append_search_path(gajim.ICONS_DIR)
|
||||
|
@ -384,7 +385,7 @@ def get_abspath_for_script(scriptname, want_type = False):
|
|||
script += '\nexec python -OOt gajim.py $0 $@\n'
|
||||
f.write(script)
|
||||
f.close()
|
||||
os.chmod(path_to_script, 0700)
|
||||
os.chmod(path_to_script, 0o700)
|
||||
except OSError: # do not traceback (could be a permission problem)
|
||||
#we talk about a file here
|
||||
s = _('Could not write to %s. Session Management support will '
|
||||
|
@ -607,7 +608,7 @@ def get_avatar_pixbuf_from_cache(fjid, use_local=True):
|
|||
if not os.path.isfile(path):
|
||||
return 'ask'
|
||||
|
||||
vcard_dict = gajim.connections.values()[0].get_cached_vcard(fjid,
|
||||
vcard_dict = list(gajim.connections.values())[0].get_cached_vcard(fjid,
|
||||
is_groupchat_contact)
|
||||
if not vcard_dict: # This can happen if cached vcard is too old
|
||||
return 'ask'
|
||||
|
@ -645,28 +646,6 @@ def make_pixbuf_grayscale(pixbuf):
|
|||
pixbuf.saturate_and_pixelate(pixbuf2, 0.0, False)
|
||||
return pixbuf2
|
||||
|
||||
def get_path_to_generic_or_avatar(generic, jid = None, suffix = None):
|
||||
"""
|
||||
Choose between avatar image and default image
|
||||
|
||||
Returns full path to the avatar image if it exists, otherwise returns full
|
||||
path to the image. generic must be with extension and suffix without
|
||||
"""
|
||||
if jid:
|
||||
# we want an avatar
|
||||
puny_jid = helpers.sanitize_filename(jid)
|
||||
path_to_file = os.path.join(gajim.AVATAR_PATH, puny_jid) + suffix
|
||||
path_to_local_file = path_to_file + '_local'
|
||||
for extension in ('.png', '.jpeg'):
|
||||
path_to_local_file_full = path_to_local_file + extension
|
||||
if os.path.exists(path_to_local_file_full):
|
||||
return path_to_local_file_full
|
||||
for extension in ('.png', '.jpeg'):
|
||||
path_to_file_full = path_to_file + extension
|
||||
if os.path.exists(path_to_file_full):
|
||||
return path_to_file_full
|
||||
return os.path.abspath(generic)
|
||||
|
||||
def decode_filechooser_file_paths(file_paths):
|
||||
"""
|
||||
Decode as UTF-8 under Windows and ask sys.getfilesystemencoding() in POSIX
|
||||
|
@ -974,6 +953,38 @@ def load_activity_icon(category, activity = None):
|
|||
icon_list = _load_icon_list([activity], path)
|
||||
return icon_list[activity]
|
||||
|
||||
def get_pep_as_pixbuf(pep_class):
|
||||
if isinstance(pep_class, pep.UserMoodPEP):
|
||||
assert not pep_class._retracted
|
||||
received_mood = pep_class._pep_specific_data['mood']
|
||||
mood = received_mood if received_mood in pep.MOODS else 'unknown'
|
||||
pixbuf = load_mood_icon(mood).get_pixbuf()
|
||||
return pixbuf
|
||||
elif isinstance(pep_class, pep.UserTunePEP):
|
||||
path = os.path.join(gajim.DATA_DIR, 'emoticons', 'static', 'music.png')
|
||||
return GdkPixbuf.Pixbuf.new_from_file(path)
|
||||
elif isinstance(pep_class, pep.UserActivityPEP):
|
||||
assert not pep_class._retracted
|
||||
pep_ = pep_class._pep_specific_data
|
||||
activity = pep_['activity']
|
||||
|
||||
has_known_activity = activity in pep.ACTIVITIES
|
||||
has_known_subactivity = (has_known_activity and ('subactivity' in pep_)
|
||||
and (pep_['subactivity'] in pep.ACTIVITIES[activity]))
|
||||
|
||||
if has_known_activity:
|
||||
if has_known_subactivity:
|
||||
subactivity = pep_['subactivity']
|
||||
return load_activity_icon(activity, subactivity).get_pixbuf()
|
||||
else:
|
||||
return load_activity_icon(activity).get_pixbuf()
|
||||
else:
|
||||
return load_activity_icon('unknown').get_pixbuf()
|
||||
elif isinstance(pep_class, pep.UserLocationPEP):
|
||||
path = get_icon_path('gajim-earth')
|
||||
return GdkPixbuf.Pixbuf.new_from_file(path)
|
||||
return None
|
||||
|
||||
def load_icons_meta():
|
||||
"""
|
||||
Load and return - AND + small icons to put on top left of an icon for meta
|
||||
|
|
|
@ -68,7 +68,7 @@ from groupchat_control import PrivateChatControl
|
|||
from atom_window import AtomWindow
|
||||
from session import ChatControlSession
|
||||
|
||||
import common.sleepy
|
||||
from common import sleepy
|
||||
|
||||
from nbxmpp import idlequeue
|
||||
from nbxmpp import Hashes
|
||||
|
@ -93,7 +93,7 @@ import config
|
|||
from threading import Thread
|
||||
from common import ged
|
||||
|
||||
gajimpaths = common.configpaths.gajimpaths
|
||||
from common.configpaths import gajimpaths
|
||||
config_filename = gajimpaths['CONFIG_FILE']
|
||||
|
||||
from common import optparser
|
||||
|
@ -1111,11 +1111,11 @@ class Interface:
|
|||
# Ask offline status in 1 minute so w'are sure we got all online
|
||||
# presences
|
||||
GObject.timeout_add_seconds(60, self.ask_offline_status, account)
|
||||
if state != common.sleepy.STATE_UNKNOWN and connected in (2, 3):
|
||||
if state != sleepy.STATE_UNKNOWN and connected in (2, 3):
|
||||
# we go online or free for chat, so we activate auto status
|
||||
gajim.sleeper_state[account] = 'online'
|
||||
elif not ((state == common.sleepy.STATE_AWAY and connected == 4) or \
|
||||
(state == common.sleepy.STATE_XA and connected == 5)):
|
||||
elif not ((state == sleepy.STATE_AWAY and connected == 4) or \
|
||||
(state == sleepy.STATE_XA and connected == 5)):
|
||||
# If we are autoaway/xa and come back after a disconnection, do
|
||||
# nothing
|
||||
# Else disable autoaway
|
||||
|
@ -1568,7 +1568,7 @@ class Interface:
|
|||
|
||||
This is part of rewriting whole events handling system to use GED.
|
||||
"""
|
||||
for event_name, event_handlers in self.handlers.iteritems():
|
||||
for event_name, event_handlers in self.handlers.items():
|
||||
for event_handler in event_handlers:
|
||||
prio = ged.GUI1
|
||||
if type(event_handler) == tuple:
|
||||
|
@ -2341,14 +2341,14 @@ class Interface:
|
|||
if account not in gajim.sleeper_state or \
|
||||
not gajim.sleeper_state[account]:
|
||||
continue
|
||||
if state == common.sleepy.STATE_AWAKE and \
|
||||
if state == sleepy.STATE_AWAKE and \
|
||||
gajim.sleeper_state[account] in ('autoaway', 'autoxa'):
|
||||
# we go online
|
||||
self.roster.send_status(account, 'online',
|
||||
gajim.status_before_autoaway[account])
|
||||
gajim.status_before_autoaway[account] = ''
|
||||
gajim.sleeper_state[account] = 'online'
|
||||
elif state == common.sleepy.STATE_AWAY and \
|
||||
elif state == sleepy.STATE_AWAY and \
|
||||
gajim.sleeper_state[account] == 'online' and \
|
||||
gajim.config.get('autoaway'):
|
||||
# we save out online status
|
||||
|
@ -2368,7 +2368,7 @@ class Interface:
|
|||
self.roster.send_status(account, 'away', auto_message,
|
||||
auto=True)
|
||||
gajim.sleeper_state[account] = 'autoaway'
|
||||
elif state == common.sleepy.STATE_XA and \
|
||||
elif state == sleepy.STATE_XA and \
|
||||
gajim.sleeper_state[account] in ('online', 'autoaway',
|
||||
'autoaway-forced') and gajim.config.get('autoxa'):
|
||||
# we go extended away [we pass True to auto param]
|
||||
|
@ -2912,7 +2912,7 @@ class Interface:
|
|||
|
||||
self.show_vcard_when_connect = []
|
||||
|
||||
self.sleeper = common.sleepy.Sleepy(
|
||||
self.sleeper = sleepy.Sleepy(
|
||||
gajim.config.get('autoawaytime') * 60, # make minutes to seconds
|
||||
gajim.config.get('autoxatime') * 60)
|
||||
|
||||
|
|
|
@ -42,8 +42,8 @@ from gi.repository import Gdk
|
|||
from gi.repository import GdkPixbuf
|
||||
import xml.sax, xml.sax.handler
|
||||
import re
|
||||
from cStringIO import StringIO
|
||||
import urllib2
|
||||
from io import StringIO
|
||||
import urllib
|
||||
import operator
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -491,9 +491,10 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
|
|||
tag.title = title
|
||||
return tag
|
||||
|
||||
def _update_img(self, (mem, alt), attrs, img_mark):
|
||||
def _update_img(self, output, attrs, img_mark):
|
||||
'''Callback function called after the function helpers.download_image.
|
||||
'''
|
||||
mem, alt = output
|
||||
self._process_img(attrs, (mem, alt, img_mark))
|
||||
|
||||
def _process_img(self, attrs, loaded=None):
|
||||
|
@ -509,7 +510,7 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
|
|||
# The "data" URL scheme http://tools.ietf.org/html/rfc2397
|
||||
import base64
|
||||
img = attrs['src'].split(',')[1]
|
||||
mem = base64.standard_b64decode(urllib2.unquote(img))
|
||||
mem = base64.standard_b64decode(urllib.parse.unquote(img))
|
||||
elif loaded is not None:
|
||||
(mem, alt, replace_mark) = loaded
|
||||
update = True
|
||||
|
|
|
@ -156,6 +156,9 @@ class Notification:
|
|||
|
||||
def _nec_notification(self, obj):
|
||||
if obj.do_popup:
|
||||
if isinstance(obj.popup_image, str):
|
||||
obj.popup_image = gtkgui_helpers.get_icon_path(obj.popup_image,
|
||||
48)
|
||||
popup(obj.popup_event_type, obj.jid, obj.conn.name,
|
||||
obj.popup_msg_type, path_to_image=obj.popup_image,
|
||||
title=obj.popup_title, text=obj.popup_text,
|
||||
|
|
|
@ -24,7 +24,7 @@ Main file of plugins package.
|
|||
:license: GPL
|
||||
'''
|
||||
|
||||
from pluginmanager import PluginManager
|
||||
from plugin import GajimPlugin
|
||||
from .pluginmanager import PluginManager
|
||||
from .plugin import GajimPlugin
|
||||
|
||||
__all__ = ['PluginManager', 'GajimPlugin']
|
||||
|
|
|
@ -97,7 +97,7 @@ class log_calls(object):
|
|||
:rtype: function
|
||||
'''
|
||||
|
||||
self.full_func_name += f.func_name
|
||||
self.full_func_name += f.__name__
|
||||
if self.log_this_class:
|
||||
@functools.wraps(f)
|
||||
def wrapper(*args, **kwargs):
|
||||
|
|
|
@ -196,7 +196,7 @@ class GajimPlugin(object):
|
|||
def deactivate(self):
|
||||
pass
|
||||
|
||||
import cPickle
|
||||
import pickle
|
||||
|
||||
class GajimPluginConfig():
|
||||
@log_calls('GajimPluginConfig')
|
||||
|
@ -242,7 +242,7 @@ class GajimPluginConfig():
|
|||
@log_calls('GajimPluginConfig')
|
||||
def save(self):
|
||||
fd = open(self.FILE_PATH, 'wb')
|
||||
cPickle.dump(self.data, fd)
|
||||
pickle.dump(self.data, fd)
|
||||
fd.close()
|
||||
|
||||
@log_calls('GajimPluginConfig')
|
||||
|
@ -250,14 +250,14 @@ class GajimPluginConfig():
|
|||
if os.path.isfile(self.FILE_PATH):
|
||||
fd = open(self.FILE_PATH, 'rb')
|
||||
try:
|
||||
self.data = cPickle.load(fd)
|
||||
self.data = pickle.load(fd)
|
||||
fd.close()
|
||||
except:
|
||||
fd.close()
|
||||
try:
|
||||
import shelve
|
||||
s = shelve.open(self.FILE_PATH)
|
||||
for (k, v) in s.iteritems():
|
||||
for (k, v) in s.items():
|
||||
self.data[k] = v
|
||||
if not isinstance(self.data, dict):
|
||||
raise GajimPluginException
|
||||
|
|
|
@ -31,7 +31,7 @@ import sys
|
|||
import fnmatch
|
||||
import zipfile
|
||||
from shutil import rmtree
|
||||
import ConfigParser
|
||||
import configparser
|
||||
|
||||
from common import gajim
|
||||
from common import nec
|
||||
|
@ -258,14 +258,14 @@ class PluginManager(object):
|
|||
handlers[0](*args)
|
||||
|
||||
def _register_events_handlers_in_ged(self, plugin):
|
||||
for event_name, handler in plugin.events_handlers.iteritems():
|
||||
for event_name, handler in plugin.events_handlers.items():
|
||||
priority = handler[0]
|
||||
handler_function = handler[1]
|
||||
gajim.ged.register_event_handler(event_name, priority,
|
||||
handler_function)
|
||||
|
||||
def _remove_events_handler_from_ged(self, plugin):
|
||||
for event_name, handler in plugin.events_handlers.iteritems():
|
||||
for event_name, handler in plugin.events_handlers.items():
|
||||
priority = handler[0]
|
||||
handler_function = handler[1]
|
||||
gajim.ged.remove_event_handler(event_name, priority,
|
||||
|
@ -312,7 +312,7 @@ class PluginManager(object):
|
|||
# remove GUI extension points handlers (provided by plug-in) from
|
||||
# handlers list
|
||||
for gui_extpoint_name, gui_extpoint_handlers in \
|
||||
plugin.gui_extension_points.iteritems():
|
||||
plugin.gui_extension_points.items():
|
||||
self.gui_extension_points_handlers[gui_extpoint_name].remove(
|
||||
gui_extpoint_handlers)
|
||||
|
||||
|
@ -320,7 +320,7 @@ class PluginManager(object):
|
|||
# cleaning up method that must be provided by plug-in developer
|
||||
# for each handled GUI extension point)
|
||||
for gui_extpoint_name, gui_extpoint_handlers in \
|
||||
plugin.gui_extension_points.iteritems():
|
||||
plugin.gui_extension_points.items():
|
||||
if gui_extpoint_name in self.gui_extension_points:
|
||||
for gui_extension_point_args in self.gui_extension_points[
|
||||
gui_extpoint_name]:
|
||||
|
@ -344,14 +344,14 @@ class PluginManager(object):
|
|||
@log_calls('PluginManager')
|
||||
def _add_gui_extension_points_handlers_from_plugin(self, plugin):
|
||||
for gui_extpoint_name, gui_extpoint_handlers in \
|
||||
plugin.gui_extension_points.iteritems():
|
||||
plugin.gui_extension_points.items():
|
||||
self.gui_extension_points_handlers.setdefault(gui_extpoint_name,
|
||||
[]).append(gui_extpoint_handlers)
|
||||
|
||||
@log_calls('PluginManager')
|
||||
def _handle_all_gui_extension_points_with_plugin(self, plugin):
|
||||
for gui_extpoint_name, gui_extpoint_handlers in \
|
||||
plugin.gui_extension_points.iteritems():
|
||||
plugin.gui_extension_points.items():
|
||||
if gui_extpoint_name in self.gui_extension_points:
|
||||
for gui_extension_point_args in self.gui_extension_points[
|
||||
gui_extpoint_name]:
|
||||
|
@ -407,7 +407,7 @@ class PluginManager(object):
|
|||
'''
|
||||
from plugins.plugins_i18n import _
|
||||
plugins_found = []
|
||||
conf = ConfigParser.ConfigParser()
|
||||
conf = configparser.ConfigParser()
|
||||
fields = ('name', 'short_name', 'version', 'description', 'authors',
|
||||
'homepage')
|
||||
if not os.path.isdir(path):
|
||||
|
@ -471,7 +471,7 @@ class PluginManager(object):
|
|||
conf.readfp(open(manifest_path, 'r'))
|
||||
for option in fields:
|
||||
if conf.get('info', option) is '':
|
||||
raise ConfigParser.NoOptionError, 'field empty'
|
||||
raise configparser.NoOptionError('field empty')
|
||||
setattr(module_attr, option, conf.get('info', option))
|
||||
conf.remove_section('info')
|
||||
|
||||
|
@ -483,15 +483,15 @@ class PluginManager(object):
|
|||
module_attr._ = _
|
||||
except AttributeError as type_error:
|
||||
pass
|
||||
except ConfigParser.NoOptionError as type_error:
|
||||
except configparser.NoOptionError as type_error:
|
||||
# all fields are required
|
||||
log.debug('%s : %s' % (module_attr_name,
|
||||
'wrong manifest file. all fields are required!'))
|
||||
except ConfigParser.NoSectionError as type_error:
|
||||
except configparser.NoSectionError as type_error:
|
||||
# info section are required
|
||||
log.debug('%s : %s' % (module_attr_name,
|
||||
'wrong manifest file. info section are required!'))
|
||||
except ConfigParser.MissingSectionHeaderError as type_error:
|
||||
except configparser.MissingSectionHeaderError as type_error:
|
||||
# info section are required
|
||||
log.debug('%s : %s' % (module_attr_name,
|
||||
'wrong manifest file. section are required!'))
|
||||
|
|
|
@ -619,7 +619,7 @@ class SignalObject(dbus.service.Object):
|
|||
raise dbus_support.MissingArgument()
|
||||
jid = self._get_real_jid(jid)
|
||||
|
||||
cached_vcard = gajim.connections.values()[0].get_cached_vcard(jid)
|
||||
cached_vcard = list(gajim.connections.values())[0].get_cached_vcard(jid)
|
||||
if cached_vcard:
|
||||
return get_dbus_struct(cached_vcard)
|
||||
|
||||
|
|
|
@ -1062,28 +1062,28 @@ class RosterWindow:
|
|||
|
||||
pep_dict = gajim.connections[account].pep
|
||||
if gajim.config.get('show_mood_in_roster') and 'mood' in pep_dict:
|
||||
self.model[child_iter][C_MOOD_PIXBUF] = pep_dict['mood'].\
|
||||
asPixbufIcon()
|
||||
self.model[child_iter][C_MOOD_PIXBUF] = \
|
||||
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['mood'])
|
||||
else:
|
||||
self.model[child_iter][C_MOOD_PIXBUF] = empty_pixbuf
|
||||
|
||||
if gajim.config.get('show_activity_in_roster') and 'activity' in \
|
||||
pep_dict:
|
||||
self.model[child_iter][C_ACTIVITY_PIXBUF] = pep_dict['activity'].\
|
||||
asPixbufIcon()
|
||||
self.model[child_iter][C_ACTIVITY_PIXBUF] = \
|
||||
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['activity'])
|
||||
else:
|
||||
self.model[child_iter][C_ACTIVITY_PIXBUF] = empty_pixbuf
|
||||
|
||||
if gajim.config.get('show_tunes_in_roster') and 'tune' in pep_dict:
|
||||
self.model[child_iter][C_TUNE_PIXBUF] = pep_dict['tune'].\
|
||||
asPixbufIcon()
|
||||
self.model[child_iter][C_TUNE_PIXBUF] = \
|
||||
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['tune'])
|
||||
else:
|
||||
self.model[child_iter][C_TUNE_PIXBUF] = empty_pixbuf
|
||||
|
||||
if gajim.config.get('show_location_in_roster') and 'location' in \
|
||||
pep_dict:
|
||||
self.model[child_iter][C_LOCATION_PIXBUF] = pep_dict['location'].\
|
||||
asPixbufIcon()
|
||||
self.model[child_iter][C_LOCATION_PIXBUF] = \
|
||||
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['location'])
|
||||
else:
|
||||
self.model[child_iter][C_LOCATION_PIXBUF] = empty_pixbuf
|
||||
|
||||
|
@ -1340,7 +1340,7 @@ class RosterWindow:
|
|||
if not contact:
|
||||
contact = gajim.contacts.get_contact(account, jid)
|
||||
if pep_type in contact.pep:
|
||||
pixbuf = contact.pep[pep_type].asPixbufIcon()
|
||||
pixbuf = gtkgui_helpers.get_pep_as_pixbuf(contact.pep[pep_type])
|
||||
else:
|
||||
pixbuf = empty_pixbuf
|
||||
for child_iter in iters:
|
||||
|
|
|
@ -637,9 +637,9 @@ class RosterTooltip(NotificationAreaTooltip):
|
|||
'tooltip_idle_color')
|
||||
cs += '%s</span>'
|
||||
properties.append((str(), None))
|
||||
idle_since = helpers.ensure_utf8_string(cs % _("Idle since %s"))
|
||||
idle_since = cs % _("Idle since %s")
|
||||
properties.append((idle_since % formatted, None))
|
||||
idle_for = helpers.ensure_utf8_string(cs % _("Idle for %s"))
|
||||
idle_for = cs % _("Idle for %s")
|
||||
properties.append((idle_for % str(diff), None))
|
||||
|
||||
while properties:
|
||||
|
|
|
@ -212,7 +212,7 @@ class MockCall:
|
|||
elif isinstance(n, str):
|
||||
return self.kwparams[n]
|
||||
else:
|
||||
raise IndexError, 'illegal index type for getParam'
|
||||
raise IndexError('illegal index type for getParam')
|
||||
|
||||
def getNumParams(self):
|
||||
return len(self.params)
|
||||
|
|
|
@ -135,8 +135,8 @@ class TestJingle(unittest.TestCase):
|
|||
self.dispatcher.RegisterHandler('iq', self.con._JingleCB, 'set'
|
||||
, common.xmpp.NS_JINGLE)
|
||||
self.dispatcher.ProcessNonBlocking(session_init)
|
||||
session = self.con._sessions.values()[0] # The only session we have
|
||||
jft = session.contents.values()[0] # jingleFT object
|
||||
session = list(self.con._sessions.values())[0] # The only session we have
|
||||
jft = list(session.contents.values())[0] # jingleFT object
|
||||
jft.file_props = self.recieve_file # We plug file_props manually
|
||||
# The user accepts to recieve the file
|
||||
# we have to manually simulate this behavior
|
||||
|
|
Loading…
Reference in New Issue