Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
gajim
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
203
Issues
203
List
Boards
Labels
Service Desk
Milestones
Merge Requests
22
Merge Requests
22
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gajim
gajim
Commits
1c09b507
Commit
1c09b507
authored
Nov 30, 2018
by
Philipp Hörist
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use custom dict for additional data
This makes it easier to retrive and store values
parent
b4f43acb
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
102 additions
and
67 deletions
+102
-67
gajim/chat_control.py
gajim/chat_control.py
+2
-1
gajim/chat_control_base.py
gajim/chat_control_base.py
+2
-1
gajim/common/connection_handlers_events.py
gajim/common/connection_handlers_events.py
+6
-16
gajim/common/events.py
gajim/common/events.py
+2
-1
gajim/common/helpers.py
gajim/common/helpers.py
+49
-0
gajim/common/logger.py
gajim/common/logger.py
+5
-2
gajim/common/modules/httpupload.py
gajim/common/modules/httpupload.py
+1
-4
gajim/common/modules/mam.py
gajim/common/modules/mam.py
+4
-2
gajim/common/modules/message.py
gajim/common/modules/message.py
+5
-3
gajim/common/modules/misc.py
gajim/common/modules/misc.py
+6
-15
gajim/common/zeroconf/connection_handlers_zeroconf.py
gajim/common/zeroconf/connection_handlers_zeroconf.py
+3
-2
gajim/conversation_textview.py
gajim/conversation_textview.py
+12
-17
gajim/groupchat_control.py
gajim/groupchat_control.py
+3
-2
gajim/session.py
gajim/session.py
+2
-1
No files found.
gajim/chat_control.py
View file @
1c09b507
...
...
@@ -42,6 +42,7 @@
from
gajim.common
import
ged
from
gajim.common
import
i18n
from
gajim.common.i18n
import
_
from
gajim.common.helpers
import
AdditionalDataDict
from
gajim.common.contacts
import
GC_Contact
from
gajim.common.const
import
AvatarSize
from
gajim.common.const
import
KindConstant
...
...
@@ -933,7 +934,7 @@ def print_conversation(self, text, frm='', tim=None, encrypted=None,
contact
=
self
.
contact
if
additional_data
is
None
:
additional_data
=
{}
additional_data
=
AdditionalDataDict
()
if
frm
==
'status'
:
if
not
app
.
config
.
get
(
'print_status_in_chats'
):
...
...
gajim/chat_control_base.py
View file @
1c09b507
...
...
@@ -38,6 +38,7 @@
from
gajim.common
import
ged
from
gajim.common
import
i18n
from
gajim.common.i18n
import
_
from
gajim.common.helpers
import
AdditionalDataDict
from
gajim.common.contacts
import
GC_Contact
from
gajim.common.connection_handlers_events
import
MessageOutgoingEvent
from
gajim.common.const
import
StyleAttr
...
...
@@ -905,7 +906,7 @@ def print_conversation_line(self, text, kind, name, tim,
if
other_tags_for_text
is
None
:
other_tags_for_text
=
[]
if
additional_data
is
None
:
additional_data
=
{}
additional_data
=
AdditionalDataDict
()
textview
.
print_conversation_line
(
text
,
jid
,
kind
,
name
,
tim
,
other_tags_for_name
,
other_tags_for_time
,
other_tags_for_text
,
...
...
gajim/common/connection_handlers_events.py
View file @
1c09b507
...
...
@@ -28,6 +28,7 @@
from
gajim.common
import
app
from
gajim.common
import
i18n
from
gajim.common.i18n
import
_
from
gajim.common.helpers
import
AdditionalDataDict
from
gajim.common.modules
import
dataforms
from
gajim.common.modules.misc
import
parse_idle
from
gajim.common.modules.misc
import
parse_delay
...
...
@@ -91,14 +92,12 @@ def get_gc_control(self):
def
get_oob_data
(
self
,
stanza
):
oob_node
=
stanza
.
getTag
(
'x'
,
namespace
=
nbxmpp
.
NS_X_OOB
)
if
oob_node
is
not
None
:
if
'gajim'
not
in
self
.
additional_data
:
self
.
additional_data
[
'gajim'
]
=
{}
oob_url
=
oob_node
.
getTagData
(
'url'
)
if
oob_url
is
not
None
:
self
.
additional_data
[
'gajim'
][
'oob_url'
]
=
oob_url
self
.
additional_data
.
set_value
(
'gajim'
,
'oob_url'
,
oob_url
)
oob_desc
=
oob_node
.
getTagData
(
'desc'
)
if
oob_desc
is
not
None
:
self
.
additional_data
[
'gajim'
][
'oob_desc'
]
=
oob_desc
self
.
additional_data
.
set_value
(
'gajim'
,
'oob_desc'
,
oob_desc
)
def
get_stanza_id
(
self
,
stanza
,
query
=
False
):
if
query
:
...
...
@@ -407,7 +406,7 @@ class GcMessageReceivedEvent(nec.NetworkIncomingEvent):
def
generate
(
self
):
self
.
stanza
=
self
.
msg_obj
.
stanza
if
not
hasattr
(
self
.
msg_obj
,
'additional_data'
):
self
.
additional_data
=
{}
self
.
additional_data
=
AdditionalDataDict
()
else
:
self
.
additional_data
=
self
.
msg_obj
.
additional_data
self
.
id_
=
self
.
msg_obj
.
stanza
.
getID
()
...
...
@@ -626,18 +625,9 @@ class ConnectionTypeEvent(nec.NetworkIncomingEvent):
class
StanzaReceivedEvent
(
nec
.
NetworkIncomingEvent
):
name
=
'stanza-received'
def
init
(
self
):
self
.
additional_data
=
{}
def
generate
(
self
):
return
True
class
StanzaSentEvent
(
nec
.
NetworkIncomingEvent
):
name
=
'stanza-sent'
def
init
(
self
):
self
.
additional_data
=
{}
class
AgentRemovedEvent
(
nec
.
NetworkIncomingEvent
):
name
=
'agent-removed'
...
...
@@ -1158,7 +1148,7 @@ class MessageOutgoingEvent(nec.NetworkOutgoingEvent):
name
=
'message-outgoing'
def
init
(
self
):
self
.
additional_data
=
{}
self
.
additional_data
=
AdditionalDataDict
()
self
.
message
=
None
self
.
keyID
=
None
self
.
type_
=
'chat'
...
...
@@ -1211,7 +1201,7 @@ class GcMessageOutgoingEvent(nec.NetworkOutgoingEvent):
name
=
'gc-message-outgoing'
def
init
(
self
):
self
.
additional_data
=
{}
self
.
additional_data
=
AdditionalDataDict
()
self
.
message
=
''
self
.
chatstate
=
None
self
.
xhtml
=
None
...
...
gajim/common/events.py
View file @
1c09b507
...
...
@@ -81,7 +81,8 @@ def __init__(self, message, subject, kind, time_, encrypted, resource,
self
.
displaymarking
=
displaymarking
self
.
sent_forwarded
=
sent_forwarded
if
additional_data
is
None
:
additional_data
=
{}
from
gajim.common.helpers
import
AdditionalDataDict
additional_data
=
AdditionalDataDict
()
self
.
additional_data
=
additional_data
class
NormalEvent
(
ChatEvent
):
...
...
gajim/common/helpers.py
View file @
1c09b507
...
...
@@ -41,6 +41,7 @@
import
logging
import
json
import
shutil
import
collections
from
datetime
import
datetime
,
timedelta
from
distutils.version
import
LooseVersion
as
V
from
encodings.punycode
import
punycode_encode
...
...
@@ -1485,3 +1486,51 @@ def load_json(path, key=None, default=None):
if
key
is
None
:
return
json_dict
return
json_dict
.
get
(
key
,
default
)
class
AdditionalDataDict
(
collections
.
UserDict
):
def
__init__
(
self
,
initialdata
=
None
):
collections
.
UserDict
.
__init__
(
self
,
initialdata
)
@
staticmethod
def
_get_path_childs
(
full_path
):
path_childs
=
[
full_path
]
if
':'
in
full_path
:
path_childs
=
full_path
.
split
(
':'
)
return
path_childs
def
set_value
(
self
,
full_path
,
key
,
value
):
path_childs
=
self
.
_get_path_childs
(
full_path
)
_dict
=
self
.
data
for
path
in
path_childs
:
try
:
_dict
=
_dict
[
path
]
except
KeyError
:
_dict
[
path
]
=
{}
_dict
=
_dict
[
path
]
_dict
[
key
]
=
value
def
get_value
(
self
,
full_path
,
key
,
default
=
None
):
path_childs
=
self
.
_get_path_childs
(
full_path
)
_dict
=
self
.
data
for
path
in
path_childs
:
try
:
_dict
=
_dict
[
path
]
except
KeyError
:
return
default
try
:
return
_dict
[
key
]
except
KeyError
:
return
default
def
remove_value
(
self
,
full_path
,
key
):
path_childs
=
self
.
_get_path_childs
(
full_path
)
_dict
=
self
.
data
for
path
in
path_childs
:
try
:
_dict
=
_dict
[
path
]
except
KeyError
:
return
try
:
del
_dict
[
key
]
except
KeyError
:
return
gajim/common/logger.py
View file @
1c09b507
...
...
@@ -41,6 +41,7 @@
from
gajim.common
import
exceptions
from
gajim.common
import
app
from
gajim.common
import
configpaths
from
gajim.common.helpers
import
AdditionalDataDict
from
gajim.common.i18n
import
_
from
gajim.common.const
import
(
JIDConstant
,
KindConstant
,
ShowConstant
,
TypeConstant
,
...
...
@@ -265,8 +266,9 @@ def namedtuple_factory(self, cursor, row):
Row
=
namedtuple
(
"Row"
,
fields
)
named_row
=
Row
(
*
row
)
if
'additional_data'
in
fields
:
_dict
=
json
.
loads
(
named_row
.
additional_data
or
'{}'
)
named_row
=
named_row
.
_replace
(
additional_data
=
json
.
loads
(
named_row
.
additional_data
or
'{}'
))
additional_data
=
AdditionalDataDict
(
_dict
))
# if an alias `account` for the field `account_id` is used for the
# query, the account_id is converted to the account jid
...
...
@@ -1355,7 +1357,8 @@ def insert_into_logs(self, account, jid, time_, kind,
if
not
kwargs
[
'additional_data'
]:
del
kwargs
[
'additional_data'
]
else
:
kwargs
[
'additional_data'
]
=
json
.
dumps
(
kwargs
[
"additional_data"
])
serialized_dict
=
json
.
dumps
(
kwargs
[
"additional_data"
].
data
)
kwargs
[
'additional_data'
]
=
serialized_dict
sql
=
'''
INSERT INTO logs (account_id, jid_id, time, kind, {columns})
...
...
gajim/common/modules/httpupload.py
View file @
1c09b507
...
...
@@ -118,10 +118,7 @@ def handle_outgoing_stanza(self, event):
# to distinguish HTTP File Upload Link from pasted URL
oob
=
event
.
msg_iq
.
addChild
(
'x'
,
namespace
=
nbxmpp
.
NS_X_OOB
)
oob
.
addChild
(
'url'
).
setData
(
message
)
if
'gajim'
in
event
.
additional_data
:
event
.
additional_data
[
'gajim'
][
'oob_url'
]
=
message
else
:
event
.
additional_data
[
'gajim'
]
=
{
'oob_url'
:
message
}
event
.
additional_data
.
set_value
(
'gajim'
,
'oob_url'
,
message
)
def
check_file_before_transfer
(
self
,
path
,
encryption
,
contact
,
session
,
groupchat
=
False
):
...
...
gajim/common/modules/mam.py
View file @
1c09b507
...
...
@@ -27,6 +27,7 @@
from
gajim.common.const
import
SyncThreshold
from
gajim.common.caps_cache
import
muc_caps_cache
from
gajim.common.helpers
import
get_sync_threshold
from
gajim.common.helpers
import
AdditionalDataDict
from
gajim.common.modules.misc
import
parse_delay
from
gajim.common.modules.misc
import
parse_oob
from
gajim.common.modules.misc
import
parse_correction
...
...
@@ -179,7 +180,7 @@ def _mam_message_received(self, _con, stanza):
event_attrs
.
update
(
{
'conn'
:
self
.
_con
,
'additional_data'
:
{}
,
'additional_data'
:
AdditionalDataDict
()
,
'encrypted'
:
False
,
'timestamp'
:
delay_timestamp
,
'self_message'
:
self_message
,
...
...
@@ -192,6 +193,7 @@ def _mam_message_received(self, _con, stanza):
'archive_jid'
:
archive_jid
,
'msgtxt'
:
msgtxt
,
'message'
:
message
,
'stanza'
:
message
,
'namespace'
:
namespace
,
})
...
...
@@ -256,7 +258,7 @@ def _decryption_finished(self, event):
'gajim'
,
'user_timestamp'
,
user_timestamp
)
event
.
correct_id
=
parse_correction
(
event
.
message
)
parse_oob
(
event
.
message
,
event
.
additional_data
)
parse_oob
(
event
)
with_
=
event
.
with_
.
getStripped
()
if
event
.
muc_pm
:
...
...
gajim/common/modules/message.py
View file @
1c09b507
...
...
@@ -22,7 +22,9 @@
from
gajim.common
import
app
from
gajim.common
import
helpers
from
gajim.common.i18n
import
_
from
gajim.common.nec
import
NetworkIncomingEvent
,
NetworkEvent
from
gajim.common.nec
import
NetworkIncomingEvent
from
gajim.common.nec
import
NetworkEvent
from
gajim.common.helpers
import
AdditionalDataDict
from
gajim.common.modules.security_labels
import
parse_securitylabel
from
gajim.common.modules.user_nickname
import
parse_nickname
from
gajim.common.modules.carbons
import
parse_carbon
...
...
@@ -188,7 +190,7 @@ def _message_received(self, _con, stanza):
'account'
:
self
.
_account
,
'id_'
:
id_
,
'encrypted'
:
False
,
'additional_data'
:
{}
,
'additional_data'
:
AdditionalDataDict
()
,
'forwarded'
:
forwarded
,
'sent'
:
sent
,
'fjid'
:
fjid
,
...
...
@@ -266,7 +268,7 @@ def _on_message_decrypted(self, event):
'timestamp'
:
timestamp
,
'delayed'
:
user_timestamp
is
not
None
,
}
parse_oob
(
event
.
stanza
,
event
.
additional_data
)
parse_oob
(
event
)
for
name
,
value
in
event_attr
.
items
():
setattr
(
event
,
name
,
value
)
...
...
gajim/common/modules/misc.py
View file @
1c09b507
...
...
@@ -108,27 +108,18 @@ def parse_delay(stanza, epoch=True, convert='utc', from_=None, not_from=None):
# XEP-0066: Out of Band Data
def
parse_oob
(
stanza
,
dict_
=
None
,
key
=
'gajim'
):
oob_node
=
stanza
.
getTag
(
'x'
,
namespace
=
nbxmpp
.
NS_X_OOB
)
def
parse_oob
(
event
):
oob_node
=
event
.
stanza
.
getTag
(
'x'
,
namespace
=
nbxmpp
.
NS_X_OOB
)
if
oob_node
is
None
:
return
result
=
{}
url
=
oob_node
.
getTagData
(
'url'
)
if
url
is
not
None
:
result
[
'oob_url'
]
=
url
event
.
additional_data
.
set_value
(
'gajim'
,
'oob_url'
,
url
)
desc
=
oob_node
.
getTagData
(
'desc'
)
if
desc
is
not
None
:
result
[
'oob_desc'
]
=
desc
if
dict_
is
None
:
return
result
if
key
in
dict_
:
dict_
[
key
]
+=
result
else
:
dict_
[
key
]
=
result
return
dict_
event
.
additional_data
.
set_value
(
'gajim'
,
'oob_desc'
,
desc
)
# XEP-0308: Last Message Correction
...
...
gajim/common/zeroconf/connection_handlers_zeroconf.py
View file @
1c09b507
...
...
@@ -30,6 +30,7 @@
from
gajim.common.zeroconf.zeroconf
import
Constant
from
gajim.common
import
connection_handlers
from
gajim.common.i18n
import
_
from
gajim.common.helpers
import
AdditionalDataDict
from
gajim.common.nec
import
NetworkIncomingEvent
,
NetworkEvent
from
gajim.common.modules.user_nickname
import
parse_nickname
from
gajim.common.modules.misc
import
parse_eme
...
...
@@ -118,7 +119,7 @@ def _messageCB(self, ip, con, stanza):
'account'
:
self
.
name
,
'id_'
:
id_
,
'encrypted'
:
False
,
'additional_data'
:
{}
,
'additional_data'
:
AdditionalDataDict
()
,
'forwarded'
:
False
,
'sent'
:
False
,
'timestamp'
:
time
.
time
(),
...
...
@@ -165,7 +166,7 @@ def _on_message_decrypted(self, event):
'stanza_id'
:
event
.
unique_id
}
parse_oob
(
event
.
stanza
,
event
.
additional_data
)
parse_oob
(
event
)
for
name
,
value
in
event_attr
.
items
():
setattr
(
event
,
name
,
value
)
...
...
gajim/conversation_textview.py
View file @
1c09b507
...
...
@@ -39,6 +39,7 @@
from
gajim.common
import
helpers
from
gajim.common
import
i18n
from
gajim.common.i18n
import
_
from
gajim.common.helpers
import
AdditionalDataDict
from
gajim.common.fuzzyclock
import
FuzzyClock
from
gajim.common.const
import
StyleAttr
...
...
@@ -666,7 +667,7 @@ def detect_and_print_special_text(self, otext, other_tags, graphics=True,
if
not
otext
:
return
if
additional_data
is
None
:
additional_data
=
{}
additional_data
=
AdditionalDataDict
()
buffer_
=
self
.
tv
.
get_buffer
()
if
other_tags
:
insert_tags_func
=
buffer_
.
insert_with_tags_by_name
...
...
@@ -686,13 +687,10 @@ def detect_and_print_special_text(self, otext, other_tags, graphics=True,
specials_limit
=
100
# add oob text to the end
try
:
gajim_data
=
additional_data
[
'gajim'
]
oob_url
=
gajim_data
[
'oob_url'
]
except
KeyError
:
pass
else
:
oob_desc
=
additional_data
[
'gajim'
].
get
(
'oob_desc'
,
'URL:'
)
oob_url
=
additional_data
.
get_value
(
'gajim'
,
'oob_url'
)
if
oob_url
is
not
None
:
oob_desc
=
additional_data
.
get_value
(
'gajim'
,
'oob_desc'
,
'URL:'
)
if
oob_url
!=
otext
:
otext
+=
'
\n
{} {}'
.
format
(
oob_desc
,
oob_url
)
...
...
@@ -739,7 +737,7 @@ def print_special_text(self, special_text, other_tags, graphics=True,
(emots, links, formatting)
"""
if
additional_data
is
None
:
additional_data
=
{}
additional_data
=
AdditionalDataDict
()
# PluginSystem: adding GUI extension point for ConversationTextview
self
.
plugin_modified
=
False
...
...
@@ -941,7 +939,7 @@ def print_conversation_line(self, text, jid, kind, name, tim,
Print 'chat' type messages
"""
if
additional_data
is
None
:
additional_data
=
{}
additional_data
=
AdditionalDataDict
()
buffer_
=
self
.
tv
.
get_buffer
()
buffer_
.
begin_user_action
()
insert_mark
=
None
...
...
@@ -1172,14 +1170,11 @@ def print_encryption_status(self, iter_, additional_data):
@
staticmethod
def
_get_encryption_details
(
additional_data
):
encrypted
=
additional_data
.
get
(
'encrypted'
)
if
encrypted
is
None
:
return
name
=
encrypted
.
get
(
'name'
)
name
=
additional_data
.
get_value
(
'encrypted'
,
'name'
)
if
name
is
None
:
return
fingerprint
=
encrypted
.
get
(
'fingerprint'
)
fingerprint
=
additional_data
.
get_value
(
'encrypted'
,
'fingerprint'
)
return
name
,
fingerprint
def
print_time
(
self
,
text
,
kind
,
tim
,
simple
,
direction_mark
,
other_tags_for_time
,
iter_
):
...
...
@@ -1260,7 +1255,7 @@ def print_real_text(self, text, text_tags=None, name=None, xhtml=None,
if
text_tags
is
None
:
text_tags
=
[]
if
additional_data
is
None
:
additional_data
=
{}
additional_data
=
AdditionalDataDict
()
buffer_
=
self
.
tv
.
get_buffer
()
if
not
mark
:
iter_
=
buffer_
.
get_end_iter
()
...
...
gajim/groupchat_control.py
View file @
1c09b507
...
...
@@ -55,6 +55,7 @@
from
gajim.common
import
app
from
gajim.common
import
helpers
from
gajim.common.helpers
import
launch_browser_mailer
from
gajim.common.helpers
import
AdditionalDataDict
from
gajim.common.modules
import
dataforms
from
gajim.common
import
ged
from
gajim.common
import
i18n
...
...
@@ -1353,7 +1354,7 @@ def get_contact_iter(self, nick: str) -> Optional[Gtk.TreeIter]:
def
print_old_conversation
(
self
,
text
,
contact
=
''
,
tim
=
None
,
xhtml
=
None
,
displaymarking
=
None
,
msg_stanza_id
=
None
,
encrypted
=
None
,
additional_data
=
None
):
if
additional_data
is
None
:
additional_data
=
{}
additional_data
=
AdditionalDataDict
()
if
contact
:
if
contact
==
self
.
nick
:
# it's us
...
...
@@ -1384,7 +1385,7 @@ def print_conversation(self, text, contact='', tim=None, xhtml=None,
If contact is not set: it's a message from the server or help.
"""
if
additional_data
is
None
:
additional_data
=
{}
additional_data
=
AdditionalDataDict
()
other_tags_for_name
=
[]
other_tags_for_text
=
[]
if
contact
:
...
...
gajim/session.py
View file @
1c09b507
...
...
@@ -27,6 +27,7 @@
from
gajim.common
import
app
from
gajim.common
import
contacts
from
gajim.common
import
ged
from
gajim.common.helpers
import
AdditionalDataDict
from
gajim.common.const
import
KindConstant
from
gajim.gtk.single_message
import
SingleMessageWindow
...
...
@@ -277,7 +278,7 @@ def roster_message(self, jid, msg, tim, encrypted=False, msg_type='',
fjid
=
jid
if
additional_data
is
None
:
additional_data
=
{}
additional_data
=
AdditionalDataDict
()
# Try to catch the contact with correct resource
if
resource
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment