Use consistent way to get paths

This lets us now import the app module without setting paths
This commit is contained in:
Philipp Hörist 2018-04-25 20:49:37 +02:00
parent 52cbae69ee
commit 105427b8fd
19 changed files with 99 additions and 93 deletions

View File

@ -31,7 +31,6 @@
import os
import sys
import logging
import locale
import uuid
from distutils.version import LooseVersion as V
from collections import namedtuple
@ -63,20 +62,6 @@ logger = None
# some plugins use that
gajimpaths = configpaths.gajimpaths
AVATAR_PATH = configpaths.get('AVATAR')
MY_EMOTS_PATH = configpaths.get('MY_EMOTS')
MY_ICONSETS_PATH = configpaths.get('MY_ICONSETS')
MY_MOOD_ICONSETS_PATH = configpaths.get('MY_MOOD_ICONSETS')
MY_ACTIVITY_ICONSETS_PATH = configpaths.get('MY_ACTIVITY_ICONSETS')
MY_CACERTS = configpaths.get('MY_CACERTS')
MY_PEER_CERTS_PATH = configpaths.get('MY_PEER_CERTS')
DATA_DIR = configpaths.get('DATA')
ICONS_DIR = configpaths.get('ICONS')
HOME_DIR = configpaths.get('HOME')
PLUGINS_DIRS = [configpaths.get('PLUGINS_BASE'),
configpaths.get('PLUGINS_USER')]
PLUGINS_CONFIG_DIR = configpaths.get('PLUGINS_CONFIG_DIR')
MY_CERT_DIR = configpaths.get('MY_CERT')
RecentGroupchat = namedtuple('RecentGroupchat', ['room', 'server', 'nickname'])

View File

@ -32,6 +32,9 @@ from gajim.common.const import PathType, PathLocation
def get(key):
if key == 'PLUGINS_DIRS':
return [_paths['PLUGINS_BASE'],
_paths['PLUGINS_USER']]
return _paths[key]
@ -43,6 +46,10 @@ def get_paths(type_):
yield _paths[key]
def override_path(*args, **kwargs):
_paths._add(*args, **kwargs)
def set_separation(active: bool):
_paths.profile_separation = active

View File

@ -1217,7 +1217,7 @@ class Connection(CommonConnection, ConnectionHandlers):
cacerts = ''
if os.name == 'nt':
cacerts = certifi.where()
mycerts = common.app.MY_CACERTS
mycerts = common.configpaths.get('MY_CACERTS')
tls_version = app.config.get_per('accounts', self.name, 'tls_version')
cipher_list = app.config.get_per('accounts', self.name, 'cipher_list')

View File

@ -47,6 +47,7 @@ from gajim.common import helpers
from gajim.common import app
from gajim.common import dataforms
from gajim.common import jingle_xtls
from gajim.common import configpaths
from gajim.common.caps_cache import muc_caps_cache
from gajim.common.commands import ConnectionCommands
from gajim.common.pubsub import ConnectionPubSub
@ -391,7 +392,7 @@ class ConnectionVcard:
else:
app.log('avatar').info(
'Update (vCard): %s %s', obj.nick, obj.avatar_sha)
path = os.path.join(app.AVATAR_PATH, obj.avatar_sha)
path = os.path.join(configpaths.get('AVATAR'), obj.avatar_sha)
if not os.path.isfile(path):
app.log('avatar').info(
'Request (vCard): %s', obj.nick)
@ -572,7 +573,7 @@ class ConnectionVcard:
current_sha = app.config.get_per('accounts', self.name, 'avatar_sha')
if current_sha == avatar_sha:
path = os.path.join(app.AVATAR_PATH, current_sha)
path = os.path.join(configpaths.get('AVATAR'), current_sha)
if not os.path.isfile(path):
app.log('avatar').info(
'Caching (vCard): %s', current_sha)

View File

