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 os
import sys import sys
import logging import logging
import locale
import uuid import uuid
from distutils.version import LooseVersion as V from distutils.version import LooseVersion as V
from collections import namedtuple from collections import namedtuple
@ -63,20 +62,6 @@ logger = None
# some plugins use that # some plugins use that
gajimpaths = configpaths.gajimpaths 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']) RecentGroupchat = namedtuple('RecentGroupchat', ['room', 'server', 'nickname'])

View File

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

View File

@ -1217,7 +1217,7 @@ class Connection(CommonConnection, ConnectionHandlers):
cacerts = '' cacerts = ''
if os.name == 'nt': if os.name == 'nt':
cacerts = certifi.where() 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') tls_version = app.config.get_per('accounts', self.name, 'tls_version')
cipher_list = app.config.get_per('accounts', self.name, 'cipher_list') 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 app
from gajim.common import dataforms from gajim.common import dataforms
from gajim.common import jingle_xtls from gajim.common import jingle_xtls
from gajim.common import configpaths
from gajim.common.caps_cache import muc_caps_cache from gajim.common.caps_cache import muc_caps_cache
from gajim.common.commands import ConnectionCommands from gajim.common.commands import ConnectionCommands
from gajim.common.pubsub import ConnectionPubSub from gajim.common.pubsub import ConnectionPubSub
@ -391,7 +392,7 @@ class ConnectionVcard:
else: else:
app.log('avatar').info( app.log('avatar').info(
'Update (vCard): %s %s', obj.nick, obj.avatar_sha) '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): if not os.path.isfile(path):
app.log('avatar').info( app.log('avatar').info(
'Request (vCard): %s', obj.nick) 'Request (vCard): %s', obj.nick)
@ -572,7 +573,7 @@ class ConnectionVcard:
current_sha = app.config.get_per('accounts', self.name, 'avatar_sha') current_sha = app.config.get_per('accounts', self.name, 'avatar_sha')
if current_sha == 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): if not os.path.isfile(path):
app.log('avatar').info( app.log('avatar').info(
'Caching (vCard): %s', current_sha) '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 app
from gajim.common import i18n from gajim.common import i18n
from gajim.common import dataforms from gajim.common import dataforms
from gajim.common import configpaths
from gajim.common.zeroconf.zeroconf import Constant from gajim.common.zeroconf.zeroconf import Constant
from gajim.common.const import KindConstant from gajim.common.const import KindConstant
from gajim.common.pep import SUPPORTED_PERSONAL_USER_EVENTS from gajim.common.pep import SUPPORTED_PERSONAL_USER_EVENTS
@ -2738,7 +2739,8 @@ class NotificationEvent(nec.NetworkIncomingEvent):
if jid: if jid:
# we want an avatar # we want an avatar
puny_jid = helpers.sanitize_filename(jid) 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' path_to_local_file = path_to_file + '_local'
for extension in ('.png', '.jpeg'): for extension in ('.png', '.jpeg'):
path_to_local_file_full = path_to_local_file + extension 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 Q_
from gajim.common.i18n import ngettext from gajim.common.i18n import ngettext
from gajim.common import configpaths
try: try:
import precis_i18n.codec 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. :return the path to file or None if it doesn't exists.
""" """
if dirs is None: if dirs is None:
dirs = [app.configpaths.get('MY_DATA'), dirs = [configpaths.get('MY_DATA'),
app.DATA_DIR] configpaths.get('DATA')]
if not file_: if not file_:
return None return None
@ -891,8 +892,8 @@ def strip_soundfile_path(file_, dirs=None, abs=True):
return None return None
if dirs is None: if dirs is None:
dirs = [app.configpaths.get('MY_DATA'), dirs = [configpaths.get('MY_DATA'),
app.DATA_DIR] configpaths.get('DATA')]
name = os.path.basename(file_) name = os.path.basename(file_)
for d in dirs: for d in dirs:
@ -1257,31 +1258,32 @@ def get_current_show(account):
return app.SHOW_LIST[status] return app.SHOW_LIST[status]
def get_iconset_path(iconset): def get_iconset_path(iconset):
if os.path.isdir(os.path.join(app.DATA_DIR, 'iconsets', iconset)): if os.path.isdir(os.path.join(configpaths.get('DATA'), 'iconsets', iconset)):
return os.path.join(app.DATA_DIR, 'iconsets', iconset) return os.path.join(configpaths.get('DATA'), 'iconsets', iconset)
elif os.path.isdir(os.path.join(app.MY_ICONSETS_PATH, iconset)): elif os.path.isdir(os.path.join(configpaths.get('MY_ICONSETS'), iconset)):
return os.path.join(app.MY_ICONSETS_PATH, iconset) return os.path.join(configpaths.get('MY_ICONSETS'), iconset)
def get_mood_iconset_path(iconset): def get_mood_iconset_path(iconset):
if os.path.isdir(os.path.join(app.DATA_DIR, 'moods', iconset)): if os.path.isdir(os.path.join(configpaths.get('DATA'), 'moods', iconset)):
return os.path.join(app.DATA_DIR, 'moods', iconset) return os.path.join(configpaths.get('DATA'), 'moods', iconset)
elif os.path.isdir(os.path.join(app.MY_MOOD_ICONSETS_PATH, iconset)): elif os.path.isdir(
return os.path.join(app.MY_MOOD_ICONSETS_PATH, iconset) 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): def get_activity_iconset_path(iconset):
if os.path.isdir(os.path.join(app.DATA_DIR, 'activities', iconset)): if os.path.isdir(os.path.join(configpaths.get('DATA'), 'activities', iconset)):
return os.path.join(app.DATA_DIR, 'activities', iconset) return os.path.join(configpaths.get('DATA'), 'activities', iconset)
elif os.path.isdir(os.path.join(app.MY_ACTIVITY_ICONSETS_PATH, elif os.path.isdir(os.path.join(configpaths.get('MY_ACTIVITY_ICONSETS'),
iconset)): 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): 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)): transport)):
return os.path.join(app.DATA_DIR, 'iconsets', 'transports', transport) return os.path.join(configpaths.get('DATA'), 'iconsets', 'transports', transport)
elif os.path.isdir(os.path.join(app.MY_ICONSETS_PATH, 'transports', elif os.path.isdir(os.path.join(configpaths.get('MY_ICONSETS'), 'transports',
transport)): 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 # No transport folder found, use default jabber one
return get_iconset_path(app.config.get('iconset')) return get_iconset_path(app.config.get('iconset'))
@ -1606,13 +1608,13 @@ def version_condition(current_version, required_version):
def get_available_emoticon_themes(): def get_available_emoticon_themes():
emoticons_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( 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) folders = os.listdir(emoticons_data_path)
if os.path.isdir(app.MY_EMOTS_PATH): if os.path.isdir(configpaths.get('MY_EMOTS')):
folders += os.listdir(app.MY_EMOTS_PATH) folders += os.listdir(configpaths.get('MY_EMOTS'))
file = 'emoticons_theme.py' file = 'emoticons_theme.py'
if os.name == 'nt' and not os.path.exists(font_theme_path): if os.name == 'nt' and not os.path.exists(font_theme_path):
@ -1628,11 +1630,11 @@ def get_available_emoticon_themes():
return emoticons_themes return emoticons_themes
def get_emoticon_theme_path(theme): 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): if os.path.exists(emoticons_data_path):
return 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): if os.path.exists(emoticons_user_path):
return emoticons_user_path return emoticons_user_path

