annotate sat_frontends/quick_frontend/quick_list_manager.py @ 3080:16925f494820

plugin XEP-0045: don't fail on `item-not-found` with MAM: Some servers don't store permanently the whole history of MUC with MAM. As a result, an "item-not-found" stanza error can be received when message id used as reference doesn't exist anymore on the server. When this case happens, the history is retrieved in the same way as for a newly joined room (i.e. last 50 messages are requested).
author Goffi <goffi@goffi.org>
date Thu, 05 Dec 2019 23:05:16 +0100
parents 56f94936df1e
children 559a625a236b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1934
2daf7b4c6756 use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
1 #!/usr/bin/env python2
1625
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
3
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
4 # Libervia: a Salut à Toi frontend
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1625
diff changeset
5 # Copyright (C) 2013-2016 Adrien Cossa <souliane@mailoo.org>
1625
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
6
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
10 # (at your option) any later version.
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
11
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
16
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
19
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
20
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
21 class QuickTagList(object):
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
22 """This class manages a sorted list of tagged items, and a complementary sorted list of suggested but non tagged items."""
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
23
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
24 def __init__(self, items=None):
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
25 """
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
26
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
27 @param items (list): the suggested list of non tagged items
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
28 """
1625
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
29 self.tagged = []
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
30 self.original = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
31 items[:] if items else []
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
32 ) # XXX: copy the list! It will be modified
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
33 self.untagged = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
34 items[:] if items else []
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
35 ) # XXX: copy the list! It will be modified
1625
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
36 self.untagged.sort()
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
37
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
38 @property
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
39 def items(self):
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
40 """Return a sorted list of all items, tagged or untagged.
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
41
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
42 @return list
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
43 """
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
44 res = list(set(self.tagged).union(self.untagged))
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
45 res.sort()
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
46 return res
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
47
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
48 def tag(self, items):
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
49 """Tag some items.
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
50
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
51 @param items (list): items to be tagged
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
52 """
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
53 for item in items:
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
54 if item not in self.tagged:
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
55 self.tagged.append(item)
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
56 if item in self.untagged:
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
57 self.untagged.remove(item)
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
58 self.tagged.sort()
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
59 self.untagged.sort()
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
60
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
61 def untag(self, items):
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
62 """Untag some items.
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
63
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
64 @param items (list): items to be untagged
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
65 """
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
66 for item in items:
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
67 if item not in self.untagged and item in self.original:
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
68 self.untagged.append(item)
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
69 if item in self.tagged:
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
70 self.tagged.remove(item)
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
71 self.tagged.sort()
8b8b1af5905f quick_frontend: add quick_list_manager.py and the QuickTagList class
souliane <souliane@mailoo.org>
parents:
diff changeset
72 self.untagged.sort()