Legend:
   E: easy. Just GUI stuff, no algorithmics involved. That does not mean it's easy to come up with.
   M: medium, either because it's a big task, or because it needs to understand a lot of code. 
   H: hard. Needs digging deep into libretroshare, possibly involving some crypto.

   [ ] pending
   [/] half-done, someone's on it
   [-] cancelled
   [?] needs discussion. Not sure we need this.
   [X] done

PS: no tabs in this file,thx ;-)

----------------------------------------  TODO for RC ---------------------------------------------

    E  [ ] Implement creation of a default (signed) gxs id in startup wizard. Needs to show to the user a proper separation between nodes (network layer) and GXS ids (service layer).
    E  [ ] add tooltips in in permission matrix when hovering over the top most button/service name explain what the service does and the dependencies
    E  [ ] finish pass of GXS network service

-----------------------------------------  TODO list ----------------------------------------------

GUI
    E  [X] add a "Contact" list to help selecting peers in People/FriendChooser/messages/etc.
    E  [ ] fix posted GUI. Needs to be more handy and more appealing.
    E  [ ] add RS links for GXS identities, so that they can be transferred easily between nodes in forums, etc
    E  [ ] enable people dialog
    M  [ ] Personal Page (Profile Page for GXS ID Users,view latest Posts, public forum/channels,posted posts, comments in all areas, Reputation Infos, Popularity and more)
    E  [ ] fix RSButtonOnText::eventFilter, and fix all places where RSButtonOnText gets deleted
    E  [ ] find all places where the deprecated(in Qt5) Q_WS_WIN and other Q_WS* macros are used, and replace with something else
    E  [ ] Make RS fully compatible with High DPI screens.
    M  [ ] improve comments in channels. Comments should be more available, more visible, and easier to handle.
    E  [ ] make GRouter statistics less CPU greedy
    M  [ ] Merge the various help systems. there's 3 of them now. Lots of duplicate code, etc.
    M  [ ] New and consistent icon set (Purplehaze420 said he would provide a consistent set of icons. Is that still alive?)
    M  [ ] add in options->Network a way to select which network interface is used to talk (choice between "auto" or selected from a list)
    M  [?] add a RS link for encrypted messages (encrypt for multiple GXS ids at once). Messages will appear as a link when encrypted and 
           be automatically decrypted when a suitable GXS id is available for it. Could be a way to securely post something in a public place.

File transfer (all 3 tasks are related)
    E  [ ] Add a limit of the total number of files simultaneously asked to the same peer using direct transfer.
    H  [ ] implement a new file list management, with new info such as access time,total upload, popularity, etc
    H  [ ] implement a new file list sharing service based on auto-sync system
    M  [ ] get rid of the old cache system (remove CacheStrapper, CacheSource,etc)
    M  [ ] implement end-to-end encryption using chacha20 and H(F), requesting file on H(H(F)). Make this optional and backward compatible.

DHT
    H  [-] improve DHT lookups to find masquerading peers using fake peers. First experiments (by cyril) do not prove very efficient.

GXS
    M  [X] create a tunnel service from distant chat code to make it (1) more generic (2) resistant to packet loss. 
    M  [X] optimise GXS sync BW. For the moment too much is sent between nodes.
    H  [/] add the ability to use anonymous identities into circles. Needs new distribution model using items encrypted for multiple GXS keys.
    H  [ ] use different and incompatible classes for public and private keys in GxsSecurity

VOIP
     H  [ ] use proper video encoding. What we have now is decent for video, but sound should be prioritized. Experiments 
            with QtAV seem to work nicely. Finish and integrate!
     M  [ ] Deactivate Voip Buttons, when Friend has no Voip plugin enabled.    
     M  [ ] Implement Voice for Video Chat
     M  [ ] Improve Voice and Video Quality    
     M  [ ] Video Quality/Resolution Settings (High, Medium, Low) HD, HQ, SD )
     M  [ ] Video Device: WebCam(s) or Desktop Selection
     M  [ ] Audio Input Device Selection (Microphone)
     M  [ ] Audio Output Device Selection (Speaker)
     M  [ ] Video Snapshots https://support.skype.com/en/faq/FA1222/what-is-video-snapshot
     M  [ ] Voice Messaging (record and send a voice message)
     M  [ ] Video Messages (send a video greeting to multiple friends/coworkers/developers at once.)
     H  [ ] Audio Conference
     H  [ ] Video Conference