@ -40,6 +40,7 @@ from gajim.common import helpers
from gajim.common import app
from gajim.common import i18n
from gajim.common import dataforms
from gajim.common import configpaths
from gajim.common.zeroconf.zeroconf import Constant
from gajim.common.const import KindConstant
from gajim.common.pep import SUPPORTED_PERSONAL_USER_EVENTS
@ -2738,7 +2739,8 @@ class NotificationEvent(nec.NetworkIncomingEvent):
if jid:
# we want an avatar
puny_jid = helpers.sanitize_filename(jid)
path_to_file = os.path.join(app.AVATAR_PATH, puny_jid) + suffix
path_to_file = os.path.join(
configpaths.get('AVATAR'), 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

View File

@ -53,6 +53,7 @@ import nbxmpp
from gajim.common.i18n import Q_
from gajim.common.i18n import ngettext
from gajim.common import configpaths
try:
import precis_i18n.codec
@ -863,8 +864,8 @@ def check_soundfile_path(file_, dirs=None):
:return the path to file or None if it doesn't exists.
"""
if dirs is None:
dirs = [app.configpaths.get('MY_DATA'),
app.DATA_DIR]
dirs = [configpaths.get('MY_DATA'),
configpaths.get('DATA')]
if not file_:
return None
@ -891,8 +892,8 @@ def strip_soundfile_path(file_, dirs=None, abs=True):
return None
if dirs is None:
dirs = [app.configpaths.get('MY_DATA'),
app.DATA_DIR]
dirs = [configpaths.get('MY_DATA'),
configpaths.get('DATA')]
name = os.path.basename(file_)
for d in dirs:
@ -1257,31 +1258,32 @@ def get_current_show(account):
return app.SHOW_LIST[status]
def get_iconset_path(iconset):
if os.path.isdir(os.path.join(app.DATA_DIR, 'iconsets', iconset)):
return os.path.join(app.DATA_DIR, 'iconsets', iconset)
elif os.path.isdir(os.path.join(app.MY_ICONSETS_PATH, iconset)):
return os.path.join(app.MY_ICONSETS_PATH, iconset)
if os.path.isdir(os.path.join(configpaths.get('DATA'), 'iconsets', iconset)):
return os.path.join(configpaths.get('DATA'), 'iconsets', iconset)
elif os.path.isdir(os.path.join(configpaths.get('MY_ICONSETS'), iconset)):
return os.path.join(configpaths.get('MY_ICONSETS'), iconset)
def get_mood_iconset_path(iconset):
if os.path.isdir(os.path.join(app.DATA_DIR, 'moods', iconset)):
return os.path.join(app.DATA_DIR, 'moods', iconset)
elif os.path.isdir(os.path.join(app.MY_MOOD_ICONSETS_PATH, iconset)):
return os.path.join(app.MY_MOOD_ICONSETS_PATH, iconset)
if os.path.isdir(os.path.join(configpaths.get('DATA'), 'moods', iconset)):
return os.path.join(configpaths.get('DATA'), 'moods', iconset)
elif os.path.isdir(
os.path.join(configpaths.get('MY_MOOD_ICONSETS'), iconset)):
return os.path.join(configpaths.get('MY_MOOD_ICONSETS'), iconset)
def get_activity_iconset_path(iconset):
if os.path.isdir(os.path.join(app.DATA_DIR, 'activities', iconset)):
return os.path.join(app.DATA_DIR, 'activities', iconset)
elif os.path.isdir(os.path.join(app.MY_ACTIVITY_ICONSETS_PATH,
if os.path.isdir(os.path.join(configpaths.get('DATA'), 'activities', iconset)):
return os.path.join(configpaths.get('DATA'), 'activities', iconset)
elif os.path.isdir(os.path.join(configpaths.get('MY_ACTIVITY_ICONSETS'),
iconset)):
return os.path.join(app.MY_ACTIVITY_ICONSETS_PATH, iconset)
return os.path.join(configpaths.get('MY_ACTIVITY_ICONSETS'), iconset)
def get_transport_path(transport):
if os.path.isdir(os.path.join(app.DATA_DIR, 'iconsets', 'transports',
if os.path.isdir(os.path.join(configpaths.get('DATA'), 'iconsets', 'transports',
transport)):
return os.path.join(app.DATA_DIR, 'iconsets', 'transports', transport)
elif os.path.isdir(os.path.join(app.MY_ICONSETS_PATH, 'transports',
return os.path.join(configpaths.get('DATA'), 'iconsets', 'transports', transport)
elif os.path.isdir(os.path.join(configpaths.get('MY_ICONSETS'), 'transports',
transport)):
return os.path.join(app.MY_ICONSETS_PATH, 'transports', transport)
return os.path.join(configpaths.get('MY_ICONSETS'), 'transports', transport)
# No transport folder found, use default jabber one
return get_iconset_path(app.config.get('iconset'))
@ -1606,13 +1608,13 @@ def version_condition(current_version, required_version):
def get_available_emoticon_themes():
emoticons_themes = []
emoticons_data_path = os.path.join(app.DATA_DIR, 'emoticons')
emoticons_data_path = os.path.join(configpaths.get('DATA'), 'emoticons')
font_theme_path = os.path.join(
app.DATA_DIR, 'emoticons', 'font-emoticons', 'emoticons_theme.py')
configpaths.get('DATA'), 'emoticons', 'font-emoticons', 'emoticons_theme.py')
folders = os.listdir(emoticons_data_path)
if os.path.isdir(app.MY_EMOTS_PATH):
folders += os.listdir(app.MY_EMOTS_PATH)
if os.path.isdir(configpaths.get('MY_EMOTS')):
folders += os.listdir(configpaths.get('MY_EMOTS'))
file = 'emoticons_theme.py'
if os.name == 'nt' and not os.path.exists(font_theme_path):
@ -1628,11 +1630,11 @@ def get_available_emoticon_themes():
return emoticons_themes
def get_emoticon_theme_path(theme):
emoticons_data_path = os.path.join(app.DATA_DIR, 'emoticons', theme)
emoticons_data_path = os.path.join(configpaths.get('DATA'), 'emoticons', theme)
if os.path.exists(emoticons_data_path):
return emoticons_data_path
emoticons_user_path = os.path.join(app.MY_EMOTS_PATH, theme)
emoticons_user_path = os.path.join(configpaths.get('MY_EMOTS'), theme)
if os.path.exists(emoticons_user_path):
return emoticons_user_path

View File

@ -19,6 +19,7 @@ Handles Jingle contents (XEP 0166)
import os
from gajim.common import app
from gajim.common import configpaths
import nbxmpp
from gajim.common.jingle_xtls import SELF_SIGNED_CERTIFICATE
from gajim.common.jingle_xtls import load_cert_file
@ -221,8 +222,8 @@ class JingleContent:
if self.use_security:
security = nbxmpp.simplexml.Node(
tag=nbxmpp.NS_JINGLE_XTLS + ' security')
certpath = os.path.join(app.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE)\
+ '.cert'
certpath = os.path.join(
configpaths.get('MY_CERT'), SELF_SIGNED_CERTIFICATE) + '.cert'
cert = load_cert_file(certpath)
if cert:
try:

View File

@ -21,6 +21,7 @@ import os
import nbxmpp
from gajim.common import app
from gajim.common import configpaths
log = logging.getLogger('gajim.c.jingle_xtls')
@ -111,18 +112,18 @@ def get_context(fingerprint, verify_cb=None, remote_jid=None):
elif fingerprint == 'client':
ctx.set_verify(SSL.VERIFY_PEER, verify_cb or default_callback)
cert_name = os.path.join(app.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE)
cert_name = os.path.join(configpaths.get('MY_CERT'), SELF_SIGNED_CERTIFICATE)
ctx.use_privatekey_file((cert_name + '.pkey').encode('utf-8'))
ctx.use_certificate_file((cert_name + '.cert').encode('utf-8'))
# Try to load Diffie-Hellman parameters.
# First try user DH parameters, if this fails load the default DH parameters
dh_params_name = os.path.join(app.MY_CERT_DIR, DH_PARAMS)
dh_params_name = os.path.join(configpaths.get('MY_CERT'), DH_PARAMS)
try:
with open(dh_params_name, "r") as dh_params_file:
ctx.load_tmp_dh(dh_params_name.encode('utf-8'))
except FileNotFoundError as err:
default_dh_params_name = os.path.join(app.DATA_DIR,
default_dh_params_name = os.path.join(configpaths.get('DATA'),
'other', DEFAULT_DH_PARAMS)
try:
with open(default_dh_params_name, "r") as default_dh_params_file:
@ -134,7 +135,7 @@ def get_context(fingerprint, verify_cb=None, remote_jid=None):
if remote_jid:
store = ctx.get_cert_store()
path = os.path.join(os.path.expanduser(app.MY_PEER_CERTS_PATH),
path = os.path.join(os.path.expanduser(configpaths.get('MY_PEER_CERTS')),
remote_jid) + '.cert'
if os.path.exists(path):
load_cert_file(path, cert_store=store)
@ -151,7 +152,7 @@ def read_cert(certpath):
return certificate
def send_cert(con, jid_from, sid):
certpath = os.path.join(app.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE) + \
certpath = os.path.join(configpaths.get('MY_CERT'), SELF_SIGNED_CERTIFICATE) + \
'.cert'
certificate = read_cert(certpath)
iq = nbxmpp.Iq('result', to=jid_from)
@ -170,7 +171,7 @@ def send_cert(con, jid_from, sid):
def handle_new_cert(con, obj, jid_from):
jid = app.get_jid_without_resource(jid_from)
certpath = os.path.join(os.path.expanduser(app.MY_PEER_CERTS_PATH), jid)
certpath = os.path.join(os.path.expanduser(configpaths.get('MY_PEER_CERTS')), jid)
certpath += '.cert'
id_ = obj.getAttr('id')
@ -188,7 +189,7 @@ def handle_new_cert(con, obj, jid_from):
approve_pending_content(id_)
def check_cert(jid, fingerprint):
certpath = os.path.join(os.path.expanduser(app.MY_PEER_CERTS_PATH), jid)
certpath = os.path.join(os.path.expanduser(configpaths.get('MY_PEER_CERTS')), jid)
certpath += '.cert'
if os.path.exists(certpath):
cert = load_cert_file(certpath)

View File

@ -58,6 +58,7 @@ from gajim.common import app
from gajim.common import connection
from gajim.common import dataforms
from gajim.common import ged
from gajim.common import configpaths
from gajim.accounts_window import AccountsWindow
try:
@ -202,9 +203,10 @@ class PreferencesWindow:
self.update_theme_list()
# iconset
iconsets_list = os.listdir(os.path.join(app.DATA_DIR, 'iconsets'))
if os.path.isdir(app.MY_ICONSETS_PATH):
iconsets_list += os.listdir(app.MY_ICONSETS_PATH)
iconsets_list = os.listdir(
os.path.join(configpaths.get('DATA'), 'iconsets'))
if os.path.isdir(configpaths.get('MY_ICONSETS')):
iconsets_list += os.listdir(configpaths.get('MY_ICONSETS'))
# new model, image in 0, string in 1
model = Gtk.ListStore(Gtk.Image, str)
renderer_image = cell_renderer_image.CellRendererImage(0, 0)
@ -217,8 +219,8 @@ class PreferencesWindow:
self.iconset_combobox.set_model(model)
l = []
for dir in iconsets_list:
if not os.path.isdir(os.path.join(app.DATA_DIR, 'iconsets', dir)) \
and not os.path.isdir(os.path.join(app.MY_ICONSETS_PATH, dir)):
if not os.path.isdir(os.path.join(configpaths.get('DATA'), 'iconsets', dir)) \
and not os.path.isdir(os.path.join(configpaths.get('MY_ICONSETS'), dir)):
continue
if dir != '.svn' and dir != 'transports':
l.append(dir)
@ -2292,7 +2294,8 @@ class AccountCreationWizardWindow:
self.update_proxy_list()
# parse servers.xml
servers_xml = os.path.join(app.DATA_DIR, 'other', 'servers.xml')
servers_xml = os.path.join(
configpaths.get('DATA'), 'other', 'servers.xml')
servers = gtkgui_helpers.parse_server_xml(servers_xml)
servers_model = self.xml.get_object('server_liststore')
for server in servers:
@ -2532,16 +2535,17 @@ class AccountCreationWizardWindow:
'hostname']
# Check if cert is already in file
certs = ''
if os.path.isfile(app.MY_CACERTS):
f = open(app.MY_CACERTS)
my_ca_certs = configpaths.get('MY_CACERTS')
if os.path.isfile(my_ca_certs):
f = open(my_ca_certs)
certs = f.read()
f.close()
if self.ssl_cert in certs:
dialogs.ErrorDialog(_('Certificate Already in File'),
_('This certificate is already in file %s, so it\'s '
'not added again.') % app.MY_CACERTS)
'not added again.') % my_ca_certs)
else:
f = open(app.MY_CACERTS, 'a')
f = open(my_ca_certs, 'a')
f.write(hostname + '\n')
f.write(self.ssl_cert + '\n\n')
f.close()

View File

@ -52,7 +52,7 @@ from gajim.common import pep
from gajim.common import configpaths
gtk_icon_theme = Gtk.IconTheme.get_default()
gtk_icon_theme.append_search_path(app.ICONS_DIR)
gtk_icon_theme.append_search_path(configpaths.get('ICONS'))
class Color:
BLACK = Gdk.RGBA(red=0, green=0, blue=0, alpha=1)
@ -610,7 +610,7 @@ def get_pep_as_pixbuf(pep_class):
elif isinstance(pep_class, pep.UserTunePEP):
icon = get_icon_pixmap('audio-x-generic', quiet=True)
if not icon:
path = os.path.join(app.DATA_DIR, 'emoticons', 'static',
path = os.path.join(configpaths.get('DATA'), 'emoticons', 'static',
'music.png')
return GdkPixbuf.Pixbuf.new_from_file(path)
return icon

View File

@ -1352,16 +1352,17 @@ class Interface:
if is_checked[0]:
# Check if cert is already in file
certs = ''
if os.path.isfile(app.MY_CACERTS):
f = open(app.MY_CACERTS)
my_ca_certs = configpaths.get('MY_CACERTS')
if os.path.isfile(my_ca_certs):
f = open(my_ca_certs)
certs = f.read()
f.close()
if obj.cert in certs:
dialogs.ErrorDialog(_('Certificate Already in File'),
_('This certificate is already in file %s, so it\'s '
'not added again.') % app.MY_CACERTS)
'not added again.') % my_ca_certs)
else:
f = open(app.MY_CACERTS, 'a')
f = open(my_ca_certs, 'a')
f.write(server + '\n')
f.write(obj.cert + '\n\n')
f.close()
@ -2446,14 +2447,15 @@ class Interface:
pixbuf = pixbuf.scale_simple(AvatarSize.PROFILE,
AvatarSize.PROFILE,
GdkPixbuf.InterpType.BILINEAR)
publish_path = os.path.join(app.AVATAR_PATH, 'temp_publish')
publish_path = os.path.join(
configpaths.get('AVATAR'), 'temp_publish')
pixbuf.savev(publish_path, 'png', [], [])
with open(publish_path, 'rb') as file:
data = file.read()
return self.save_avatar(data)
sha = hashlib.sha1(data).hexdigest()
path = os.path.join(app.AVATAR_PATH, sha)
path = os.path.join(configpaths.get('AVATAR'), sha)
try:
with open(path, "wb") as output_file:
output_file.write(data)
@ -2475,7 +2477,7 @@ class Interface:
size = size * scale
if publish:
path = os.path.join(app.AVATAR_PATH, filename)
path = os.path.join(configpaths.get('AVATAR'), filename)
with open(path, 'rb') as file:
data = file.read()
return data
@ -2488,7 +2490,7 @@ class Interface:
except KeyError:
pass
path = os.path.join(app.AVATAR_PATH, filename)
path = os.path.join(configpaths.get('AVATAR'), filename)
if not os.path.isfile(path):
return
@ -2532,7 +2534,7 @@ class Interface:
@staticmethod
def avatar_exists(filename):
path = os.path.join(app.AVATAR_PATH, filename)
path = os.path.join(configpaths.get('AVATAR'), filename)
if not os.path.isfile(path):
return False
return True
@ -2601,7 +2603,8 @@ class Interface:
mood = received_mood if received_mood in pep.MOODS else 'unknown'
return gtkgui_helpers.load_mood_icon(mood).get_pixbuf()
elif isinstance(pep_obj, pep.UserTunePEP):
path = os.path.join(app.DATA_DIR, 'emoticons', 'static', 'music.png')
path = os.path.join(
configpaths.get('DATA'), 'emoticons', 'static', 'music.png')
return GdkPixbuf.Pixbuf.new_from_file(path)
elif isinstance(pep_obj, pep.UserActivityPEP):
pep_ = pep_obj._pep_specific_data

View File

@ -47,6 +47,7 @@ from gi.repository import GLib
from gi.repository import Gio
from gajim.common import i18n
from gajim.common import configpaths
def is_standalone():
@ -59,10 +60,6 @@ def is_standalone():
if is_standalone():
# Standalone Mode
# Must be done before importing app
from gajim.common import configpaths
try:
shortargs = 'hvsc:l:p:'
longargs = 'help verbose separate config-path= loglevel= profile='
@ -474,7 +471,7 @@ class HistoryManager:
dlg = xml.get_object('filechooserdialog')
dlg.set_title(_('Exporting History Logs…'))
dlg.set_current_folder(app.HOME_DIR)
dlg.set_current_folder(configpaths.get('HOME'))
dlg.props.do_overwrite_confirmation = True
response = dlg.run()

View File

@ -27,7 +27,7 @@ Base class for implementing plugin.
import os
import locale
from gajim.common import app
from gajim.common import configpaths
from gajim.plugins.helpers import log_calls, log
from gajim.plugins.gui import GajimPluginConfigDialog
@ -213,7 +213,7 @@ class GajimPluginConfig():
def __init__(self, plugin):
self.plugin = plugin
self.FILE_PATH = os.path.join(
app.PLUGINS_CONFIG_DIR, self.plugin.short_name)
configpaths.get('PLUGINS_CONFIG_DIR'), self.plugin.short_name)
self.data = {}
@log_calls('GajimPluginConfig')

View File

@ -38,6 +38,7 @@ from gajim import gtkgui_helpers
from gajim.dialogs import WarningDialog, YesNoDialog, ArchiveChooserDialog
from gajim.htmltextview import HtmlTextView
from gajim.common import app
from gajim.common import configpaths
from gajim.plugins.helpers import log_calls
from gajim.plugins.helpers import GajimPluginActivateException
from gajim.plugins.plugins_i18n import _
@ -161,8 +162,8 @@ class PluginsWindow(object):
self.plugin_description_textview, None)
self.plugin_description_textview.set_property('sensitive', True)
self.uninstall_plugin_button.set_property('sensitive',
app.PLUGINS_DIRS[1] in plugin.__path__)
self.uninstall_plugin_button.set_property(
'sensitive', configpaths.get('PLUGINS_USER') in plugin.__path__)
self.configure_plugin_button.set_property(
'sensitive', plugin.config_dialog is not None)

View File

@ -36,6 +36,7 @@ from pkg_resources import parse_version
from gajim.common import app
from gajim.common import nec
from gajim.common import configpaths
from gajim.common.exceptions import PluginsystemError
from gajim.plugins.helpers import log, log_calls, Singleton
@ -107,7 +108,7 @@ class PluginManager(metaclass=Singleton):
Registered names with instances of encryption Plugins.
'''
for path in [app.PLUGINS_DIRS[1], app.PLUGINS_DIRS[0]]:
for path in reversed(configpaths.get('PLUGINS_DIRS')):
pc = PluginManager.scan_dir_for_plugins(path)
self.add_plugins(pc)
@ -534,7 +535,7 @@ class PluginManager(metaclass=Singleton):
try:
if module_name in sys.modules:
if path == app.PLUGINS_DIRS[0]:
if path == configpaths.get('PLUGINS_BASE'):
# Only reload plugins from Gajim base dir when they
# dont exist. This means plugins in the user path are
# always preferred.
@ -632,7 +633,7 @@ class PluginManager(metaclass=Singleton):
if len(dirs) > 1:
raise PluginsystemError(_('Archive is malformed'))
base_dir, user_dir = app.PLUGINS_DIRS
base_dir, user_dir = configpaths.get('PLUGINS_DIRS')
plugin_dir = os.path.join(user_dir, dirs[0])
if os.path.isdir(plugin_dir):

View File

@ -23,9 +23,10 @@ import gettext
from os import path as os_path
import os
from gajim.common import app
from gajim.common import configpaths
APP = 'gajim_plugins'
plugins_locale_dir = os_path.join(app.PLUGINS_DIRS[1], 'locale')
plugins_locale_dir = os_path.join(configpaths.get('PLUGINS_USER'), 'locale')
if os.name != 'nt':
locale.setlocale(locale.LC_ALL, '')

View File

@ -44,6 +44,7 @@ from gajim import gtkgui_helpers
from gajim.common import helpers
from gajim.common import app
from gajim.common import ged
from gajim.common import configpaths
from gajim.common.i18n import Q_
from gajim.common.const import AvatarSize
@ -84,7 +85,7 @@ class VcardWindow:
self.real_resource = contact.resource
puny_jid = helpers.sanitize_filename(contact.jid)
local_avatar_basepath = os.path.join(app.AVATAR_PATH, puny_jid) + \
local_avatar_basepath = os.path.join(configpaths.get('AVATAR'), puny_jid) + \
'_local'
for extension in ('.png', '.jpeg'):
local_avatar_path = local_avatar_basepath + extension

View File

@ -47,7 +47,7 @@ def setup_env():
import logging
logging.basicConfig()
app.DATA_DIR = gajim_root + '/gajim/data'
configpaths.override_path('DATA', gajim_root + '/gajim/data')
app.use_x = use_x
app.contacts = LegacyContactsAPI()
app.connections = {}

View File

@ -54,9 +54,8 @@ configpaths.set_config_root(configdir)
configpaths.init()
# for some reason common.app needs to be imported before xmpppy?
from gajim.common import app
app.DATA_DIR = gajim_root + '/gajim/data'
configpaths.override_path('DATA', gajim_root + '/gajim/data')
from common.stanza_session import StanzaSession