| ... |
... |
@@ -15,6 +15,9 @@ |
|
15
|
15
|
# You should have received a copy of the GNU General Public License
|
|
16
|
16
|
# along with this program; If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
17
|
|
|
|
18
|
+import logging
|
|
|
19
|
+from typing import Optional
|
|
|
20
|
+
|
|
18
|
21
|
from nbxmpp.protocol import Node
|
|
19
|
22
|
from nbxmpp.protocol import validate_resourcepart
|
|
20
|
23
|
from nbxmpp.protocol import JID
|
| ... |
... |
@@ -26,7 +29,7 @@ from nbxmpp.errors import MalformedStanzaError |
|
26
|
29
|
from nbxmpp.structs import BookmarkData
|
|
27
|
30
|
|
|
28
|
31
|
|
|
29
|
|
-def parse_nickname(nick):
|
|
|
32
|
+def parse_nickname(nick: Optional[str]) -> Optional[str]:
|
|
30
|
33
|
if nick is None:
|
|
31
|
34
|
return None
|
|
32
|
35
|
|
| ... |
... |
@@ -36,7 +39,7 @@ def parse_nickname(nick): |
|
36
|
39
|
return None
|
|
37
|
40
|
|
|
38
|
41
|
|
|
39
|
|
-def parse_autojoin(autojoin):
|
|
|
42
|
+def parse_autojoin(autojoin: Optional[str]) -> bool:
|
|
40
|
43
|
if autojoin is None:
|
|
41
|
44
|
return False
|
|
42
|
45
|
|
| ... |
... |
@@ -46,7 +49,7 @@ def parse_autojoin(autojoin): |
|
46
|
49
|
return False
|
|
47
|
50
|
|
|
48
|
51
|
|
|
49
|
|
-def parse_bookmark(item):
|
|
|
52
|
+def parse_bookmark(item: Node) -> BookmarkData:
|
|
50
|
53
|
conference = item.getTag('conference', namespace=Namespace.BOOKMARKS_1)
|
|
51
|
54
|
if conference is None:
|
|
52
|
55
|
raise MalformedStanzaError('conference node missing', item)
|
| ... |
... |
@@ -73,7 +76,7 @@ def parse_bookmark(item): |
|
73
|
76
|
extensions=extensions)
|
|
74
|
77
|
|
|
75
|
78
|
|
|
76
|
|
-def parse_bookmarks(item, log):
|
|
|
79
|
+def parse_bookmarks(item: Node, log: logging.Logger) -> list[BookmarkData]:
|
|
77
|
80
|
storage_node = item.getTag('storage', namespace=Namespace.BOOKMARKS)
|
|
78
|
81
|
if storage_node is None:
|
|
79
|
82
|
raise MalformedStanzaError('storage node missing', item)
|
| ... |
... |
@@ -81,7 +84,8 @@ def parse_bookmarks(item, log): |
|
81
|
84
|
return parse_storage_node(storage_node, log)
|
|
82
|
85
|
|
|
83
|
86
|
|
|
84
|
|
-def parse_private_bookmarks(response, log):
|
|
|
87
|
+def parse_private_bookmarks(response: Node,
|
|
|
88
|
+ log: logging.Logger) -> list[BookmarkData]:
|
|
85
|
89
|
query = response.getQuery()
|
|
86
|
90
|
storage_node = query.getTag('storage', namespace=Namespace.BOOKMARKS)
|
|
87
|
91
|
if storage_node is None:
|
| ... |
... |
@@ -90,8 +94,8 @@ def parse_private_bookmarks(response, log): |
|
90
|
94
|
return parse_storage_node(storage_node, log)
|
|
91
|
95
|
|
|
92
|
96
|
|
|
93
|
|
-def parse_storage_node(storage, log):
|
|
94
|
|
- bookmarks = []
|
|
|
97
|
+def parse_storage_node(storage: Node, log: logging.Logger) -> list[BookmarkData]:
|
|
|
98
|
+ bookmarks: list[BookmarkData] = []
|
|
95
|
99
|
confs = storage.getTags('conference')
|
|
96
|
100
|
for conf in confs:
|
|
97
|
101
|
try:
|
| ... |
... |
@@ -120,7 +124,7 @@ def parse_storage_node(storage, log): |
|
120
|
124
|
return bookmarks
|
|
121
|
125
|
|
|
122
|
126
|
|
|
123
|
|
-def build_conference_node(bookmark):
|
|
|
127
|
+def build_conference_node(bookmark: BookmarkData):
|
|
124
|
128
|
attrs = {'xmlns': Namespace.BOOKMARKS_1}
|
|
125
|
129
|
if bookmark.autojoin:
|
|
126
|
130
|
attrs['autojoin'] = 'true'
|
| ... |
... |
@@ -134,7 +138,7 @@ def build_conference_node(bookmark): |
|
134
|
138
|
return conference
|
|
135
|
139
|
|
|
136
|
140
|
|
|
137
|
|
-def build_storage_node(bookmarks):
|
|
|
141
|
+def build_storage_node(bookmarks: list[BookmarkData]):
|
|
138
|
142
|
storage_node = Node(tag='storage', attrs={'xmlns': Namespace.BOOKMARKS})
|
|
139
|
143
|
for bookmark in bookmarks:
|
|
140
|
144
|
conf_node = storage_node.addChild(name="conference")
|