Messages
    H  [X] make the mail system re-send failed emails notified by the global router. This is hard because it needs a proper management of duplicate messages
    E  [X] add flags to allow distant messaging from contact list only / everyone / noone / only signed ids.
    M  [ ] add Signature feature to rs messages

Chat
    E  [X] add flags to allow distant chat from contact list only / everyone / noone / only signed ids.

Libretroshare
    E  [X] groups small packets in pqistreamer::handleoutgoing_locked(), and see if that removes some padding overhead
    E  [ ] make sure at least one location is kept when removing old locations as it avoids lots of connection problems.
    M  [ ] improve serialisation system. Lots of serialisation tasks (header, verifications, serialiser=>template, can be factored)
    M  [ ] separate chat stuff from rsmsgs.h into rschat.h
    M  [ ] crash at shutdown due to memory management already cleared while new objects keep being requested.

            #0 0x0000000000da52eb in RsMemoryManagement:¿mallObject:¿mallObject() ()
            #1 0x0000000000da3694 in RsItem::RsItem(unsigned int) ()
            #2 0x0000000000dcb365 in RsRawItem::RsRawItem (this=0x0, t=33559555, size=38) at ./serialiser/rsserial.h
            #3 0x0000000000fc1643 in RsServiceSerialiser::deserialise(void*, unsigned int*) ()
            #4 0x0000000000da4451 in RsSerialiser::deserialise(void*, unsigned int*) ()
            #5 0x0000000000fb5b4b in pqistreamer::handleincoming_locked() ()
            #6 0x0000000000fb4b3e in pqistreamer::tick_recv(unsigned int) ()
            #7 0x0000000000fb744a in pqithreadstreamer::data_tick() ()
            #8 0x0000000000e19b27 in RsTickingThread::runloop (this=0x7fffb004e7e8) at util/rsthreads.cc:196
            #9 0x0000000000e19748 in RsThread::rsthread_init (p=0x7fffb004e7e8) at util/rsthreads.cc:63
            #10 0x00007ffff4006f6b in start_thread () from /lib64/libpthread.so.0
            #11 0x00007ffff351c7ed in clone () from /lib64/libc.so.6

Channels
    E  [ ] allow to set a download directory per channel
    M  [ ] Thumbnail View for Channels
    M  [ ] Count commments on Comments Button
    M  [ ] Notify Channel comments/replies

Posted
    E  [ ] Show an info page for unsubscribed posted threads (same as forums)
    E  [ ] Make the GUI of Posted more sexy: more compact items, remove unecessary text, use consistent icons,...
      
Forums
    E  [ ] do we keep "Getting Started" ? the look needs to be improved. Any help doing this is welcome!
    E  [ ] some widgets in the GUI do not follow the system style => GUI looks bad on these systems

Bugs
    E  [ ] find the bug that shows some peers online in Network although they are not.
    M  [X] Selecting different options in messages composer -> contact list then come back, 
           shows disappearing / re-appearing people. What causes this???

Sounds 
    E  [ ] add default sounds for Friend go online, New Chat Message, Message arrived, Download complete
    M  [ ] make sure sound is working for users on linux. We also need a "test sound" button in config->sound. 

Packaging
    E  [ ] Sound files should be part of the install package at least on ubuntu (put them in /usr/share)

List of pending non backward compatible changes
===============================================

    * RsGxsGrpMetaData::deserialis should use a proper TLV_STR_TYPE_NAME instead of 0 for 
      mGroupName and mMsgName, in rsgxsdata.cc
    * p3IdService::service_CreateGroup() should convert the mPgpSign member to radix64!! For now 
      it is hard-coded in binary in a string.


