Mercurial > libervia-backend
annotate frontends/src/primitivus/primitivus @ 1197:69ffe61240eb
wix: Avoid setting a bad icon
From 6fb18309a1d971235c0c3d568704fd91809d2d6e Mon Sep 17 00:00:00 2001
The code tries to load an icon from 'icons/crystal/32/tray_icon.xpm'
(relative to self.media_dir), which is part of sat_media, released
independently by upstream and not yet part of Debian.
It then tries to set this invalid icon. With wxPython 2.8 these
issues get quietly ignored, but wxPython 3.0 reports them. As a
simple workaround I've just added a check that the icon is valid
before setting it, so now you get a messagebox about the icon file
not being found and then the app starts.
Obviously it would be better to package sat_media so that the icon is
available on the system.
author | Olly Betts <olly@survex.com> |
---|---|
date | Tue, 09 Sep 2014 18:51:35 -0400 |
parents | 9cc858acae91 |
children | 82dabb442e2e |
rev | line source |
---|---|
112 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
4 # Primitivus: a SAT frontend |
811 | 5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org) |
112 | 6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
10 # (at your option) any later version. |
112 | 11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
15 # GNU Affero General Public License for more details. |
112 | 16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
608
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
112 | 19 |
20 | |
771 | 21 from sat.core.i18n import _ |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
22 from sat_frontends.primitivus.constants import Const as C |
1021
a836b6da2c5c
core (log): moved configuration to core.log_config; this avoid import issues with pyjamas.
Goffi <goffi@goffi.org>
parents:
1019
diff
changeset
|
23 from sat.core import log_config |
a836b6da2c5c
core (log): moved configuration to core.log_config; this avoid import issues with pyjamas.
Goffi <goffi@goffi.org>
parents:
1019
diff
changeset
|
24 log_config.satConfigure(C.LOG_BACKEND_STANDARD, C) |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
25 from sat.core import log as logging |
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
26 log = logging.getLogger(__name__) |
112 | 27 import urwid |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
219
diff
changeset
|
28 from urwid_satext import sat_widgets |
542
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
29 from urwid_satext.files_management import FileDialog |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
30 from sat_frontends.quick_frontend.quick_app import QuickApp |
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
31 from sat_frontends.quick_frontend.quick_chat_list import QuickChatList |
661
d81f55a58c08
primitivus: fixed crash on private messages
Goffi <goffi@goffi.org>
parents:
641
diff
changeset
|
32 from sat_frontends.quick_frontend.quick_utils import getNewPath, unescapePrivate |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
33 from sat_frontends.primitivus.profile_manager import ProfileManager |
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
34 from sat_frontends.primitivus.contact_list import ContactList |
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
35 from sat_frontends.primitivus.chat import Chat |
1106
e2e1e27a3680
frontends: XMLUI refactoring + dialogs:
Goffi <goffi@goffi.org>
parents:
1103
diff
changeset
|
36 from sat_frontends.primitivus import xmlui |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
37 from sat_frontends.primitivus.progress import Progress |
475
6bb9305e0b9c
frontend: Fix notify import in Primitivus.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
459
diff
changeset
|
38 from sat_frontends.primitivus.notify import Notify |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
39 from sat_frontends.primitivus.keys import action_key_map as a_key |
1159
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
40 from sat_frontends.primitivus import config |
719
56aa0e98c92e
frontends tools: moved src/tools/frontends to frontends/src/tools
souliane <souliane@mailoo.org>
parents:
688
diff
changeset
|
41 from sat_frontends.tools.misc import InputHistory |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
42 from sat_frontends.constants import Const as commonConst # FIXME |
1139
75025461141f
move sat.tools.jid to sat_frontends.tools.jid
souliane <souliane@mailoo.org>
parents:
1125
diff
changeset
|
43 from sat_frontends.tools.jid import JID |
542
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
44 from os.path import join |
1162
b32800b9793e
primitivus: SIGINT is now ignored, APP_QUIT key/menu or :quit command must be used to quit Primitivus
Goffi <goffi@goffi.org>
parents:
1160
diff
changeset
|
45 import signal |
112 | 46 |
47 | |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
48 class ChatList(QuickChatList): |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
49 """This class manage the list of chat windows""" |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
50 |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
51 def createChat(self, target): |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
52 return Chat(target, self.host) |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
53 |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
54 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
55 class EditBar(sat_widgets.ModalEdit): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
56 """ |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
57 The modal edit bar where you would enter messages and commands. |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
58 """ |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
59 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
60 def __init__(self, app): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
61 modes = {None: ('NORMAL', u''), |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
62 a_key['MODE_INSERTION']: ('INSERTION', u'> '), |
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
63 a_key['MODE_COMMAND']: ('COMMAND', u':')} #XXX: captions *MUST* be unicode |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
64 super(EditBar, self).__init__(modes) |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
65 self.app = app |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
66 self.setCompletionMethod(self._text_completion) |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
67 urwid.connect_signal(self, 'click', self.onTextEntered) |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
68 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
69 def _text_completion(self, text, completion_data, mode): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
70 if mode == 'INSERTION': |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
71 return self._nick_completion(text, completion_data) |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
72 else: |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
73 return text |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
74 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
75 def _nick_completion(self, text, completion_data): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
76 """Completion method which complete pseudo in group chat |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
77 for params, see AdvancedEdit""" |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
78 contact = self.app.contact_list.getContact() ###Based on the fact that there is currently only one contact selectable at once |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
79 if contact: |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
80 chat = self.app.chat_wins[contact] |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
81 if chat.type != "group": |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
82 return text |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
83 space = text.rfind(" ") |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
84 start = text[space+1:] |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
85 nicks = list(chat.occupants) |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
86 nicks.sort() |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
87 try: |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
88 start_idx=nicks.index(completion_data['last_nick'])+1 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
89 if start_idx == len(nicks): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
90 start_idx = 0 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
91 except (KeyError,ValueError): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
92 start_idx = 0 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
93 for idx in range(start_idx,len(nicks)) + range(0,start_idx): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
94 if nicks[idx].lower().startswith(start.lower()): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
95 completion_data['last_nick'] = nicks[idx] |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
96 return text[:space+1] + nicks[idx] + (': ' if space < 0 else '') |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
97 return text |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
98 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
99 def onTextEntered(self, editBar): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
100 """Called when text is entered in the main edit bar""" |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
101 if self.mode == 'INSERTION': |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
102 contact = self.app.contact_list.getContact() ###Based on the fact that there is currently only one contact selectableat once |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
103 if contact: |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
104 chat = self.app.chat_wins[contact] |
776
f89173f44850
frontends: fixed sendMessage calls, sendMessage is now async so callback and errback need to be specified + redraw in PrimivitusApp.notify
Goffi <goffi@goffi.org>
parents:
773
diff
changeset
|
105 self.app.sendMessage(contact, |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
106 editBar.get_edit_text(), |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
107 mess_type = "groupchat" if chat.type == 'group' else "chat", |
1063
6ec513ad92c2
frontends: async failures are more detailed (full class name + error message)
souliane <souliane@mailoo.org>
parents:
1060
diff
changeset
|
108 errback=lambda failure: self.app.notify(_("Error while sending message (%s)") % failure), |
776
f89173f44850
frontends: fixed sendMessage calls, sendMessage is now async so callback and errback need to be specified + redraw in PrimivitusApp.notify
Goffi <goffi@goffi.org>
parents:
773
diff
changeset
|
109 profile_key=self.app.profile |
f89173f44850
frontends: fixed sendMessage calls, sendMessage is now async so callback and errback need to be specified + redraw in PrimivitusApp.notify
Goffi <goffi@goffi.org>
parents:
773
diff
changeset
|
110 ) |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
111 editBar.set_edit_text('') |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
112 elif self.mode == 'COMMAND': |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
113 self.commandHandler() |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
114 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
115 def commandHandler(self): |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
116 #TODO: separate class with auto documentation (with introspection) |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
117 # and completion method |
1119
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
118 tokens = self.get_edit_text().split(' ') |
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
119 command, args = tokens[0], tokens[1:] |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
120 if command == 'quit': |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
121 self.app.onExit() |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
122 raise urwid.ExitMainLoop() |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
123 elif command == 'messages': |
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
124 wid = sat_widgets.GenericList(logging.memoryGet()) |
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
125 self.app.addWindow(wid) |
737
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
126 elif command == 'presence': |
1119
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
127 values = [value for value in commonConst.PRESENCE.keys()] |
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
128 values = [value if value else 'online' for value in values] # the empty value actually means 'online' |
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
129 if args and args[0] in values: |
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
130 presence = '' if args[0] == 'online' else args[0] |
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
131 self.app.status_bar.onChange(user_data=sat_widgets.ClickableText(commonConst.PRESENCE[presence])) |
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
132 else: |
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
133 self.app.status_bar.onPresenceClick() |
737
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
134 elif command == 'status': |
1119
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
135 if args: |
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
136 self.app.status_bar.onChange(user_data=sat_widgets.AdvancedEdit(args[0])) |
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
137 else: |
5968fd8d2248
primitivus: change behavior of commands ":presence" and ":status" :
souliane <souliane@mailoo.org>
parents:
1106
diff
changeset
|
138 self.app.status_bar.onStatusClick() |
1125
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1124
diff
changeset
|
139 elif command == 'history': |
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1124
diff
changeset
|
140 try: |
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1124
diff
changeset
|
141 limit = int(args[0]) |
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1124
diff
changeset
|
142 except (IndexError, ValueError): |
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1124
diff
changeset
|
143 limit = 50 |
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1124
diff
changeset
|
144 win = self.app.chat_wins[JID(self.app.contact_list.selected).bare] |
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1124
diff
changeset
|
145 win.clearHistory() |
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1124
diff
changeset
|
146 if limit > 0: |
d6c3fea5ecfe
quick_frontend, primitivus: add primitivus command ":history [limit]" (default value for limit is 50)
souliane <souliane@mailoo.org>
parents:
1124
diff
changeset
|
147 win.historyPrint(size=limit, profile=self.app.profile) |
737
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
148 else: |
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
149 return |
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
150 self.set_edit_text('') |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
151 |
1160
2ff15a6c5791
primitivus: moved history method definition out of keypress
Goffi <goffi@goffi.org>
parents:
1159
diff
changeset
|
152 def _historyCb(self, text): |
2ff15a6c5791
primitivus: moved history method definition out of keypress
Goffi <goffi@goffi.org>
parents:
1159
diff
changeset
|
153 self.set_edit_text(text) |
2ff15a6c5791
primitivus: moved history method definition out of keypress
Goffi <goffi@goffi.org>
parents:
1159
diff
changeset
|
154 self.set_edit_pos(len(text)) |
2ff15a6c5791
primitivus: moved history method definition out of keypress
Goffi <goffi@goffi.org>
parents:
1159
diff
changeset
|
155 |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
156 def keypress(self, size, key): |
671
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
661
diff
changeset
|
157 """Callback when a key is pressed. Send "composing" states |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
661
diff
changeset
|
158 and move the index of the temporary history stack.""" |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
159 if key == a_key['MODAL_ESCAPE']: |
738
e867f146d49f
primitivus: save the input history when "esc" is pressed
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
160 # first save the text to the current mode, then change to NORMAL |
e867f146d49f
primitivus: save the input history when "esc" is pressed
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
161 self.app._updateInputHistory(self.get_edit_text(), mode=self.mode) |
671
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
661
diff
changeset
|
162 self.app._updateInputHistory(mode='NORMAL') |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
661
diff
changeset
|
163 if self._mode == 'NORMAL' and key in self._modes: |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
661
diff
changeset
|
164 self.app._updateInputHistory(mode=self._modes[key][0]) |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
165 if key == a_key['HISTORY_PREV']: |
1163
60ebe98c9d04
primitivus: forgot to rename _historyCb method
Goffi <goffi@goffi.org>
parents:
1162
diff
changeset
|
166 self.app._updateInputHistory(self.get_edit_text(), -1, self._historyCb, self.mode) |
913
d08cbdd566e2
primitivus: EditBar doesn't propagate key pressed anymore if it manage a 'up' or 'down' event (history event)
Goffi <goffi@goffi.org>
parents:
911
diff
changeset
|
167 return |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
168 elif key == a_key['HISTORY_NEXT']: |
1163
60ebe98c9d04
primitivus: forgot to rename _historyCb method
Goffi <goffi@goffi.org>
parents:
1162
diff
changeset
|
169 self.app._updateInputHistory(self.get_edit_text(), +1, self._historyCb, self.mode) |
913
d08cbdd566e2
primitivus: EditBar doesn't propagate key pressed anymore if it manage a 'up' or 'down' event (history event)
Goffi <goffi@goffi.org>
parents:
911
diff
changeset
|
170 return |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
171 elif key == a_key['EDIT_ENTER']: |
671
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
661
diff
changeset
|
172 self.app._updateInputHistory(self.get_edit_text(), mode=self.mode) |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
661
diff
changeset
|
173 else: |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
174 contact = self.app.contact_list.getContact() |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
175 if contact: |
661
d81f55a58c08
primitivus: fixed crash on private messages
Goffi <goffi@goffi.org>
parents:
641
diff
changeset
|
176 self.app.bridge.chatStateComposing(unescapePrivate(contact), self.app.profile) |
671
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
661
diff
changeset
|
177 return super(EditBar, self).keypress(size, key) |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
178 |
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
179 |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
180 class PrimitivusTopWidget(sat_widgets.FocusPile): |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
181 """Top most widget used in Primitivus""" |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
182 _focus_inversed = True |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
183 positions = ('menu', 'body', 'notif_bar', 'edit_bar') |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
184 can_hide = ('menu', 'notif_bar') |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
185 |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
186 def __init__(self, body, menu, notif_bar, edit_bar): |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
187 self._body = body |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
188 self._menu = menu |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
189 self._notif_bar = notif_bar |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
190 self._edit_bar = edit_bar |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
191 self._hidden = {'notif_bar'} |
1186
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
192 self._focus_extra = False |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
193 super(PrimitivusTopWidget, self).__init__([('pack', self._menu), self._body, ('pack', self._edit_bar)]) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
194 for position in self.positions: |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
195 setattr(self, |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
196 position, |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
197 property(lambda: self, self.widgetGet(position=position), |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
198 lambda pos, new_wid: self.widgetSet(new_wid, position=pos)) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
199 ) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
200 self.focus_position = len(self.contents)-1 |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
201 |
1186
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
202 def getVisiblePositions(self, keep=None): |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
203 """Return positions that are not hidden in the right order |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
204 |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
205 @param keep: if not None, this position will be keep in the right order, even if it's hidden |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
206 (can be useful to find its index) |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
207 @return (list): list of visible positions |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
208 """ |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
209 return [pos for pos in self.positions if (keep and pos == keep) or pos not in self._hidden] |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
210 |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
211 def keypress(self, size, key): |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
212 """Manage FOCUS keys that focus directly a main part (one of self.positions) |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
213 |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
214 To avoid key conflicts, a combinaison must be made with FOCUS_EXTRA then an other key |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
215 """ |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
216 if key == a_key['FOCUS_EXTRA']: |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
217 self._focus_extra = True |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
218 return |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
219 if self._focus_extra: |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
220 self._focus_extra = False |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
221 if key in ('m', '1'): |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
222 focus = 'menu' |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
223 elif key in ('b', '2'): |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
224 focus = 'body' |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
225 elif key in ('n', '3'): |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
226 focus = 'notif_bar' |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
227 elif key in ('e', '4'): |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
228 focus = 'edit_bar' |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
229 else: |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
230 return super(PrimitivusTopWidget, self).keypress(size, key) |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
231 |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
232 if focus in self._hidden: |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
233 return |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
234 |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
235 self.focus_position = self.getVisiblePositions().index(focus) |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
236 return |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
237 |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
238 return super(PrimitivusTopWidget, self).keypress(size, key) |
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
239 |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
240 def widgetGet(self, position): |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
241 if not position in self.positions: |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
242 raise ValueError("Unknown position {}".format(position)) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
243 return getattr(self, "_{}".format(position)) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
244 |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
245 def widgetSet(self, widget, position): |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
246 if not position in self.positions: |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
247 raise ValueError("Unknown position {}".format(position)) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
248 return setattr(self, "_{}".format(position), widget) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
249 |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
250 def hideSwitch(self, position): |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
251 if not position in self.can_hide: |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
252 raise ValueError("Can't switch position {}".format(position)) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
253 hide = not position in self._hidden |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
254 widget = self.widgetGet(position) |
1186
9cc858acae91
primitivus: added a FOCUS_EXTRA key (default: "ctrl f") which can be used to focus a main part:
Goffi <goffi@goffi.org>
parents:
1185
diff
changeset
|
255 idx = self.getVisiblePositions(position).index(position) |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
256 if hide: |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
257 del self.contents[idx] |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
258 self._hidden.add(position) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
259 else: |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
260 self.contents.insert(idx, (widget, ('pack', None))) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
261 self._hidden.remove(position) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
262 |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
263 def show(self, position): |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
264 if position in self._hidden: |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
265 self.hideSwitch(position) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
266 |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
267 def hide(self, position): |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
268 if not position in self._hidden: |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
269 self.hideSwitch(position) |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
270 |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
271 |
671
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
661
diff
changeset
|
272 class PrimitivusApp(QuickApp, InputHistory): |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
273 |
112 | 274 def __init__(self): |
166
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
275 QuickApp.__init__(self) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
276 |
112 | 277 ## main loop setup ## |
117 | 278 self.main_widget = ProfileManager(self) |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
279 self.loop = urwid.MainLoop(self.main_widget, C.PALETTE, event_loop=urwid.GLibEventLoop(), input_filter=self.inputFilter, unhandled_input=self.keyHandler) |
112 | 280 |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
281 ##misc setup## |
679
59c9a7ff903d
wix, misc: use picture of dimension 32x32 for tray icon + better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
673
diff
changeset
|
282 self.chat_wins = ChatList(self) |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
283 self.notif_bar = sat_widgets.NotificationBar() |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
284 urwid.connect_signal(self.notif_bar, 'change', self.onNotification) |
180
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
285 self.progress_wid = Progress(self) |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
286 urwid.connect_signal(self.notif_bar.progress, 'click', lambda x: self.addWindow(self.progress_wid)) |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
287 self.__saved_overlay = None |
380
ede26abf6ca1
primitivus: freedesktop notifications (if available) when somebody is talking to us and we have not focus, or our nick is pinged and we have not focus.
Goffi <goffi@goffi.org>
parents:
276
diff
changeset
|
288 |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
503
diff
changeset
|
289 self.x_notify = Notify() |
524
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
290 |
1162
b32800b9793e
primitivus: SIGINT is now ignored, APP_QUIT key/menu or :quit command must be used to quit Primitivus
Goffi <goffi@goffi.org>
parents:
1160
diff
changeset
|
291 # we already manage exit with a_key['APP_QUIT'], so we don't want C-c |
b32800b9793e
primitivus: SIGINT is now ignored, APP_QUIT key/menu or :quit command must be used to quit Primitivus
Goffi <goffi@goffi.org>
parents:
1160
diff
changeset
|
292 signal.signal(signal.SIGINT, signal.SIG_IGN) |
b32800b9793e
primitivus: SIGINT is now ignored, APP_QUIT key/menu or :quit command must be used to quit Primitivus
Goffi <goffi@goffi.org>
parents:
1160
diff
changeset
|
293 |
524
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
294 @property |
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
295 def mode(self): |
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
296 return self.editBar.mode |
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
297 |
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
298 @mode.setter |
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
299 def mode(self, value): |
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
300 self.editBar.mode = value |
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
301 |
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
302 def modeHint(self, value): |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
303 """Change mode if make sens (i.e.: if there is nothing in the editBar)""" |
524
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
304 if not self.editBar.get_edit_text(): |
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
305 self.mode = value |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
306 |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
307 def debug(self): |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
308 """convenient method to reset screen and launch (i)p(u)db""" |
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
309 log.info('Entered debug mode') |
180
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
310 try: |
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
311 import pudb |
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
312 pudb.set_trace() |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
313 except ImportError: |
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
314 import os |
180
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
315 os.system('reset') |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
316 try: |
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
317 import ipdb |
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
318 ipdb.set_trace() |
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
319 except ImportError: |
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
320 import pdb |
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
321 pdb.set_trace() |
129
542682d67282
sortilege's easter egg reimplemented
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
322 |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
323 def redraw(self): |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
324 """redraw the screen""" |
422
5a18c5f08d9b
Primitivus: Profile Manager: fixed redraw on profile change + use of AdvandedEdit for login field
Goffi <goffi@goffi.org>
parents:
415
diff
changeset
|
325 try: |
5a18c5f08d9b
Primitivus: Profile Manager: fixed redraw on profile change + use of AdvandedEdit for login field
Goffi <goffi@goffi.org>
parents:
415
diff
changeset
|
326 self.loop.draw_screen() |
5a18c5f08d9b
Primitivus: Profile Manager: fixed redraw on profile change + use of AdvandedEdit for login field
Goffi <goffi@goffi.org>
parents:
415
diff
changeset
|
327 except AttributeError: |
5a18c5f08d9b
Primitivus: Profile Manager: fixed redraw on profile change + use of AdvandedEdit for login field
Goffi <goffi@goffi.org>
parents:
415
diff
changeset
|
328 pass |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
329 |
112 | 330 def start(self): |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
331 self.i = 0 |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
332 self.loop.set_alarm_in(0,lambda a,b: self.postInit()) |
112 | 333 self.loop.run() |
334 | |
1159
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
335 def postInit(self): |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
336 try: |
1165
ca15fb1abbc4
primitivus: added disable_mouse config option /!\ minimal Urwid version is now 1.2.0
Goffi <goffi@goffi.org>
parents:
1164
diff
changeset
|
337 config.applyConfig(self) |
1159
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
338 except Exception as e: |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
339 log.error("configuration error: {}".format(e)) |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
340 popup = sat_widgets.Alert(_("Configuration Error"), _("Something went wrong while reading the configuration, please check :messages"), ok_cb=self.removePopUp) |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
341 if self.options.profile: |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
342 self._early_popup = popup |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
343 else: |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
344 self.showPopUp(popup) |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
345 super(PrimitivusApp, self).postInit() |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
346 |
1164 | 347 def inputFilter(self, input_, raw): |
348 if self.__saved_overlay and input_ != a_key['OVERLAY_HIDE']: | |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
349 return |
1164 | 350 for i in input_: |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
351 if isinstance(i,tuple): |
127
55d3ef84f01f
Primitivus: mouse wheel changed to 'up' and 'down' key press
Goffi <goffi@goffi.org>
parents:
125
diff
changeset
|
352 if i[0] == 'mouse press': |
55d3ef84f01f
Primitivus: mouse wheel changed to 'up' and 'down' key press
Goffi <goffi@goffi.org>
parents:
125
diff
changeset
|
353 if i[1] == 4: #Mouse wheel up |
1164 | 354 input_[input_.index(i)] = a_key['HISTORY_PREV'] |
127
55d3ef84f01f
Primitivus: mouse wheel changed to 'up' and 'down' key press
Goffi <goffi@goffi.org>
parents:
125
diff
changeset
|
355 if i[1] == 5: #Mouse wheel down |
1164 | 356 input_[input_.index(i)] = a_key['HISTORY_NEXT'] |
357 return input_ | |
127
55d3ef84f01f
Primitivus: mouse wheel changed to 'up' and 'down' key press
Goffi <goffi@goffi.org>
parents:
125
diff
changeset
|
358 |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
359 def keyHandler(self, input_): |
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
360 if input_ == a_key['MENU_HIDE']: |
181 | 361 """User want to (un)hide the menu roller""" |
128
2240f34f6452
Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents:
127
diff
changeset
|
362 try: |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
363 self.main_widget.hideSwitch('menu') |
128
2240f34f6452
Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents:
127
diff
changeset
|
364 except AttributeError: |
2240f34f6452
Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents:
127
diff
changeset
|
365 pass |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
366 elif input_ == a_key['NOTIFICATION_NEXT']: |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
367 """User wants to see next notification""" |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
368 self.notif_bar.showNext() |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
369 elif input_ == a_key['OVERLAY_HIDE']: |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
370 """User wants to (un)hide overlay window""" |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
371 if isinstance(self.loop.widget,urwid.Overlay): |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
372 self.__saved_overlay = self.loop.widget |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
373 self.loop.widget = self.main_widget |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
374 else: |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
375 if self.__saved_overlay: |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
376 self.loop.widget = self.__saved_overlay |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
377 self.__saved_overlay = None |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
378 |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
379 elif input_ == a_key['DEBUG'] and 'D' in self.bridge.getVersion(): #Debug only for dev versions |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
380 self.debug() |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
381 elif input_ == a_key['CONTACTS_HIDE']: #user wants to (un)hide the contact_list |
124 | 382 try: |
608
ea9aa51234eb
Primitivus: fixed contacts list (un)hidding
Goffi <goffi@goffi.org>
parents:
607
diff
changeset
|
383 for wid, options in self.center_part.contents: |
ea9aa51234eb
Primitivus: fixed contacts list (un)hidding
Goffi <goffi@goffi.org>
parents:
607
diff
changeset
|
384 if self.contact_list is wid: |
ea9aa51234eb
Primitivus: fixed contacts list (un)hidding
Goffi <goffi@goffi.org>
parents:
607
diff
changeset
|
385 self.center_part.contents.remove((wid, options)) |
ea9aa51234eb
Primitivus: fixed contacts list (un)hidding
Goffi <goffi@goffi.org>
parents:
607
diff
changeset
|
386 break |
124 | 387 else: |
607
c123dddaea6b
primitivus: fixed urwid issues with recent urwid versions
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
388 self.center_part.contents.insert(0, (self.contact_list, ('weight', 2, False))) |
124 | 389 except AttributeError: |
390 #The main widget is not built (probably in Profile Manager) | |
391 pass | |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
392 elif input_ == 'window resize': |
129
542682d67282
sortilege's easter egg reimplemented
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
393 width,height = self.loop.screen_size |
542682d67282
sortilege's easter egg reimplemented
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
394 if height<=5 and width<=35: |
542682d67282
sortilege's easter egg reimplemented
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
395 if not 'save_main_widget' in dir(self): |
542682d67282
sortilege's easter egg reimplemented
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
396 self.save_main_widget = self.loop.widget |
542682d67282
sortilege's easter egg reimplemented
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
397 self.loop.widget = urwid.Filler(urwid.Text(_("Pleeeeasse, I can't even breathe !"))) |
542682d67282
sortilege's easter egg reimplemented
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
398 else: |
542682d67282
sortilege's easter egg reimplemented
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
399 if 'save_main_widget' in dir(self): |
542682d67282
sortilege's easter egg reimplemented
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
400 self.loop.widget = self.save_main_widget |
542682d67282
sortilege's easter egg reimplemented
Goffi <goffi@goffi.org>
parents:
128
diff
changeset
|
401 del self.save_main_widget |
128
2240f34f6452
Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents:
127
diff
changeset
|
402 try: |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
403 return self.menu_roller.checkShortcuts(input_) |
128
2240f34f6452
Primitivus: misc fixes + menubar first draft
Goffi <goffi@goffi.org>
parents:
127
diff
changeset
|
404 except AttributeError: |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
405 return input_ |
124 | 406 |
1093
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
407 def addMenus(self, menu, type_, menu_data=None): |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
408 """Add cached menus to instance |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
409 @param menu: sat_widgets.Menu instance |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
410 @param type_: menu type like is sat.core.sat_main.importMenu |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
411 @param menu_data: data to send with these menus |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
412 |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
413 """ |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
414 menus = self.profiles[self.profile]['menus'].get(type_,[]) |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
415 def add_menu_cb(callback_id): |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
416 self.launchAction(callback_id, menu_data, profile_key = self.profile) |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
417 for id_, path, path_i18n in menus: |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
418 if len(path) != 2: |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
419 raise NotImplementedError("Menu with a path != 2 are not implemented yet") |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
420 menu.addMenu(path_i18n[0], path_i18n[1], lambda dummy,id_=id_: add_menu_cb(id_)) |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
421 |
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
422 |
755
e3ad48a2aab2
core, frontends: callMenu is now async and don't use callback_id anymore
Goffi <goffi@goffi.org>
parents:
752
diff
changeset
|
423 def _buildMenuRoller(self): |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
219
diff
changeset
|
424 menu = sat_widgets.Menu(self.loop) |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
425 general = _("General") |
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
426 menu.addMenu(general, _("Connect"), self.onConnectRequest) |
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
427 menu.addMenu(general, _("Disconnect"), self.onDisconnectRequest) |
166
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
428 menu.addMenu(general, _("Parameters"), self.onParam) |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
429 menu.addMenu(general, _("About"), self.onAboutRequest) |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
430 menu.addMenu(general, _("Exit"), self.onExitRequest, a_key['APP_QUIT']) |
987
3a96920c07b7
core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents:
917
diff
changeset
|
431 contact = _("Contacts") |
3a96920c07b7
core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents:
917
diff
changeset
|
432 menu.addMenu(contact) |
131 | 433 communication = _("Communication") |
1158
c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
434 menu.addMenu(communication, _("Join room"), self.onJoinRoomRequest, a_key['ROOM_JOIN']) |
145
c8b231abfe96
Primitivus: additionnal menus management
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
435 #additionals menus |
c8b231abfe96
Primitivus: additionnal menus management
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
436 #FIXME: do this in a more generic way (in quickapp) |
1093
11e2bb20e896
core, frontends (menus): MENU_ROOM and MENU_SINGLE are now managed
Goffi <goffi@goffi.org>
parents:
1063
diff
changeset
|
437 self.addMenus(menu, C.MENU_GLOBAL) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
438 |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
219
diff
changeset
|
439 menu_roller = sat_widgets.MenuRoller([(_('Main menu'),menu)]) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
440 return menu_roller |
131 | 441 |
755
e3ad48a2aab2
core, frontends: callMenu is now async and don't use callback_id anymore
Goffi <goffi@goffi.org>
parents:
752
diff
changeset
|
442 def _buildMainWidget(self): |
679
59c9a7ff903d
wix, misc: use picture of dimension 32x32 for tray icon + better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
673
diff
changeset
|
443 self.contact_list = ContactList(self, on_click=self.contactSelected, on_change=lambda w: self.redraw()) |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
495
diff
changeset
|
444 #self.center_part = urwid.Columns([('weight',2,self.contact_list),('weight',8,Chat('',self))]) |
679
59c9a7ff903d
wix, misc: use picture of dimension 32x32 for tray icon + better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
673
diff
changeset
|
445 self.center_part = urwid.Columns([('weight', 2, self.contact_list), ('weight', 8, urwid.Filler(urwid.Text('')))]) |
524
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
446 |
637
3b02554d4c8b
primitivus: chat state implementation
souliane <souliane@mailoo.org>
parents:
634
diff
changeset
|
447 self.editBar = EditBar(self) |
755
e3ad48a2aab2
core, frontends: callMenu is now async and don't use callback_id anymore
Goffi <goffi@goffi.org>
parents:
752
diff
changeset
|
448 self.menu_roller = self._buildMenuRoller() |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
449 self.main_widget = PrimitivusTopWidget(self.center_part, self.menu_roller, self.notif_bar, self.editBar) |
118
76055a209ed9
primitivus: added edition zone at the bottom
Goffi <goffi@goffi.org>
parents:
117
diff
changeset
|
450 return self.main_widget |
112 | 451 |
1034
5197600a1e13
quick_app, primitivus: update the connection mechanism to ask for non empty profile passwords
souliane <souliane@mailoo.org>
parents:
1021
diff
changeset
|
452 def plug_profile_1(self, profile_key='@DEFAULT@'): |
755
e3ad48a2aab2
core, frontends: callMenu is now async and don't use callback_id anymore
Goffi <goffi@goffi.org>
parents:
752
diff
changeset
|
453 self.loop.widget = self._buildMainWidget() |
415
3348331e0f09
primitivus: fixed screen redraw after plugin profile
Goffi <goffi@goffi.org>
parents:
411
diff
changeset
|
454 self.redraw() |
1034
5197600a1e13
quick_app, primitivus: update the connection mechanism to ask for non empty profile passwords
souliane <souliane@mailoo.org>
parents:
1021
diff
changeset
|
455 QuickApp.plug_profile_1(self, profile_key) |
1159
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
456 try: |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
457 # if a popup arrived before main widget is build, we need to show it now |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
458 self.showPopUp(self._early_popup) |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
459 except AttributeError: |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
460 pass |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
461 else: |
85fd02356dba
primitivus: key can be changed in config:
Goffi <goffi@goffi.org>
parents:
1158
diff
changeset
|
462 del self._early_popup |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
463 |
120 | 464 def removePopUp(self, widget=None): |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
465 "Remove current pop-up, and if there is other in queue, show it" |
117 | 466 self.loop.widget = self.main_widget |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
467 next_popup = self.notif_bar.getNextPopup() |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
468 if next_popup: |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
469 #we still have popup to show, we display it |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
470 self.showPopUp(next_popup) |
117 | 471 |
737
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
472 def showPopUp(self, pop_up_widget, perc_width=40, perc_height=40, align='center', valign='middle'): |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
473 "Show a pop-up window if possible, else put it in queue" |
687
af0d08a84cc6
primitivus card_game: bug fix and improvement
souliane <souliane@mailoo.org>
parents:
679
diff
changeset
|
474 if not isinstance(self.loop.widget, urwid.Overlay): |
737
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
475 display_widget = urwid.Overlay(pop_up_widget, self.main_widget, align, ('relative', perc_width), valign, ('relative', perc_height)) |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
476 self.loop.widget = display_widget |
219
782319a64ac6
primitivus, wix: added forgotten profile
Goffi <goffi@goffi.org>
parents:
216
diff
changeset
|
477 self.redraw() |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
478 else: |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
479 self.notif_bar.addPopUp(pop_up_widget) |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
480 |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
481 def notify(self, message): |
166
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
482 """"Notify message to user via notification bar""" |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
483 self.notif_bar.addMessage(message) |
776
f89173f44850
frontends: fixed sendMessage calls, sendMessage is now async so callback and errback need to be specified + redraw in PrimivitusApp.notify
Goffi <goffi@goffi.org>
parents:
773
diff
changeset
|
484 self.redraw() |
112 | 485 |
166
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
486 def addWindow(self, widget): |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
487 """Display a window if possible, |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
488 else add it in the notification bar queue |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
489 @param widget: BoxWidget""" |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
490 assert(len(self.center_part.widget_list)<=2) |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
491 wid_idx = len(self.center_part.widget_list)-1 |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
492 self.center_part.widget_list[wid_idx] = widget |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
493 self.menu_roller.removeMenu(_('Chat menu')) |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
495
diff
changeset
|
494 self.contact_list.unselectAll() |
166
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
495 self.redraw() |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
496 |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
497 def removeWindow(self): |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
498 """Remove window showed on the right column""" |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
499 #TODO: to a better Window management than this crappy hack |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
500 assert(len(self.center_part.widget_list)<=2) |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
501 wid_idx = len(self.center_part.widget_list)-1 |
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
502 self.center_part.widget_list[wid_idx] = urwid.Filler(urwid.Text('')) |
911
b12706d164d7
primitivus: removed deprecated use of set_focus
Goffi <goffi@goffi.org>
parents:
907
diff
changeset
|
503 self.center_part.focus_position = 0 |
166
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
504 self.redraw() |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
505 |
180
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
506 def addProgress (self, id, message): |
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
507 """Follow a SàT progress bar |
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
508 @param id: SàT id of the progression |
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
509 @param message: message to show to identify the progression""" |
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
510 self.progress_wid.addProgress(id, message) |
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
511 |
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
512 def setProgress(self, percentage): |
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
513 """Set the progression shown in notification bar""" |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
514 self.notif_bar.setProgress(percentage) |
180
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
176
diff
changeset
|
515 |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
516 def contactSelected(self, contact_list): |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
495
diff
changeset
|
517 contact = contact_list.getContact() |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
518 if contact: |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
519 assert(len(self.center_part.widget_list)==2) |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
520 self.center_part.widget_list[1] = self.chat_wins[contact] |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
521 self.menu_roller.addMenu(_('Chat menu'), self.chat_wins[contact].getMenu()) |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
118
diff
changeset
|
522 |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
523 def newMessageHandler(self, from_jid, to_jid, msg, _type, extra, profile): |
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
524 QuickApp.newMessageHandler(self, from_jid, to_jid, msg, _type, extra, profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
525 |
688
f7878ad3c846
tools: renamed tools.jid.JID attribute "short" to "bare"
souliane <souliane@mailoo.org>
parents:
687
diff
changeset
|
526 if not from_jid in self.contact_list and from_jid.bare != self.profiles[profile]['whoami'].bare: |
503
10119c2a9d33
Primitivus: new entities are added to contact list if they send messages + QuickFrontend: names fixes
Goffi <goffi@goffi.org>
parents:
501
diff
changeset
|
527 #XXX: needed to show entities which haven't sent any |
10119c2a9d33
Primitivus: new entities are added to contact list if they send messages + QuickFrontend: names fixes
Goffi <goffi@goffi.org>
parents:
501
diff
changeset
|
528 # presence information and which are not in roster |
1058
0a9986452bba
frontends: fixes bug with private message introduced with revision 1000 (6f1e03068b5f) + display messages from contacts not in roster
souliane <souliane@mailoo.org>
parents:
1034
diff
changeset
|
529 self.contact_list.replace(from_jid, [C.GROUP_NOT_IN_ROSTER]) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
530 |
1124
7ee18dbfb661
primitivus: improve the check to alert for new message
souliane <souliane@mailoo.org>
parents:
1119
diff
changeset
|
531 if self.contact_list.selected is None or JID(self.contact_list.selected).bare != from_jid.bare: |
510
886754295efe
quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents:
507
diff
changeset
|
532 self.contact_list.putAlert(from_jid) |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
533 |
182
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
534 def _dialogOkCb(self, widget, data): |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
535 self.removePopUp() |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
536 answer_cb = data[0] |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
537 answer_data = [data[1]] if data[1] else [] |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
538 answer_cb(True, *answer_data) |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
539 |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
540 def _dialogCancelCb(self, widget, data): |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
541 self.removePopUp() |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
542 answer_cb = data[0] |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
543 answer_data = [data[1]] if data[1] else [] |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
544 answer_cb(False, *answer_data) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
545 |
182
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
546 |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
547 def showDialog(self, message, title="", type_="info", answer_cb = None, answer_data = None): |
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
548 if type_ == 'info': |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
549 popup = sat_widgets.Alert(unicode(title), unicode(message), ok_cb=answer_cb or self.removePopUp) #FIXME: remove unicode here when DBus Bridge will no return dbus.String anymore |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
550 elif type_ == 'error': |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
551 popup = sat_widgets.Alert(unicode(title), unicode(message), ok_cb=answer_cb or self.removePopUp) #FIXME: remove unicode here when DBus Bridge will no return dbus.String anymore |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
552 elif type_ == 'yes/no': |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
219
diff
changeset
|
553 popup = sat_widgets.ConfirmDialog(unicode(message), |
182
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
554 yes_cb=self._dialogOkCb, yes_value = (answer_cb, answer_data), |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
555 no_cb=self._dialogCancelCb, no_value = (answer_cb, answer_data)) |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
556 else: |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
557 popup = sat_widgets.Alert(unicode(title), unicode(message), ok_cb=answer_cb or self.removePopUp) #FIXME: remove unicode here when DBus Bridge will no return dbus.String anymore |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
558 log.error(_('unmanaged dialog type: %s'), type_) |
182
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
181
diff
changeset
|
559 self.showPopUp(popup) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
560 |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
561 def onNotification(self, notif_bar): |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
562 """Called when a new notification has been received""" |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
563 if not isinstance(self.main_widget, PrimitivusTopWidget): |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
564 #if we are not in the main configuration, we ignore the notifications bar |
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
565 return |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
566 if self.notif_bar.canHide(): |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
567 #No notification left, we can hide the bar |
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
568 self.main_widget.hide('notif_bar') |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
569 else: |
1181
ca8ce5a47969
Primitivus: main_widget is now in its own class (PrimitivusTopWidget), menu and notification bar (un)hidding is cleaner
Goffi <goffi@goffi.org>
parents:
1165
diff
changeset
|
570 self.main_widget.show('notif_bar') |
159
2fa58703f1b7
Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
571 |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
572 def launchAction(self, callback_id, data=None, profile_key="@NONE@"): |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
573 """ Launch a dynamic action |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
574 @param callback_id: id of the action to launch |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
575 @param data: data needed only for certain actions |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
576 @param profile_key: %(doc_profile_key)s |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
577 |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
578 """ |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
579 if data is None: |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
580 data = dict() |
1019 | 581 |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
582 def action_cb(data): |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
583 if not data: |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
584 # action was a one shot, nothing to do |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
585 pass |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
586 elif "xmlui" in data: |
1106
e2e1e27a3680
frontends: XMLUI refactoring + dialogs:
Goffi <goffi@goffi.org>
parents:
1103
diff
changeset
|
587 ui = xmlui.create(self, xml_data=data['xmlui']) |
804
5174657b3378
XMLUI (core, frontends): added JidWidget and DividerWidget + popup type + some bugfixes:
Goffi <goffi@goffi.org>
parents:
799
diff
changeset
|
588 ui.show() |
1034
5197600a1e13
quick_app, primitivus: update the connection mechanism to ask for non empty profile passwords
souliane <souliane@mailoo.org>
parents:
1021
diff
changeset
|
589 elif "authenticated_profile" in data: |
5197600a1e13
quick_app, primitivus: update the connection mechanism to ask for non empty profile passwords
souliane <souliane@mailoo.org>
parents:
1021
diff
changeset
|
590 assert("caller" in data) |
5197600a1e13
quick_app, primitivus: update the connection mechanism to ask for non empty profile passwords
souliane <souliane@mailoo.org>
parents:
1021
diff
changeset
|
591 if data["caller"] == "profile_manager": |
5197600a1e13
quick_app, primitivus: update the connection mechanism to ask for non empty profile passwords
souliane <souliane@mailoo.org>
parents:
1021
diff
changeset
|
592 assert(isinstance(self.main_widget, ProfileManager)) |
5197600a1e13
quick_app, primitivus: update the connection mechanism to ask for non empty profile passwords
souliane <souliane@mailoo.org>
parents:
1021
diff
changeset
|
593 self.main_widget.getXMPPParams(data['authenticated_profile']) |
5197600a1e13
quick_app, primitivus: update the connection mechanism to ask for non empty profile passwords
souliane <souliane@mailoo.org>
parents:
1021
diff
changeset
|
594 elif data["caller"] == "plug_profile": |
5197600a1e13
quick_app, primitivus: update the connection mechanism to ask for non empty profile passwords
souliane <souliane@mailoo.org>
parents:
1021
diff
changeset
|
595 self.plug_profile_1(data['authenticated_profile']) |
5197600a1e13
quick_app, primitivus: update the connection mechanism to ask for non empty profile passwords
souliane <souliane@mailoo.org>
parents:
1021
diff
changeset
|
596 else: |
5197600a1e13
quick_app, primitivus: update the connection mechanism to ask for non empty profile passwords
souliane <souliane@mailoo.org>
parents:
1021
diff
changeset
|
597 raise NotImplementedError |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
598 else: |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
599 self.showPopUp(sat_widgets.Alert(_("Error"), _(u"Unmanaged action result"), ok_cb=self.removePopUp)) |
1019 | 600 |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
601 def action_eb(failure): |
1063
6ec513ad92c2
frontends: async failures are more detailed (full class name + error message)
souliane <souliane@mailoo.org>
parents:
1060
diff
changeset
|
602 self.showPopUp(sat_widgets.Alert(failure.fullname, failure.message, ok_cb=self.removePopUp)) |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
603 |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
604 self.bridge.launchAction(callback_id, data, profile_key, callback=action_cb, errback=action_eb) |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
605 |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
606 def askConfirmationHandler(self, confirmation_id, confirmation_type, data, profile): |
542
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
607 answer_data={} |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
608 |
542
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
609 def dir_selected_cb(path): |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
610 dest_path = join(path, data['filename']) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
611 answer_data["dest_path"] = getNewPath(dest_path) |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
612 self.addProgress(confirmation_id, dest_path) |
542
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
613 accept_cb(None) |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
614 |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
615 def accept_file_transfer_cb(widget): |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
616 self.removePopUp() |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
617 pop_up_widget = FileDialog(dir_selected_cb, refuse_cb, title=_(u"Where do you want to save the file ?"), style=['dir']) |
542
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
618 self.showPopUp(pop_up_widget) |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
619 |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
620 def accept_cb(widget): |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
621 self.removePopUp() |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
622 self.bridge.confirmationAnswer(confirmation_id, True, answer_data, profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
623 |
542
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
624 def refuse_cb(widget): |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
625 self.removePopUp() |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
626 self.bridge.confirmationAnswer(confirmation_id, False, answer_data, profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
627 |
542
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
628 if confirmation_type == "FILE_TRANSFER": |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
629 pop_up_widget = sat_widgets.ConfirmDialog(_("The contact %(jid)s wants to send you the file %(filename)s\nDo you accept ?") % {'jid':data["from"], 'filename':data["filename"]}, no_cb=refuse_cb, yes_cb=accept_file_transfer_cb) |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
630 self.showPopUp(pop_up_widget) |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
631 |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
632 elif confirmation_type == "YES/NO": |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
633 pop_up_widget = sat_widgets.ConfirmDialog(data["message"], no_cb=refuse_cb, yes_cb=accept_cb) |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
634 self.showPopUp(pop_up_widget) |
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
530
diff
changeset
|
635 |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
636 def actionResultHandler(self, type_, id, data, profile): |
807
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
804
diff
changeset
|
637 # FIXME: to be removed |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
638 |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
639 if not id in self.current_action_ids: |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
640 log.debug (_('unknown id, ignoring')) |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
641 return |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
642 if type_ == "SUPPRESS": |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
643 self.current_action_ids.remove(id) |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
644 elif type_ == "XMLUI": |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
645 self.current_action_ids.remove(id) |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
646 log.debug (_("XML user interface received")) |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
647 misc = {} |
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
648 #FIXME FIXME FIXME: must clean all this crap ! |
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
649 title = _('Form') |
173 | 650 if data['type'] == 'registration': |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
651 title = _('Registration') |
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
652 misc['target'] = data['target'] |
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
653 misc['action_back'] = self.bridge.gatewayRegister |
1106
e2e1e27a3680
frontends: XMLUI refactoring + dialogs:
Goffi <goffi@goffi.org>
parents:
1103
diff
changeset
|
654 ui = xmlui.create(self, title=title, xml_data = data['xml'], misc = misc) |
173 | 655 if data['type'] == 'registration': |
656 ui.show('popup') | |
657 else: | |
658 ui.show('window') | |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
659 elif type_ == "ERROR": |
173 | 660 self.current_action_ids.remove(id) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
661 self.showPopUp(sat_widgets.Alert(_("Error"), unicode(data["message"]), ok_cb=self.removePopUp)) #FIXME: remove unicode here when DBus Bridge will no return dbus.String anymore |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
662 elif type_ == "RESULT": |
173 | 663 self.current_action_ids.remove(id) |
664 if self.current_action_ids_cb.has_key(id): | |
665 callback = self.current_action_ids_cb[id] | |
666 del self.current_action_ids_cb[id] | |
667 callback(data) | |
812
084b52afdceb
frontends: fixed /me usage + renamed a couple of "type" parameters to type_
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
668 elif type_ == "DICT_DICT": |
173 | 669 self.current_action_ids.remove(id) |
670 if self.current_action_ids_cb.has_key(id): | |
671 callback = self.current_action_ids_cb[id] | |
672 del self.current_action_ids_cb[id] | |
673 callback(data) | |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
674 else: |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
675 log.error (_("FIXME FIXME FIXME: type [%s] not implemented") % type_) |
153
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
676 raise NotImplementedError |
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
677 |
f197b52796ee
Primitivus: begining of management for actionResult
Goffi <goffi@goffi.org>
parents:
145
diff
changeset
|
678 ##DIALOGS CALLBACKS## |
120 | 679 def onJoinRoom(self, button, edit): |
680 self.removePopUp() | |
681 room_jid = JID(edit.get_edit_text()) | |
682 if room_jid.is_valid(): | |
405
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
382
diff
changeset
|
683 self.bridge.joinMUC(room_jid, self.profiles[self.profile]['whoami'].node, {}, self.profile) |
120 | 684 else: |
685 message = _("'%s' is an invalid JID !") % room_jid | |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
686 log.error (message) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
687 self.showPopUp(sat_widgets.Alert(_("Error"), message, ok_cb=self.removePopUp)) |
120 | 688 |
173 | 689 #MENU EVENTS# |
131 | 690 def onConnectRequest(self, menu): |
1060
aa15453ec54d
core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents:
1059
diff
changeset
|
691 QuickApp.asyncConnect(self, self.profile) |
131 | 692 |
693 def onDisconnectRequest(self, menu): | |
694 self.bridge.disconnect(self.profile) | |
695 | |
166
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
696 def onParam(self, menu): |
423
6c20c76abdcc
backend: - bridge async D-Bus method now automatically manage callback and errback, we just have to return a deferred
Goffi <goffi@goffi.org>
parents:
422
diff
changeset
|
697 def success(params): |
1185
6184779544c7
Primitivus (xmlui): fixed window closing on save params + removed now unused onConfigureRoom in Chat
Goffi <goffi@goffi.org>
parents:
1181
diff
changeset
|
698 ui = xmlui.create(self, xml_data=params) |
6184779544c7
Primitivus (xmlui): fixed window closing on save params + removed now unused onConfigureRoom in Chat
Goffi <goffi@goffi.org>
parents:
1181
diff
changeset
|
699 ui.show() |
777
5642939d254e
core, bridge: new method paramsRegisterApp to register frontend's specific parameters
souliane <souliane@mailoo.org>
parents:
776
diff
changeset
|
700 |
423
6c20c76abdcc
backend: - bridge async D-Bus method now automatically manage callback and errback, we just have to return a deferred
Goffi <goffi@goffi.org>
parents:
422
diff
changeset
|
701 def failure(error): |
1063
6ec513ad92c2
frontends: async failures are more detailed (full class name + error message)
souliane <souliane@mailoo.org>
parents:
1060
diff
changeset
|
702 self.showPopUp(sat_widgets.Alert(_("Error"), _("Can't get parameters (%s)") % error, ok_cb=self.removePopUp)) |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
703 self.bridge.getParamsUI(app=C.APP_NAME, profile_key=self.profile, callback=success, errback=failure) |
166
b318d2b58887
Primitivus: parameters management via XMLUI
Goffi <goffi@goffi.org>
parents:
159
diff
changeset
|
704 |
131 | 705 def onExitRequest(self, menu): |
183
9ee4a1d0d7fb
Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents:
182
diff
changeset
|
706 QuickApp.onExit(self) |
131 | 707 raise urwid.ExitMainLoop() |
708 | |
709 def onJoinRoomRequest(self, menu): | |
710 """User wants to join a MUC room""" | |
222
3198bfd66daa
primitivus: refactoring to use urwid-satext which is now a separate project
Goffi <goffi@goffi.org>
parents:
219
diff
changeset
|
711 pop_up_widget = sat_widgets.InputDialog(_("Entering a MUC room"), _("Please enter MUC's JID"), default_txt = 'room@muc_service.server.tld', cancel_cb=self.removePopUp, ok_cb=self.onJoinRoom) |
131 | 712 self.showPopUp(pop_up_widget) |
713 | |
137
227394eb080c
Primitivus: menu are now managed and fully working
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
714 def onAboutRequest(self, menu): |
1010
73a0b7f94674
primitivus: use of new logging system:
Goffi <goffi@goffi.org>
parents:
1000
diff
changeset
|
715 self.showPopUp(sat_widgets.Alert(_("About"), C.APP_NAME + " v" + self.bridge.getVersion(), ok_cb=self.removePopUp)) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
716 |
173 | 717 #MISC CALLBACKS# |
718 | |
737
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
719 def setStatusOnline(self, online=True, show="", statuses={}): |
850
30fd34309949
primitivus: displayed presence/status was not updated when the presence is "Online".
souliane <souliane@mailoo.org>
parents:
812
diff
changeset
|
720 if not online or not statuses: |
917
a9401694d2dc
bridge, frontends: display presence with the highest priority + reset your own presence when you (dis)connect
souliane <souliane@mailoo.org>
parents:
913
diff
changeset
|
721 self.status_bar.setPresenceStatus(show if online else 'unavailable', '') |
737
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
722 return |
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
723 try: |
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
724 self.status_bar.setPresenceStatus(show, statuses['default']) |
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
725 except (KeyError, TypeError): |
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
726 pass |
378af36155c2
frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents:
736
diff
changeset
|
727 |
112 | 728 sat = PrimitivusApp() |
729 sat.start() |