Refactor UserMood into own module
This commit is contained in:
parent
1712743fd5
commit
14f088c2d9
|
@ -80,6 +80,7 @@ from gajim.common.modules.pep import PEP
|
||||||
from gajim.common.modules.user_avatar import UserAvatar
|
from gajim.common.modules.user_avatar import UserAvatar
|
||||||
from gajim.common.modules.user_activity import UserActivity
|
from gajim.common.modules.user_activity import UserActivity
|
||||||
from gajim.common.modules.user_tune import UserTune
|
from gajim.common.modules.user_tune import UserTune
|
||||||
|
from gajim.common.modules.user_mood import UserMood
|
||||||
from gajim.common.connection_handlers import *
|
from gajim.common.connection_handlers import *
|
||||||
from gajim.common.contacts import GC_Contact
|
from gajim.common.contacts import GC_Contact
|
||||||
from gajim.gtkgui_helpers import get_action
|
from gajim.gtkgui_helpers import get_action
|
||||||
|
@ -676,6 +677,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
self.register_module('UserAvatar', UserAvatar, self)
|
self.register_module('UserAvatar', UserAvatar, self)
|
||||||
self.register_module('UserActivity', UserActivity, self)
|
self.register_module('UserActivity', UserActivity, self)
|
||||||
self.register_module('UserTune', UserTune, self)
|
self.register_module('UserTune', UserTune, self)
|
||||||
|
self.register_module('UserMood', UserMood, self)
|
||||||
|
|
||||||
app.ged.register_event_handler('privacy-list-received', ged.CORE,
|
app.ged.register_event_handler('privacy-list-received', ged.CORE,
|
||||||
self._nec_privacy_list_received)
|
self._nec_privacy_list_received)
|
||||||
|
|
|
@ -295,7 +295,6 @@ class ConnectionPEP(object):
|
||||||
self._account = new_name
|
self._account = new_name
|
||||||
|
|
||||||
def reset_awaiting_pep(self):
|
def reset_awaiting_pep(self):
|
||||||
self.to_be_sent_mood = None
|
|
||||||
self.to_be_sent_nick = None
|
self.to_be_sent_nick = None
|
||||||
self.to_be_sent_location = None
|
self.to_be_sent_location = None
|
||||||
|
|
||||||
|
@ -303,37 +302,12 @@ class ConnectionPEP(object):
|
||||||
"""
|
"""
|
||||||
Send pep info that were waiting for connection
|
Send pep info that were waiting for connection
|
||||||
"""
|
"""
|
||||||
if self.to_be_sent_mood:
|
|
||||||
self.send_mood(*self.to_be_sent_mood)
|
|
||||||
if self.to_be_sent_nick:
|
if self.to_be_sent_nick:
|
||||||
self.send_nick(self.to_be_sent_nick)
|
self.send_nick(self.to_be_sent_nick)
|
||||||
if self.to_be_sent_location:
|
if self.to_be_sent_location:
|
||||||
self.send_location(self.to_be_sent_location)
|
self.send_location(self.to_be_sent_location)
|
||||||
self.reset_awaiting_pep()
|
self.reset_awaiting_pep()
|
||||||
|
|
||||||
def send_mood(self, mood, message=None):
|
|
||||||
if self.connected == 1:
|
|
||||||
# We are connecting, keep mood in mem and send it when we'll be
|
|
||||||
# connected
|
|
||||||
self.to_be_sent_mood = (mood, message)
|
|
||||||
return
|
|
||||||
if not self.pep_supported:
|
|
||||||
return
|
|
||||||
item = nbxmpp.Node('mood', {'xmlns': nbxmpp.NS_MOOD})
|
|
||||||
if mood:
|
|
||||||
item.addChild(mood)
|
|
||||||
if message:
|
|
||||||
i = item.addChild('text')
|
|
||||||
i.addData(message)
|
|
||||||
self.get_module('PubSub').send_pb_publish('', nbxmpp.NS_MOOD, item, '0')
|
|
||||||
|
|
||||||
def retract_mood(self):
|
|
||||||
if not self.pep_supported:
|
|
||||||
return
|
|
||||||
self.send_mood(None)
|
|
||||||
# not all client support new XEP, so we still retract
|
|
||||||
self.get_module('PubSub').send_pb_retract('', nbxmpp.NS_MOOD, '0')
|
|
||||||
|
|
||||||
def send_nickname(self, nick):
|
def send_nickname(self, nick):
|
||||||
if self.connected == 1:
|
if self.connected == 1:
|
||||||
# We are connecting, keep nick in mem and send it when we'll be
|
# We are connecting, keep nick in mem and send it when we'll be
|
||||||
|
|
|
@ -4,6 +4,7 @@ from collections import namedtuple
|
||||||
Option = namedtuple('Option', 'kind label type value name callback data desc enabledif props')
|
Option = namedtuple('Option', 'kind label type value name callback data desc enabledif props')
|
||||||
Option.__new__.__defaults__ = (None,) * len(Option._fields)
|
Option.__new__.__defaults__ = (None,) * len(Option._fields)
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class OptionKind(IntEnum):
|
class OptionKind(IntEnum):
|
||||||
ENTRY = 0
|
ENTRY = 0
|
||||||
|
@ -20,6 +21,7 @@ class OptionKind(IntEnum):
|
||||||
CHANGEPASSWORD = 11
|
CHANGEPASSWORD = 11
|
||||||
GPG = 12
|
GPG = 12
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class OptionType(IntEnum):
|
class OptionType(IntEnum):
|
||||||
ACCOUNT_CONFIG = 0
|
ACCOUNT_CONFIG = 0
|
||||||
|
@ -28,6 +30,7 @@ class OptionType(IntEnum):
|
||||||
ACTION = 3
|
ACTION = 3
|
||||||
DIALOG = 4
|
DIALOG = 4
|
||||||
|
|
||||||
|
|
||||||
class AvatarSize(IntEnum):
|
class AvatarSize(IntEnum):
|
||||||
TAB = 16
|
TAB = 16
|
||||||
ROSTER = 32
|
ROSTER = 32
|
||||||
|
@ -37,22 +40,26 @@ class AvatarSize(IntEnum):
|
||||||
VCARD = 200
|
VCARD = 200
|
||||||
PUBLISH = 200
|
PUBLISH = 200
|
||||||
|
|
||||||
|
|
||||||
class ArchiveState(IntEnum):
|
class ArchiveState(IntEnum):
|
||||||
NEVER = 0
|
NEVER = 0
|
||||||
ALL = 1
|
ALL = 1
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class PathLocation(IntEnum):
|
class PathLocation(IntEnum):
|
||||||
CONFIG = 0
|
CONFIG = 0
|
||||||
CACHE = 1
|
CACHE = 1
|
||||||
DATA = 2
|
DATA = 2
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class PathType(IntEnum):
|
class PathType(IntEnum):
|
||||||
FILE = 0
|
FILE = 0
|
||||||
FOLDER = 1
|
FOLDER = 1
|
||||||
FOLDER_OPTIONAL = 2
|
FOLDER_OPTIONAL = 2
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class KindConstant(IntEnum):
|
class KindConstant(IntEnum):
|
||||||
STATUS = 0
|
STATUS = 0
|
||||||
|
@ -67,6 +74,7 @@ class KindConstant(IntEnum):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.value)
|
return str(self.value)
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class ShowConstant(IntEnum):
|
class ShowConstant(IntEnum):
|
||||||
ONLINE = 0
|
ONLINE = 0
|
||||||
|
@ -76,6 +84,7 @@ class ShowConstant(IntEnum):
|
||||||
DND = 4
|
DND = 4
|
||||||
OFFLINE = 5
|
OFFLINE = 5
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class TypeConstant(IntEnum):
|
class TypeConstant(IntEnum):
|
||||||
AIM = 0
|
AIM = 0
|
||||||
|
@ -94,6 +103,7 @@ class TypeConstant(IntEnum):
|
||||||
MRIM = 13
|
MRIM = 13
|
||||||
NO_TRANSPORT = 14
|
NO_TRANSPORT = 14
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class SubscriptionConstant(IntEnum):
|
class SubscriptionConstant(IntEnum):
|
||||||
NONE = 0
|
NONE = 0
|
||||||
|
@ -101,11 +111,13 @@ class SubscriptionConstant(IntEnum):
|
||||||
FROM = 2
|
FROM = 2
|
||||||
BOTH = 3
|
BOTH = 3
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class JIDConstant(IntEnum):
|
class JIDConstant(IntEnum):
|
||||||
NORMAL_TYPE = 0
|
NORMAL_TYPE = 0
|
||||||
ROOM_TYPE = 1
|
ROOM_TYPE = 1
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class IdleState(IntEnum):
|
class IdleState(IntEnum):
|
||||||
UNKNOWN = 0
|
UNKNOWN = 0
|
||||||
|
@ -113,26 +125,31 @@ class IdleState(IntEnum):
|
||||||
AWAY = 2
|
AWAY = 2
|
||||||
AWAKE = 3
|
AWAKE = 3
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class RequestAvatar(IntEnum):
|
class RequestAvatar(IntEnum):
|
||||||
SELF = 0
|
SELF = 0
|
||||||
ROOM = 1
|
ROOM = 1
|
||||||
USER = 2
|
USER = 2
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class BookmarkStorageType(IntEnum):
|
class BookmarkStorageType(IntEnum):
|
||||||
PRIVATE = 0
|
PRIVATE = 0
|
||||||
PUBSUB = 1
|
PUBSUB = 1
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class PEPHandlerType(IntEnum):
|
class PEPHandlerType(IntEnum):
|
||||||
NOTIFY = 0
|
NOTIFY = 0
|
||||||
RETRACT = 1
|
RETRACT = 1
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class PEPEventType(IntEnum):
|
class PEPEventType(IntEnum):
|
||||||
ACTIVITY = 0
|
ACTIVITY = 0
|
||||||
TUNE = 1
|
TUNE = 1
|
||||||
|
MOOD = 2
|
||||||
|
|
||||||
|
|
||||||
ACTIVITIES = {
|
ACTIVITIES = {
|
||||||
|
@ -226,6 +243,93 @@ ACTIVITIES = {
|
||||||
'studying': _('Studying'),
|
'studying': _('Studying'),
|
||||||
'writing': _('Writing')}}
|
'writing': _('Writing')}}
|
||||||
|
|
||||||
|
MOODS = {
|
||||||
|
'afraid': _('Afraid'),
|
||||||
|
'amazed': _('Amazed'),
|
||||||
|
'amorous': _('Amorous'),
|
||||||
|
'angry': _('Angry'),
|
||||||
|
'annoyed': _('Annoyed'),
|
||||||
|
'anxious': _('Anxious'),
|
||||||
|
'aroused': _('Aroused'),
|
||||||
|
'ashamed': _('Ashamed'),
|
||||||
|
'bored': _('Bored'),
|
||||||
|
'brave': _('Brave'),
|
||||||
|
'calm': _('Calm'),
|
||||||
|
'cautious': _('Cautious'),
|
||||||
|
'cold': _('Cold'),
|
||||||
|
'confident': _('Confident'),
|
||||||
|
'confused': _('Confused'),
|
||||||
|
'contemplative': _('Contemplative'),
|
||||||
|
'contented': _('Contented'),
|
||||||
|
'cranky': _('Cranky'),
|
||||||
|
'crazy': _('Crazy'),
|
||||||
|
'creative': _('Creative'),
|
||||||
|
'curious': _('Curious'),
|
||||||
|
'dejected': _('Dejected'),
|
||||||
|
'depressed': _('Depressed'),
|
||||||
|
'disappointed': _('Disappointed'),
|
||||||
|
'disgusted': _('Disgusted'),
|
||||||
|
'dismayed': _('Dismayed'),
|
||||||
|
'distracted': _('Distracted'),
|
||||||
|
'embarrassed': _('Embarrassed'),
|
||||||
|
'envious': _('Envious'),
|
||||||
|
'excited': _('Excited'),
|
||||||
|
'flirtatious': _('Flirtatious'),
|
||||||
|
'frustrated': _('Frustrated'),
|
||||||
|
'grateful': _('Grateful'),
|
||||||
|
'grieving': _('Grieving'),
|
||||||
|
'grumpy': _('Grumpy'),
|
||||||
|
'guilty': _('Guilty'),
|
||||||
|
'happy': _('Happy'),
|
||||||
|
'hopeful': _('Hopeful'),
|
||||||
|
'hot': _('Hot'),
|
||||||
|
'humbled': _('Humbled'),
|
||||||
|
'humiliated': _('Humiliated'),
|
||||||
|
'hungry': _('Hungry'),
|
||||||
|
'hurt': _('Hurt'),
|
||||||
|
'impressed': _('Impressed'),
|
||||||
|
'in_awe': _('In Awe'),
|
||||||
|
'in_love': _('In Love'),
|
||||||
|
'indignant': _('Indignant'),
|
||||||
|
'interested': _('Interested'),
|
||||||
|
'intoxicated': _('Intoxicated'),
|
||||||
|
'invincible': _('Invincible'),
|
||||||
|
'jealous': _('Jealous'),
|
||||||
|
'lonely': _('Lonely'),
|
||||||
|
'lost': _('Lost'),
|
||||||
|
'lucky': _('Lucky'),
|
||||||
|
'mean': _('Mean'),
|
||||||
|
'moody': _('Moody'),
|
||||||
|
'nervous': _('Nervous'),
|
||||||
|
'neutral': _('Neutral'),
|
||||||
|
'offended': _('Offended'),
|
||||||
|
'outraged': _('Outraged'),
|
||||||
|
'playful': _('Playful'),
|
||||||
|
'proud': _('Proud'),
|
||||||
|
'relaxed': _('Relaxed'),
|
||||||
|
'relieved': _('Relieved'),
|
||||||
|
'remorseful': _('Remorseful'),
|
||||||
|
'restless': _('Restless'),
|
||||||
|
'sad': _('Sad'),
|
||||||
|
'sarcastic': _('Sarcastic'),
|
||||||
|
'satisfied': _('Satisfied'),
|
||||||
|
'serious': _('Serious'),
|
||||||
|
'shocked': _('Shocked'),
|
||||||
|
'shy': _('Shy'),
|
||||||
|
'sick': _('Sick'),
|
||||||
|
'sleepy': _('Sleepy'),
|
||||||
|
'spontaneous': _('Spontaneous'),
|
||||||
|
'stressed': _('Stressed'),
|
||||||
|
'strong': _('Strong'),
|
||||||
|
'surprised': _('Surprised'),
|
||||||
|
'thankful': _('Thankful'),
|
||||||
|
'thirsty': _('Thirsty'),
|
||||||
|
'tired': _('Tired'),
|
||||||
|
'undefined': _('Undefined'),
|
||||||
|
'weak': _('Weak'),
|
||||||
|
'worried': _('Worried')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SSLError = {
|
SSLError = {
|
||||||
2: _("Unable to get issuer certificate"),
|
2: _("Unable to get issuer certificate"),
|
||||||
|
@ -260,7 +364,7 @@ SSLError = {
|
||||||
31: _("Authority and issuer serial number mismatch"),
|
31: _("Authority and issuer serial number mismatch"),
|
||||||
32: _("Key usage does not include certificate signing"),
|
32: _("Key usage does not include certificate signing"),
|
||||||
50: _("Application verification failure"),
|
50: _("Application verification failure"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
THANKS = u"""\
|
THANKS = u"""\
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
# This file is part of Gajim.
|
||||||
|
#
|
||||||
|
# Gajim is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published
|
||||||
|
# by the Free Software Foundation; version 3 only.
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
# 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# XEP-0107: User Mood
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
log = logging.getLogger('gajim.c.m.user_mood')
|
||||||
|
|
||||||
|
|
||||||
|
class UserMoodData(AbstractPEPData):
|
||||||
|
|
||||||
|
type_ = PEPEventType.MOOD
|
||||||
|
|
||||||
|
def __init__(self, mood):
|
||||||
|
self._pep_specific_data = mood
|
||||||
|
|
||||||
|
def asMarkupText(self):
|
||||||
|
mood = self._translate_mood(self._pep_specific_data['mood'])
|
||||||
|
markuptext = '<b>%s</b>' % GLib.markup_escape_text(mood)
|
||||||
|
if 'text' in self._pep_specific_data:
|
||||||
|
text = self._pep_specific_data['text']
|
||||||
|
markuptext += ' (%s)' % GLib.markup_escape_text(text)
|
||||||
|
return markuptext
|
||||||
|
|
||||||
|
def _translate_mood(self, mood):
|
||||||
|
if mood in MOODS:
|
||||||
|
return MOODS[mood]
|
||||||
|
else:
|
||||||
|
return mood
|
||||||
|
|
||||||
|
|
||||||
|
class UserMood(AbstractPEPModule):
|
||||||
|
|
||||||
|
name = 'mood'
|
||||||
|
namespace = nbxmpp.NS_MOOD
|
||||||
|
pep_class = UserMoodData
|
||||||
|
store_publish = True
|
||||||
|
_log = log
|
||||||
|
|
||||||
|
def __init__(self, con):
|
||||||
|
AbstractPEPModule.__init__(self, con, con.name)
|
||||||
|
|
||||||
|
self.handlers = []
|
||||||
|
|
||||||
|
def _extract_info(self, item):
|
||||||
|
mood_dict = {}
|
||||||
|
mood_tag = item.getTag('mood', namespace=nbxmpp.NS_MOOD)
|
||||||
|
if mood_tag is None:
|
||||||
|
raise StanzaMalformed('No mood node')
|
||||||
|
|
||||||
|
for child in mood_tag.getChildren():
|
||||||
|
name = child.getName().strip()
|
||||||
|
if name == 'text':
|
||||||
|
mood_dict['text'] = child.getData()
|
||||||
|
else:
|
||||||
|
mood_dict['mood'] = name
|
||||||
|
|
||||||
|
return mood_dict or None
|
||||||
|
|
||||||
|
def _build_node(self, data):
|
||||||
|
item = nbxmpp.Node('mood', {'xmlns': nbxmpp.NS_MOOD})
|
||||||
|
if data is None:
|
||||||
|
return
|
||||||
|
mood, text = data
|
||||||
|
if mood:
|
||||||
|
item.addChild(mood)
|
||||||
|
if text:
|
||||||
|
item.addChild('text', payload=text)
|
||||||
|
return item
|
|
@ -23,92 +23,6 @@
|
||||||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||||
##
|
##
|
||||||
|
|
||||||
MOODS = {
|
|
||||||
'afraid': _('Afraid'),
|
|
||||||
'amazed': _('Amazed'),
|
|
||||||
'amorous': _('Amorous'),
|
|
||||||
'angry': _('Angry'),
|
|
||||||
'annoyed': _('Annoyed'),
|
|
||||||
'anxious': _('Anxious'),
|
|
||||||
'aroused': _('Aroused'),
|
|
||||||
'ashamed': _('Ashamed'),
|
|
||||||
'bored': _('Bored'),
|
|
||||||
'brave': _('Brave'),
|
|
||||||
'calm': _('Calm'),
|
|
||||||
'cautious': _('Cautious'),
|
|
||||||
'cold': _('Cold'),
|
|
||||||
'confident': _('Confident'),
|
|
||||||
'confused': _('Confused'),
|
|
||||||
'contemplative': _('Contemplative'),
|
|
||||||
'contented': _('Contented'),
|
|
||||||
'cranky': _('Cranky'),
|
|
||||||
'crazy': _('Crazy'),
|
|
||||||
'creative': _('Creative'),
|
|
||||||
'curious': _('Curious'),
|
|
||||||
'dejected': _('Dejected'),
|
|
||||||
'depressed': _('Depressed'),
|
|
||||||
'disappointed': _('Disappointed'),
|
|
||||||
'disgusted': _('Disgusted'),
|
|
||||||
'dismayed': _('Dismayed'),
|
|
||||||
'distracted': _('Distracted'),
|
|
||||||
'embarrassed': _('Embarrassed'),
|
|
||||||
'envious': _('Envious'),
|
|
||||||
'excited': _('Excited'),
|
|
||||||
'flirtatious': _('Flirtatious'),
|
|
||||||
'frustrated': _('Frustrated'),
|
|
||||||
'grateful': _('Grateful'),
|
|
||||||
'grieving': _('Grieving'),
|
|
||||||
'grumpy': _('Grumpy'),
|
|
||||||
'guilty': _('Guilty'),
|
|
||||||
'happy': _('Happy'),
|
|
||||||
'hopeful': _('Hopeful'),
|
|
||||||
'hot': _('Hot'),
|
|
||||||
'humbled': _('Humbled'),
|
|
||||||
'humiliated': _('Humiliated'),
|
|
||||||
'hungry': _('Hungry'),
|
|
||||||
'hurt': _('Hurt'),
|
|
||||||
'impressed': _('Impressed'),
|
|
||||||
'in_awe': _('In Awe'),
|
|
||||||
'in_love': _('In Love'),
|
|
||||||
'indignant': _('Indignant'),
|
|
||||||
'interested': _('Interested'),
|
|
||||||
'intoxicated': _('Intoxicated'),
|
|
||||||
'invincible': _('Invincible'),
|
|
||||||
'jealous': _('Jealous'),
|
|
||||||
'lonely': _('Lonely'),
|
|
||||||
'lost': _('Lost'),
|
|
||||||
'lucky': _('Lucky'),
|
|
||||||
'mean': _('Mean'),
|
|
||||||
'moody': _('Moody'),
|
|
||||||
'nervous': _('Nervous'),
|
|
||||||
'neutral': _('Neutral'),
|
|
||||||
'offended': _('Offended'),
|
|
||||||
'outraged': _('Outraged'),
|
|
||||||
'playful': _('Playful'),
|
|
||||||
'proud': _('Proud'),
|
|
||||||
'relaxed': _('Relaxed'),
|
|
||||||
'relieved': _('Relieved'),
|
|
||||||
'remorseful': _('Remorseful'),
|
|
||||||
'restless': _('Restless'),
|
|
||||||
'sad': _('Sad'),
|
|
||||||
'sarcastic': _('Sarcastic'),
|
|
||||||
'satisfied': _('Satisfied'),
|
|
||||||
'serious': _('Serious'),
|
|
||||||
'shocked': _('Shocked'),
|
|
||||||
'shy': _('Shy'),
|
|
||||||
'sick': _('Sick'),
|
|
||||||
'sleepy': _('Sleepy'),
|
|
||||||
'spontaneous': _('Spontaneous'),
|
|
||||||
'stressed': _('Stressed'),
|
|
||||||
'strong': _('Strong'),
|
|
||||||
'surprised': _('Surprised'),
|
|
||||||
'thankful': _('Thankful'),
|
|
||||||
'thirsty': _('Thirsty'),
|
|
||||||
'tired': _('Tired'),
|
|
||||||
'undefined': _('Undefined'),
|
|
||||||
'weak': _('Weak'),
|
|
||||||
'worried': _('Worried')}
|
|
||||||
|
|
||||||
LOCATION_DATA = {
|
LOCATION_DATA = {
|
||||||
'accuracy': _('accuracy'),
|
'accuracy': _('accuracy'),
|
||||||
'alt': _('alt'),
|
'alt': _('alt'),
|
||||||
|
@ -193,45 +107,6 @@ class AbstractPEP(object):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class UserMoodPEP(AbstractPEP):
|
|
||||||
'''XEP-0107: User Mood'''
|
|
||||||
|
|
||||||
type_ = 'mood'
|
|
||||||
namespace = nbxmpp.NS_MOOD
|
|
||||||
|
|
||||||
def _extract_info(self, items):
|
|
||||||
mood_dict = {}
|
|
||||||
|
|
||||||
for item in items.getTags('item'):
|
|
||||||
mood_tag = item.getTag('mood')
|
|
||||||
if mood_tag:
|
|
||||||
for child in mood_tag.getChildren():
|
|
||||||
name = child.getName().strip()
|
|
||||||
if name == 'text':
|
|
||||||
mood_dict['text'] = child.getData()
|
|
||||||
else:
|
|
||||||
mood_dict['mood'] = name
|
|
||||||
|
|
||||||
retracted = items.getTag('retract') or not 'mood' in mood_dict
|
|
||||||
return (mood_dict, retracted)
|
|
||||||
|
|
||||||
def asMarkupText(self):
|
|
||||||
assert not self._retracted
|
|
||||||
untranslated_mood = self._pep_specific_data['mood']
|
|
||||||
mood = self._translate_mood(untranslated_mood)
|
|
||||||
markuptext = '<b>%s</b>' % GLib.markup_escape_text(mood)
|
|
||||||
if 'text' in self._pep_specific_data:
|
|
||||||
text = self._pep_specific_data['text']
|
|
||||||
markuptext += ' (%s)' % GLib.markup_escape_text(text)
|
|
||||||
return markuptext
|
|
||||||
|
|
||||||
def _translate_mood(self, mood):
|
|
||||||
if mood in MOODS:
|
|
||||||
return MOODS[mood]
|
|
||||||
else:
|
|
||||||
return mood
|
|
||||||
|
|
||||||
|
|
||||||
class UserNicknamePEP(AbstractPEP):
|
class UserNicknamePEP(AbstractPEP):
|
||||||
'''XEP-0172: User Nickname'''
|
'''XEP-0172: User Nickname'''
|
||||||
|
|
||||||
|
@ -347,5 +222,4 @@ class AvatarNotificationPEP(AbstractPEP):
|
||||||
|
|
||||||
|
|
||||||
SUPPORTED_PERSONAL_USER_EVENTS = [
|
SUPPORTED_PERSONAL_USER_EVENTS = [
|
||||||
UserMoodPEP,
|
|
||||||
UserNicknamePEP, UserLocationPEP, AvatarNotificationPEP]
|
UserNicknamePEP, UserLocationPEP, AvatarNotificationPEP]
|
||||||
|
|
|
@ -52,6 +52,7 @@ from gajim.common import ged
|
||||||
from gajim.common import const
|
from gajim.common import const
|
||||||
from gajim.options_dialog import OptionsDialog
|
from gajim.options_dialog import OptionsDialog
|
||||||
from gajim.common.const import Option, OptionKind, OptionType, ACTIVITIES
|
from gajim.common.const import Option, OptionKind, OptionType, ACTIVITIES
|
||||||
|
from gajim.common.const import MOODS
|
||||||
|
|
||||||
from gajim.common import app
|
from gajim.common import app
|
||||||
from gajim.common import helpers
|
from gajim.common import helpers
|
||||||
|
@ -505,7 +506,7 @@ class ChangeMoodDialog:
|
||||||
|
|
||||||
# Order them first
|
# Order them first
|
||||||
self.MOODS = []
|
self.MOODS = []
|
||||||
for mood in pep.MOODS:
|
for mood in MOODS:
|
||||||
self.MOODS.append(mood)
|
self.MOODS.append(mood)
|
||||||
self.MOODS.sort()
|
self.MOODS.sort()
|
||||||
|
|
||||||
|
@ -515,7 +516,7 @@ class ChangeMoodDialog:
|
||||||
self.mood_buttons[mood].set_mode(False)
|
self.mood_buttons[mood].set_mode(False)
|
||||||
self.mood_buttons[mood].add(gtkgui_helpers.load_mood_icon(mood))
|
self.mood_buttons[mood].add(gtkgui_helpers.load_mood_icon(mood))
|
||||||
self.mood_buttons[mood].set_relief(Gtk.ReliefStyle.NONE)
|
self.mood_buttons[mood].set_relief(Gtk.ReliefStyle.NONE)
|
||||||
self.mood_buttons[mood].set_tooltip_text(pep.MOODS[mood])
|
self.mood_buttons[mood].set_tooltip_text(MOODS[mood])
|
||||||
self.mood_buttons[mood].connect('clicked',
|
self.mood_buttons[mood].connect('clicked',
|
||||||
self.on_mood_button_clicked, mood)
|
self.on_mood_button_clicked, mood)
|
||||||
table.attach(self.mood_buttons[mood], x, y, 1, 1)
|
table.attach(self.mood_buttons[mood], x, y, 1, 1)
|
||||||
|
@ -526,9 +527,9 @@ class ChangeMoodDialog:
|
||||||
x = 0
|
x = 0
|
||||||
y += 1
|
y += 1
|
||||||
|
|
||||||
if self.mood in pep.MOODS:
|
if self.mood in MOODS:
|
||||||
self.mood_buttons[self.mood].set_active(True)
|
self.mood_buttons[self.mood].set_active(True)
|
||||||
self.label.set_text(pep.MOODS[self.mood])
|
self.label.set_text(MOODS[self.mood])
|
||||||
self.entry.set_sensitive(True)
|
self.entry.set_sensitive(True)
|
||||||
if self.text:
|
if self.text:
|
||||||
self.entry.set_text(self.text)
|
self.entry.set_text(self.text)
|
||||||
|
@ -543,7 +544,7 @@ class ChangeMoodDialog:
|
||||||
|
|
||||||
def on_mood_button_clicked(self, widget, data):
|
def on_mood_button_clicked(self, widget, data):
|
||||||
if data:
|
if data:
|
||||||
self.label.set_text(pep.MOODS[data])
|
self.label.set_text(MOODS[data])
|
||||||
self.entry.set_sensitive(True)
|
self.entry.set_sensitive(True)
|
||||||
else:
|
else:
|
||||||
self.label.set_text(_('None'))
|
self.label.set_text(_('None'))
|
||||||
|
@ -705,7 +706,7 @@ class ChangeStatusMessageDialog(TimeoutDialog):
|
||||||
"""
|
"""
|
||||||
img = self.xml.get_object('mood_image')
|
img = self.xml.get_object('mood_image')
|
||||||
label = self.xml.get_object('mood_button_label')
|
label = self.xml.get_object('mood_button_label')
|
||||||
if 'mood' in self.pep_dict and self.pep_dict['mood'] in pep.MOODS:
|
if 'mood' in self.pep_dict and self.pep_dict['mood'] in MOODS:
|
||||||
img.set_from_pixbuf(gtkgui_helpers.load_mood_icon(
|
img.set_from_pixbuf(gtkgui_helpers.load_mood_icon(
|
||||||
self.pep_dict['mood']).get_pixbuf())
|
self.pep_dict['mood']).get_pixbuf())
|
||||||
if self.pep_dict['mood_text']:
|
if self.pep_dict['mood_text']:
|
||||||
|
|
|
@ -52,7 +52,7 @@ from gajim.common import i18n
|
||||||
from gajim.common import app
|
from gajim.common import app
|
||||||
from gajim.common import pep
|
from gajim.common import pep
|
||||||
from gajim.common import configpaths
|
from gajim.common import configpaths
|
||||||
from gajim.common.const import PEPEventType, ACTIVITIES
|
from gajim.common.const import PEPEventType, ACTIVITIES, MOODS
|
||||||
from gajim.filechoosers import AvatarSaveDialog
|
from gajim.filechoosers import AvatarSaveDialog
|
||||||
|
|
||||||
gtk_icon_theme = Gtk.IconTheme.get_default()
|
gtk_icon_theme = Gtk.IconTheme.get_default()
|
||||||
|
@ -623,10 +623,9 @@ def load_activity_icon(category, activity = None):
|
||||||
return icon_list[activity]
|
return icon_list[activity]
|
||||||
|
|
||||||
def get_pep_as_pixbuf(pep_class):
|
def get_pep_as_pixbuf(pep_class):
|
||||||
if isinstance(pep_class, pep.UserMoodPEP):
|
if pep_class == PEPEventType.MOOD:
|
||||||
assert not pep_class._retracted
|
|
||||||
received_mood = pep_class._pep_specific_data['mood']
|
received_mood = pep_class._pep_specific_data['mood']
|
||||||
mood = received_mood if received_mood in pep.MOODS else 'unknown'
|
mood = received_mood if received_mood in MOODS else 'unknown'
|
||||||
pixbuf = load_mood_icon(mood).get_pixbuf()
|
pixbuf = load_mood_icon(mood).get_pixbuf()
|
||||||
return pixbuf
|
return pixbuf
|
||||||
elif pep_class == PEPEventType.TUNE:
|
elif pep_class == PEPEventType.TUNE:
|
||||||
|
|
|
@ -99,7 +99,8 @@ from gajim.common.connection import Connection
|
||||||
from gajim.common.file_props import FilesProp
|
from gajim.common.file_props import FilesProp
|
||||||
from gajim.common import pep
|
from gajim.common import pep
|
||||||
from gajim import emoticons
|
from gajim import emoticons
|
||||||
from gajim.common.const import AvatarSize, SSLError, PEPEventType, ACTIVITIES
|
from gajim.common.const import AvatarSize, SSLError, PEPEventType
|
||||||
|
from gajim.common.const import ACTIVITIES, MOODS
|
||||||
|
|
||||||
from gajim import roster_window
|
from gajim import roster_window
|
||||||
from gajim import profile_window
|
from gajim import profile_window
|
||||||
|
@ -2474,9 +2475,9 @@ class Interface:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_pep_icon(pep_obj):
|
def get_pep_icon(pep_obj):
|
||||||
if isinstance(pep_obj, pep.UserMoodPEP):
|
if pep_obj == PEPEventType.MOOD:
|
||||||
received_mood = pep_obj._pep_specific_data['mood']
|
received_mood = pep_obj._pep_specific_data['mood']
|
||||||
mood = received_mood if received_mood in pep.MOODS else 'unknown'
|
mood = received_mood if received_mood in MOODS else 'unknown'
|
||||||
return gtkgui_helpers.load_mood_icon(mood).get_pixbuf()
|
return gtkgui_helpers.load_mood_icon(mood).get_pixbuf()
|
||||||
elif pep_obj == PEPEventType.TUNE:
|
elif pep_obj == PEPEventType.TUNE:
|
||||||
path = os.path.join(
|
path = os.path.join(
|
||||||
|
|
|
@ -2107,9 +2107,9 @@ class RosterWindow:
|
||||||
if 'mood' in pep_dict:
|
if 'mood' in pep_dict:
|
||||||
mood = pep_dict['mood']
|
mood = pep_dict['mood']
|
||||||
mood_text = pep_dict.get('mood_text', None)
|
mood_text = pep_dict.get('mood_text', None)
|
||||||
connection.send_mood(mood, mood_text)
|
connection.get_module('UserMood').send((mood, mood_text))
|
||||||
else:
|
else:
|
||||||
connection.retract_mood()
|
connection.get_module('UserMood').retract()
|
||||||
|
|
||||||
def delete_pep(self, jid, account):
|
def delete_pep(self, jid, account):
|
||||||
if jid == app.get_jid_from_account(account):
|
if jid == app.get_jid_from_account(account):
|
||||||
|
|
Loading…
Reference in New Issue