1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Code refactoring
----------------
+ adjust web view spacing and margins for widgets (relative to window borders)
+ do not kill greenlets but interrupt commands instead (sipsimple)
- refactor how models/dialogs/windows are created and where are they kept
- GoogleContactManager.enable_captcha should be decorated to run in the gui thread
- GoogleContactManager._set_captcha_image should be decorated to run in the gui thread
- _authorize_google_account from google dialog needs refactoring
- saving settings should be probably done in an auxiliary thread not the green thread
- rename main_window.google_contacts_dialog to something else
Issues
------
- review the change to only play a hangup tone when session has audio/video
- apply the default font/size from the theme to the input textbox?
- in Smooth Operator check if the src attribute is still needed in elements
that have the x-color class. there used to be a rule that matched elements
with an x-color class which also had a src attribute pointing to a
particular image, but since that was removed, no other rule matching
an element with the x-color class cares for the src attribute. check if
the src attribute on a span tag means anything, if not it can probably be
safely removed from message.html and message_continuation.html
- don't show selected audio device on the incoming dialog for chat
- reconsider the busy button on the incoming dialog (replace with ignore?)
- when a session is closed the chat window shows: "Disconnected: Connection
was closed cleanly", but when calling oneself and a loop is detected is
only says "Disconnected". It should actually only say Disconnected when
the connection is ended normally and show the failure reason if not.
Also when a connection is ended voluntarily it should not care if there
is a failure while stopping the streams.
- decide what to do about having keyboard shortcuts for hold/hangup in the
chat window (list may not be visible all the time and here we also
differentiate between hangup and delete session)
- move tray icon from the main window to Blink?
- there are session transitions that do not change the state (for example
a stream that is removed, either by local or remote, never switches the
state to sent/received_proposal and back. this means that one cannot
rely on BlinkSessionDidChangeState alone to handle session transitions,
but instead needs to also listed to BlinkSessionDidRemoveStream.
- I got an incoming call and the contact was found as a google contact, but
in history I have no name and the original uri. if I dial back, it doesn't
find the contact and says number@domain for the name.
- not sure about passing a Contact object to the session instead of
contact.settings.
- the DummyContact should follow the other contact APIs (have an id, ...)
in order to be usable in their place.
- have a contact.default_streams that returns a list of StreamDescription?
- have a contact.account property that returns the best account for outgoing?
Ideas:
------
- chat window alternate minimum sizes:
900x550 (230 splitter), 925x550 (240 splitter), 950x550 (250 splitter)
- exceptions:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 824, in runUntilCurrent
call.func(*call.args, **call.kw)
File "/usr/lib/python2.7/dist-packages/eventlib/coros.py", line 253, in _do_acquire
waiter.switch()
File "/usr/lib/python2.7/dist-packages/eventlib/api.py", line 235, in _spawn_startup
return cb(*args, **kw)
File "/home/dan/work/voip/python-sipsimple/sipsimple/session.py", line 1809, in hold
self._send_hold()
File "/home/dan/work/voip/python-sipsimple/sipsimple/session.py", line 1986, in _send_hold
notification = self._channel.wait()
File "/usr/lib/python2.7/dist-packages/eventlib/coros.py", line 478, in wait
api.getcurrent().throw(*exc)
MediaStreamDidFailError
Traceback (most recent call last):
File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 1130, in _SH_HangupButtonClicked
self.end()
File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 1102, in end
self.blink_session.remove_stream(self.audio_stream)
File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 592, in remove_stream
self.sip_session.remove_stream(stream)
File "<string>", line 1, in remove_stream
File "/home/dan/work/voip/python-sipsimple/sipsimple/session.py", line 100, in wrapper
raise IllegalStateError('cannot call %s in %s state' % (func.__name__, obj.state))
sipsimple.session.IllegalStateError: cannot call remove_stream in sending_proposal state
Presence
--------
- Is picking the most recent timestamp a good winning method?
- Calculate user idleness
- Add a GUI element for the offline note
- Delete own icon if we don't get anything back from XCAP?
- Unify settings for inbound and outbound presence