View File

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

View File

@ -21,6 +21,7 @@ import os
import nbxmpp import nbxmpp
from gajim.common import app from gajim.common import app
from gajim.common import configpaths
log = logging.getLogger('gajim.c.jingle_xtls') log = logging.getLogger('gajim.c.jingle_xtls')
@ -111,18 +112,18 @@ def get_context(fingerprint, verify_cb=None, remote_jid=None):
elif fingerprint == 'client': elif fingerprint == 'client':
ctx.set_verify(SSL.VERIFY_PEER, verify_cb or default_callback) 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_privatekey_file((cert_name + '.pkey').encode('utf-8'))
ctx.use_certificate_file((cert_name + '.cert').encode('utf-8')) ctx.use_certificate_file((cert_name + '.cert').encode('utf-8'))
# Try to load Diffie-Hellman parameters. # Try to load Diffie-Hellman parameters.
# First try user DH parameters, if this fails load the default DH 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: try:
with open(dh_params_name, "r") as dh_params_file: with open(dh_params_name, "r") as dh_params_file:
ctx.load_tmp_dh(dh_params_name.encode('utf-8')) ctx.load_tmp_dh(dh_params_name.encode('utf-8'))
except FileNotFoundError as err: 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) 'other', DEFAULT_DH_PARAMS)
try: try:
with open(default_dh_params_name, "r") as default_dh_params_file: 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: if remote_jid:
store = ctx.get_cert_store() 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' remote_jid) + '.cert'
if os.path.exists(path): if os.path.exists(path):
load_cert_file(path, cert_store=store) load_cert_file(path, cert_store=store)
@ -151,7 +152,7 @@ def read_cert(certpath):
return certificate return certificate
def send_cert(con, jid_from, sid): 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' '.cert'
certificate = read_cert(certpath) certificate = read_cert(certpath)
iq = nbxmpp.Iq('result', to=jid_from) 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): def handle_new_cert(con, obj, jid_from):
jid = app.get_jid_without_resource(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' certpath += '.cert'
id_ = obj.getAttr('id') id_ = obj.getAttr('id')
@ -188,7 +189,7 @@ def handle_new_cert(con, obj, jid_from):
approve_pending_content(id_) approve_pending_content(id_)
def check_cert(jid, fingerprint): 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' certpath += '.cert'
if os.path.exists(certpath): if os.path.exists(certpath):
cert = load_cert_file(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 connection
from gajim.common import dataforms from gajim.common import dataforms
from gajim.common import ged from gajim.common import ged
from gajim.common import configpaths
from gajim.accounts_window import AccountsWindow from gajim.accounts_window import AccountsWindow
try: try:
@ -202,9 +203,10 @@ class PreferencesWindow:
self.update_theme_list() self.update_theme_list()
# iconset # iconset
iconsets_list = os.listdir(os.path.join(app.DATA_DIR, 'iconsets')) iconsets_list = os.listdir(
if os.path.isdir(app.MY_ICONSETS_PATH): os.path.join(configpaths.get('DATA'), 'iconsets'))
iconsets_list += os.listdir(app.MY_ICONSETS_PATH) if os.path.isdir(configpaths.get('MY_ICONSETS')):
iconsets_list += os.listdir(configpaths.get('MY_ICONSETS'))
# new model, image in 0, string in 1 # new model, image in 0, string in 1
model = Gtk.ListStore(Gtk.Image, str) model = Gtk.ListStore(Gtk.Image, str)
renderer_image = cell_renderer_image.CellRendererImage(0, 0) renderer_image = cell_renderer_image.CellRendererImage(0, 0)
@ -217,8 +219,8 @@ class PreferencesWindow:
self.iconset_combobox.set_model(model) self.iconset_combobox.set_model(model)
l = [] l = []
for dir in iconsets_list: for dir in iconsets_list:
if not os.path.isdir(os.path.join(app.DATA_DIR, 'iconsets', dir)) \ if not os.path.isdir(os.path.join(configpaths.get('DATA'), 'iconsets', dir)) \
and not os.path.isdir(os.path.join(app.MY_ICONSETS_PATH, dir)): and not os.path.isdir(os.path.join(configpaths.get('MY_ICONSETS'), dir)):
continue continue
if dir != '.svn' and dir != 'transports': if dir != '.svn' and dir != 'transports':
l.append(dir) l.append(dir)
@ -2292,7 +2294,8 @@ class AccountCreationWizardWindow:
self.update_proxy_list() self.update_proxy_list()
# parse servers.xml # 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 = gtkgui_helpers.parse_server_xml(servers_xml)
servers_model = self.xml.get_object('server_liststore') servers_model = self.xml.get_object('server_liststore')
for server in servers: for server in servers:
@ -2532,16 +2535,17 @@ class AccountCreationWizardWindow:
'hostname'] 'hostname']
# Check if cert is already in file # Check if cert is already in file
certs = '' certs = ''
if os.path.isfile(app.MY_CACERTS): my_ca_certs = configpaths.get('MY_CACERTS')
f = open(app.MY_CACERTS) if os.path.isfile(my_ca_certs):
f = open(my_ca_certs)
certs = f.read() certs = f.read()
f.close() f.close()
if self.ssl_cert in certs: if self.ssl_cert in certs:
dialogs.ErrorDialog(_('Certificate Already in File'), dialogs.ErrorDialog(_('Certificate Already in File'),
_('This certificate is already in file %s, so it\'s ' _('This certificate is already in file %s, so it\'s '
'not added again.') % app.MY_CACERTS) 'not added again.') % my_ca_certs)
else: else:
f = open(app.MY_CACERTS, 'a') f = open(my_ca_certs, 'a')
f.write(hostname + '\n') f.write(hostname + '\n')
f.write(self.ssl_cert + '\n\n') f.write(self.ssl_cert + '\n\n')
f.close() f.close()

