Notes 15.4 KB
Newer Older
Dan Pascu's avatar
Dan Pascu committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ use an svg for the default avatar

+ When we accept a watcher and add it as a contact, it has no display name.
  We can take it from offline/online presence info instead
+ When a contact is removed and it had "Exchange presence info" enabled, we
  should remove its uris from the allowed contact list and add them to the
  blocked contact list (actually check if this is what we want)
+ When "Exchange availability information" is disabled, we still get
  presence updates until blink is restarted
+ If a uri was blocked then later added to a contact, it will still retain
  an addressbook policy with policy=blocked, even if "Exchange availability
  information" is enabled. Despite this, the accounts seem to exchange
  presence info without problems.
+ Add the ability to merge contacts

Dan Pascu's avatar
Dan Pascu committed
16 17 18 19 20 21 22 23
ZRTP
----

- decide between separate checkbox to enable/disable RTP encryption vs
  having "Disabled" integrated in the combobox
- key negotiation notes label in preferences


Dan Pascu's avatar
Dan Pascu committed
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
Video fixes
-----------

- consider if we should always show the mute/hold/close buttons (even in
  attached mode)?
- run the preview at the normal framerate before we connect (while big)?
- hide scrollbar in chat widget when video is overlayed on it?
- right click on camera preview bring up context menu to select camera
- make detaching animation have a duration that is proportional with the
  distance traveled, so that it appears to be similarly fast no matter
  how far it detaches
- maybe don't show the camera preview if the video device is None
- hide preview (and buttons?) while we animate?
- preview limited to parent (resize still has issues)
- double click to restore default size for preview? (might be problematic)

- if audio is removed blink-qt puts the session on hold 5 seconds later
  when the AudioSessionItem is destroyed
- custom icons for each window (chat, video, file transfer, ...)


Dan Pascu's avatar
Dan Pascu committed
45 46 47 48 49 50 51 52 53 54 55
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

Issues
------

Dan Pascu's avatar
Dan Pascu committed
56 57 58
- tls cert text editors have the clear button cover the text
- have a random conference room be joined if no room is specified
- raise publish/subscribe intervals to 3600? what about register?
Dan Pascu's avatar
Dan Pascu committed
59
- review the change to only play a hangup tone when session has audio/video
Dan Pascu's avatar
Dan Pascu committed
60 61
- 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
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
  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:
------

Dan Pascu's avatar
Dan Pascu committed
98 99
- chat window alternate minimum sizes:
  900x550 (230 splitter), 925x550 (240 splitter), 950x550 (250 splitter)
100 101


Dan Pascu's avatar
Dan Pascu committed
102 103 104 105 106 107 108 109 110
CPU usage increases for video:
------------------------------

painting camera preview @10fps (static image no producer connected)

in chat:   +4-5%
detached:  +3-4%
fullscren: +4-7%

Dan Pascu's avatar
Dan Pascu committed
111
producer @25fps connected, not painting
Dan Pascu's avatar
Dan Pascu committed
112 113 114 115 116

in chat:    +8-9%
detached:   +8-9%
fullscreen: +6-7%

Dan Pascu's avatar
Dan Pascu committed
117
producer @25fps connected, painting @10fps
Dan Pascu's avatar
Dan Pascu committed
118 119 120 121 122 123

in chat:    +13-14%
detached:   +12%
fullscreen: +12-15%


124 125
- exceptions:

Dan Pascu's avatar
Dan Pascu committed
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
Unhandled Error
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/home/dan/work/voip/python-sipsimple/sipsimple/application.py", line 141, in _run_reactor
    reactor.run(installSignalHandlers=False)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1199, in run
    self.mainLoop()
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1208, in mainLoop
    self.runUntilCurrent()
--- <exception caught here> ---
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 828, in runUntilCurrent
    call.func(*call.args, **call.kw)
  File "/usr/lib/python2.7/dist-packages/eventlib/api.py", line 241, in _spawn
    g.switch()
  File "/usr/lib/python2.7/dist-packages/eventlib/api.py", line 237, in _spawn_startup
    return cb(*args, **kw)
  File "/home/dan/work/voip/python-sipsimple/sipsimple/session.py", line 380, in add_participant
    referral_handler.start()
  File "/home/dan/work/voip/python-sipsimple/sipsimple/session.py", line 181, in start
    if not self.session.remote_focus:
exceptions.AttributeError: 'ReferralHandler' object has no attribute 'session'
Traceback (most recent call last):
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 5015, in dropEvent
    if model.handleDroppedData(event.mimeData(), event.dropAction(), self.indexAt(event.pos())):
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 4840, in handleDroppedData
    return handler(mime_data, action, index)
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 4850, in _DH_ApplicationXBlinkContactList
    self.session.server_conference.add_participant(contact, contact.uri)
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 1410, in add_participant
    if contact_uri.uri in self.participants:
AttributeError: 'NoneType' object has no attribute 'uri'

Unhandled Error
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/home/dan/work/voip/python-sipsimple/sipsimple/application.py", line 141, in _run_reactor
    reactor.run(installSignalHandlers=False)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1199, in run
    self.mainLoop()
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1208, in mainLoop
    self.runUntilCurrent()
--- <exception caught here> ---
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 828, in runUntilCurrent
    call.func(*call.args, **call.kw)
  File "/usr/lib/python2.7/dist-packages/eventlib/api.py", line 241, in _spawn
    g.switch()
  File "/usr/lib/python2.7/dist-packages/eventlib/api.py", line 237, in _spawn_startup
    return cb(*args, **kw)
  File "/home/dan/work/voip/python-sipsimple/sipsimple/session.py", line 380, in add_participant
    referral_handler.start()
  File "/home/dan/work/voip/python-sipsimple/sipsimple/session.py", line 181, in start
    if not self.session.remote_focus:
