Notes 4.8 KB
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