diff --git a/gajim/chat_control.py b/gajim/chat_control.py
index 209349bf4..3dcae5d71 100644
--- a/gajim/chat_control.py
+++ b/gajim/chat_control.py
@@ -47,6 +47,7 @@ from gajim.common.contacts import GC_Contact
from gajim.common.const import AvatarSize
from gajim.common.const import KindConstant
from gajim.common.const import Chatstate
+from gajim.common.const import PEPEventType
from gajim import gtkgui_helpers
from gajim import gui_menu_builder
@@ -57,6 +58,8 @@ from gajim.gtk.dialogs import ConfirmationDialog
from gajim.gtk.add_contact import AddNewContactWindow
from gajim.gtk.util import get_icon_name
from gajim.gtk.util import get_cursor
+from gajim.gtk.util import ensure_proper_control
+from gajim.gtk.util import format_mood
from gajim.command_system.implementation.hosts import ChatCommands
from gajim.command_system.framework import CommandHost # pylint: disable=unused-import
@@ -128,7 +131,6 @@ class ChatControl(ChatControlBase):
self.update_toolbar()
self._pep_images = {}
- self._pep_images['mood'] = self.xml.get_object('mood_image')
self._pep_images['activity'] = self.xml.get_object('activity_image')
self._pep_images['tune'] = self.xml.get_object('tune_image')
self._pep_images['geoloc'] = self.xml.get_object('location_image')
@@ -227,6 +229,10 @@ class ChatControl(ChatControlBase):
app.ged.register_event_handler('pep-received', ged.GUI1,
self._nec_pep_received)
+ app.ged.register_event_handler('nickname-received', ged.GUI1,
+ self._on_nickname_received)
+ app.ged.register_event_handler('mood-received', ged.GUI1,
+ self._on_mood_received)
if self.TYPE_ID == message_control.TYPE_CHAT:
# Dont connect this when PrivateChatControl is used
app.ged.register_event_handler('update-roster-avatar', ged.GUI1,
@@ -409,6 +415,7 @@ class ChatControl(ChatControlBase):
def update_all_pep_types(self):
for pep_type in self._pep_images:
self.update_pep(pep_type)
+ self._update_pep(PEPEventType.MOOD)
def update_pep(self, pep_type):
if isinstance(self.contact, GC_Contact):
@@ -434,12 +441,36 @@ class ChatControl(ChatControlBase):
if obj.jid != self.contact.jid:
return
- if obj.pep_type == 'nick':
- self.update_ui()
- self.parent_win.redraw_tab(self)
- self.parent_win.show_title()
- else:
- self.update_pep(obj.pep_type)
+ self.update_pep(obj.pep_type)
+
+ def _update_pep(self, type_):
+ image = self._get_pep_widget(type_)
+ data = self.contact.pep.get(type_)
+ if data is None:
+ image.hide()
+ return
+
+ if type_ == PEPEventType.MOOD:
+ icon = 'mood-%s' % data.mood
+ formated_text = format_mood(*data)
+
+ image.set_from_icon_name(icon, Gtk.IconSize.MENU)
+ image.set_tooltip_markup(formated_text)
+ image.show()
+
+ def _get_pep_widget(self, type_):
+ if type_ == PEPEventType.MOOD:
+ return self.xml.get_object('mood_image')
+
+ @ensure_proper_control
+ def _on_mood_received(self, _event):
+ self._update_pep(PEPEventType.MOOD)
+
+ @ensure_proper_control
+ def _on_nickname_received(self, _event):
+ self.update_ui()
+ self.parent_win.redraw_tab(self)
+ self.parent_win.show_title()
def _update_jingle(self, jingle_type):
if jingle_type not in ('audio', 'video'):
@@ -1051,6 +1082,10 @@ class ChatControl(ChatControlBase):
app.ged.remove_event_handler('pep-received', ged.GUI1,
self._nec_pep_received)
+ app.ged.remove_event_handler('nickname-received', ged.GUI1,
+ self._on_nickname_received)
+ app.ged.remove_event_handler('mood-received', ged.GUI1,
+ self._on_mood_received)
if self.TYPE_ID == message_control.TYPE_CHAT:
app.ged.remove_event_handler('update-roster-avatar', ged.GUI1,
self._nec_update_avatar)
diff --git a/gajim/common/configpaths.py b/gajim/common/configpaths.py
index e5f4028fe..908a13c38 100644
--- a/gajim/common/configpaths.py
+++ b/gajim/common/configpaths.py
@@ -221,8 +221,6 @@ class ConfigPaths:
'emoticons', PathLocation.DATA, PathType.FOLDER_OPTIONAL),
('MY_ICONSETS',
'iconsets', PathLocation.DATA, PathType.FOLDER_OPTIONAL),
- ('MY_MOOD_ICONSETS',
- 'moods', PathLocation.DATA, PathType.FOLDER_OPTIONAL),
('MY_ACTIVITY_ICONSETS',
'activities', PathLocation.DATA, PathType.FOLDER_OPTIONAL),
diff --git a/gajim/common/connection.py b/gajim/common/connection.py
index 374d11e27..50a44e8f6 100644
--- a/gajim/common/connection.py
+++ b/gajim/common/connection.py
@@ -1631,6 +1631,7 @@ class Connection(CommonConnection, ConnectionHandlers):
# Inform GUI we just signed in
app.nec.push_incoming_event(NetworkEvent('signed-in', conn=self))
+ modules.send_stored_publish(self.name)
self.get_module('PEP').send_stored_publish()
self.continue_connect_info = None
diff --git a/gajim/common/helpers.py b/gajim/common/helpers.py
index c11a56c94..2ef42e57e 100644
--- a/gajim/common/helpers.py
+++ b/gajim/common/helpers.py
@@ -1098,13 +1098,6 @@ def get_current_show(account):
status = app.connections[account].connected
return app.SHOW_LIST[status]
-def get_mood_iconset_path(iconset):
- if os.path.isdir(os.path.join(configpaths.get('DATA'), 'moods', iconset)):
- return os.path.join(configpaths.get('DATA'), 'moods', iconset)
- if os.path.isdir(
- os.path.join(configpaths.get('MY_MOOD_ICONSETS'), iconset)):
- return os.path.join(configpaths.get('MY_MOOD_ICONSETS'), iconset)
-
def get_activity_iconset_path(iconset):
if os.path.isdir(os.path.join(configpaths.get('DATA'), 'activities', iconset)):
return os.path.join(configpaths.get('DATA'), 'activities', iconset)
diff --git a/gajim/common/modules/__init__.py b/gajim/common/modules/__init__.py
index 77403cb9d..280c0e65f 100644
--- a/gajim/common/modules/__init__.py
+++ b/gajim/common/modules/__init__.py
@@ -34,6 +34,8 @@ ZEROCONF_MODULES = ['iq',
_imported_modules = [] # type: List[tuple]
_modules = {} # type: Dict[str, Dict[str, Any]]
+_store_publish_modules = [
+ 'UserMood'] # type: List[str]
for file in Path(__file__).parent.iterdir():
if file.stem == '__init__':
@@ -112,6 +114,11 @@ def unregister_single(con: ConnectionT, name: str) -> None:
del _modules[con.name][name]
+def send_stored_publish(account: str) -> None:
+ for name in _store_publish_modules:
+ _modules[account][name].send_stored_publish()
+
+
def get(account: str, name: str) -> Any:
try:
return _modules[account][name]
diff --git a/gajim/common/modules/base.py b/gajim/common/modules/base.py
index 5c3746c86..6607ea5ff 100644
--- a/gajim/common/modules/base.py
+++ b/gajim/common/modules/base.py
@@ -20,6 +20,9 @@ import logging
from functools import partial
from unittest.mock import Mock
+import nbxmpp
+from nbxmpp.structs import StanzaHandler
+
from gajim.common import app
log = logging.getLogger('gajim.c.m.base')
@@ -34,6 +37,7 @@ class BaseModule:
self._con = con
self._account = con.name
self._nbxmpp_callbacks = {} # type: Dict[str, Any]
+ self._stored_publish = None # type: Callable
self.handlers = [] # type: List[str]
def __getattr__(self, key):
@@ -46,8 +50,10 @@ class BaseModule:
module = self._con.connection.get_module(self._nbxmpp_extends)
- return partial(getattr(module, key),
- callback=self._nbxmpp_callbacks.get(key))
+ callback = self._nbxmpp_callbacks.get(key)
+ if callback is None:
+ return getattr(module, key)
+ return partial(getattr(module, key), callback=callback)
def _nbxmpp(self, module_name=None):
if not app.account_is_connected(self._account):
@@ -61,3 +67,16 @@ class BaseModule:
def _register_callback(self, method, callback):
self._nbxmpp_callbacks[method] = callback
+
+ def _register_pubsub_handler(self, callback):
+ handler = StanzaHandler(name='message',
+ callback=callback,
+ ns=nbxmpp.NS_PUBSUB_EVENT,
+ priority=49)
+ self.handlers.append(handler)
+
+ def send_stored_publish(self):
+ if self._stored_publish is None:
+ return
+ log.info('Send stored publish')
+ self._stored_publish()
diff --git a/gajim/common/modules/message.py b/gajim/common/modules/message.py
index f7434ccac..0cbe990aa 100644
--- a/gajim/common/modules/message.py
+++ b/gajim/common/modules/message.py
@@ -55,12 +55,11 @@ class Message:
]
# XEPs for which this message module should not be executed
- self._message_namespaces = set([nbxmpp.NS_PUBSUB_EVENT,
- nbxmpp.NS_ROSTERX,
+ self._message_namespaces = set([nbxmpp.NS_ROSTERX,
nbxmpp.NS_IBB])
def _message_received(self, _con, stanza, properties):
- if properties.is_mam_message:
+ if properties.is_mam_message or properties.is_pubsub_event:
return
# Check if a child of the message contains any
# namespaces that we handle in other modules.
diff --git a/gajim/common/modules/user_mood.py b/gajim/common/modules/user_mood.py
index 8da3814dd..cc145ebc7 100644
--- a/gajim/common/modules/user_mood.py
+++ b/gajim/common/modules/user_mood.py
@@ -6,94 +6,69 @@
#
# Gajim is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with Gajim. If not, see .
+# along with Gajim. If not, see .
# XEP-0107: User Mood
from typing import Any
-from typing import Dict
-from typing import List # pylint: disable=unused-import
-from typing import Optional
from typing import Tuple
import logging
import nbxmpp
-from gi.repository import GLib
-from gajim.common.const import PEPEventType, MOODS
-from gajim.common.exceptions import StanzaMalformed
-from gajim.common.modules.pep import AbstractPEPModule, AbstractPEPData
+from gajim.common import app
+from gajim.common.nec import NetworkEvent
+from gajim.common.modules.base import BaseModule
+from gajim.common.modules.util import event_node
+from gajim.common.modules.util import store_publish
+from gajim.common.const import PEPEventType
log = logging.getLogger('gajim.c.m.user_mood')
-class UserMoodData(AbstractPEPData):
+class UserMood(BaseModule):
- type_ = PEPEventType.MOOD
+ _nbxmpp_extends = 'Mood'
+ _nbxmpp_methods = [
+ 'set_mood',
+ ]
- def as_markup_text(self) -> str:
- if self.data is None:
- return ''
- mood = self._translate_mood(self.data['mood'])
- markuptext = '%s' % GLib.markup_escape_text(mood)
- if 'text' in self.data:
- text = self.data['text']
- markuptext += ' (%s)' % GLib.markup_escape_text(text)
- return markuptext
+ def __init__(self, con):
+ BaseModule.__init__(self, con)
+ self._register_pubsub_handler(self._mood_received)
- @staticmethod
- def _translate_mood(mood: str) -> str:
- if mood in MOODS:
- return MOODS[mood]
- return mood
-
-
-class UserMood(AbstractPEPModule):
-
- name = 'mood'
- namespace = nbxmpp.NS_MOOD
- pep_class = UserMoodData
- store_publish = True
- _log = log
-
- def _extract_info(self, item: nbxmpp.Node) -> Optional[Dict[str, str]]:
- mood_dict = {}
- mood_tag = item.getTag('mood', namespace=nbxmpp.NS_MOOD)
- if mood_tag is None:
- raise StanzaMalformed('No mood node')
-
- if not mood_tag.getChildren():
- return None
-
- for child in mood_tag.getChildren():
- name = child.getName().strip()
- if name == 'text':
- mood_dict['text'] = child.getData()
+ @event_node(nbxmpp.NS_MOOD)
+ def _mood_received(self, _con, _stanza, properties):
+ data = properties.pubsub_event.data
+ for contact in app.contacts.get_contacts(self._account,
+ str(properties.jid)):
+ if data.mood is not None:
+ contact.pep[PEPEventType.MOOD] = data
else:
- mood_dict['mood'] = name
+ contact.pep.pop(PEPEventType.MOOD, None)
- if 'mood' not in mood_dict:
- raise StanzaMalformed('No mood value found')
- return mood_dict
+ if properties.is_self_message:
+ if data.mood is not None:
+ self._con.pep[PEPEventType.MOOD] = data
+ else:
+ self._con.pep.pop(PEPEventType.MOOD, None)
- def _build_node(self, data: Optional[Tuple[str, str]]) -> nbxmpp.Node:
- item = nbxmpp.Node('mood', {'xmlns': nbxmpp.NS_MOOD})
- if data is None:
- return item
+ app.nec.push_incoming_event(
+ NetworkEvent('mood-received',
+ account=self._account,
+ jid=properties.jid.getBare(),
+ mood=data,
+ is_self_message=properties.is_self_message))
- mood, text = data
- if not mood:
- return item
- item.addChild(mood)
-
- if text:
- item.addChild('text', payload=text)
- return item
+ @store_publish
+ def set_mood(self, mood):
+ log.info('Send %s', mood)
+ self._nbxmpp('Mood').set_mood(mood)
def get_instance(*args: Any, **kwargs: Any) -> Tuple[UserMood, str]:
diff --git a/gajim/common/modules/user_nickname.py b/gajim/common/modules/user_nickname.py
index 5c9be16cc..e25c41ee5 100644
--- a/gajim/common/modules/user_nickname.py
+++ b/gajim/common/modules/user_nickname.py
@@ -6,17 +6,15 @@
#
# Gajim is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with Gajim. If not, see .
+# along with Gajim. If not, see .
# XEP-0172: User Nickname
from typing import Any
-from typing import List # pylint: disable=unused-import
-from typing import Optional
from typing import Tuple
import logging
@@ -24,56 +22,41 @@ import logging
import nbxmpp
from gajim.common import app
-from gajim.common.const import PEPEventType
-from gajim.common.exceptions import StanzaMalformed
-from gajim.common.modules.pep import AbstractPEPModule, AbstractPEPData
+from gajim.common.nec import NetworkEvent
+from gajim.common.modules.base import BaseModule
+from gajim.common.modules.util import event_node
log = logging.getLogger('gajim.c.m.user_nickname')
-class UserNicknameData(AbstractPEPData):
+class UserNickname(BaseModule):
- type_ = PEPEventType.NICKNAME
+ _nbxmpp_extends = 'Nickname'
+ _nbxmpp_methods = [
+ 'set_nickname',
+ ]
- def get_nick(self) -> str:
- return self.data or ''
+ def __init__(self, con):
+ BaseModule.__init__(self, con)
+ self._register_pubsub_handler(self._nickname_received)
+ @event_node(nbxmpp.NS_NICK)
+ def _nickname_received(self, _con, _stanza, properties):
+ nick = properties.pubsub_event.data
+ if properties.self_message:
+ if nick is None:
+ nick = app.config.get_per('accounts', self._account, 'name')
+ app.nicks[self._account] = nick
-class UserNickname(AbstractPEPModule):
+ for contact in app.contacts.get_contacts(self._account,
+ str(properties.jid)):
+ contact.contact_name = nick
- name = 'nick'
- namespace = nbxmpp.NS_NICK
- pep_class = UserNicknameData
- store_publish = True
- _log = log
-
- def _extract_info(self, item: nbxmpp.Node) -> Optional[str]:
- nick = ''
- child = item.getTag('nick', namespace=nbxmpp.NS_NICK)
- if child is None:
- raise StanzaMalformed('No nick node')
- nick = child.getData()
-
- return nick or None
-
- def _build_node(self, data: Optional[str]) -> Optional[nbxmpp.Node]:
- item = nbxmpp.Node('nick', {'xmlns': nbxmpp.NS_NICK})
- if data is not None:
- item.addData(data)
- return item
-
- def _notification_received(self,
- jid: nbxmpp.JID,
- user_pep: UserNicknameData) -> None:
- for contact in app.contacts.get_contacts(self._account, str(jid)):
- contact.contact_name = user_pep.get_nick()
-
- if jid == self._con.get_own_jid().getStripped():
- if user_pep:
- app.nicks[self._account] = user_pep.get_nick()
- else:
- app.nicks[self._account] = app.config.get_per(
- 'accounts', self._account, 'name')
+ app.nec.push_incoming_event(
+ NetworkEvent('nickname-received',
+ account=self._account,
+ jid=properties.jid.getBare(),
+ nickname=nick))
def parse_nickname(stanza: nbxmpp.Node) -> str:
diff --git a/gajim/common/modules/util.py b/gajim/common/modules/util.py
index 1a927c7ed..131f82e70 100644
--- a/gajim/common/modules/util.py
+++ b/gajim/common/modules/util.py
@@ -16,6 +16,11 @@
from typing import Union
+from functools import wraps
+from functools import partial
+
+from gajim.common import app
+
def from_xs_boolean(value: Union[str, bool]) -> bool:
if isinstance(value, bool):
@@ -44,3 +49,25 @@ def to_xs_boolean(value: Union[bool, None]) -> str:
raise ValueError(
'Cant convert %s to xs:boolean' % value)
+
+
+def event_node(node):
+ def event_node_decorator(func):
+ @wraps(func)
+ def func_wrapper(self, _con, _stanza, properties):
+ if properties.pubsub_event.node != node:
+ return
+ func(self, _con, _stanza, properties)
+
+ return func_wrapper
+ return event_node_decorator
+
+
+def store_publish(func):
+ @wraps(func)
+ def func_wrapper(self, *args, **kwargs):
+ if not app.account_is_connected(self._account):
+ self._stored_publish = partial(func, self, *args, **kwargs)
+ return
+ return func(self, *args, **kwargs)
+ return func_wrapper
diff --git a/gajim/data/moods/default/afraid.png b/gajim/data/icons/hicolor/16x16/status/mood-afraid.png
similarity index 100%
rename from gajim/data/moods/default/afraid.png
rename to gajim/data/icons/hicolor/16x16/status/mood-afraid.png
diff --git a/gajim/data/moods/default/amazed.png b/gajim/data/icons/hicolor/16x16/status/mood-amazed.png
similarity index 100%
rename from gajim/data/moods/default/amazed.png
rename to gajim/data/icons/hicolor/16x16/status/mood-amazed.png
diff --git a/gajim/data/moods/default/amorous.png b/gajim/data/icons/hicolor/16x16/status/mood-amorous.png
similarity index 100%
rename from gajim/data/moods/default/amorous.png
rename to gajim/data/icons/hicolor/16x16/status/mood-amorous.png
diff --git a/gajim/data/moods/default/angry.png b/gajim/data/icons/hicolor/16x16/status/mood-angry.png
similarity index 100%
rename from gajim/data/moods/default/angry.png
rename to gajim/data/icons/hicolor/16x16/status/mood-angry.png
diff --git a/gajim/data/moods/default/annoyed.png b/gajim/data/icons/hicolor/16x16/status/mood-annoyed.png
similarity index 100%
rename from gajim/data/moods/default/annoyed.png
rename to gajim/data/icons/hicolor/16x16/status/mood-annoyed.png
diff --git a/gajim/data/moods/default/anxious.png b/gajim/data/icons/hicolor/16x16/status/mood-anxious.png
similarity index 100%
rename from gajim/data/moods/default/anxious.png
rename to gajim/data/icons/hicolor/16x16/status/mood-anxious.png
diff --git a/gajim/data/moods/default/aroused.png b/gajim/data/icons/hicolor/16x16/status/mood-aroused.png
similarity index 100%
rename from gajim/data/moods/default/aroused.png
rename to gajim/data/icons/hicolor/16x16/status/mood-aroused.png
diff --git a/gajim/data/moods/default/ashamed.png b/gajim/data/icons/hicolor/16x16/status/mood-ashamed.png
similarity index 100%
rename from gajim/data/moods/default/ashamed.png
rename to gajim/data/icons/hicolor/16x16/status/mood-ashamed.png
diff --git a/gajim/data/moods/default/bored.png b/gajim/data/icons/hicolor/16x16/status/mood-bored.png
similarity index 100%
rename from gajim/data/moods/default/bored.png
rename to gajim/data/icons/hicolor/16x16/status/mood-bored.png
diff --git a/gajim/data/moods/default/brave.png b/gajim/data/icons/hicolor/16x16/status/mood-brave.png
similarity index 100%
rename from gajim/data/moods/default/brave.png
rename to gajim/data/icons/hicolor/16x16/status/mood-brave.png
diff --git a/gajim/data/moods/default/calm.png b/gajim/data/icons/hicolor/16x16/status/mood-calm.png
similarity index 100%
rename from gajim/data/moods/default/calm.png
rename to gajim/data/icons/hicolor/16x16/status/mood-calm.png
diff --git a/gajim/data/moods/default/cautious.png b/gajim/data/icons/hicolor/16x16/status/mood-cautious.png
similarity index 100%
rename from gajim/data/moods/default/cautious.png
rename to gajim/data/icons/hicolor/16x16/status/mood-cautious.png
diff --git a/gajim/data/moods/default/cold.png b/gajim/data/icons/hicolor/16x16/status/mood-cold.png
similarity index 100%
rename from gajim/data/moods/default/cold.png
rename to gajim/data/icons/hicolor/16x16/status/mood-cold.png
diff --git a/gajim/data/moods/default/confident.png b/gajim/data/icons/hicolor/16x16/status/mood-confident.png
similarity index 100%
rename from gajim/data/moods/default/confident.png
rename to gajim/data/icons/hicolor/16x16/status/mood-confident.png
diff --git a/gajim/data/moods/default/confused.png b/gajim/data/icons/hicolor/16x16/status/mood-confused.png
similarity index 100%
rename from gajim/data/moods/default/confused.png
rename to gajim/data/icons/hicolor/16x16/status/mood-confused.png
diff --git a/gajim/data/moods/default/contemplative.png b/gajim/data/icons/hicolor/16x16/status/mood-contemplative.png
similarity index 100%
rename from gajim/data/moods/default/contemplative.png
rename to gajim/data/icons/hicolor/16x16/status/mood-contemplative.png
diff --git a/gajim/data/moods/default/contented.png b/gajim/data/icons/hicolor/16x16/status/mood-contented.png
similarity index 100%
rename from gajim/data/moods/default/contented.png
rename to gajim/data/icons/hicolor/16x16/status/mood-contented.png
diff --git a/gajim/data/moods/default/cranky.png b/gajim/data/icons/hicolor/16x16/status/mood-cranky.png
similarity index 100%
rename from gajim/data/moods/default/cranky.png
rename to gajim/data/icons/hicolor/16x16/status/mood-cranky.png
diff --git a/gajim/data/moods/default/crazy.png b/gajim/data/icons/hicolor/16x16/status/mood-crazy.png
similarity index 100%
rename from gajim/data/moods/default/crazy.png
rename to gajim/data/icons/hicolor/16x16/status/mood-crazy.png
diff --git a/gajim/data/moods/default/creative.png b/gajim/data/icons/hicolor/16x16/status/mood-creative.png
similarity index 100%
rename from gajim/data/moods/default/creative.png
rename to gajim/data/icons/hicolor/16x16/status/mood-creative.png
diff --git a/gajim/data/moods/default/curious.png b/gajim/data/icons/hicolor/16x16/status/mood-curious.png
similarity index 100%
rename from gajim/data/moods/default/curious.png
rename to gajim/data/icons/hicolor/16x16/status/mood-curious.png
diff --git a/gajim/data/moods/default/dejected.png b/gajim/data/icons/hicolor/16x16/status/mood-dejected.png
similarity index 100%
rename from gajim/data/moods/default/dejected.png
rename to gajim/data/icons/hicolor/16x16/status/mood-dejected.png
diff --git a/gajim/data/moods/default/depressed.png b/gajim/data/icons/hicolor/16x16/status/mood-depressed.png
similarity index 100%
rename from gajim/data/moods/default/depressed.png
rename to gajim/data/icons/hicolor/16x16/status/mood-depressed.png
diff --git a/gajim/data/moods/default/disappointed.png b/gajim/data/icons/hicolor/16x16/status/mood-disappointed.png
similarity index 100%
rename from gajim/data/moods/default/disappointed.png
rename to gajim/data/icons/hicolor/16x16/status/mood-disappointed.png
diff --git a/gajim/data/moods/default/disgusted.png b/gajim/data/icons/hicolor/16x16/status/mood-disgusted.png
similarity index 100%
rename from gajim/data/moods/default/disgusted.png
rename to gajim/data/icons/hicolor/16x16/status/mood-disgusted.png
diff --git a/gajim/data/moods/default/dismayed.png b/gajim/data/icons/hicolor/16x16/status/mood-dismayed.png
similarity index 100%
rename from gajim/data/moods/default/dismayed.png
rename to gajim/data/icons/hicolor/16x16/status/mood-dismayed.png
diff --git a/gajim/data/moods/default/distracted.png b/gajim/data/icons/hicolor/16x16/status/mood-distracted.png
similarity index 100%
rename from gajim/data/moods/default/distracted.png
rename to gajim/data/icons/hicolor/16x16/status/mood-distracted.png
diff --git a/gajim/data/moods/default/embarrassed.png b/gajim/data/icons/hicolor/16x16/status/mood-embarrassed.png
similarity index 100%
rename from gajim/data/moods/default/embarrassed.png
rename to gajim/data/icons/hicolor/16x16/status/mood-embarrassed.png
diff --git a/gajim/data/moods/default/envious.png b/gajim/data/icons/hicolor/16x16/status/mood-envious.png
similarity index 100%
rename from gajim/data/moods/default/envious.png
rename to gajim/data/icons/hicolor/16x16/status/mood-envious.png
diff --git a/gajim/data/moods/default/excited.png b/gajim/data/icons/hicolor/16x16/status/mood-excited.png
similarity index 100%
rename from gajim/data/moods/default/excited.png
rename to gajim/data/icons/hicolor/16x16/status/mood-excited.png
diff --git a/gajim/data/moods/default/flirtatious.png b/gajim/data/icons/hicolor/16x16/status/mood-flirtatious.png
similarity index 100%
rename from gajim/data/moods/default/flirtatious.png
rename to gajim/data/icons/hicolor/16x16/status/mood-flirtatious.png
diff --git a/gajim/data/moods/default/frustrated.png b/gajim/data/icons/hicolor/16x16/status/mood-frustrated.png
similarity index 100%
rename from gajim/data/moods/default/frustrated.png
rename to gajim/data/icons/hicolor/16x16/status/mood-frustrated.png
diff --git a/gajim/data/moods/default/grateful.png b/gajim/data/icons/hicolor/16x16/status/mood-grateful.png
similarity index 100%
rename from gajim/data/moods/default/grateful.png
rename to gajim/data/icons/hicolor/16x16/status/mood-grateful.png
diff --git a/gajim/data/moods/default/grieving.png b/gajim/data/icons/hicolor/16x16/status/mood-grieving.png
similarity index 100%
rename from gajim/data/moods/default/grieving.png
rename to gajim/data/icons/hicolor/16x16/status/mood-grieving.png
diff --git a/gajim/data/moods/default/grumpy.png b/gajim/data/icons/hicolor/16x16/status/mood-grumpy.png
similarity index 100%
rename from gajim/data/moods/default/grumpy.png
rename to gajim/data/icons/hicolor/16x16/status/mood-grumpy.png
diff --git a/gajim/data/moods/default/guilty.png b/gajim/data/icons/hicolor/16x16/status/mood-guilty.png
similarity index 100%
rename from gajim/data/moods/default/guilty.png
rename to gajim/data/icons/hicolor/16x16/status/mood-guilty.png
diff --git a/gajim/data/moods/default/happy.png b/gajim/data/icons/hicolor/16x16/status/mood-happy.png
similarity index 100%
rename from gajim/data/moods/default/happy.png
rename to gajim/data/icons/hicolor/16x16/status/mood-happy.png
diff --git a/gajim/data/moods/default/hopeful.png b/gajim/data/icons/hicolor/16x16/status/mood-hopeful.png
similarity index 100%
rename from gajim/data/moods/default/hopeful.png
rename to gajim/data/icons/hicolor/16x16/status/mood-hopeful.png
diff --git a/gajim/data/moods/default/hot.png b/gajim/data/icons/hicolor/16x16/status/mood-hot.png
similarity index 100%
rename from gajim/data/moods/default/hot.png
rename to gajim/data/icons/hicolor/16x16/status/mood-hot.png
diff --git a/gajim/data/moods/default/humbled.png b/gajim/data/icons/hicolor/16x16/status/mood-humbled.png
similarity index 100%
rename from gajim/data/moods/default/humbled.png
rename to gajim/data/icons/hicolor/16x16/status/mood-humbled.png
diff --git a/gajim/data/moods/default/humiliated.png b/gajim/data/icons/hicolor/16x16/status/mood-humiliated.png
similarity index 100%
rename from gajim/data/moods/default/humiliated.png
rename to gajim/data/icons/hicolor/16x16/status/mood-humiliated.png
diff --git a/gajim/data/moods/default/hungry.png b/gajim/data/icons/hicolor/16x16/status/mood-hungry.png
similarity index 100%
rename from gajim/data/moods/default/hungry.png
rename to gajim/data/icons/hicolor/16x16/status/mood-hungry.png
diff --git a/gajim/data/moods/default/hurt.png b/gajim/data/icons/hicolor/16x16/status/mood-hurt.png
similarity index 100%
rename from gajim/data/moods/default/hurt.png
rename to gajim/data/icons/hicolor/16x16/status/mood-hurt.png
diff --git a/gajim/data/moods/default/impressed.png b/gajim/data/icons/hicolor/16x16/status/mood-impressed.png
similarity index 100%
rename from gajim/data/moods/default/impressed.png
rename to gajim/data/icons/hicolor/16x16/status/mood-impressed.png
diff --git a/gajim/data/moods/default/in_awe.png b/gajim/data/icons/hicolor/16x16/status/mood-in_awe.png
similarity index 100%
rename from gajim/data/moods/default/in_awe.png
rename to gajim/data/icons/hicolor/16x16/status/mood-in_awe.png
diff --git a/gajim/data/moods/default/in_love.png b/gajim/data/icons/hicolor/16x16/status/mood-in_love.png
similarity index 100%
rename from gajim/data/moods/default/in_love.png
rename to gajim/data/icons/hicolor/16x16/status/mood-in_love.png
diff --git a/gajim/data/moods/default/indignant.png b/gajim/data/icons/hicolor/16x16/status/mood-indignant.png
similarity index 100%
rename from gajim/data/moods/default/indignant.png
rename to gajim/data/icons/hicolor/16x16/status/mood-indignant.png
diff --git a/gajim/data/moods/default/interested.png b/gajim/data/icons/hicolor/16x16/status/mood-interested.png
similarity index 100%
rename from gajim/data/moods/default/interested.png
rename to gajim/data/icons/hicolor/16x16/status/mood-interested.png
diff --git a/gajim/data/moods/default/intoxicated.png b/gajim/data/icons/hicolor/16x16/status/mood-intoxicated.png
similarity index 100%
rename from gajim/data/moods/default/intoxicated.png
rename to gajim/data/icons/hicolor/16x16/status/mood-intoxicated.png
diff --git a/gajim/data/moods/default/invincible.png b/gajim/data/icons/hicolor/16x16/status/mood-invincible.png
similarity index 100%
rename from gajim/data/moods/default/invincible.png
rename to gajim/data/icons/hicolor/16x16/status/mood-invincible.png
diff --git a/gajim/data/moods/default/jealous.png b/gajim/data/icons/hicolor/16x16/status/mood-jealous.png
similarity index 100%
rename from gajim/data/moods/default/jealous.png
rename to gajim/data/icons/hicolor/16x16/status/mood-jealous.png
diff --git a/gajim/data/moods/default/lonely.png b/gajim/data/icons/hicolor/16x16/status/mood-lonely.png
similarity index 100%
rename from gajim/data/moods/default/lonely.png
rename to gajim/data/icons/hicolor/16x16/status/mood-lonely.png
diff --git a/gajim/data/moods/default/lost.png b/gajim/data/icons/hicolor/16x16/status/mood-lost.png
similarity index 100%
rename from gajim/data/moods/default/lost.png
rename to gajim/data/icons/hicolor/16x16/status/mood-lost.png
diff --git a/gajim/data/moods/default/lucky.png b/gajim/data/icons/hicolor/16x16/status/mood-lucky.png
similarity index 100%
rename from gajim/data/moods/default/lucky.png
rename to gajim/data/icons/hicolor/16x16/status/mood-lucky.png
diff --git a/gajim/data/moods/default/mean.png b/gajim/data/icons/hicolor/16x16/status/mood-mean.png
similarity index 100%
rename from gajim/data/moods/default/mean.png
rename to gajim/data/icons/hicolor/16x16/status/mood-mean.png
diff --git a/gajim/data/moods/default/moody.png b/gajim/data/icons/hicolor/16x16/status/mood-moody.png
similarity index 100%
rename from gajim/data/moods/default/moody.png
rename to gajim/data/icons/hicolor/16x16/status/mood-moody.png
diff --git a/gajim/data/moods/default/nervous.png b/gajim/data/icons/hicolor/16x16/status/mood-nervous.png
similarity index 100%
rename from gajim/data/moods/default/nervous.png
rename to gajim/data/icons/hicolor/16x16/status/mood-nervous.png
diff --git a/gajim/data/moods/default/neutral.png b/gajim/data/icons/hicolor/16x16/status/mood-neutral.png
similarity index 100%
rename from gajim/data/moods/default/neutral.png
rename to gajim/data/icons/hicolor/16x16/status/mood-neutral.png
diff --git a/gajim/data/moods/default/offended.png b/gajim/data/icons/hicolor/16x16/status/mood-offended.png
similarity index 100%
rename from gajim/data/moods/default/offended.png
rename to gajim/data/icons/hicolor/16x16/status/mood-offended.png
diff --git a/gajim/data/moods/default/outraged.png b/gajim/data/icons/hicolor/16x16/status/mood-outraged.png
similarity index 100%
rename from gajim/data/moods/default/outraged.png
rename to gajim/data/icons/hicolor/16x16/status/mood-outraged.png
diff --git a/gajim/data/moods/default/playful.png b/gajim/data/icons/hicolor/16x16/status/mood-playful.png
similarity index 100%
rename from gajim/data/moods/default/playful.png
rename to gajim/data/icons/hicolor/16x16/status/mood-playful.png
diff --git a/gajim/data/moods/default/proud.png b/gajim/data/icons/hicolor/16x16/status/mood-proud.png
similarity index 100%
rename from gajim/data/moods/default/proud.png
rename to gajim/data/icons/hicolor/16x16/status/mood-proud.png
diff --git a/gajim/data/moods/default/relaxed.png b/gajim/data/icons/hicolor/16x16/status/mood-relaxed.png
similarity index 100%
rename from gajim/data/moods/default/relaxed.png
rename to gajim/data/icons/hicolor/16x16/status/mood-relaxed.png
diff --git a/gajim/data/moods/default/relieved.png b/gajim/data/icons/hicolor/16x16/status/mood-relieved.png
similarity index 100%
rename from gajim/data/moods/default/relieved.png
rename to gajim/data/icons/hicolor/16x16/status/mood-relieved.png
diff --git a/gajim/data/moods/default/remorseful.png b/gajim/data/icons/hicolor/16x16/status/mood-remorseful.png
similarity index 100%
rename from gajim/data/moods/default/remorseful.png
rename to gajim/data/icons/hicolor/16x16/status/mood-remorseful.png
diff --git a/gajim/data/moods/default/restless.png b/gajim/data/icons/hicolor/16x16/status/mood-restless.png
similarity index 100%
rename from gajim/data/moods/default/restless.png
rename to gajim/data/icons/hicolor/16x16/status/mood-restless.png
diff --git a/gajim/data/moods/default/sad.png b/gajim/data/icons/hicolor/16x16/status/mood-sad.png
similarity index 100%
rename from gajim/data/moods/default/sad.png
rename to gajim/data/icons/hicolor/16x16/status/mood-sad.png
diff --git a/gajim/data/moods/default/sarcastic.png b/gajim/data/icons/hicolor/16x16/status/mood-sarcastic.png
similarity index 100%
rename from gajim/data/moods/default/sarcastic.png
rename to gajim/data/icons/hicolor/16x16/status/mood-sarcastic.png
diff --git a/gajim/data/moods/default/satisfied.png b/gajim/data/icons/hicolor/16x16/status/mood-satisfied.png
similarity index 100%
rename from gajim/data/moods/default/satisfied.png
rename to gajim/data/icons/hicolor/16x16/status/mood-satisfied.png
diff --git a/gajim/data/moods/default/serious.png b/gajim/data/icons/hicolor/16x16/status/mood-serious.png
similarity index 100%
rename from gajim/data/moods/default/serious.png
rename to gajim/data/icons/hicolor/16x16/status/mood-serious.png
diff --git a/gajim/data/moods/default/shocked.png b/gajim/data/icons/hicolor/16x16/status/mood-shocked.png
similarity index 100%
rename from gajim/data/moods/default/shocked.png
rename to gajim/data/icons/hicolor/16x16/status/mood-shocked.png
diff --git a/gajim/data/moods/default/shy.png b/gajim/data/icons/hicolor/16x16/status/mood-shy.png
similarity index 100%
rename from gajim/data/moods/default/shy.png
rename to gajim/data/icons/hicolor/16x16/status/mood-shy.png
diff --git a/gajim/data/moods/default/sick.png b/gajim/data/icons/hicolor/16x16/status/mood-sick.png
similarity index 100%
rename from gajim/data/moods/default/sick.png
rename to gajim/data/icons/hicolor/16x16/status/mood-sick.png
diff --git a/gajim/data/moods/default/sleepy.png b/gajim/data/icons/hicolor/16x16/status/mood-sleepy.png
similarity index 100%
rename from gajim/data/moods/default/sleepy.png
rename to gajim/data/icons/hicolor/16x16/status/mood-sleepy.png
diff --git a/gajim/data/moods/default/spontaneous.png b/gajim/data/icons/hicolor/16x16/status/mood-spontaneous.png
similarity index 100%
rename from gajim/data/moods/default/spontaneous.png
rename to gajim/data/icons/hicolor/16x16/status/mood-spontaneous.png
diff --git a/gajim/data/moods/default/stressed.png b/gajim/data/icons/hicolor/16x16/status/mood-stressed.png
similarity index 100%
rename from gajim/data/moods/default/stressed.png
rename to gajim/data/icons/hicolor/16x16/status/mood-stressed.png
diff --git a/gajim/data/moods/default/strong.png b/gajim/data/icons/hicolor/16x16/status/mood-strong.png
similarity index 100%
rename from gajim/data/moods/default/strong.png
rename to gajim/data/icons/hicolor/16x16/status/mood-strong.png
diff --git a/gajim/data/moods/default/surprised.png b/gajim/data/icons/hicolor/16x16/status/mood-surprised.png
similarity index 100%
rename from gajim/data/moods/default/surprised.png
rename to gajim/data/icons/hicolor/16x16/status/mood-surprised.png
diff --git a/gajim/data/moods/default/thankful.png b/gajim/data/icons/hicolor/16x16/status/mood-thankful.png
similarity index 100%
rename from gajim/data/moods/default/thankful.png
rename to gajim/data/icons/hicolor/16x16/status/mood-thankful.png
diff --git a/gajim/data/moods/default/thirsty.png b/gajim/data/icons/hicolor/16x16/status/mood-thirsty.png
similarity index 100%
rename from gajim/data/moods/default/thirsty.png
rename to gajim/data/icons/hicolor/16x16/status/mood-thirsty.png
diff --git a/gajim/data/moods/default/tired.png b/gajim/data/icons/hicolor/16x16/status/mood-tired.png
similarity index 100%
rename from gajim/data/moods/default/tired.png
rename to gajim/data/icons/hicolor/16x16/status/mood-tired.png
diff --git a/gajim/data/moods/default/undefined.png b/gajim/data/icons/hicolor/16x16/status/mood-undefined.png
similarity index 100%
rename from gajim/data/moods/default/undefined.png
rename to gajim/data/icons/hicolor/16x16/status/mood-undefined.png
diff --git a/gajim/data/moods/default/unknown.png b/gajim/data/icons/hicolor/16x16/status/mood-unknown.png
similarity index 100%
rename from gajim/data/moods/default/unknown.png
rename to gajim/data/icons/hicolor/16x16/status/mood-unknown.png
diff --git a/gajim/data/moods/default/weak.png b/gajim/data/icons/hicolor/16x16/status/mood-weak.png
similarity index 100%
rename from gajim/data/moods/default/weak.png
rename to gajim/data/icons/hicolor/16x16/status/mood-weak.png
diff --git a/gajim/data/moods/default/worried.png b/gajim/data/icons/hicolor/16x16/status/mood-worried.png
similarity index 100%
rename from gajim/data/moods/default/worried.png
rename to gajim/data/icons/hicolor/16x16/status/mood-worried.png
diff --git a/gajim/dialogs.py b/gajim/dialogs.py
index b84ec208f..56389ef01 100644
--- a/gajim/dialogs.py
+++ b/gajim/dialogs.py
@@ -504,10 +504,12 @@ class ChangeMoodDialog:
self.MOODS.sort()
for mood in self.MOODS:
+ image = Gtk.Image.new_from_icon_name(
+ 'mood-%s' % mood, Gtk.IconSize.MENU)
self.mood_buttons[mood] = Gtk.RadioButton()
self.mood_buttons[mood].join_group(no_mood_button)
self.mood_buttons[mood].set_mode(False)
- self.mood_buttons[mood].add(gtkgui_helpers.load_mood_icon(mood))
+ self.mood_buttons[mood].add(image)
self.mood_buttons[mood].set_relief(Gtk.ReliefStyle.NONE)
self.mood_buttons[mood].set_tooltip_text(MOODS[mood])
self.mood_buttons[mood].connect('clicked',
@@ -700,8 +702,8 @@ class ChangeStatusMessageDialog(TimeoutDialog):
img = self.xml.get_object('mood_image')
label = self.xml.get_object('mood_button_label')
if 'mood' in self.pep_dict and self.pep_dict['mood'] in MOODS:
- img.set_from_pixbuf(gtkgui_helpers.load_mood_icon(
- self.pep_dict['mood']).get_pixbuf())
+ img.set_from_icon_name('mood-%s' % self.pep_dict['mood'],
+ Gtk.IconSize.MENU)
if self.pep_dict['mood_text']:
label.set_text(self.pep_dict['mood_text'])
else:
diff --git a/gajim/gtk/profile.py b/gajim/gtk/profile.py
index a6f4cd4cc..dccc114b5 100644
--- a/gajim/gtk/profile.py
+++ b/gajim/gtk/profile.py
@@ -325,7 +325,7 @@ class ProfileWindow(Gtk.ApplicationWindow):
return
vcard_, sha = self.make_vcard()
nick = vcard_.get('NICKNAME') or None
- app.connections[self.account].get_module('UserNickname').send(nick)
+ app.connections[self.account].get_module('UserNickname').set_nickname(nick)
if not nick:
nick = app.config.get_per('accounts', self.account, 'name')
app.nicks[self.account] = nick
diff --git a/gajim/gtk/tooltips.py b/gajim/gtk/tooltips.py
index 06fc22f55..ad79d5f61 100644
--- a/gajim/gtk/tooltips.py
+++ b/gajim/gtk/tooltips.py
@@ -36,11 +36,13 @@ from gi.repository import Pango
from gajim.common import app
from gajim.common import helpers
from gajim.common.const import AvatarSize
+from gajim.common.const import PEPEventType
from gajim.common.i18n import Q_
from gajim.common.i18n import _
from gajim.gtk.util import get_builder
from gajim.gtk.util import get_icon_name
+from gajim.gtk.util import format_mood
log = logging.getLogger('gajim.gtk.tooltips')
@@ -471,8 +473,8 @@ class RosterTooltip(StatusTable):
Append Tune, Mood, Activity, Location information of the specified contact
to the given property list.
"""
- if 'mood' in contact.pep:
- mood = contact.pep['mood'].as_markup_text()
+ if PEPEventType.MOOD in contact.pep:
+ mood = format_mood(*contact.pep[PEPEventType.MOOD])
self._ui.mood.set_markup(mood)
self._ui.mood.show()
self._ui.mood_label.show()
diff --git a/gajim/gtk/util.py b/gajim/gtk/util.py
index aed9e6470..f74f0ee1d 100644
--- a/gajim/gtk/util.py
+++ b/gajim/gtk/util.py
@@ -36,6 +36,7 @@ from gajim.common import app
from gajim.common import configpaths
from gajim.common import i18n
from gajim.common.i18n import _
+from gajim.common.const import MOODS
from gajim.gtk.const import GajimIconSet
@@ -499,3 +500,24 @@ def ensure_not_destroyed(func):
return
return func(self, *args, **kwargs)
return func_wrapper
+
+
+def ensure_proper_control(func):
+ @wraps(func)
+ def func_wrapper(self, event):
+ if event.account != self.account:
+ return
+ if event.jid != self.contact.jid:
+ return
+ return func(self, event)
+ return func_wrapper
+
+
+def format_mood(mood, text):
+ if mood is None:
+ return ''
+ mood = MOODS[mood]
+ markuptext = '%s' % GLib.markup_escape_text(mood)
+ if text is not None:
+ markuptext += ' (%s)' % GLib.markup_escape_text(text)
+ return markuptext
diff --git a/gajim/gtkgui_helpers.py b/gajim/gtkgui_helpers.py
index 122bff2f4..8b063bfe4 100644
--- a/gajim/gtkgui_helpers.py
+++ b/gajim/gtkgui_helpers.py
@@ -267,15 +267,6 @@ def create_list_multi(value_list, selected_values=None):
treeview.show_all()
return treeview
-def load_mood_icon(icon_name):
- """
- Load an icon from the mood iconset in 16x16
- """
- iconset = app.config.get('mood_iconset')
- path = os.path.join(helpers.get_mood_iconset_path(iconset), '')
- icon_list = _load_icon_list([icon_name], path)
- return icon_list[icon_name]
-
def load_activity_icon(category, activity=None):
"""
Load an icon from the activity iconset in 16x16
@@ -289,12 +280,6 @@ def load_activity_icon(category, activity=None):
return icon_list[activity]
def get_pep_icon(pep_class):
- if pep_class == PEPEventType.MOOD:
- received_mood = pep_class.data['mood']
- mood = received_mood if received_mood in MOODS else 'unknown'
- pixbuf = load_mood_icon(mood).get_pixbuf()
- return pixbuf
-
if pep_class == PEPEventType.TUNE:
return 'audio-x-generic'
diff --git a/gajim/roster_window.py b/gajim/roster_window.py
index 0f8fc7287..99b1cdb5c 100644
--- a/gajim/roster_window.py
+++ b/gajim/roster_window.py
@@ -43,6 +43,7 @@ from gi.repository import GObject
from gi.repository import GLib
from gi.repository import Gio
from nbxmpp.protocol import NS_FILE, NS_ROSTERX, NS_CONFERENCE
+from nbxmpp.structs import MoodData
from gajim import dialogs
from gajim import vcard
@@ -1043,9 +1044,8 @@ class RosterWindow:
self.model[child_iter][Column.NAME] = GLib.markup_escape_text(account_name)
pep_dict = app.connections[account].pep
- if app.config.get('show_mood_in_roster') and 'mood' in pep_dict:
- self.model[child_iter][Column.MOOD_PIXBUF] = \
- gtkgui_helpers.get_pep_icon(pep_dict['mood'])
+ if app.config.get('show_mood_in_roster') and PEPEventType.MOOD in pep_dict:
+ self.model[child_iter][Column.MOOD_PIXBUF] = 'mood-%s' % pep_dict[PEPEventType.MOOD].mood
else:
self.model[child_iter][Column.MOOD_PIXBUF] = None
@@ -1311,7 +1311,7 @@ class RosterWindow:
return False
def _is_pep_shown_in_roster(self, pep_type):
- if pep_type == 'mood':
+ if pep_type == PEPEventType.MOOD:
return app.config.get('show_mood_in_roster')
if pep_type == 'activity':
@@ -1328,6 +1328,7 @@ class RosterWindow:
def draw_all_pep_types(self, jid, account, contact=None):
for pep_type in self._pep_type_to_model_column:
self.draw_pep(jid, account, pep_type, contact=contact)
+ self._draw_pep(account, jid, PEPEventType.MOOD)
def draw_pep(self, jid, account, pep_type, contact=None):
if pep_type not in self._pep_type_to_model_column:
@@ -1349,6 +1350,26 @@ class RosterWindow:
for child_iter in iters:
self.model[child_iter][model_column] = pixbuf
+ def _draw_pep(self, account, jid, type_):
+ if not self._is_pep_shown_in_roster(type_):
+ return
+
+ iters = self._get_contact_iter(jid, account, model=self.model)
+ if not iters:
+ return
+ contact = app.contacts.get_contact(account, jid)
+
+ icon = None
+ data = contact.pep.get(type_)
+
+ if type_ == PEPEventType.MOOD:
+ column = Column.MOOD_PIXBUF
+ if data is not None:
+ icon = 'mood-%s' % data.mood
+
+ for child_iter in iters:
+ self.model[child_iter][column] = icon
+
def _get_avatar_image(self, account, jid):
if not app.config.get('show_avatars_in_roster'):
return None
@@ -2086,9 +2107,9 @@ class RosterWindow:
if 'mood' in pep_dict:
mood = pep_dict['mood']
mood_text = pep_dict.get('mood_text', None)
- connection.get_module('UserMood').send((mood, mood_text))
+ connection.get_module('UserMood').set_mood(MoodData(mood, mood_text))
else:
- connection.get_module('UserMood').send(None)
+ connection.get_module('UserMood').set_mood(None)
def delete_pep(self, jid, account):
if jid == app.get_jid_from_account(account):
@@ -2611,18 +2632,21 @@ class RosterWindow:
def _nec_pep_received(self, obj):
if obj.user_pep.type_ not in (PEPEventType.ACTIVITY,
PEPEventType.TUNE,
- PEPEventType.MOOD,
- PEPEventType.LOCATION,
- PEPEventType.NICKNAME):
+ PEPEventType.LOCATION):
return
if obj.jid == app.get_jid_from_account(obj.conn.name):
self.draw_account(obj.conn.name)
- if obj.pep_type == 'nick':
- self.draw_contact(obj.jid, obj.conn.name)
- else:
- self.draw_pep(obj.jid, obj.conn.name, obj.pep_type)
+ self.draw_pep(obj.jid, obj.conn.name, obj.pep_type)
+
+ def _on_mood_received(self, event):
+ if event.is_self_message:
+ self.draw_account(event.account)
+ self._draw_pep(event.account, event.jid, PEPEventType.MOOD)
+
+ def _on_nickname_received(self, event):
+ self.draw_contact(event.jid, event.account)
def _nec_update_avatar(self, obj):
app.log('avatar').debug('Draw roster avatar: %s', obj.jid)
@@ -5558,7 +5582,7 @@ class RosterWindow:
# activity_pixbuf, TUNE_ICON, LOCATION_ICON, avatar_img,
# padlock_pixbuf, visible]
self.columns = [str, str, str, str, str,
- GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf, str, str,
+ str, GdkPixbuf.Pixbuf, str, str,
Gtk.Image, str, bool]
self.xml = get_builder('roster_window.ui')
@@ -5658,7 +5682,7 @@ class RosterWindow:
# cell_data_func, func_arg)
self.renderers_list = []
self.renderers_propertys = {}
- self._pep_type_to_model_column = {'mood': Column.MOOD_PIXBUF,
+ self._pep_type_to_model_column = {
'activity': Column.ACTIVITY_PIXBUF, 'tune': Column.TUNE_ICON,
'geoloc': Column.LOCATION_ICON}
@@ -5682,7 +5706,7 @@ class RosterWindow:
'markup', Column.NAME, self._nameCellDataFunc, None),
('mood', Gtk.CellRendererPixbuf(), False,
- 'pixbuf', Column.MOOD_PIXBUF,
+ 'icon_name', Column.MOOD_PIXBUF,
self._fill_pep_pixbuf_renderer, Column.MOOD_PIXBUF),
('activity', Gtk.CellRendererPixbuf(), False,
@@ -5808,6 +5832,10 @@ class RosterWindow:
self._nec_agent_removed)
app.ged.register_event_handler('pep-received', ged.GUI1,
self._nec_pep_received)
+ app.ged.register_event_handler('nickname-received', ged.GUI1,
+ self._on_nickname_received)
+ app.ged.register_event_handler('mood-received', ged.GUI1,
+ self._on_mood_received)
app.ged.register_event_handler('update-roster-avatar', ged.GUI1,
self._nec_update_avatar)
app.ged.register_event_handler('update-room-avatar', ged.GUI1,