exceptions.AttributeError: 'ReferralHandler' object has no attribute 'session'

Unhandled Error
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/home/dan/work/voip/python-sipsimple/sipsimple/application.py", line 141, in _run_reactor
    reactor.run(installSignalHandlers=False)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1199, in run
    self.mainLoop()
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1208, in mainLoop
    self.runUntilCurrent()
--- <exception caught here> ---
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 828, in runUntilCurrent
    call.func(*call.args, **call.kw)
  File "/usr/lib/python2.7/dist-packages/eventlib/api.py", line 241, in _spawn
    g.switch()
  File "/usr/lib/python2.7/dist-packages/eventlib/api.py", line 237, in _spawn_startup
    return cb(*args, **kw)
  File "/home/dan/work/voip/python-sipsimple/sipsimple/session.py", line 380, in add_participant
    referral_handler.start()
  File "/home/dan/work/voip/python-sipsimple/sipsimple/session.py", line 181, in start
    if not self.session.remote_focus:
exceptions.AttributeError: 'ReferralHandler' object has no attribute 'session'
Traceback (most recent call last):
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 5015, in dropEvent
    if model.handleDroppedData(event.mimeData(), event.dropAction(), self.indexAt(event.pos())):
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 4840, in handleDroppedData
    return handler(mime_data, action, index)
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 4850, in _DH_ApplicationXBlinkContactList
    self.session.server_conference.add_participant(contact, contact.uri)
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 1410, in add_participant
    if contact_uri.uri in self.participants:
AttributeError: 'NoneType' object has no attribute 'uri'
214 215 216 217 218 219 220 221 222 223 224 225 226 227
error: Exception occured while calling function handle_notification in the GUI thread
Traceback (most recent call last):
  File "/home/dan/work/voip/blink-qt/blink/__init__.py", line 278, in _EH_CallFunctionEvent
    event.function(*event.args, **event.kw)
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 5531, in handle_notification
    handler(notification)
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 5589, in _NH_SIPSessionNewIncoming
    session.send_ring_indication()
  File "<string>", line 1, in send_ring_indication
  File "/home/dan/work/voip/python-sipsimple/sipsimple/session.py", line 118, in wrapper
    raise IllegalStateError('cannot call %s in %s state' % (func.__name__, obj.state))
IllegalStateError: cannot call send_ring_indication in terminated state


Dan Pascu's avatar
Dan Pascu committed
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
error: Exception occured in observer <blink.chatwindow.ChatWindow object at 0xab33d5cc> while handling notification 'BlinkSessionInfoUpdated'
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/application/notification.py", line 216, in post_notification
    observer.handle_notification(notification)
  File "<string>", line 1, in handle_notification
  File "/home/dan/work/voip/blink-qt/blink/util.py", line 36, in wrapper
    function(*args, **kw)
  File "/home/dan/work/voip/blink-qt/blink/chatwindow.py", line 1653, in handle_notification
    handler(notification)
  File "/home/dan/work/voip/blink-qt/blink/chatwindow.py", line 1767, in _NH_BlinkSessionInfoUpdated
    self._update_session_info_panel(elements=notification.data.elements)
  File "/home/dan/work/voip/blink-qt/blink/chatwindow.py", line 1481, in _update_session_info_panel
    self.video_value_label.setText(video_info.codec or 'N/A')
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 158, in codec
    return '{0.codec_name} {0.framerate:.3g}fps'.format(self) if self.codec_name else None
ValueError: Unknown format code 'g' for object of type 'str'


246
error: Exception occured in observer <blink.sessions.AudioSessionListView object at 0xab545464> while handling notification 'BlinkActiveSessionDidChange'
Dan Pascu's avatar
Dan Pascu committed
247 248 249
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/application/notification.py", line 216, in post_notification
    observer.handle_notification(notification)
250
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 2632, in handle_notification
Dan Pascu's avatar
Dan Pascu committed
251
    handler(notification)
252
  File "/home/dan/work/voip/blink-qt/blink/sessions.py", line 2646, in _NH_BlinkActiveSessionDidChange
Dan Pascu's avatar
Dan Pascu committed
253 254 255 256
    position = model.sessions.index(notification.data.active_session.items.audio)
ValueError: None is not in list


Dan Pascu's avatar
Dan Pascu committed
257 258 259 260 261 262 263 264 265 266 267 268 269
error: Exception occured in observer <sipsimple.streams.msrp.ScreenSharingStream object at 0x7fa65c2a3550> while handling notification 'MediaStreamWillEnd'
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/application/notification.py", line 216, in post_notification
    observer.handle_notification(notification)
  File "/home/saghul/work/ag-projects/video/python-sipsimple/sipsimple/streams/msrp.py", line 280, in handle_notification
    handler(notification)
  File "/home/saghul/work/ag-projects/video/python-sipsimple/sipsimple/streams/msrp.py", line 1050, in _NH_MediaStreamWillEnd
    notification.center.remove_observer(self, sender=self.handler)
  File "/usr/lib/python2.7/dist-packages/application/notification.py", line 163, in remove_observer
    raise KeyError("observer %r not registered for %r events from %r" % (observer, name, sender))
KeyError: 'observer <sipsimple.streams.msrp.ScreenSharingStream object at 0x7fa65c2a3550> not registered for Any events from <blink.sessions.ExternalVNCServerHandler object at 0x7fa65c2a3dd0>'


Dan Pascu's avatar
Dan Pascu committed
270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295
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

296

297 298 299 300 301 302 303 304
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
Dan Pascu's avatar
Dan Pascu committed
305