diff --git a/src/advanced_configuration_window.py b/src/advanced_configuration_window.py
index bc6bc1e4b..2e3946cd5 100644
--- a/src/advanced_configuration_window.py
+++ b/src/advanced_configuration_window.py
@@ -23,6 +23,8 @@
## along with Gajim. If not, see .
##
+from enum import IntEnum
+
from gi.repository import Gtk
import gtkgui_helpers
from gi.repository import GLib
@@ -30,11 +32,10 @@ from gi.repository import Pango
from common import gajim
-(
-C_PREFNAME,
-C_VALUE,
-C_TYPE
-) = range(3)
+class Column(IntEnum):
+ PREFERENCE_NAME = 0
+ VALUE = 1
+ TYPE = 2
def rate_limit(rate):
"""
@@ -135,8 +136,8 @@ class AdvancedConfigurationWindow(object):
Check if it's boolen or holds password stuff and if yes make the
cellrenderertext not editable, else - it's editable
"""
- optname = model[iter_][C_PREFNAME]
- opttype = model[iter_][C_TYPE]
+ optname = model[iter_][Column.PREFERENCE_NAME]
+ opttype = model[iter_][Column.TYPE]
if opttype == self.types['boolean'] or optname == 'password':
cell.set_property('editable', False)
else:
@@ -263,8 +264,8 @@ class AdvancedConfigurationWindow(object):
elif len(opt_path) == 3:
default = gajim.config.get_default_per(opt_path[2], opt_path[0])
- if model[iter_][C_TYPE] == self.types['boolean']:
- if self.right_true_dict[default] == model[iter_][C_VALUE]:
+ if model[iter_][Column.TYPE] == self.types['boolean']:
+ if self.right_true_dict[default] == model[iter_][Column.VALUE]:
return
modelpath = self.modelfilter.convert_path_to_child_path(path)
modelrow = self.model[modelpath]
@@ -275,15 +276,15 @@ class AdvancedConfigurationWindow(object):
keyrow = self.model[modelpath[:2]]
key = keyrow[0]
self.remember_option(option + '\n' + key + '\n' + optname,
- modelrow[C_VALUE], default)
+ modelrow[Column.VALUE], default)
gajim.config.set_per(optname, key, option, default)
else:
- self.remember_option(option, modelrow[C_VALUE], default)
+ self.remember_option(option, modelrow[Column.VALUE], default)
gajim.config.set(option, default)
- modelrow[C_VALUE] = self.right_true_dict[default]
+ modelrow[Column.VALUE] = self.right_true_dict[default]
self.check_for_restart()
else:
- if str(default) == model[iter_][C_VALUE]:
+ if str(default) == model[iter_][Column.VALUE]:
return
self.on_config_edited(None, path.to_string(), str(default))
@@ -317,14 +318,14 @@ class AdvancedConfigurationWindow(object):
def visible_func(self, model, treeiter, data):
search_string = self.entry.get_text().lower()
for it in tree_model_pre_order(model, treeiter):
- if model[it][C_TYPE] != '':
+ if model[it][Column.TYPE] != '':
opt_path = self.get_option_path(model, it)
if len(opt_path) == 3:
desc = gajim.config.get_desc_per(opt_path[2], opt_path[1],
opt_path[0])
elif len(opt_path) == 1:
desc = gajim.config.get_desc(opt_path[0])
- if search_string in model[it][C_PREFNAME] or (desc and \
+ if search_string in model[it][Column.PREFERENCE_NAME] or (desc and \
search_string in desc.lower()):
return True
return False
diff --git a/src/chat_control.py b/src/chat_control.py
index 669e025eb..6ecc7b8db 100644
--- a/src/chat_control.py
+++ b/src/chat_control.py
@@ -46,7 +46,7 @@ from common import ged
from common import i18n
from common.stanza_session import EncryptedStanzaSession, ArchivingStanzaSession
from common.contacts import GC_Contact
-from common.logger import constants
+from common.logger import KindConstant
from nbxmpp.protocol import NS_XHTML, NS_XHTML_IM, NS_FILE, NS_MUC
from nbxmpp.protocol import NS_RECEIPTS, NS_ESESSION
from nbxmpp.protocol import NS_JINGLE_RTP_AUDIO, NS_JINGLE_RTP_VIDEO
@@ -1679,15 +1679,15 @@ class ChatControl(ChatControlBase):
additional_data = row[4]
if not msg: # message is empty, we don't print it
continue
- if row[1] in (constants.KIND_CHAT_MSG_SENT,
- constants.KIND_SINGLE_MSG_SENT):
+ if row[1] in (KindConstant.CHAT_MSG_SENT,
+ KindConstant.SINGLE_MSG_SENT):
kind = 'outgoing'
name = self.get_our_nick()
- elif row[1] in (constants.KIND_SINGLE_MSG_RECV,
- constants.KIND_CHAT_MSG_RECV):
+ elif row[1] in (KindConstant.SINGLE_MSG_RECV,
+ KindConstant.CHAT_MSG_RECV):
kind = 'incoming'
name = self.contact.get_shown_name()
- elif row[1] == constants.KIND_ERROR:
+ elif row[1] == KindConstant.ERROR:
kind = 'status'
name = self.contact.get_shown_name()
diff --git a/src/common/config.py b/src/common/config.py
index 5ce3f7981..b35c44392 100644
--- a/src/common/config.py
+++ b/src/common/config.py
@@ -35,15 +35,15 @@
import re
from common import defs
from gi.repository import GLib
+from enum import IntEnum
-(
-OPT_TYPE,
-OPT_VAL,
-OPT_DESC,
-# If OPT_RESTART is True - we need restart to use our changed option
-# OPT_DESC also should be there
-OPT_RESTART,
-) = range(4)
+class Option(IntEnum):
+ TYPE = 0
+ VAL = 1
+ DESC = 2
+ # If Option.RESTART is True - we need restart to use our changed option
+ # Option.DESC also should be there
+ RESTART = 3
opt_int = [ 'integer', 0 ]
opt_str = [ 'string', 0 ]
@@ -633,7 +633,7 @@ class Config:
def set(self, optname, value):
if optname not in self.__options[1]:
return
- value = self.is_valid(self.__options[0][optname][OPT_TYPE], value)
+ value = self.is_valid(self.__options[0][optname][Option.TYPE], value)
if value is None:
return
@@ -650,24 +650,24 @@ class Config:
def get_default(self, optname):
if optname not in self.__options[0]:
return None
- return self.__options[0][optname][OPT_VAL]
+ return self.__options[0][optname][Option.VAL]
def get_type(self, optname):
if optname not in self.__options[0]:
return None
- return self.__options[0][optname][OPT_TYPE][0]
+ return self.__options[0][optname][Option.TYPE][0]
def get_desc(self, optname):
if optname not in self.__options[0]:
return None
- if len(self.__options[0][optname]) > OPT_DESC:
- return self.__options[0][optname][OPT_DESC]
+ if len(self.__options[0][optname]) > Option.DESC:
+ return self.__options[0][optname][Option.DESC]
def get_restart(self, optname):
if optname not in self.__options[0]:
return None
- if len(self.__options[0][optname]) > OPT_RESTART:
- return self.__options[0][optname][OPT_RESTART]
+ if len(self.__options[0][optname]) > Option.RESTART:
+ return self.__options[0][optname][Option.RESTART]
def add_per(self, typename, name): # per_group_of_option
if typename not in self.__options_per_key:
@@ -679,7 +679,7 @@ class Config:
return 'you already have added %s before' % name
opt[1][name] = {}
for o in opt[0]:
- opt[1][name][o] = opt[0][o][OPT_VAL]
+ opt[1][name][o] = opt[0][o][Option.VAL]
self._timeout_save()
def del_per(self, typename, name, subname = None): # per_group_of_option
@@ -705,7 +705,7 @@ class Config:
obj = dict_[key]
if subname not in obj:
return
- typ = self.__options_per_key[optname][0][subname][OPT_TYPE]
+ typ = self.__options_per_key[optname][0][subname][Option.TYPE]
value = self.is_valid(typ, value)
if value is None:
return
@@ -735,7 +735,7 @@ class Config:
dict_ = self.__options_per_key[optname][0]
if subname not in dict_:
return None
- return dict_[subname][OPT_VAL]
+ return dict_[subname][Option.VAL]
def get_type_per(self, optname, subname):
if optname not in self.__options_per_key:
@@ -743,7 +743,7 @@ class Config:
dict_ = self.__options_per_key[optname][0]
if subname not in dict_:
return None
- return dict_[subname][OPT_TYPE][0]
+ return dict_[subname][Option.TYPE][0]
def get_desc_per(self, optname, key=None, subname=None):
if optname not in self.__options_per_key:
@@ -758,8 +758,8 @@ class Config:
return None
if subname not in obj:
return None
- if len(obj[subname]) > OPT_DESC:
- return obj[subname][OPT_DESC]
+ if len(obj[subname]) > Option.DESC:
+ return obj[subname][Option.DESC]
return None
def get_restart_per(self, optname, key=None, subname=None):
@@ -775,8 +775,8 @@ class Config:
return False
if subname not in obj:
return False
- if len(obj[subname]) > OPT_RESTART:
- return obj[subname][OPT_RESTART]
+ if len(obj[subname]) > Option.RESTART:
+ return obj[subname][Option.RESTART]
return False
def should_log(self, account, jid):
@@ -794,7 +794,7 @@ class Config:
def _init_options(self):
for opt in self.__options[0]:
- self.__options[1][opt] = self.__options[0][opt][OPT_VAL]
+ self.__options[1][opt] = self.__options[0][opt][Option.VAL]
def _really_save(self):
from common import gajim
diff --git a/src/common/configpaths.py b/src/common/configpaths.py
index 717541700..74c171da3 100644
--- a/src/common/configpaths.py
+++ b/src/common/configpaths.py
@@ -26,12 +26,12 @@ import os
import sys
import tempfile
from common import defs
+from enum import Enum
-(
-TYPE_CONFIG,
-TYPE_CACHE,
-TYPE_DATA
-) = range(3)
+class Type(Enum):
+ CONFIG = 0
+ CACHE = 1
+ DATA = 2
# Note on path and filename encodings:
#
@@ -65,7 +65,7 @@ def get(key):
class ConfigPaths:
def __init__(self):
- # {'name': (type, path), } type can be TYPE_CONFIG, TYPE_CACHE, TYPE_DATA
+ # {'name': (type, path), } type can be Type.CONFIG, Type.CACHE, Type.DATA
# or None
self.paths = {}
@@ -109,11 +109,11 @@ class ConfigPaths:
def __getitem__(self, key):
type_, path = self.paths[key]
- if type_ == TYPE_CONFIG:
+ if type_ == Type.CONFIG:
return os.path.join(self.config_root, path)
- elif type_ == TYPE_CACHE:
+ elif type_ == Type.CACHE:
return os.path.join(self.cache_root, path)
- elif type_ == TYPE_DATA:
+ elif type_ == Type.DATA:
return os.path.join(self.data_root, path)
return path
@@ -145,26 +145,26 @@ class ConfigPaths:
'RNG_SEED': 'rng_seed'}
for name in d:
d[name] += profile
- self.add(name, TYPE_DATA, windowsify(d[name]))
+ self.add(name, Type.DATA, windowsify(d[name]))
if len(profile):
- self.add('MY_DATA', TYPE_DATA, 'data.dir')
+ self.add('MY_DATA', Type.DATA, 'data.dir')
else:
- self.add('MY_DATA', TYPE_DATA, '')
+ self.add('MY_DATA', Type.DATA, '')
d = {'CACHE_DB': 'cache.db', 'VCARD': 'vcards',
'AVATAR': 'avatars'}
for name in d:
d[name] += profile
- self.add(name, TYPE_CACHE, windowsify(d[name]))
+ self.add(name, Type.CACHE, windowsify(d[name]))
if len(profile):
- self.add('MY_CACHE', TYPE_CACHE, 'cache.dir')
+ self.add('MY_CACHE', Type.CACHE, 'cache.dir')
else:
- self.add('MY_CACHE', TYPE_CACHE, '')
+ self.add('MY_CACHE', Type.CACHE, '')
if len(profile):
- self.add('MY_CONFIG', TYPE_CONFIG, 'config.dir')
+ self.add('MY_CONFIG', Type.CONFIG, 'config.dir')
else:
- self.add('MY_CONFIG', TYPE_CONFIG, '')
+ self.add('MY_CONFIG', Type.CONFIG, '')
try:
self.add('TMP', None, tempfile.gettempdir())
@@ -187,10 +187,10 @@ class ConfigPaths:
certsdir += u'.' + profile
localcertsdir += u'.' + profile
- self.add('SECRETS_FILE', TYPE_DATA, secretsfile)
- self.add('MY_PEER_CERTS', TYPE_DATA, certsdir)
- self.add('CONFIG_FILE', TYPE_CONFIG, conffile)
- self.add('PLUGINS_CONFIG_DIR', TYPE_CONFIG, pluginsconfdir)
- self.add('MY_CERT', TYPE_CONFIG, localcertsdir)
+ self.add('SECRETS_FILE', Type.DATA, secretsfile)
+ self.add('MY_PEER_CERTS', Type.DATA, certsdir)
+ self.add('CONFIG_FILE', Type.CONFIG, conffile)
+ self.add('PLUGINS_CONFIG_DIR', Type.CONFIG, pluginsconfdir)
+ self.add('MY_CERT', Type.CONFIG, localcertsdir)
gajimpaths = ConfigPaths()
diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py
index d7b0d19fb..c8287020f 100644
--- a/src/common/connection_handlers_events.py
+++ b/src/common/connection_handlers_events.py
@@ -35,6 +35,7 @@ import nbxmpp
from common import dataforms
from common import exceptions
from common.zeroconf import zeroconf
+from common.zeroconf.zeroconf import Constant
from common.logger import LOG_DB_PATH
from common.pep import SUPPORTED_PERSONAL_USER_EVENTS
from nbxmpp.protocol import NS_CHATSTATES
@@ -1328,7 +1329,7 @@ class ZeroconfMessageReceivedEvent(MessageReceivedEvent):
if self.fjid is None:
for key in self.conn.connection.zeroconf.contacts:
if self.ip == self.conn.connection.zeroconf.contacts[key][
- zeroconf.C_ADDRESS]:
+ Constant.ADDRESS]:
self.fjid = key
break
diff --git a/src/common/jingle_transport.py b/src/common/jingle_transport.py
index ffd26bae9..29073e766 100644
--- a/src/common/jingle_transport.py
+++ b/src/common/jingle_transport.py
@@ -21,6 +21,7 @@ import nbxmpp
import socket
from common import gajim
import logging
+from enum import IntEnum
log = logging.getLogger('gajim.c.jingle_transport')
@@ -33,7 +34,7 @@ def get_jingle_transport(node):
return transports[namespace](node)
-class TransportType(object):
+class TransportType(IntEnum):
"""
Possible types of a JingleTransport
"""
diff --git a/src/common/logger.py b/src/common/logger.py
index 204734ea3..1a8781728 100644
--- a/src/common/logger.py
+++ b/src/common/logger.py
@@ -36,6 +36,7 @@ import json
from gzip import GzipFile
from io import BytesIO
from gi.repository import GLib
+from enum import IntEnum
from common import exceptions
from common import gajim
@@ -50,59 +51,50 @@ CACHE_DB_PATH = gajim.gajimpaths['CACHE_DB']
import logging
log = logging.getLogger('gajim.c.logger')
-class Constants:
- def __init__(self):
- (
- self.JID_NORMAL_TYPE,
- self.JID_ROOM_TYPE
- ) = range(2)
+class JIDConstant(IntEnum):
+ NORMAL_TYPE = 0
+ ROOM_TYPE = 1
- (
- self.KIND_STATUS,
- self.KIND_GCSTATUS,
- self.KIND_GC_MSG,
- self.KIND_SINGLE_MSG_RECV,
- self.KIND_CHAT_MSG_RECV,
- self.KIND_SINGLE_MSG_SENT,
- self.KIND_CHAT_MSG_SENT,
- self.KIND_ERROR
- ) = range(8)
+class KindConstant(IntEnum):
+ STATUS = 0
+ GCSTATUS = 1
+ GC_MSG = 2
+ SINGLE_MSG_RECV = 3
+ CHAT_MSG_RECV = 4
+ SINGLE_MSG_SENT = 5
+ CHAT_MSG_SENT = 6
+ ERROR = 7
- (
- self.SHOW_ONLINE,
- self.SHOW_CHAT,
- self.SHOW_AWAY,
- self.SHOW_XA,
- self.SHOW_DND,
- self.SHOW_OFFLINE
- ) = range(6)
+class ShowConstant(IntEnum):
+ ONLINE = 0
+ CHAT = 1
+ AWAY = 2
+ XA = 3
+ DND = 4
+ OFFLINE = 5
- (
- self.TYPE_AIM,
- self.TYPE_GG,
- self.TYPE_HTTP_WS,
- self.TYPE_ICQ,
- self.TYPE_MSN,
- self.TYPE_QQ,
- self.TYPE_SMS,
- self.TYPE_SMTP,
- self.TYPE_TLEN,
- self.TYPE_YAHOO,
- self.TYPE_NEWMAIL,
- self.TYPE_RSS,
- self.TYPE_WEATHER,
- self.TYPE_MRIM,
- self.TYPE_NO_TRANSPORT,
- ) = range(15)
+class TypeConstant(IntEnum):
+ AIM = 0
+ GG = 1
+ HTTP_WS = 2
+ ICQ = 3
+ MSN = 4
+ QQ = 5
+ SMS = 6
+ SMTP = 7
+ TLEN = 8
+ YAHOO = 9
+ NEWMAIL = 10
+ RSS = 11
+ WEATHER = 12
+ MRIM = 13
+ NO_TRANSPORT = 14
- (
- self.SUBSCRIPTION_NONE,
- self.SUBSCRIPTION_TO,
- self.SUBSCRIPTION_FROM,
- self.SUBSCRIPTION_BOTH,
- ) = range(4)
-
-constants = Constants()
+class SubscriptionConstant(IntEnum):
+ NONE = 0
+ TO = 1
+ FROM = 2
+ BOTH = 3
class Logger:
def __init__(self):
@@ -231,7 +223,7 @@ class Logger:
if row is None:
return None
else:
- if row[0] == constants.JID_ROOM_TYPE:
+ if row[0] == JIDConstant.ROOM_TYPE:
return True
return False
@@ -255,9 +247,9 @@ class Logger:
return row[0]
# oh! a new jid :), we add it now
if typestr == 'ROOM':
- typ = constants.JID_ROOM_TYPE
+ typ = JIDConstant.ROOM_TYPE
else:
- typ = constants.JID_NORMAL_TYPE
+ typ = JIDConstant.NORMAL_TYPE
try:
self.cur.execute('INSERT INTO jids (jid, type) VALUES (?, ?)', (jid,
typ))
@@ -277,34 +269,34 @@ class Logger:
Convert from string style to constant ints for db
"""
if kind == 'status':
- kind_col = constants.KIND_STATUS
+ kind_col = KindConstant.STATUS
elif kind == 'gcstatus':
- kind_col = constants.KIND_GCSTATUS
+ kind_col = KindConstant.GCSTATUS
elif kind == 'gc_msg':
- kind_col = constants.KIND_GC_MSG
+ kind_col = KindConstant.GC_MSG
elif kind == 'single_msg_recv':
- kind_col = constants.KIND_SINGLE_MSG_RECV
+ kind_col = KindConstant.SINGLE_MSG_RECV
elif kind == 'single_msg_sent':
- kind_col = constants.KIND_SINGLE_MSG_SENT
+ kind_col = KindConstant.SINGLE_MSG_SENT
elif kind == 'chat_msg_recv':
- kind_col = constants.KIND_CHAT_MSG_RECV
+ kind_col = KindConstant.CHAT_MSG_RECV
elif kind == 'chat_msg_sent':
- kind_col = constants.KIND_CHAT_MSG_SENT
+ kind_col = KindConstant.CHAT_MSG_SENT
elif kind == 'error':
- kind_col = constants.KIND_ERROR
+ kind_col = KindConstant.ERROR
if show == 'online':
- show_col = constants.SHOW_ONLINE
+ show_col = ShowConstant.ONLINE
elif show == 'chat':
- show_col = constants.SHOW_CHAT
+ show_col = ShowConstant.CHAT
elif show == 'away':
- show_col = constants.SHOW_AWAY
+ show_col = ShowConstant.AWAY
elif show == 'xa':
- show_col = constants.SHOW_XA
+ show_col = ShowConstant.XA
elif show == 'dnd':
- show_col = constants.SHOW_DND
+ show_col = ShowConstant.DND
elif show == 'offline':
- show_col = constants.SHOW_OFFLINE
+ show_col = ShowConstant.OFFLINE
elif show is None:
show_col = None
else: # invisible in GC when someone goes invisible
@@ -318,70 +310,70 @@ class Logger:
Convert from string style to constant ints for db
"""
if type_ == 'aim':
- return constants.TYPE_AIM
+ return TypeConstant.AIM
if type_ == 'gadu-gadu':
- return constants.TYPE_GG
+ return TypeConstant.GG
if type_ == 'http-ws':
- return constants.TYPE_HTTP_WS
+ return TypeConstant.HTTP_WS
if type_ == 'icq':
- return constants.TYPE_ICQ
+ return TypeConstant.ICQ
if type_ == 'msn':
- return constants.TYPE_MSN
+ return TypeConstant.MSN
if type_ == 'qq':
- return constants.TYPE_QQ
+ return TypeConstant.QQ
if type_ == 'sms':
- return constants.TYPE_SMS
+ return TypeConstant.SMS
if type_ == 'smtp':
- return constants.TYPE_SMTP
+ return TypeConstant.SMTP
if type_ in ('tlen', 'x-tlen'):
- return constants.TYPE_TLEN
+ return TypeConstant.TLEN
if type_ == 'yahoo':
- return constants.TYPE_YAHOO
+ return TypeConstant.YAHOO
if type_ == 'newmail':
- return constants.TYPE_NEWMAIL
+ return TypeConstant.NEWMAIL
if type_ == 'rss':
- return constants.TYPE_RSS
+ return TypeConstant.RSS
if type_ == 'weather':
- return constants.TYPE_WEATHER
+ return TypeConstant.WEATHER
if type_ == 'mrim':
- return constants.TYPE_MRIM
+ return TypeConstant.MRIM
if type_ == 'jabber':
- return constants.TYPE_NO_TRANSPORT
+ return TypeConstant.NO_TRANSPORT
return None
def convert_api_values_to_human_transport_type(self, type_id):
"""
Convert from constant ints for db to string style
"""
- if type_id == constants.TYPE_AIM:
+ if type_id == TypeConstant.AIM:
return 'aim'
- if type_id == constants.TYPE_GG:
+ if type_id == TypeConstant.GG:
return 'gadu-gadu'
- if type_id == constants.TYPE_HTTP_WS:
+ if type_id == TypeConstant.HTTP_WS:
return 'http-ws'
- if type_id == constants.TYPE_ICQ:
+ if type_id == TypeConstant.ICQ:
return 'icq'
- if type_id == constants.TYPE_MSN:
+ if type_id == TypeConstant.MSN:
return 'msn'
- if type_id == constants.TYPE_QQ:
+ if type_id == TypeConstant.QQ:
return 'qq'
- if type_id == constants.TYPE_SMS:
+ if type_id == TypeConstant.SMS:
return 'sms'
- if type_id == constants.TYPE_SMTP:
+ if type_id == TypeConstant.SMTP:
return 'smtp'
- if type_id == constants.TYPE_TLEN:
+ if type_id == TypeConstant.TLEN:
return 'tlen'
- if type_id == constants.TYPE_YAHOO:
+ if type_id == TypeConstant.YAHOO:
return 'yahoo'
- if type_id == constants.TYPE_NEWMAIL:
+ if type_id == TypeConstant.NEWMAIL:
return 'newmail'
- if type_id == constants.TYPE_RSS:
+ if type_id == TypeConstant.RSS:
return 'rss'
- if type_id == constants.TYPE_WEATHER:
+ if type_id == TypeConstant.WEATHER:
return 'weather'
- if type_id == constants.TYPE_MRIM:
+ if type_id == TypeConstant.MRIM:
return 'mrim'
- if type_id == constants.TYPE_NO_TRANSPORT:
+ if type_id == TypeConstant.NO_TRANSPORT:
return 'jabber'
def convert_human_subscription_values_to_db_api_values(self, sub):
@@ -389,25 +381,25 @@ class Logger:
Convert from string style to constant ints for db
"""
if sub == 'none':
- return constants.SUBSCRIPTION_NONE
+ return SubscriptionConstant.NONE
if sub == 'to':
- return constants.SUBSCRIPTION_TO
+ return SubscriptionConstant.TO
if sub == 'from':
- return constants.SUBSCRIPTION_FROM
+ return SubscriptionConstant.FROM
if sub == 'both':
- return constants.SUBSCRIPTION_BOTH
+ return SubscriptionConstant.BOTH
def convert_db_api_values_to_human_subscription_values(self, sub):
"""
Convert from constant ints for db to string style
"""
- if sub == constants.SUBSCRIPTION_NONE:
+ if sub == SubscriptionConstant.NONE:
return 'none'
- if sub == constants.SUBSCRIPTION_TO:
+ if sub == SubscriptionConstant.TO:
return 'to'
- if sub == constants.SUBSCRIPTION_FROM:
+ if sub == SubscriptionConstant.FROM:
return 'from'
- if sub == constants.SUBSCRIPTION_BOTH:
+ if sub == SubscriptionConstant.BOTH:
return 'both'
def commit_to_db(self, values, write_unread=False):
@@ -539,12 +531,12 @@ class Logger:
except exceptions.PysqliteOperationalError as e:
raise exceptions.PysqliteOperationalError(str(e))
if show is None: # show is None (xmpp), but we say that 'online'
- show_col = constants.SHOW_ONLINE
+ show_col = ShowConstant.ONLINE
elif kind == 'gcstatus':
# status in ROOM (for pm status see status)
if show is None: # show is None (xmpp), but we say that 'online'
- show_col = constants.SHOW_ONLINE
+ show_col = ShowConstant.ONLINE
jid, nick = jid.split('/', 1)
try:
# re-get jid_id for the new jid
@@ -608,9 +600,9 @@ class Logger:
SELECT time, kind, message, subject, additional_data FROM logs
WHERE (%s) AND kind IN (%d, %d, %d, %d, %d) AND time > %d
ORDER BY time DESC LIMIT %d OFFSET %d
- ''' % (where_sql, constants.KIND_SINGLE_MSG_RECV,
- constants.KIND_CHAT_MSG_RECV, constants.KIND_SINGLE_MSG_SENT,
- constants.KIND_CHAT_MSG_SENT, constants.KIND_ERROR, timed_out,
+ ''' % (where_sql, KindConstant.SINGLE_MSG_RECV,
+ KindConstant.CHAT_MSG_RECV, KindConstant.SINGLE_MSG_SENT,
+ KindConstant.CHAT_MSG_SENT, KindConstant.ERROR, timed_out,
restore_how_many_rows, pending_how_many), jid_tuple)
results = self.cur.fetchall()
@@ -736,7 +728,7 @@ class Logger:
AND kind NOT IN (%d, %d)
ORDER BY time
''' % (where_sql, start_of_month, last_second_of_month,
- constants.KIND_STATUS, constants.KIND_GCSTATUS), jid_tuple)
+ KindConstant.STATUS, KindConstant.GCSTATUS), jid_tuple)
result = self.cur.fetchall()
# convert timestamps to day of month
@@ -765,7 +757,7 @@ class Logger:
SELECT MAX(time) FROM logs
WHERE (%s)
AND kind NOT IN (%d, %d)
- ''' % (where_sql, constants.KIND_STATUS, constants.KIND_GCSTATUS),
+ ''' % (where_sql, KindConstant.STATUS, KindConstant.GCSTATUS),
jid_tuple)
results = self.cur.fetchone()
diff --git a/src/common/zeroconf/roster_zeroconf.py b/src/common/zeroconf/roster_zeroconf.py
index ac88e9565..eeb5c8991 100644
--- a/src/common/zeroconf/roster_zeroconf.py
+++ b/src/common/zeroconf/roster_zeroconf.py
@@ -19,6 +19,7 @@
from common.zeroconf import zeroconf
+from common.zeroconf.zeroconf import Constant, ConstantRI
class Roster:
def __init__(self, zeroconf):
@@ -29,7 +30,7 @@ class Roster:
def update_roster(self):
for val in self.zeroconf.contacts.values():
- self.setItem(val[zeroconf.C_NAME])
+ self.setItem(val[Constant.NAME])
def getRoster(self):
if self._data is None:
@@ -58,13 +59,13 @@ class Roster:
addresses = []
i = 0
- for ri in contact[zeroconf.C_RESOLVED_INFO]:
+ for ri in contact[Constant.RESOLVED_INFO]:
addresses += [{}]
- addresses[i]['host'] = ri[zeroconf.C_RI_HOST]
- addresses[i]['address'] = ri[zeroconf.C_RI_ADDRESS]
- addresses[i]['port'] = ri[zeroconf.C_RI_PORT]
+ addresses[i]['host'] = ri[ConstantRI.HOST]
+ addresses[i]['address'] = ri[ConstantRI.ADDRESS]
+ addresses[i]['port'] = ri[ConstantRI.PORT]
i += 1
- txt = contact[zeroconf.C_TXT]
+ txt = contact[Constant.TXT]
self._data[jid]={}
self._data[jid]['ask'] = 'none'
diff --git a/src/common/zeroconf/zeroconf.py b/src/common/zeroconf/zeroconf.py
index 377f8271f..1f8c28890 100644
--- a/src/common/zeroconf/zeroconf.py
+++ b/src/common/zeroconf/zeroconf.py
@@ -17,8 +17,22 @@
## along with Gajim. If not, see .
##
-C_NAME, C_DOMAIN, C_RESOLVED_INFO, C_BARE_NAME, C_TXT = range(5)
-C_RI_INTERFACE, C_RI_PROTOCOL, C_RI_HOST, C_RI_APROTOCOL, C_RI_ADDRESS, C_RI_PORT = range(6)
+from enum import IntEnum
+
+class Constant(IntEnum):
+ NAME = 0
+ DOMAIN = 1
+ RESOLVED_INFO = 2
+ BARE_NAME = 3
+ TXT = 4
+
+class ConstantRI(IntEnum):
+ INTERFACE = 0
+ PROTOCOL = 1
+ HOST = 2
+ APROTOCOL = 3
+ ADDRESS = 4
+ PORT = 5
def test_avahi():
try:
diff --git a/src/common/zeroconf/zeroconf_avahi.py b/src/common/zeroconf/zeroconf_avahi.py
index 497a0c374..51bad907e 100644
--- a/src/common/zeroconf/zeroconf_avahi.py
+++ b/src/common/zeroconf/zeroconf_avahi.py
@@ -25,8 +25,7 @@ try:
except ImportError:
pass
-from common.zeroconf.zeroconf import C_BARE_NAME, C_RESOLVED_INFO, \
-C_RI_INTERFACE, C_RI_PROTOCOL, C_DOMAIN, C_TXT
+from common.zeroconf.zeroconf import Constant, ConstantRI
class Zeroconf:
def __init__(self, new_serviceCB, remove_serviceCB, name_conflictCB,
@@ -95,15 +94,15 @@ class Zeroconf:
if name != self.name:
for key in self.contacts.keys():
val = self.contacts[key]
- if val[C_BARE_NAME] == name:
+ if val[Constant.BARE_NAME] == name:
# try to reduce instead of delete first
- resolved_info = val[C_RESOLVED_INFO]
+ resolved_info = val[Constant.RESOLVED_INFO]
if len(resolved_info) > 1:
for i in range(len(resolved_info)):
- if resolved_info[i][C_RI_INTERFACE] == interface and resolved_info[i][C_RI_PROTOCOL] == protocol:
- del self.contacts[key][C_RESOLVED_INFO][i]
+ if resolved_info[i][ConstantRI.INTERFACE] == interface and resolved_info[i][ConstantRI.PROTOCOL] == protocol:
+ del self.contacts[key][Constant.RESOLVED_INFO][i]
# if still something left, don't remove
- if len(self.contacts[key][C_RESOLVED_INFO]) > 1: return
+ if len(self.contacts[key][Constant.RESOLVED_INFO]) > 1: return
del self.contacts[key]
self.remove_serviceCB(key)
return
@@ -201,7 +200,7 @@ class Zeroconf:
name = name + '@' + name
# update TXT data only, as intended according to resolve_all comment
old_contact = self.contacts[name]
- self.contacts[name] = old_contact[0:C_TXT] + (txt,) + old_contact[C_TXT+1:]
+ self.contacts[name] = old_contact[0:Constant.TXT] + (txt,) + old_contact[Constant.TXT+1:]
def service_added_callback(self):
log.debug('Service successfully added')
@@ -450,9 +449,9 @@ class Zeroconf:
for val in self.contacts.values():
# get txt data from last recorded resolved info
# TODO: Better try to get it from last IPv6 mDNS, then last IPv4?
- ri = val[C_RESOLVED_INFO][0]
- self.server.ResolveService(int(ri[C_RI_INTERFACE]), int(ri[C_RI_PROTOCOL]),
- val[C_BARE_NAME], self.stype, val[C_DOMAIN],
+ ri = val[Constant.RESOLVED_INFO][0]
+ self.server.ResolveService(int(ri[ConstantRI.INTERFACE]), int(ri[ConstantRI.PROTOCOL]),
+ val[Constant.BARE_NAME], self.stype, val[Constant.DOMAIN],
self.avahi.PROTO_UNSPEC, dbus.UInt32(0),
reply_handler=self.service_resolved_all_callback,
error_handler=self.error_callback)
diff --git a/src/common/zeroconf/zeroconf_bonjour.py b/src/common/zeroconf/zeroconf_bonjour.py
index 0016429d9..f68d412dd 100644
--- a/src/common/zeroconf/zeroconf_bonjour.py
+++ b/src/common/zeroconf/zeroconf_bonjour.py
@@ -20,7 +20,7 @@
from common import gajim
import select
import re
-from common.zeroconf.zeroconf import C_BARE_NAME, C_DOMAIN, C_TXT
+from common.zeroconf.zeroconf import Constant
try:
import pybonjour
@@ -86,7 +86,7 @@ class Zeroconf:
return
if name != self.name:
for key in self.contacts.keys():
- if self.contacts[key][C_BARE_NAME] == name:
+ if self.contacts[key][Constant.BARE_NAME] == name:
del self.contacts[key]
self.remove_serviceCB(key)
return
@@ -171,7 +171,7 @@ class Zeroconf:
if name != self.name:
# update TXT data only, as intended according to resolve_all comment
old_contact = self.contacts[name]
- self.contacts[name] = old_contact[0:C_TXT] + (self.txt,) + old_contact[C_TXT+1:]
+ self.contacts[name] = old_contact[0:Constant.TXT] + (self.txt,) + old_contact[Constant.TXT+1:]
def service_added_callback(self, sdRef, flags, errorCode, name, regtype, domain):
@@ -303,8 +303,8 @@ class Zeroconf:
for val in self.contacts.values():
resolve_sdRef = pybonjour.DNSServiceResolve(0,
- pybonjour.kDNSServiceInterfaceIndexAny, val[C_BARE_NAME],
- self.stype + '.', val[C_DOMAIN] + '.',
+ pybonjour.kDNSServiceInterfaceIndexAny, val[Constant.BARE_NAME],
+ self.stype + '.', val[Constant.DOMAIN] + '.',
self.service_resolved_all_callback)
try:
diff --git a/src/filetransfers_window.py b/src/filetransfers_window.py
index b27230803..e9055d804 100644
--- a/src/filetransfers_window.py
+++ b/src/filetransfers_window.py
@@ -29,6 +29,8 @@ from gi.repository import Pango
import os
import time
+from enum import IntEnum
+
import gtkgui_helpers
import tooltips
import dialogs
@@ -42,14 +44,15 @@ from nbxmpp.protocol import NS_JINGLE_FILE_TRANSFER
import logging
log = logging.getLogger('gajim.filetransfer_window')
-C_IMAGE = 0
-C_LABELS = 1
-C_FILE = 2
-C_TIME = 3
-C_PROGRESS = 4
-C_PERCENT = 5
-C_PULSE = 6
-C_SID = 7
+class Column(IntEnum):
+ IMAGE = 0
+ LABELS = 1
+ FILE = 2
+ TIME = 3
+ PROGRESS = 4
+ PERCENT = 5
+ PULSE = 6
+ SID = 7
class FileTransfersWindow:
@@ -85,11 +88,11 @@ class FileTransfersWindow:
col = Gtk.TreeViewColumn(_('File'))
renderer = Gtk.CellRendererText()
col.pack_start(renderer, False)
- col.add_attribute(renderer, 'markup', C_LABELS)
+ col.add_attribute(renderer, 'markup', Column.LABELS)
renderer.set_property('yalign', 0.)
renderer = Gtk.CellRendererText()
col.pack_start(renderer, True)
- col.add_attribute(renderer, 'markup', C_FILE)
+ col.add_attribute(renderer, 'markup', Column.FILE)
renderer.set_property('xalign', 0.)
renderer.set_property('yalign', 0.)
renderer.set_property('ellipsize', Pango.EllipsizeMode.END)
@@ -100,7 +103,7 @@ class FileTransfersWindow:
col = Gtk.TreeViewColumn(_('Time'))
renderer = Gtk.CellRendererText()
col.pack_start(renderer, False)
- col.add_attribute(renderer, 'markup', C_TIME)
+ col.add_attribute(renderer, 'markup', Column.TIME)
renderer.set_property('yalign', 0.5)
renderer.set_property('xalign', 0.5)
renderer = Gtk.CellRendererText()
@@ -114,9 +117,9 @@ class FileTransfersWindow:
renderer.set_property('yalign', 0.5)
renderer.set_property('xalign', 0.5)
col.pack_start(renderer, False)
- col.add_attribute(renderer, 'text', C_PROGRESS)
- col.add_attribute(renderer, 'value', C_PERCENT)
- col.add_attribute(renderer, 'pulse', C_PULSE)
+ col.add_attribute(renderer, 'text', Column.PROGRESS)
+ col.add_attribute(renderer, 'value', Column.PERCENT)
+ col.add_attribute(renderer, 'pulse', Column.PULSE)
col.set_resizable(True)
col.set_expand(False)
self.tree.append_column(col)
@@ -480,7 +483,7 @@ class FileTransfersWindow:
iter_ = self.get_iter_by_sid(file_props.type_, file_props.sid)
if iter_ is None:
return
- self.model[iter_][C_SID]
+ self.model[iter_][Column.SID]
if status == 'stop':
file_props.stopped = True
elif status == 'ok':
@@ -490,21 +493,21 @@ class FileTransfersWindow:
full_size = file_props.size
text += helpers.convert_bytes(received_size) + '/' + \
helpers.convert_bytes(full_size)
- self.model.set(iter_, C_PROGRESS, text)
- self.model.set(iter_, C_PULSE, GLib.MAXINT32)
+ self.model.set(iter_, Column.PROGRESS, text)
+ self.model.set(iter_, Column.PULSE, GLib.MAXINT32)
elif status == 'computing':
- self.model.set(iter_, C_PULSE, 1)
+ self.model.set(iter_, Column.PULSE, 1)
text = _('Checking fileā¦') + '\n'
received_size = int(file_props.received_len)
full_size = file_props.size
text += helpers.convert_bytes(received_size) + '/' + \
helpers.convert_bytes(full_size)
- self.model.set(iter_, C_PROGRESS, text)
+ self.model.set(iter_, Column.PROGRESS, text)
def pulse():
- p = self.model.get(iter_, C_PULSE)[0]
+ p = self.model.get(iter_, Column.PULSE)[0]
if p == GLib.MAXINT32:
return False
- self.model.set(iter_, C_PULSE, p + 1)
+ self.model.set(iter_, Column.PULSE, p + 1)
return True
GLib.timeout_add(100, pulse)
elif status == 'hash_error':
@@ -513,9 +516,9 @@ class FileTransfersWindow:
full_size = file_props.size
text += helpers.convert_bytes(received_size) + '/' + \
helpers.convert_bytes(full_size)
- self.model.set(iter_, C_PROGRESS, text)
- self.model.set(iter_, C_PULSE, GLib.MAXINT32)
- self.model.set(iter_, C_IMAGE, self.get_icon(status))
+ self.model.set(iter_, Column.PROGRESS, text)
+ self.model.set(iter_, Column.PULSE, GLib.MAXINT32)
+ self.model.set(iter_, Column.IMAGE, self.get_icon(status))
path = self.model.get_path(iter_)
self.select_func(path)
@@ -609,7 +612,7 @@ class FileTransfersWindow:
iter_ = self.get_iter_by_sid(typ, sid)
if iter_ is not None:
just_began = False
- if self.model[iter_][C_PERCENT] == 0 and int(percent > 0):
+ if self.model[iter_][Column.PERCENT] == 0 and int(percent > 0):
just_began = True
text = self._format_percent(percent)
if transfered_size == 0:
@@ -631,8 +634,8 @@ class FileTransfersWindow:
eta, speed = self._get_eta_and_speed(full_size, transfered_size,
file_props)
- self.model.set(iter_, C_PROGRESS, text)
- self.model.set(iter_, C_PERCENT, int(percent))
+ self.model.set(iter_, Column.PROGRESS, text)
+ self.model.set(iter_, Column.PERCENT, int(percent))
text = self._format_time(eta)
text += '\n'
#This should make the string Kb/s,
@@ -640,7 +643,7 @@ class FileTransfersWindow:
#Only the 's' after / (which means second) should be translated.
text += _('(%(filesize_unit)s/s)') % {'filesize_unit':
helpers.convert_bytes(speed)}
- self.model.set(iter_, C_TIME, text)
+ self.model.set(iter_, Column.TIME, text)
# try to guess what should be the status image
if file_props.type_ == 'r':
@@ -673,7 +676,7 @@ class FileTransfersWindow:
"""
iter_ = self.model.get_iter_first()
while iter_:
- if typ + sid == self.model[iter_][C_SID]:
+ if typ + sid == self.model[iter_][Column.SID]:
return iter_
iter_ = self.model.iter_next(iter_)
@@ -736,7 +739,7 @@ class FileTransfersWindow:
file_name = file_props.name
text_props = GLib.markup_escape_text(file_name) + '\n'
text_props += contact.get_shown_name()
- self.model.set(iter_, 1, text_labels, 2, text_props, C_PULSE, -1, C_SID,
+ self.model.set(iter_, 1, text_labels, 2, text_props, Column.PULSE, -1, Column.SID,
file_props.type_ + file_props.sid)
self.set_progress(file_props.type_, file_props.sid, 0, iter_)
if file_props.started is False:
@@ -767,7 +770,7 @@ class FileTransfersWindow:
except Exception:
self.tooltip.hide_tooltip()
return
- sid = self.model[iter_][C_SID]
+ sid = self.model[iter_][Column.SID]
file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
if file_props is not None:
if self.tooltip.timeout == 0 or self.tooltip.id != props[0]:
@@ -825,7 +828,7 @@ class FileTransfersWindow:
self.set_all_insensitive()
return
current_iter = self.model.get_iter(path)
- sid = self.model[current_iter][C_SID]
+ sid = self.model[current_iter][Column.SID]
file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
self.remove_menuitem.set_sensitive(is_row_selected)
self.open_folder_menuitem.set_sensitive(is_row_selected)
@@ -883,7 +886,7 @@ class FileTransfersWindow:
i = len(self.model) - 1
while i >= 0:
iter_ = self.model.get_iter((i))
- sid = self.model[iter_][C_SID]
+ sid = self.model[iter_][Column.SID]
file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
if is_transfer_stopped(file_props):
self._remove_transfer(iter_, sid, file_props)
@@ -918,7 +921,7 @@ class FileTransfersWindow:
if selected is None or selected[1] is None:
return
s_iter = selected[1]
- sid = self.model[s_iter][C_SID]
+ sid = self.model[s_iter][Column.SID]
file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
if is_transfer_paused(file_props):
file_props.last_time = time.time()
@@ -940,7 +943,7 @@ class FileTransfersWindow:
if selected is None or selected[1] is None:
return
s_iter = selected[1]
- sid = self.model[s_iter][C_SID]
+ sid = self.model[s_iter][Column.SID]
file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
account = file_props.tt_account
if account not in gajim.connections:
@@ -966,7 +969,7 @@ class FileTransfersWindow:
# as it was before setting the timeout
if props and self.tooltip.id == props[0]:
iter_ = self.model.get_iter(props[0])
- sid = self.model[iter_][C_SID]
+ sid = self.model[iter_][Column.SID]
file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
# bounding rectangle of coordinates for the cell within the treeview
rect = self.tree.get_cell_area(props[0], props[1])
@@ -1054,7 +1057,7 @@ class FileTransfersWindow:
if not selected or not selected[1]:
return
s_iter = selected[1]
- sid = self.model[s_iter][C_SID]
+ sid = self.model[s_iter][Column.SID]
file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
if not file_props.file_name:
return
@@ -1076,7 +1079,7 @@ class FileTransfersWindow:
if not selected or not selected[1]:
return
s_iter = selected[1]
- sid = self.model[s_iter][C_SID]
+ sid = self.model[s_iter][Column.SID]
file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
self._remove_transfer(s_iter, sid, file_props)
self.set_all_insensitive()
diff --git a/src/groupchat_control.py b/src/groupchat_control.py
index bf4a72c6a..cefd1747a 100644
--- a/src/groupchat_control.py
+++ b/src/groupchat_control.py
@@ -46,6 +46,8 @@ import cell_renderer_image
import dataforms_widget
import nbxmpp
+from enum import IntEnum
+
from common import events
from common import gajim
from common import helpers
@@ -63,14 +65,12 @@ from common.connection_handlers_events import GcMessageOutgoingEvent
import logging
log = logging.getLogger('gajim.groupchat_control')
-#(status_image, type, nick, shown_nick)
-(
-C_IMG, # image to show state (online, new message etc)
-C_NICK, # contact nickame or ROLE name
-C_TYPE, # type of the row ('contact' or 'role')
-C_TEXT, # text shown in the cellrenderer
-C_AVATAR, # avatar of the contact
-) = range(5)
+class Column(IntEnum):
+ IMG = 0 # image to show state (online, new message etc)
+ NICK = 1 # contact nickame or ROLE name
+ TYPE = 2 # type of the row ('contact' or 'role')
+ TEXT = 3 # text shown in the cellrenderer
+ AVATAR = 4 # avatar of the contact
empty_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1)
empty_pixbuf.fill(0xffffff00)
@@ -99,7 +99,7 @@ def tree_cell_data_func(column, renderer, model, iter_, tv=None):
renderer.set_property('xalign', 1) # align pixbuf to the right
else:
renderer.set_property('xalign', 0.5)
- if parent_iter and (model[iter_][C_AVATAR] or avatar_position == \
+ if parent_iter and (model[iter_][Column.AVATAR] or avatar_position == \
'left'):
renderer.set_property('visible', True)
renderer.set_property('width', gajim.config.get(
@@ -448,8 +448,8 @@ class GroupchatControl(ChatControlBase):
#status_image, shown_nick, type, nickname, avatar
self.columns = [Gtk.Image, str, str, str, GdkPixbuf.Pixbuf]
self.model = Gtk.TreeStore(*self.columns)
- self.model.set_sort_func(C_NICK, self.tree_compare_iters)
- self.model.set_sort_column_id(C_NICK, Gtk.SortType.ASCENDING)
+ self.model.set_sort_func(Column.NICK, self.tree_compare_iters)
+ self.model.set_sort_column_id(Column.NICK, Gtk.SortType.ASCENDING)
# columns
column = Gtk.TreeViewColumn()
@@ -469,14 +469,14 @@ class GroupchatControl(ChatControlBase):
self.renderers_list += (
# status img
('icon', renderer_image, False,
- 'image', C_IMG, tree_cell_data_func, self.list_treeview),
+ 'image', Column.IMG, tree_cell_data_func, self.list_treeview),
# contact name
('name', renderer_text, True,
- 'markup', C_TEXT, tree_cell_data_func, self.list_treeview))
+ 'markup', Column.TEXT, tree_cell_data_func, self.list_treeview))
# avatar img
avater_renderer = ('avatar', Gtk.CellRendererPixbuf(),
- False, 'pixbuf', C_AVATAR,
+ False, 'pixbuf', Column.AVATAR,
tree_cell_data_func, self.list_treeview)
if gajim.config.get('avatar_position_in_roster') == 'right':
@@ -549,8 +549,8 @@ class GroupchatControl(ChatControlBase):
except Exception:
return False
- typ = self.model[iter_][C_TYPE]
- nick = self.model[iter_][C_NICK]
+ typ = self.model[iter_][Column.TYPE]
+ nick = self.model[iter_][Column.NICK]
if typ != 'contact':
return False
@@ -589,12 +589,12 @@ class GroupchatControl(ChatControlBase):
"""
Compare two iters to sort them
"""
- type1 = model[iter1][C_TYPE]
- type2 = model[iter2][C_TYPE]
+ type1 = model[iter1][Column.TYPE]
+ type2 = model[iter2][Column.TYPE]
if not type1 or not type2:
return 0
- nick1 = model[iter1][C_NICK]
- nick2 = model[iter2][C_NICK]
+ nick1 = model[iter1][Column.NICK]
+ nick2 = model[iter2][Column.NICK]
if not nick1 or not nick2:
return 0
if type1 == 'role':
@@ -700,7 +700,7 @@ class GroupchatControl(ChatControlBase):
"""
# Get the room_jid from treeview
for contact in self.iter_contact_rows():
- nick = contact[C_NICK]
+ nick = contact[Column.NICK]
self.draw_contact(nick)
def on_list_treeview_selection_changed(self, selection):
@@ -712,9 +712,9 @@ class GroupchatControl(ChatControlBase):
self._last_selected_contact = None
return
contact = model[selected_iter]
- nick = contact[C_NICK]
+ nick = contact[Column.NICK]
self._last_selected_contact = nick
- if contact[C_TYPE] != 'contact':
+ if contact[Column.TYPE] != 'contact':
return
self.draw_contact(nick, selected=True, focus=True)
@@ -782,7 +782,7 @@ class GroupchatControl(ChatControlBase):
self.draw_contact(nick)
def _change_style(self, model, path, iter_, option):
- model[iter_][C_NICK] = model[iter_][C_NICK]
+ model[iter_][Column.NICK] = model[iter_][Column.NICK]
def change_roster_style(self):
self.model.foreach(self._change_style, None)
@@ -1100,7 +1100,7 @@ class GroupchatControl(ChatControlBase):
gajim.interface.roster.get_appropriate_state_images(
self.room_jid, icon_name='event')
image = state_images['event']
- self.model[iter_][C_IMG] = image
+ self.model[iter_][Column.IMG] = image
if self.parent_win:
self.parent_win.show_title()
self.parent_win.redraw_tab(self)
@@ -1122,7 +1122,7 @@ class GroupchatControl(ChatControlBase):
while role_iter:
user_iter = self.model.iter_children(role_iter)
while user_iter:
- if nick == self.model[user_iter][C_NICK]:
+ if nick == self.model[user_iter][Column.NICK]:
return user_iter
else:
user_iter = self.model.iter_next(user_iter)
@@ -1486,7 +1486,7 @@ class GroupchatControl(ChatControlBase):
contact in a room
"""
if nick is None:
- nick = model[iter_][C_NICK]
+ nick = model[iter_][Column.NICK]
ctrl = self._start_private_message(nick)
if ctrl and msg:
@@ -1548,8 +1548,8 @@ class GroupchatControl(ChatControlBase):
pixbuf2.get_property('height'), 0, 0, 1.0, 1.0,
GdkPixbuf.InterpType.HYPER, 127)
image = Gtk.Image.new_from_pixbuf(pixbuf1)
- self.model[iter_][C_IMG] = image
- self.model[iter_][C_TEXT] = name
+ self.model[iter_][Column.IMG] = image
+ self.model[iter_][Column.TEXT] = name
def draw_avatar(self, nick):
if not gajim.config.get('show_avatars_in_roster'):
@@ -1565,7 +1565,7 @@ class GroupchatControl(ChatControlBase):
scaled_pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'roster')
if not scaled_pixbuf:
scaled_pixbuf = empty_pixbuf
- self.model[iter_][C_AVATAR] = scaled_pixbuf
+ self.model[iter_][Column.AVATAR] = scaled_pixbuf
def draw_role(self, role):
role_iter = self.get_role_iter(role)
@@ -1576,7 +1576,7 @@ class GroupchatControl(ChatControlBase):
nbr_role, nbr_total = gajim.contacts.get_nb_role_total_gc_contacts(
self.account, self.room_jid, role)
role_name += ' (%s/%s)' % (repr(nbr_role), repr(nbr_total))
- self.model[role_iter][C_TEXT] = role_name
+ self.model[role_iter][Column.TEXT] = role_name
def draw_all_roles(self):
for role in ('visitor', 'participant', 'moderator'):
@@ -1967,7 +1967,7 @@ class GroupchatControl(ChatControlBase):
def get_role_iter(self, role):
role_iter = self.model.get_iter_first()
while role_iter:
- role_name = self.model[role_iter][C_NICK]
+ role_name = self.model[role_iter][Column.NICK]
if role == role_name:
return role_iter
role_iter = self.model.iter_next(role_iter)
@@ -2429,7 +2429,7 @@ class GroupchatControl(ChatControlBase):
"""
model = widget.get_model()
image = gajim.interface.jabber_state_images['16']['opened']
- model[iter_][C_IMG] = image
+ model[iter_][Column.IMG] = image
def on_list_treeview_row_collapsed(self, widget, iter_, path):
"""
@@ -2437,7 +2437,7 @@ class GroupchatControl(ChatControlBase):
"""
model = widget.get_model()
image = gajim.interface.jabber_state_images['16']['closed']
- model[iter_][C_IMG] = image
+ model[iter_][Column.IMG] = image
def kick(self, widget, nick):
"""
@@ -2456,7 +2456,7 @@ class GroupchatControl(ChatControlBase):
"""
Make contact's popup menu
"""
- nick = self.model[iter_][C_NICK]
+ nick = self.model[iter_][Column.NICK]
c = gajim.contacts.get_gc_contact(self.account, self.room_jid, nick)
fjid = self.room_jid + '/' + nick
jid = c.jid
@@ -2619,7 +2619,7 @@ class GroupchatControl(ChatControlBase):
else:
widget.expand_row(path, False)
else: # We want to send a private message
- nick = self.model[path][C_NICK]
+ nick = self.model[path][Column.NICK]
self._start_private_message(nick)
def on_list_treeview_row_activated(self, widget, path, col=0):
@@ -2650,7 +2650,7 @@ class GroupchatControl(ChatControlBase):
widget.get_selection().select_path(path)
iter_ = self.model.get_iter(path)
if path.get_depth() == 2:
- nick = self.model[iter_][C_NICK]
+ nick = self.model[iter_][Column.NICK]
self._start_private_message(nick)
return True
@@ -2660,7 +2660,7 @@ class GroupchatControl(ChatControlBase):
return True
else:
iter_ = self.model.get_iter(path)
- nick = self.model[iter_][C_NICK]
+ nick = self.model[iter_][Column.NICK]
if not nick in gajim.contacts.get_nick_list(self.account,
self.room_jid):
# it's a group
diff --git a/src/history_manager.py b/src/history_manager.py
index 873f32cea..8786a11db 100644
--- a/src/history_manager.py
+++ b/src/history_manager.py
@@ -99,13 +99,13 @@ status = dict((constants.__dict__[i], i[5:].lower()) for i in \
from common import helpers
import dialogs
-# time, message, subject
-(
-C_UNIXTIME,
-C_MESSAGE,
-C_SUBJECT,
-C_NICKNAME
-) = range(2, 6)
+from enum import IntEnum
+
+class Column(IntEnum):
+ UNIXTIME = 2
+ MESSAGE = 3
+ SUBJECT = 4
+ NICKNAME = 5
import sqlite3 as sqlite
@@ -176,32 +176,32 @@ class HistoryManager:
self.logs_listview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
renderer_text = Gtk.CellRendererText() # holds time
- col = Gtk.TreeViewColumn(_('Date'), renderer_text, text=C_UNIXTIME)
+ col = Gtk.TreeViewColumn(_('Date'), renderer_text, text=Column.UNIXTIME)
# user can click this header and sort
- col.set_sort_column_id(C_UNIXTIME)
+ col.set_sort_column_id(Column.UNIXTIME)
col.set_resizable(True)
self.logs_listview.append_column(col)
renderer_text = Gtk.CellRendererText() # holds nickname
- col = Gtk.TreeViewColumn(_('Nickname'), renderer_text, text=C_NICKNAME)
+ col = Gtk.TreeViewColumn(_('Nickname'), renderer_text, text=Column.NICKNAME)
# user can click this header and sort
- col.set_sort_column_id(C_NICKNAME)
+ col.set_sort_column_id(Column.NICKNAME)
col.set_resizable(True)
col.set_visible(False)
self.nickname_col_for_logs = col
self.logs_listview.append_column(col)
renderer_text = Gtk.CellRendererText() # holds message
- col = Gtk.TreeViewColumn(_('Message'), renderer_text, markup=C_MESSAGE)
+ col = Gtk.TreeViewColumn(_('Message'), renderer_text, markup=Column.MESSAGE)
# user can click this header and sort
- col.set_sort_column_id(C_MESSAGE)
+ col.set_sort_column_id(Column.MESSAGE)
col.set_resizable(True)
self.message_col_for_logs = col
self.logs_listview.append_column(col)
renderer_text = Gtk.CellRendererText() # holds subject
- col = Gtk.TreeViewColumn(_('Subject'), renderer_text, text=C_SUBJECT)
- col.set_sort_column_id(C_SUBJECT) # user can click this header and sort
+ col = Gtk.TreeViewColumn(_('Subject'), renderer_text, text=Column.SUBJECT)
+ col.set_sort_column_id(Column.SUBJECT) # user can click this header and sort
col.set_resizable(True)
col.set_visible(False)
self.subject_col_for_logs = col
@@ -220,28 +220,28 @@ class HistoryManager:
self.search_results_listview.append_column(col)
renderer_text = Gtk.CellRendererText() # holds time
- col = Gtk.TreeViewColumn(_('Date'), renderer_text, text=C_UNIXTIME)
+ col = Gtk.TreeViewColumn(_('Date'), renderer_text, text=Column.UNIXTIME)
# user can click this header and sort
- col.set_sort_column_id(C_UNIXTIME)
+ col.set_sort_column_id(Column.UNIXTIME)
col.set_resizable(True)
self.search_results_listview.append_column(col)
renderer_text = Gtk.CellRendererText() # holds message
- col = Gtk.TreeViewColumn(_('Message'), renderer_text, text=C_MESSAGE)
- col.set_sort_column_id(C_MESSAGE) # user can click this header and sort
+ col = Gtk.TreeViewColumn(_('Message'), renderer_text, text=Column.MESSAGE)
+ col.set_sort_column_id(Column.MESSAGE) # user can click this header and sort
col.set_resizable(True)
self.search_results_listview.append_column(col)
renderer_text = Gtk.CellRendererText() # holds subject
- col = Gtk.TreeViewColumn(_('Subject'), renderer_text, text=C_SUBJECT)
- col.set_sort_column_id(C_SUBJECT) # user can click this header and sort
+ col = Gtk.TreeViewColumn(_('Subject'), renderer_text, text=Column.SUBJECT)
+ col.set_sort_column_id(Column.SUBJECT) # user can click this header and sort
col.set_resizable(True)
self.search_results_listview.append_column(col)
renderer_text = Gtk.CellRendererText() # holds nickname
- col = Gtk.TreeViewColumn(_('Nickname'), renderer_text, text=C_NICKNAME)
+ col = Gtk.TreeViewColumn(_('Nickname'), renderer_text, text=Column.NICKNAME)
# user can click this header and sort
- col.set_sort_column_id(C_NICKNAME)
+ col.set_sort_column_id(Column.NICKNAME)
col.set_resizable(True)
self.search_results_listview.append_column(col)
diff --git a/src/history_window.py b/src/history_window.py
index 1a0a8d2f9..de3090ed7 100644
--- a/src/history_window.py
+++ b/src/history_window.py
@@ -31,6 +31,8 @@ from gi.repository import GLib
import time
import calendar
+from enum import IntEnum
+
import gtkgui_helpers
import conversation_textview
import dialogs
@@ -39,26 +41,21 @@ from common import gajim
from common import helpers
from common import exceptions
-from common.logger import Constants
+from common.logger import ShowConstant, KindConstant
-constants = Constants()
+class InfoColumn(IntEnum):
+ '''Completion dict'''
+ JID = 0
+ ACCOUNT = 1
+ NAME = 2
+ COMPLETION = 3
-# Completion dict
-(
- C_INFO_JID,
- C_INFO_ACCOUNT,
- C_INFO_NAME,
- C_INFO_COMPLETION
-) = range(4)
-
-# contact_name, date, message, time
-(
- C_LOG_JID,
- C_CONTACT_NAME,
- C_UNIXTIME,
- C_MESSAGE,
- C_TIME
-) = range(5)
+class Column(IntEnum):
+ LOG_JID = 0
+ CONTACT_NAME = 1
+ UNIXTIME = 2
+ MESSAGE = 3
+ TIME = 4
class HistoryWindow:
"""
@@ -95,23 +92,23 @@ class HistoryWindow:
self.results_treeview.append_column(col)
renderer = Gtk.CellRendererText()
col.pack_start(renderer, True)
- col.add_attribute(renderer, 'text', C_CONTACT_NAME)
- col.set_sort_column_id(C_CONTACT_NAME) # user can click this header and sort
+ col.add_attribute(renderer, 'text', Column.CONTACT_NAME)
+ col.set_sort_column_id(Column.CONTACT_NAME) # user can click this header and sort
col.set_resizable(True)
col = Gtk.TreeViewColumn(_('Date'))
self.results_treeview.append_column(col)
renderer = Gtk.CellRendererText()
col.pack_start(renderer, True)
- col.add_attribute(renderer, 'text', C_UNIXTIME)
- col.set_sort_column_id(C_UNIXTIME) # user can click this header and sort
+ col.add_attribute(renderer, 'text', Column.UNIXTIME)
+ col.set_sort_column_id(Column.UNIXTIME) # user can click this header and sort
col.set_resizable(True)
col = Gtk.TreeViewColumn(_('Message'))
self.results_treeview.append_column(col)
renderer = Gtk.CellRendererText()
col.pack_start(renderer, True)
- col.add_attribute(renderer, 'text', C_MESSAGE)
+ col.add_attribute(renderer, 'text', Column.MESSAGE)
col.set_resizable(True)
self.jid = None # The history we are currently viewing
@@ -372,17 +369,17 @@ class HistoryWindow:
widget.mark_day(day)
def _get_string_show_from_constant_int(self, show):
- if show == constants.SHOW_ONLINE:
+ if show == ShowConstant.ONLINE:
show = 'online'
- elif show == constants.SHOW_CHAT:
+ elif show == ShowConstant.CHAT:
show = 'chat'
- elif show == constants.SHOW_AWAY:
+ elif show == ShowConstant.AWAY:
show = 'away'
- elif show == constants.SHOW_XA:
+ elif show == ShowConstant.XA:
show = 'xa'
- elif show == constants.SHOW_DND:
+ elif show == ShowConstant.DND:
show = 'dnd'
- elif show == constants.SHOW_OFFLINE:
+ elif show == ShowConstant.OFFLINE:
show = 'offline'
return show
@@ -402,8 +399,8 @@ class HistoryWindow:
# line[0] is contact_name, line[1] is time of message
# line[2] is kind, line[3] is show, line[4] is message, line[5] is subject
# line[6] is additional_data
- if not show_status and line[2] in (constants.KIND_GCSTATUS,
- constants.KIND_STATUS):
+ if not show_status and line[2] in (KindConstant.GCSTATUS,
+ KindConstant.STATUS):
continue
self._add_new_line(line[0], line[1], line[2], line[3], line[4],
line[5], line[6])
@@ -412,8 +409,8 @@ class HistoryWindow:
"""
Add a new line in textbuffer
"""
- if not message and kind not in (constants.KIND_STATUS,
- constants.KIND_GCSTATUS):
+ if not message and kind not in (KindConstant.STATUS,
+ KindConstant.GCSTATUS):
return
buf = self.history_buffer
end_iter = buf.get_end_iter()
@@ -444,15 +441,15 @@ class HistoryWindow:
show = self._get_string_show_from_constant_int(show)
- if kind == constants.KIND_GC_MSG:
+ if kind == KindConstant.GC_MSG:
tag_name = 'incoming'
- elif kind in (constants.KIND_SINGLE_MSG_RECV,
- constants.KIND_CHAT_MSG_RECV):
- contact_name = self.completion_dict[self.jid][C_INFO_NAME]
+ elif kind in (KindConstant.SINGLE_MSG_RECV,
+ KindConstant.CHAT_MSG_RECV):
+ contact_name = self.completion_dict[self.jid][InfoColumn.NAME]
tag_name = 'incoming'
tag_msg = 'incomingtxt'
- elif kind in (constants.KIND_SINGLE_MSG_SENT,
- constants.KIND_CHAT_MSG_SENT):
+ elif kind in (KindConstant.SINGLE_MSG_SENT,
+ KindConstant.CHAT_MSG_SENT):
if self.account:
contact_name = gajim.nicks[self.account]
else:
@@ -462,7 +459,7 @@ class HistoryWindow:
contact_name = gajim.nicks[account]
tag_name = 'outgoing'
tag_msg = 'outgoingtxt'
- elif kind == constants.KIND_GCSTATUS:
+ elif kind == KindConstant.GCSTATUS:
# message here (if not None) is status message
if message:
message = _('%(nick)s is now %(status)s: %(status_msg)s') %\
@@ -492,7 +489,7 @@ class HistoryWindow:
else:
# do not do this if gcstats, avoid dupping contact_name
# eg. nkour: nkour is now Offline
- if contact_name and kind != constants.KIND_GCSTATUS:
+ if contact_name and kind != KindConstant.GCSTATUS:
# add stuff before and after contact name
before_str = gajim.config.get('before_nickname')
before_str = helpers.from_one_line(before_str)
@@ -532,7 +529,7 @@ class HistoryWindow:
# perform search in preselected jids
# jids are preselected with the query_entry
for jid in self.jids_to_search:
- account = self.completion_dict[jid][C_INFO_ACCOUNT]
+ account = self.completion_dict[jid][InfoColumn.ACCOUNT]
if account is None:
# We do not know an account. This can only happen if the contact is offine,
# or if we browse a groupchat history. The account is not needed, a dummy can
@@ -554,16 +551,16 @@ class HistoryWindow:
# add "subject: | message: " in message column if kind is single
# also do we need show at all? (we do not search on subject)
for row in results:
- if not show_status and row[2] in (constants.KIND_GCSTATUS,
- constants.KIND_STATUS):
+ if not show_status and row[2] in (KindConstant.GCSTATUS,
+ KindConstant.STATUS):
continue
contact_name = row[0]
if not contact_name:
kind = row[2]
- if kind == constants.KIND_CHAT_MSG_SENT: # it's us! :)
+ if kind == KindConstant.CHAT_MSG_SENT: # it's us! :)
contact_name = gajim.nicks[account]
else:
- contact_name = self.completion_dict[jid][C_INFO_NAME]
+ contact_name = self.completion_dict[jid][InfoColumn.NAME]
tim = row[1]
message = row[4]
local_time = time.localtime(tim)
@@ -583,14 +580,14 @@ class HistoryWindow:
cur_month = gtkgui_helpers.make_gtk_month_python_month(cur_month)
model = widget.get_model()
# make it a tupple (Y, M, D, 0, 0, 0...)
- tim = time.strptime(model[path][C_UNIXTIME], '%Y-%m-%d')
+ tim = time.strptime(model[path][Column.UNIXTIME], '%Y-%m-%d')
year = tim[0]
gtk_month = tim[1]
month = gtkgui_helpers.make_python_month_gtk_month(gtk_month)
day = tim[2]
# switch to belonging logfile if necessary
- log_jid = model[path][C_LOG_JID]
+ log_jid = model[path][Column.LOG_JID]
if log_jid != self.jid:
self._load_history(log_jid, None)
@@ -599,7 +596,7 @@ class HistoryWindow:
self.calendar.select_month(month, year)
self.calendar.select_day(day)
- unix_time = model[path][C_TIME]
+ unix_time = model[path][Column.TIME]
self._scroll_to_result(unix_time)
#FIXME: one day do not search just for unix_time but the whole and user
# specific format of the textbuffer line [time] nick: message
diff --git a/src/plugins/gui.py b/src/plugins/gui.py
index f544c9242..46c48d1fc 100644
--- a/src/plugins/gui.py
+++ b/src/plugins/gui.py
@@ -32,6 +32,8 @@ from gi.repository import GdkPixbuf
from gi.repository import GLib
import os
+from enum import IntEnum
+
import gtkgui_helpers
from dialogs import WarningDialog, YesNoDialog, ArchiveChooserDialog
from htmltextview import HtmlTextView
@@ -41,13 +43,12 @@ from plugins.helpers import GajimPluginActivateException
from plugins.plugins_i18n import _
from common.exceptions import PluginsystemError
-(
-PLUGIN,
-NAME,
-ACTIVE,
-ACTIVATABLE,
-ICON,
-) = range(5)
+class Column(IntEnum):
+ PLUGIN = 0
+ NAME = 1
+ ACTIVE = 2
+ ACTIVATABLE = 3
+ ICON = 4
class PluginsWindow(object):
@@ -78,19 +79,19 @@ class PluginsWindow(object):
self.installed_plugins_treeview.set_rules_hint(True)
renderer = Gtk.CellRendererText()
- col = Gtk.TreeViewColumn(_('Plugin'))#, renderer, text=NAME)
+ col = Gtk.TreeViewColumn(_('Plugin'))#, renderer, text=Column.NAME)
cell = Gtk.CellRendererPixbuf()
col.pack_start(cell, False)
- col.add_attribute(cell, 'pixbuf', ICON)
+ col.add_attribute(cell, 'pixbuf', Column.ICON)
col.pack_start(renderer, True)
- col.add_attribute(renderer, 'text', NAME)
+ col.add_attribute(renderer, 'text', Column.NAME)
col.set_property('expand', True)
self.installed_plugins_treeview.append_column(col)
renderer = Gtk.CellRendererToggle()
renderer.connect('toggled', self.installed_plugins_toggled_cb)
- col = Gtk.TreeViewColumn(_('Active'), renderer, active=ACTIVE,
- activatable=ACTIVATABLE)
+ col = Gtk.TreeViewColumn(_('Active'), renderer, active=Column.ACTIVE,
+ activatable=Column.ACTIVATABLE)
self.installed_plugins_treeview.append_column(col)
self.def_icon = gtkgui_helpers.get_icon_pixmap('preferences-desktop')
@@ -124,9 +125,9 @@ class PluginsWindow(object):
def installed_plugins_treeview_selection_changed(self, treeview_selection):
model, iter = treeview_selection.get_selected()
if iter:
- plugin = model.get_value(iter, PLUGIN)
- plugin_name = model.get_value(iter, NAME)
- is_active = model.get_value(iter, ACTIVE)
+ plugin = model.get_value(iter, Column.PLUGIN)
+ plugin_name = model.get_value(iter, Column.NAME)
+ is_active = model.get_value(iter, Column.ACTIVE)
self._display_installed_plugin_info(plugin)
else:
@@ -195,8 +196,8 @@ class PluginsWindow(object):
@log_calls('PluginsWindow')
def installed_plugins_toggled_cb(self, cell, path):
- is_active = self.installed_plugins_model[path][ACTIVE]
- plugin = self.installed_plugins_model[path][PLUGIN]
+ is_active = self.installed_plugins_model[path][Column.ACTIVE]
+ plugin = self.installed_plugins_model[path][Column.PLUGIN]
if is_active:
gajim.plugin_manager.deactivate_plugin(plugin)
@@ -208,7 +209,7 @@ class PluginsWindow(object):
transient_for=self.window)
return
- self.installed_plugins_model[path][ACTIVE] = not is_active
+ self.installed_plugins_model[path][Column.ACTIVE] = not is_active
@log_calls('PluginsWindow')
def on_plugins_window_destroy(self, widget):
@@ -224,9 +225,9 @@ class PluginsWindow(object):
selection = self.installed_plugins_treeview.get_selection()
model, iter = selection.get_selected()
if iter:
- plugin = model.get_value(iter, PLUGIN)
- plugin_name = model.get_value(iter, NAME)
- is_active = model.get_value(iter, ACTIVE)
+ plugin = model.get_value(iter, Column.PLUGIN)
+ plugin_name = model.get_value(iter, Column.NAME)
+ is_active = model.get_value(iter, Column.ACTIVE)
result = plugin.config_dialog.run(self.window)
@@ -242,9 +243,9 @@ class PluginsWindow(object):
selection = self.installed_plugins_treeview.get_selection()
model, iter = selection.get_selected()
if iter:
- plugin = model.get_value(iter, PLUGIN)
- plugin_name = model.get_value(iter, NAME)
- is_active = model.get_value(iter, ACTIVE)
+ plugin = model.get_value(iter, Column.PLUGIN)
+ plugin_name = model.get_value(iter, Column.NAME)
+ is_active = model.get_value(iter, Column.ACTIVE)
try:
gajim.plugin_manager.remove_plugin(plugin)
except PluginsystemError as e:
@@ -271,8 +272,8 @@ class PluginsWindow(object):
model = self.installed_plugins_model
for i, row in enumerate(model):
- if plugin == row[PLUGIN]:
- model.remove(model.get_iter((i, PLUGIN)))
+ if plugin == row[Column.PLUGIN]:
+ model.remove(model.get_iter((i, Column.PLUGIN)))
break
iter_ = model.append([plugin, plugin.name, False,
diff --git a/src/roster_window.py b/src/roster_window.py
index 0039acfe3..da6a68cab 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -43,6 +43,8 @@ import sys
import time
import locale
+from enum import IntEnum
+
import common.sleepy
import history_window
import dialogs
@@ -72,20 +74,18 @@ from message_window import MessageWindowMgr
from nbxmpp.protocol import NS_FILE, NS_ROSTERX, NS_CONFERENCE
-#(icon, name, type, jid, account, editable, second pixbuf)
-(
- C_IMG, # image to show state (online, new message etc)
- C_NAME, # cellrenderer text that holds contact nickame
- C_TYPE, # account, group or contact?
- C_JID, # the jid of the row
- C_ACCOUNT, # cellrenderer text that holds account name
- C_MOOD_PIXBUF,
- C_ACTIVITY_PIXBUF,
- C_TUNE_PIXBUF,
- C_LOCATION_PIXBUF,
- C_AVATAR_PIXBUF, # avatar_pixbuf
- C_PADLOCK_PIXBUF, # use for account row only
-) = range(11)
+class Column(IntEnum):
+ IMG = 0 # image to show state (online, new message etc)
+ NAME = 1 # cellrenderer text that holds contact nickame
+ TYPE = 2 # account, group or contact?
+ JID = 3 # the jid of the row
+ ACCOUNT = 4 # cellrenderer text that holds account name
+ MOOD_PIXBUF = 5
+ ACTIVITY_PIXBUF = 6
+ TUNE_PIXBUF = 7
+ LOCATION_PIXBUF = 8
+ AVATAR_PIXBUF = 9 # avatar_pixbuf
+ PADLOCK_PIXBUF = 10 # use for account row only
empty_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1)
empty_pixbuf.fill(0xffffff00)
@@ -434,7 +434,7 @@ class RosterWindow:
assert iters, '%s shall be removed but is not in roster' % contact.jid
parent_iter = self.model.iter_parent(iters[0])
- parent_type = self.model[parent_iter][C_TYPE]
+ parent_type = self.model[parent_iter][Column.TYPE]
if groups:
# Only remove from specified groups
@@ -451,12 +451,12 @@ class RosterWindow:
return False
# Remove us and empty groups from the model
for i in iters:
- assert self.model[i][C_JID] == contact.jid and \
- self.model[i][C_ACCOUNT] == account, \
+ assert self.model[i][Column.JID] == contact.jid and \
+ self.model[i][Column.ACCOUNT] == account, \
"Invalidated iters of %s" % contact.jid
parent_i = self.model.iter_parent(i)
- parent_type = self.model[parent_i][C_TYPE]
+ parent_type = self.model[parent_i][Column.TYPE]
to_be_removed = i
while parent_type == 'group' and \
@@ -465,13 +465,13 @@ class RosterWindow:
account_group = 'MERGED'
else:
account_group = account
- group = self.model[parent_i][C_JID]
+ group = self.model[parent_i][Column.JID]
if group in gajim.groups[account]:
del gajim.groups[account][group]
to_be_removed = parent_i
del self._iters[account_group]['groups'][group]
parent_i = self.model.iter_parent(parent_i)
- parent_type = self.model[parent_i][C_TYPE]
+ parent_type = self.model[parent_i][Column.TYPE]
self.model.remove(to_be_removed)
del self._iters[account]['contacts'][contact.jid]
@@ -555,7 +555,7 @@ class RosterWindow:
family_in_roster = True
parent_iter = self.model.iter_parent(iters[0])
- parent_type = self.model[parent_iter][C_TYPE]
+ parent_type = self.model[parent_iter][Column.TYPE]
if parent_type != 'contact':
# The contact on top
@@ -603,7 +603,7 @@ class RosterWindow:
big_brother_account, model=self.model)
if child_iters:
parent_iter = self.model.iter_parent(child_iters[0])
- parent_type = self.model[parent_iter][C_TYPE]
+ parent_type = self.model[parent_iter][Column.TYPE]
# Check if the current BigBrother has even been before.
if parent_type == 'contact':
@@ -629,7 +629,7 @@ class RosterWindow:
if not child_iters:
continue
parent_iter = self.model.iter_parent(child_iters[0])
- parent_type = self.model[parent_iter][C_TYPE]
+ parent_type = self.model[parent_iter][Column.TYPE]
if parent_type != 'contact':
_contact = gajim.contacts.get_contact(_account, _jid)
self._remove_entity(_contact, _account)
@@ -810,7 +810,7 @@ class RosterWindow:
self_iter = self._get_self_contact_iter(account, model=self.model)
if not self_iter:
return
- self.model[self_iter][C_JID] = new_jid
+ self.model[self_iter][Column.JID] = new_jid
self.draw_contact(new_jid, account)
def add_groupchat(self, jid, account, status=''):
@@ -1048,9 +1048,9 @@ class RosterWindow:
# the only way to create a pixbuf from stock
# tls_pixbuf = self.window.render_icon_pixbuf(
# Gtk.STOCK_DIALOG_AUTHENTICATION, Gtk.IconSize.MENU)
- self.model[child_iter][C_PADLOCK_PIXBUF] = tls_pixbuf
+ self.model[child_iter][Column.PADLOCK_PIXBUF] = tls_pixbuf
else:
- self.model[child_iter][C_PADLOCK_PIXBUF] = empty_pixbuf
+ self.model[child_iter][Column.PADLOCK_PIXBUF] = empty_pixbuf
if self.regroup:
account_name = _('Merged accounts')
@@ -1070,34 +1070,34 @@ class RosterWindow:
accounts = accounts)
account_name += ' (%s/%s)' % (repr(nbr_on), repr(nbr_total))
- self.model[child_iter][C_NAME] = account_name
+ self.model[child_iter][Column.NAME] = account_name
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] = \
+ self.model[child_iter][Column.MOOD_PIXBUF] = \
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['mood'])
else:
- self.model[child_iter][C_MOOD_PIXBUF] = empty_pixbuf
+ self.model[child_iter][Column.MOOD_PIXBUF] = empty_pixbuf
if gajim.config.get('show_activity_in_roster') and 'activity' in \
pep_dict:
- self.model[child_iter][C_ACTIVITY_PIXBUF] = \
+ self.model[child_iter][Column.ACTIVITY_PIXBUF] = \
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['activity'])
else:
- self.model[child_iter][C_ACTIVITY_PIXBUF] = empty_pixbuf
+ self.model[child_iter][Column.ACTIVITY_PIXBUF] = empty_pixbuf
if gajim.config.get('show_tunes_in_roster') and 'tune' in pep_dict:
- self.model[child_iter][C_TUNE_PIXBUF] = \
+ self.model[child_iter][Column.TUNE_PIXBUF] = \
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['tune'])
else:
- self.model[child_iter][C_TUNE_PIXBUF] = empty_pixbuf
+ self.model[child_iter][Column.TUNE_PIXBUF] = empty_pixbuf
if gajim.config.get('show_location_in_roster') and 'location' in \
pep_dict:
- self.model[child_iter][C_LOCATION_PIXBUF] = \
+ self.model[child_iter][Column.LOCATION_PIXBUF] = \
gtkgui_helpers.get_pep_as_pixbuf(pep_dict['location'])
else:
- self.model[child_iter][C_LOCATION_PIXBUF] = empty_pixbuf
+ self.model[child_iter][Column.LOCATION_PIXBUF] = empty_pixbuf
def _really_draw_accounts(self):
for acct in self.accounts_to_draw:
@@ -1130,7 +1130,7 @@ class RosterWindow:
accounts = accounts, groups = [group])
text += ' (%s/%s)' % (repr(nbr_on), repr(nbr_total))
- self.model[child_iter][C_NAME] = text
+ self.model[child_iter][Column.NAME] = text
def _really_draw_groups(self):
for ag in self.groups_to_draw.values():
@@ -1153,11 +1153,11 @@ class RosterWindow:
if not child_iters:
return False
parent_iter = self.model.iter_parent(child_iters[0])
- if self.model[parent_iter][C_TYPE] != 'contact':
+ if self.model[parent_iter][Column.TYPE] != 'contact':
# parent is not a contact
return
- parent_jid = self.model[parent_iter][C_JID]
- parent_account = self.model[parent_iter][C_ACCOUNT]
+ parent_jid = self.model[parent_iter][Column.JID]
+ parent_account = self.model[parent_iter][Column.ACCOUNT]
self.draw_contact(parent_jid, parent_account)
return False
@@ -1269,8 +1269,8 @@ class RosterWindow:
iterC = self.model.iter_children(child_iter)
while iterC:
# a child has awaiting messages?
- jidC = self.model[iterC][C_JID]
- accountC = self.model[iterC][C_ACCOUNT]
+ jidC = self.model[iterC][Column.JID]
+ accountC = self.model[iterC][Column.ACCOUNT]
if len(gajim.events.get_events(accountC, jidC)):
icon_name = 'event'
break
@@ -1288,8 +1288,8 @@ class RosterWindow:
# Expand/collapse icon might differ per iter
# (group)
img = state_images[icon_name]
- self.model[child_iter][C_IMG] = img
- self.model[child_iter][C_NAME] = name
+ self.model[child_iter][Column.IMG] = img
+ self.model[child_iter][Column.NAME] = name
else:
# A normal contact or little brother
state_images = self.get_appropriate_state_images(jid,
@@ -1298,8 +1298,8 @@ class RosterWindow:
# All iters have the same icon (no expand/collapse)
img = state_images[icon_name]
for child_iter in child_iters:
- self.model[child_iter][C_IMG] = img
- self.model[child_iter][C_NAME] = name
+ self.model[child_iter][Column.IMG] = img
+ self.model[child_iter][Column.NAME] = name
# We are a little brother
if family and not is_big_brother and not self.starting:
@@ -1316,7 +1316,7 @@ class RosterWindow:
iterG = self._get_group_iter(g, account, model=self.model)
if iterG:
# it's not self contact
- self.model[iterG][C_JID] = self.model[iterG][C_JID]
+ self.model[iterG][Column.JID] = self.model[iterG][Column.JID]
i += 1
gajim.plugin_manager.gui_extension_point('roster_draw_contact', self,
@@ -1363,14 +1363,14 @@ class RosterWindow:
iters = self._get_contact_iter(jid, account, model=self.model)
if not iters or not gajim.config.get('show_avatars_in_roster'):
return
- jid = self.model[iters[0]][C_JID]
+ jid = self.model[iters[0]][Column.JID]
pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(jid)
if pixbuf in (None, 'ask'):
scaled_pixbuf = empty_pixbuf
else:
scaled_pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'roster')
for child_iter in iters:
- self.model[child_iter][C_AVATAR_PIXBUF] = scaled_pixbuf
+ self.model[child_iter][Column.AVATAR_PIXBUF] = scaled_pixbuf
return False
def draw_completely(self, jid, account):
@@ -1513,9 +1513,9 @@ class RosterWindow:
def _readjust_expand_collapse_state(self):
def func(model, path, iter_, param):
- type_ = model[iter_][C_TYPE]
- acct = model[iter_][C_ACCOUNT]
- jid = model[iter_][C_JID]
+ type_ = model[iter_][Column.TYPE]
+ acct = model[iter_][Column.ACCOUNT]
+ jid = model[iter_][Column.JID]
key = None
if type_ == 'account':
key = acct
@@ -1523,9 +1523,9 @@ class RosterWindow:
key = acct + jid
elif type_ == 'contact':
parent_iter = model.iter_parent(iter_)
- ptype = model[parent_iter][C_TYPE]
+ ptype = model[parent_iter][Column.TYPE]
if ptype == 'group':
- grp = model[parent_iter][C_JID]
+ grp = model[parent_iter][Column.JID]
key = acct + grp + jid
if key:
if key in self.collapsed_rows:
@@ -1620,18 +1620,18 @@ class RosterWindow:
"""
if self.starting_filtering:
return False
- type_ = model[titer][C_TYPE]
+ type_ = model[titer][Column.TYPE]
if not type_:
return False
if type_ == 'account':
# Always show account
return True
- account = model[titer][C_ACCOUNT]
+ account = model[titer][Column.ACCOUNT]
if not account:
return False
- jid = model[titer][C_JID]
+ jid = model[titer][Column.JID]
if not jid:
return False
@@ -1662,7 +1662,7 @@ class RosterWindow:
return True
if self.regroup:
- # C_ACCOUNT for groups depends on the order
+ # Column.ACCOUNT for groups depends on the order
# accounts were connected
# Check all accounts for online group contacts
accounts = gajim.contacts.get_accounts()
@@ -1685,10 +1685,10 @@ class RosterWindow:
if model.iter_has_child(titer):
iter_c = model.iter_children(titer)
while iter_c:
- if self.rfilter_string in model[iter_c][C_NAME].lower():
+ if self.rfilter_string in model[iter_c][Column.NAME].lower():
return True
iter_c = model.iter_next(iter_c)
- return self.rfilter_string in model[titer][C_NAME].lower()
+ return self.rfilter_string in model[titer][Column.NAME].lower()
if gajim.config.get('showoffline'):
return True
bb_jid = None
@@ -1713,7 +1713,7 @@ class RosterWindow:
return self.contact_is_visible(contact, account)
if type_ == 'agent':
if self.rfilter_enabled:
- return self.rfilter_string in model[titer][C_NAME].lower()
+ return self.rfilter_string in model[titer][Column.NAME].lower()
contact = gajim.contacts.get_contact_with_highest_priority(account,
jid)
return self.contact_has_pending_roster_events(contact, account) or \
@@ -1721,30 +1721,30 @@ class RosterWindow:
(gajim.account_is_connected(account) or \
gajim.config.get('showoffline')))
if type_ == 'groupchat' and self.rfilter_enabled:
- return self.rfilter_string in model[titer][C_NAME].lower()
+ return self.rfilter_string in model[titer][Column.NAME].lower()
return True
def _compareIters(self, model, iter1, iter2, data=None):
"""
Compare two iters to sort them
"""
- name1 = model[iter1][C_NAME]
- name2 = model[iter2][C_NAME]
+ name1 = model[iter1][Column.NAME]
+ name2 = model[iter2][Column.NAME]
if not name1 or not name2:
return 0
name1 = name1
name2 = name2
- type1 = model[iter1][C_TYPE]
- type2 = model[iter2][C_TYPE]
+ type1 = model[iter1][Column.TYPE]
+ type2 = model[iter2][Column.TYPE]
if type1 == 'self_contact':
return -1
if type2 == 'self_contact':
return 1
if type1 == 'group':
- name1 = model[iter1][C_JID]
+ name1 = model[iter1][Column.JID]
if name1:
name1 = name1
- name2 = model[iter2][C_JID]
+ name2 = model[iter2][Column.JID]
if name2:
name2 = name2
if name1 == _('Transports'):
@@ -1759,16 +1759,16 @@ class RosterWindow:
return 1
if name2 == _('Groupchats'):
return -1
- account1 = model[iter1][C_ACCOUNT]
- account2 = model[iter2][C_ACCOUNT]
+ account1 = model[iter1][Column.ACCOUNT]
+ account2 = model[iter2][Column.ACCOUNT]
if not account1 or not account2:
return 0
account1 = account1
account2 = account2
if type1 == 'account':
return locale.strcoll(account1, account2)
- jid1 = model[iter1][C_JID]
- jid2 = model[iter2][C_JID]
+ jid1 = model[iter1][Column.JID]
+ jid2 = model[iter2][Column.JID]
if type1 == 'contact':
lcontact1 = gajim.contacts.get_contacts(account1, jid1)
contact1 = gajim.contacts.get_first_contact_from_jid(account1, jid1)
@@ -2287,7 +2287,7 @@ class RosterWindow:
else:
# No need to redraw contacts if we're quitting
if child_iterA:
- self.model[child_iterA][C_AVATAR_PIXBUF] = empty_pixbuf
+ self.model[child_iterA][Column.AVATAR_PIXBUF] = empty_pixbuf
if account in gajim.con_types:
gajim.con_types[account] = None
for jid in list(gajim.contacts.get_jid_list(account)):
@@ -3049,7 +3049,7 @@ class RosterWindow:
win.redraw_tab(ctrl)
win.show_title()
elif row_type == 'group':
- # in C_JID column, we hold the group name (which is not escaped)
+ # in Column.JID column, we hold the group name (which is not escaped)
self.rename_group(old_text, new_text, account)
def on_canceled():
@@ -3327,10 +3327,10 @@ class RosterWindow:
if len(list_of_paths) != 1:
return
path = list_of_paths[0]
- type_ = model[path][C_TYPE]
+ type_ = model[path][Column.TYPE]
if type_ in ('contact', 'group', 'agent'):
- jid = model[path][C_JID]
- account = model[path][C_ACCOUNT]
+ jid = model[path][Column.JID]
+ account = model[path][Column.ACCOUNT]
self.on_rename(widget, type_, jid, account)
elif event.keyval == Gdk.KEY_Delete:
@@ -3338,17 +3338,17 @@ class RosterWindow:
model, list_of_paths = treeselection.get_selected_rows()
if not len(list_of_paths):
return
- type_ = model[list_of_paths[0]][C_TYPE]
- account = model[list_of_paths[0]][C_ACCOUNT]
+ type_ = model[list_of_paths[0]][Column.TYPE]
+ account = model[list_of_paths[0]][Column.ACCOUNT]
if type_ in ('account', 'group', 'self_contact') or \
- account == gajim.ZEROCONF_ACC_NAME:
+ account == gajim.ZEROCONF_ACConstant.NAME:
return
list_ = []
for path in list_of_paths:
- if model[path][C_TYPE] != type_:
+ if model[path][Column.TYPE] != type_:
return
- jid = model[path][C_JID]
- account = model[path][C_ACCOUNT]
+ jid = model[path][Column.JID]
+ account = model[path][Column.ACCOUNT]
if not gajim.account_is_connected(account):
continue
contact = gajim.contacts.get_contact_with_highest_priority(
@@ -3462,11 +3462,11 @@ class RosterWindow:
if list_of_paths != [path]:
self.tree.get_selection().unselect_all()
self.tree.get_selection().select_path(path)
- type_ = model[path][C_TYPE]
+ type_ = model[path][Column.TYPE]
if type_ in ('agent', 'contact', 'self_contact', 'groupchat'):
self.on_row_activated(widget, path)
elif type_ == 'account':
- account = model[path][C_ACCOUNT]
+ account = model[path][Column.ACCOUNT]
if account != 'all':
show = gajim.connections[account].connected
if show > 1: # We are connected
@@ -3491,7 +3491,7 @@ class RosterWindow:
elif event.button == 1: # Left click
model = self.modelfilter
- type_ = model[path][C_TYPE]
+ type_ = model[path][Column.TYPE]
# x_min is the x start position of status icon column
if gajim.config.get('avatar_position_in_roster') == 'left':
x_min = gajim.config.get('roster_avatar_width')
@@ -3532,9 +3532,9 @@ class RosterWindow:
iter = self.modelfilter.get_iter(path)
child_iter = self.modelfilter.iter_children(iter)
while child_iter:
- type_ = self.modelfilter[child_iter][C_TYPE]
- account = self.modelfilter[child_iter][C_ACCOUNT]
- group = self.modelfilter[child_iter][C_JID]
+ type_ = self.modelfilter[child_iter][Column.TYPE]
+ account = self.modelfilter[child_iter][Column.ACCOUNT]
+ group = self.modelfilter[child_iter][Column.JID]
if type_ == 'group' and account + group not in self.collapsed_rows:
self.expand_group_row(self.modelfilter.get_path(child_iter))
child_iter = self.modelfilter.iter_next(child_iter)
@@ -3940,10 +3940,10 @@ class RosterWindow:
treeselection = self.tree.get_selection()
model, list_of_paths = treeselection.get_selected_rows()
for path in list_of_paths:
- type_ = model[path][C_TYPE]
+ type_ = model[path][Column.TYPE]
if type_ in ('contact', 'agent'):
- jid = model[path][C_JID]
- account = model[path][C_ACCOUNT]
+ jid = model[path][Column.JID]
+ account = model[path][Column.ACCOUNT]
contact = gajim.contacts.get_first_contact_from_jid(account,
jid)
self.on_info(widget, contact, account)
@@ -3954,10 +3954,10 @@ class RosterWindow:
if len(list_of_paths) != 1:
return
path = list_of_paths[0]
- type_ = model[path][C_TYPE]
+ type_ = model[path][Column.TYPE]
if type_ in ('contact', 'agent'):
- jid = model[path][C_JID]
- account = model[path][C_ACCOUNT]
+ jid = model[path][Column.JID]
+ account = model[path][Column.ACCOUNT]
contact = gajim.contacts.get_first_contact_from_jid(account,
jid)
self.on_history(widget, contact, account)
@@ -3972,8 +3972,8 @@ class RosterWindow:
this way)
"""
model = self.modelfilter
- account = model[path][C_ACCOUNT]
- type_ = model[path][C_TYPE]
+ account = model[path][Column.ACCOUNT]
+ type_ = model[path][Column.TYPE]
if type_ in ('group', 'account'):
if self.tree.row_expanded(path):
self.tree.collapse_row(path)
@@ -3982,7 +3982,7 @@ class RosterWindow:
return
if self.rfilter_enabled:
GObject.idle_add(self.disable_rfilter)
- jid = model[path][C_JID]
+ jid = model[path][Column.JID]
resource = None
contact = gajim.contacts.get_contact_with_highest_priority(account, jid)
titer = model.get_iter(path)
@@ -4009,7 +4009,7 @@ class RosterWindow:
if not first_ev and model.iter_has_child(titer):
child_iter = model.iter_children(titer)
while not first_ev and child_iter:
- child_jid = model[child_iter][C_JID]
+ child_jid = model[child_iter][Column.JID]
first_ev = gajim.events.get_first_event(account, child_jid)
if first_ev:
jid = child_jid
@@ -4054,12 +4054,12 @@ class RosterWindow:
if self.regroup: # merged accounts
accounts = list(gajim.connections.keys())
else:
- accounts = [model[titer][C_ACCOUNT]]
+ accounts = [model[titer][Column.ACCOUNT]]
- type_ = model[titer][C_TYPE]
+ type_ = model[titer][Column.TYPE]
if type_ == 'group':
- group = model[titer][C_JID]
- child_model[child_iter][C_IMG] = \
+ group = model[titer][Column.JID]
+ child_model[child_iter][Column.IMG] = \
gajim.interface.jabber_state_images['16']['opened']
if self.rfilter_enabled:
return
@@ -4091,8 +4091,8 @@ class RosterWindow:
self.tree.expand_row(path, False)
elif type_ == 'contact':
# Metacontact got toggled, update icon
- jid = model[titer][C_JID]
- account = model[titer][C_ACCOUNT]
+ jid = model[titer][Column.JID]
+ account = model[titer][Column.ACCOUNT]
contact = gajim.contacts.get_contact(account, jid)
for group in contact.groups:
if account + group + jid in self.collapsed_rows:
@@ -4118,15 +4118,15 @@ class RosterWindow:
if self.regroup: # merged accounts
accounts = list(gajim.connections.keys())
else:
- accounts = [model[titer][C_ACCOUNT]]
+ accounts = [model[titer][Column.ACCOUNT]]
- type_ = model[titer][C_TYPE]
+ type_ = model[titer][Column.TYPE]
if type_ == 'group':
- child_model[child_iter][C_IMG] = gajim.interface.\
+ child_model[child_iter][Column.IMG] = gajim.interface.\
jabber_state_images['16']['closed']
if self.rfilter_enabled:
return
- group = model[titer][C_JID]
+ group = model[titer][Column.JID]
for account in accounts:
if group in gajim.groups[account]: # This account has this group
gajim.groups[account][group]['expand'] = False
@@ -4139,8 +4139,8 @@ class RosterWindow:
self.draw_account(account)
elif type_ == 'contact':
# Metacontact got toggled, update icon
- jid = model[titer][C_JID]
- account = model[titer][C_ACCOUNT]
+ jid = model[titer][Column.JID]
+ account = model[titer][Column.ACCOUNT]
contact = gajim.contacts.get_contact(account, jid)
groups = contact.groups
if not groups:
@@ -4167,8 +4167,8 @@ class RosterWindow:
# Signal is emitted when we write to our model
return
- type_ = model[titer][C_TYPE]
- account = model[titer][C_ACCOUNT]
+ type_ = model[titer][Column.TYPE]
+ account = model[titer][Column.ACCOUNT]
if not account:
return
@@ -4179,10 +4179,10 @@ class RosterWindow:
# redraw us to show/hide expand icon
if self.filtering:
# Prevent endless loops
- jid = model[titer][C_JID]
+ jid = model[titer][Column.JID]
GLib.idle_add(self.draw_contact, jid, account)
elif type_ == 'group':
- group = model[titer][C_JID]
+ group = model[titer][Column.JID]
GLib.idle_add(self._adjust_group_expand_collapse_state, group, account)
elif type_ == 'account':
GLib.idle_add(self._adjust_account_expand_collapse_state, account)
@@ -4209,11 +4209,11 @@ class RosterWindow:
# return
# for path in list_of_paths:
# row = model[path]
-# if row[C_TYPE] != 'contact':
+# if row[Column.TYPE] != 'contact':
# self._last_selected_contact = []
# return
-# jid = row[C_JID]
-# account = row[C_ACCOUNT]
+# jid = row[Column.JID]
+# account = row[Column.ACCOUNT]
# self._last_selected_contact.append((jid, account))
# GLib.idle_add(self.draw_contact, jid, account, True)
@@ -4283,8 +4283,8 @@ class RosterWindow:
# select first row
self.tree.get_selection().unselect_all()
def _func(model, path, iter_, param):
- if model[iter_][C_TYPE] == 'contact' and self.rfilter_string in \
- model[iter_][C_NAME].lower():
+ if model[iter_][Column.TYPE] == 'contact' and self.rfilter_string in \
+ model[iter_][Column.NAME].lower():
col = self.tree.get_column(0)
self.tree.set_cursor_on_cell(path, col, None, False)
return True
@@ -4361,7 +4361,7 @@ class RosterWindow:
path = list_of_paths[0]
data = ''
if path.get_depth() >= 2:
- data = model[path][C_JID]
+ data = model[path][Column.JID]
selection.set_text(data, -1)
def drag_begin(self, treeview, context):
@@ -4570,9 +4570,9 @@ class RosterWindow:
path_dest = (path_dest[0], path_dest[1]-1)
# destination: the row something got dropped on
iter_dest = model.get_iter(path_dest)
- type_dest = model[iter_dest][C_TYPE]
- jid_dest = model[iter_dest][C_JID]
- account_dest = model[iter_dest][C_ACCOUNT]
+ type_dest = model[iter_dest][Column.TYPE]
+ jid_dest = model[iter_dest][Column.JID]
+ account_dest = model[iter_dest][Column.ACCOUNT]
# drop on account row in merged mode, we cannot know the desired account
if account_dest == 'all':
@@ -4635,8 +4635,8 @@ class RosterWindow:
# source: the row that was dragged
path_source = treeview.get_selection().get_selected_rows()[1][0]
iter_source = model.get_iter(path_source)
- type_source = model[iter_source][C_TYPE]
- account_source = model[iter_source][C_ACCOUNT]
+ type_source = model[iter_source][Column.TYPE]
+ account_source = model[iter_source][Column.ACCOUNT]
if gajim.config.get_per('accounts', account_source, 'is_zeroconf'):
return
@@ -4654,18 +4654,18 @@ class RosterWindow:
if account_source != account_dest:
# drop on another account
return
- grp_source = model[iter_source][C_JID]
+ grp_source = model[iter_source][Column.JID]
delimiter = gajim.connections[account_source].nested_group_delimiter
grp_source_list = grp_source.split(delimiter)
new_grp = None
if type_dest == 'account':
new_grp = grp_source_list[-1]
elif type_dest == 'group':
- grp_dest = model[iter_dest][C_JID]
+ grp_dest = model[iter_dest][Column.JID]
grp_dest_list = grp_dest.split(delimiter)
# Do not allow to drop on a subgroup of source group
if grp_source_list[0] != grp_dest_list[0]:
- new_grp = model[iter_dest][C_JID] + delimiter + \
+ new_grp = model[iter_dest][Column.JID] + delimiter + \
grp_source_list[-1]
if new_grp:
self.move_group(grp_source, new_grp, account_source)
@@ -4685,9 +4685,9 @@ class RosterWindow:
# Get valid source group, jid and contact
it = iter_source
- while model[it][C_TYPE] == 'contact':
+ while model[it][Column.TYPE] == 'contact':
it = model.iter_parent(it)
- grp_source = model[it][C_JID]
+ grp_source = model[it][Column.JID]
if grp_source in helpers.special_groups and \
grp_source not in ('Not in Roster', 'Observers'):
# a transport or a minimized groupchat was dragged
@@ -4701,12 +4701,12 @@ class RosterWindow:
# Get destination group
grp_dest = None
if type_dest == 'group':
- grp_dest = model[iter_dest][C_JID]
+ grp_dest = model[iter_dest][Column.JID]
elif type_dest in ('contact', 'agent'):
it = iter_dest
- while model[it][C_TYPE] != 'group':
+ while model[it][Column.TYPE] != 'group':
it = model.iter_parent(it)
- grp_dest = model[it][C_JID]
+ grp_dest = model[it][Column.JID]
if grp_dest in helpers.special_groups:
return
@@ -4865,7 +4865,7 @@ class RosterWindow:
show = gajim.SHOW_LIST[status]
else: # accounts merged
show = helpers.get_global_show()
- self.model[child_iterA][C_IMG] = gajim.interface.jabber_state_images[
+ self.model[child_iterA][Column.IMG] = gajim.interface.jabber_state_images[
'16'][show]
################################################################################
@@ -4906,9 +4906,9 @@ class RosterWindow:
gtkgui_helpers.set_unset_urgency_hint(self.window, nb_unread)
def _change_style(self, model, path, titer, option):
- if option is None or model[titer][C_TYPE] == option:
+ if option is None or model[titer][Column.TYPE] == option:
# We changed style for this type of row
- model[titer][C_NAME] = model[titer][C_NAME]
+ model[titer][Column.NAME] = model[titer][Column.NAME]
def change_roster_style(self, option):
self.model.foreach(self._change_style, option)
@@ -4954,7 +4954,7 @@ class RosterWindow:
When a row is added, set properties for icon renderer
"""
try:
- type_ = model[titer][C_TYPE]
+ type_ = model[titer][Column.TYPE]
except TypeError:
return
if type_ == 'account':
@@ -4963,20 +4963,20 @@ class RosterWindow:
elif type_ == 'group':
self._set_group_row_background_color(renderer)
parent_iter = model.iter_parent(titer)
- if model[parent_iter][C_TYPE] == 'group':
+ if model[parent_iter][Column.TYPE] == 'group':
renderer.set_property('xalign', 0.4)
else:
renderer.set_property('xalign', 0.2)
elif type_:
# prevent type_ = None, see http://trac.gajim.org/ticket/2534
- if not model[titer][C_JID] or not model[titer][C_ACCOUNT]:
+ if not model[titer][Column.JID] or not model[titer][Column.ACCOUNT]:
# This can append when at the moment we add the row
return
- jid = model[titer][C_JID]
- account = model[titer][C_ACCOUNT]
+ jid = model[titer][Column.JID]
+ account = model[titer][Column.ACCOUNT]
self._set_contact_row_background_color(renderer, jid, account)
parent_iter = model.iter_parent(titer)
- if model[parent_iter][C_TYPE] == 'contact':
+ if model[parent_iter][Column.TYPE] == 'contact':
renderer.set_property('xalign', 1)
else:
renderer.set_property('xalign', 0.6)
@@ -4987,7 +4987,7 @@ class RosterWindow:
When a row is added, set properties for name renderer
"""
try:
- type_ = model[titer][C_TYPE]
+ type_ = model[titer][Column.TYPE]
except TypeError:
return
theme = gajim.config.get('roster_theme')
@@ -5011,18 +5011,18 @@ class RosterWindow:
renderer.set_property('font',
gtkgui_helpers.get_theme_font_for_option(theme, 'groupfont'))
parent_iter = model.iter_parent(titer)
- if model[parent_iter][C_TYPE] == 'group':
+ if model[parent_iter][Column.TYPE] == 'group':
renderer.set_property('xpad', 8)
else:
renderer.set_property('xpad', 4)
self._set_group_row_background_color(renderer)
elif type_:
# prevent type_ = None, see http://trac.gajim.org/ticket/2534
- if not model[titer][C_JID] or not model[titer][C_ACCOUNT]:
+ if not model[titer][Column.JID] or not model[titer][Column.ACCOUNT]:
# This can append when at the moment we add the row
return
- jid = model[titer][C_JID]
- account = model[titer][C_ACCOUNT]
+ jid = model[titer][Column.JID]
+ account = model[titer][Column.ACCOUNT]
color = None
if type_ == 'groupchat':
ctrl = gajim.interface.minimized_controls[account].get(jid,
@@ -5042,7 +5042,7 @@ class RosterWindow:
renderer.set_property('font',
gtkgui_helpers.get_theme_font_for_option(theme, 'contactfont'))
parent_iter = model.iter_parent(titer)
- if model[parent_iter][C_TYPE] == 'contact':
+ if model[parent_iter][Column.TYPE] == 'contact':
renderer.set_property('xpad', 16)
else:
renderer.set_property('xpad', 12)
@@ -5053,7 +5053,7 @@ class RosterWindow:
When a row is added, draw the respective pep icon
"""
try:
- type_ = model[titer][C_TYPE]
+ type_ = model[titer][Column.TYPE]
except TypeError:
return
@@ -5067,11 +5067,11 @@ class RosterWindow:
self._set_account_row_background_color(renderer)
renderer.set_property('xalign', 1)
elif type_:
- if not model[titer][C_JID] or not model[titer][C_ACCOUNT]:
+ if not model[titer][Column.JID] or not model[titer][Column.ACCOUNT]:
# This can append at the moment we add the row
return
- jid = model[titer][C_JID]
- account = model[titer][C_ACCOUNT]
+ jid = model[titer][Column.JID]
+ account = model[titer][Column.ACCOUNT]
self._set_contact_row_background_color(renderer, jid, account)
def _fill_avatar_pixbuf_renderer(self, column, renderer, model, titer,
@@ -5080,7 +5080,7 @@ class RosterWindow:
When a row is added, set properties for avatar renderer
"""
try:
- type_ = model[titer][C_TYPE]
+ type_ = model[titer][Column.TYPE]
except TypeError:
return
@@ -5089,20 +5089,20 @@ class RosterWindow:
return
# allocate space for the icon only if needed
- if model[titer][C_AVATAR_PIXBUF] or \
+ if model[titer][Column.AVATAR_PIXBUF] or \
gajim.config.get('avatar_position_in_roster') == 'left':
renderer.set_property('visible', True)
if type_:
# prevent type_ = None, see http://trac.gajim.org/ticket/2534
- if not model[titer][C_JID] or not model[titer][C_ACCOUNT]:
+ if not model[titer][Column.JID] or not model[titer][Column.ACCOUNT]:
# This can append at the moment we add the row
return
- jid = model[titer][C_JID]
- account = model[titer][C_ACCOUNT]
+ jid = model[titer][Column.JID]
+ account = model[titer][Column.ACCOUNT]
self._set_contact_row_background_color(renderer, jid, account)
else:
renderer.set_property('visible', False)
- if model[titer][C_AVATAR_PIXBUF] == empty_pixbuf and \
+ if model[titer][Column.AVATAR_PIXBUF] == empty_pixbuf and \
gajim.config.get('avatar_position_in_roster') != 'left':
renderer.set_property('visible', False)
@@ -5119,12 +5119,12 @@ class RosterWindow:
When a row is added, set properties for padlock renderer
"""
try:
- type_ = model[titer][C_TYPE]
+ type_ = model[titer][Column.TYPE]
except TypeError:
return
# allocate space for the icon only if needed
- if type_ == 'account' and model[titer][C_PADLOCK_PIXBUF]:
+ if type_ == 'account' and model[titer][Column.PADLOCK_PIXBUF]:
renderer.set_property('visible', True)
self._set_account_row_background_color(renderer)
renderer.set_property('xalign', 1) # align pixbuf to the right
@@ -5596,7 +5596,7 @@ class RosterWindow:
Make account's popup menu
"""
model = self.modelfilter
- account = model[titer][C_ACCOUNT]
+ account = model[titer][Column.ACCOUNT]
if account != 'all': # not in merged mode
menu = self.build_account_menu(account)
@@ -5627,14 +5627,14 @@ class RosterWindow:
"""
model = self.modelfilter
path = model.get_path(titer)
- group = model[titer][C_JID]
- account = model[titer][C_ACCOUNT]
+ group = model[titer][Column.JID]
+ account = model[titer][Column.ACCOUNT]
list_ = [] # list of (contact, account) tuples
list_online = [] # list of (contact, account) tuples
show_bookmarked = True
- group = model[titer][C_JID]
+ group = model[titer][Column.JID]
for jid in gajim.contacts.get_jid_list(account):
contact = gajim.contacts.get_contact_with_highest_priority(account,
jid)
@@ -5773,8 +5773,8 @@ class RosterWindow:
Make contact's popup menu
"""
model = self.modelfilter
- jid = model[titer][C_JID]
- account = model[titer][C_ACCOUNT]
+ jid = model[titer][Column.JID]
+ account = model[titer][Column.ACCOUNT]
contact = gajim.contacts.get_contact_with_highest_priority(account, jid)
menu = gui_menu_builder.get_contact_menu(contact, account)
event_button = gtkgui_helpers.get_possible_button_event(event)
@@ -5791,8 +5791,8 @@ class RosterWindow:
is_blocked = True
privacy_rules_supported = True
for titer in iters:
- jid = model[titer][C_JID]
- account = model[titer][C_ACCOUNT]
+ jid = model[titer][Column.JID]
+ account = model[titer][Column.ACCOUNT]
if gajim.connections[account].connected < 2:
one_account_offline = True
if not gajim.connections[account].privacy_rules_supported:
@@ -5881,9 +5881,9 @@ class RosterWindow:
Make transport's popup menu
"""
model = self.modelfilter
- jid = model[titer][C_JID]
+ jid = model[titer][Column.JID]
path = model.get_path(titer)
- account = model[titer][C_ACCOUNT]
+ account = model[titer][Column.ACCOUNT]
contact = gajim.contacts.get_contact_with_highest_priority(account, jid)
menu = gui_menu_builder.get_transport_menu(contact, account)
event_button = gtkgui_helpers.get_possible_button_event(event)
@@ -5893,8 +5893,8 @@ class RosterWindow:
def make_groupchat_menu(self, event, titer):
model = self.modelfilter
- jid = model[titer][C_JID]
- account = model[titer][C_ACCOUNT]
+ jid = model[titer][Column.JID]
+ account = model[titer][Column.ACCOUNT]
contact = gajim.contacts.get_contact_with_highest_priority(account, jid)
menu = Gtk.Menu()
@@ -6063,9 +6063,9 @@ class RosterWindow:
def show_appropriate_context_menu(self, event, iters):
# iters must be all of the same type
model = self.modelfilter
- type_ = model[iters[0]][C_TYPE]
+ type_ = model[iters[0]][Column.TYPE]
for titer in iters[1:]:
- if model[titer][C_TYPE] != type_:
+ if model[titer][Column.TYPE] != type_:
return
if type_ == 'group' and len(iters) == 1:
self.make_group_menu(event, iters[0])
@@ -6137,9 +6137,9 @@ class RosterWindow:
except Exception:
return False
- typ = model[iter_][C_TYPE]
- account = model[iter_][C_ACCOUNT]
- jid = model[iter_][C_JID]
+ typ = model[iter_][Column.TYPE]
+ account = model[iter_][Column.ACCOUNT]
+ jid = model[iter_][Column.JID]
connected_contacts = []
if typ in ('contact', 'self_contact'):
@@ -6340,9 +6340,9 @@ class RosterWindow:
# cell_data_func, func_arg)
self.renderers_list = []
self.renderers_propertys ={}
- self._pep_type_to_model_column = {'mood': C_MOOD_PIXBUF,
- 'activity': C_ACTIVITY_PIXBUF, 'tune': C_TUNE_PIXBUF,
- 'location': C_LOCATION_PIXBUF}
+ self._pep_type_to_model_column = {'mood': Column.MOOD_PIXBUF,
+ 'activity': Column.ACTIVITY_PIXBUF, 'tune': Column.TUNE_PIXBUF,
+ 'location': Column.LOCATION_PIXBUF}
renderer_text = Gtk.CellRendererText()
self.renderers_propertys[renderer_text] = ('ellipsize',
@@ -6350,7 +6350,7 @@ class RosterWindow:
def add_avatar_renderer():
self.renderers_list.append(('avatar', Gtk.CellRendererPixbuf(),
- False, 'pixbuf', C_AVATAR_PIXBUF,
+ False, 'pixbuf', Column.AVATAR_PIXBUF,
self._fill_avatar_pixbuf_renderer, None))
if gajim.config.get('avatar_position_in_roster') == 'left':
@@ -6358,32 +6358,32 @@ class RosterWindow:
self.renderers_list += (
('icon', cell_renderer_image.CellRendererImage(0, 0), False,
- 'image', C_IMG, self._iconCellDataFunc, None),
+ 'image', Column.IMG, self._iconCellDataFunc, None),
('name', renderer_text, True,
- 'markup', C_NAME, self._nameCellDataFunc, None),
+ 'markup', Column.NAME, self._nameCellDataFunc, None),
('mood', Gtk.CellRendererPixbuf(), False,
- 'pixbuf', C_MOOD_PIXBUF,
- self._fill_pep_pixbuf_renderer, C_MOOD_PIXBUF),
+ 'pixbuf', Column.MOOD_PIXBUF,
+ self._fill_pep_pixbuf_renderer, Column.MOOD_PIXBUF),
('activity', Gtk.CellRendererPixbuf(), False,
- 'pixbuf', C_ACTIVITY_PIXBUF,
- self._fill_pep_pixbuf_renderer, C_ACTIVITY_PIXBUF),
+ 'pixbuf', Column.ACTIVITY_PIXBUF,
+ self._fill_pep_pixbuf_renderer, Column.ACTIVITY_PIXBUF),
('tune', Gtk.CellRendererPixbuf(), False,
- 'pixbuf', C_TUNE_PIXBUF,
- self._fill_pep_pixbuf_renderer, C_TUNE_PIXBUF),
+ 'pixbuf', Column.TUNE_PIXBUF,
+ self._fill_pep_pixbuf_renderer, Column.TUNE_PIXBUF),
('location', Gtk.CellRendererPixbuf(), False,
- 'pixbuf', C_LOCATION_PIXBUF,
- self._fill_pep_pixbuf_renderer, C_LOCATION_PIXBUF))
+ 'pixbuf', Column.LOCATION_PIXBUF,
+ self._fill_pep_pixbuf_renderer, Column.LOCATION_PIXBUF))
if gajim.config.get('avatar_position_in_roster') == 'right':
add_avatar_renderer()
self.renderers_list.append(('padlock', Gtk.CellRendererPixbuf(), False,
- 'pixbuf', C_PADLOCK_PIXBUF,
+ 'pixbuf', Column.PADLOCK_PIXBUF,
self._fill_padlock_pixbuf_renderer, None))
# fill and append column