View File

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

View File

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

View File

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

View File

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

View File

@ -38,6 +38,7 @@ from gajim import gtkgui_helpers
from gajim.dialogs import WarningDialog, YesNoDialog, ArchiveChooserDialog from gajim.dialogs import WarningDialog, YesNoDialog, ArchiveChooserDialog
from gajim.htmltextview import HtmlTextView from gajim.htmltextview import HtmlTextView
from gajim.common import app from gajim.common import app
from gajim.common import configpaths
from gajim.plugins.helpers import log_calls from gajim.plugins.helpers import log_calls
from gajim.plugins.helpers import GajimPluginActivateException from gajim.plugins.helpers import GajimPluginActivateException
from gajim.plugins.plugins_i18n import _ from gajim.plugins.plugins_i18n import _
@ -161,8 +162,8 @@ class PluginsWindow(object):
self.plugin_description_textview, None) self.plugin_description_textview, None)
self.plugin_description_textview.set_property('sensitive', True) self.plugin_description_textview.set_property('sensitive', True)
self.uninstall_plugin_button.set_property('sensitive', self.uninstall_plugin_button.set_property(
app.PLUGINS_DIRS[1] in plugin.__path__) 'sensitive', configpaths.get('PLUGINS_USER') in plugin.__path__)
self.configure_plugin_button.set_property( self.configure_plugin_button.set_property(
'sensitive', plugin.config_dialog is not None) '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 app
from gajim.common import nec from gajim.common import nec
from gajim.common import configpaths
from gajim.common.exceptions import PluginsystemError from gajim.common.exceptions import PluginsystemError
from gajim.plugins.helpers import log, log_calls, Singleton from gajim.plugins.helpers import log, log_calls, Singleton
@ -107,7 +108,7 @@ class PluginManager(metaclass=Singleton):
Registered names with instances of encryption Plugins. 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) pc = PluginManager.scan_dir_for_plugins(path)
self.add_plugins(pc) self.add_plugins(pc)
@ -534,7 +535,7 @@ class PluginManager(metaclass=Singleton):
try: try:
if module_name in sys.modules: 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 # Only reload plugins from Gajim base dir when they
# dont exist. This means plugins in the user path are # dont exist. This means plugins in the user path are
# always preferred. # always preferred.
@ -632,7 +633,7 @@ class PluginManager(metaclass=Singleton):
if len(dirs) > 1: if len(dirs) > 1:
raise PluginsystemError(_('Archive is malformed')) 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]) plugin_dir = os.path.join(user_dir, dirs[0])
if os.path.isdir(plugin_dir): if os.path.isdir(plugin_dir):

View File

@ -23,9 +23,10 @@ import gettext
from os import path as os_path from os import path as os_path
import os import os
from gajim.common import app from gajim.common import app
from gajim.common import configpaths
APP = 'gajim_plugins' 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': if os.name != 'nt':
locale.setlocale(locale.LC_ALL, '') 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 helpers
from gajim.common import app from gajim.common import app
from gajim.common import ged from gajim.common import ged
from gajim.common import configpaths
from gajim.common.i18n import Q_ from gajim.common.i18n import Q_
from gajim.common.const import AvatarSize from gajim.common.const import AvatarSize
@ -84,7 +85,7 @@ class VcardWindow:
self.real_resource = contact.resource self.real_resource = contact.resource
puny_jid = helpers.sanitize_filename(contact.jid) 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' '_local'
for extension in ('.png', '.jpeg'): for extension in ('.png', '.jpeg'):
local_avatar_path = local_avatar_basepath + extension local_avatar_path = local_avatar_basepath + extension

View File

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

View File

@ -54,9 +54,8 @@ configpaths.set_config_root(configdir)
configpaths.init() configpaths.init()
# for some reason common.app needs to be imported before xmpppy? # 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 from common.stanza_session import StanzaSession