diff --git a/TODO.txt b/TODO.txt index e4094860e..254deedfd 100644 --- a/TODO.txt +++ b/TODO.txt @@ -6,31 +6,34 @@ Legend: [ ] 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 [ ] 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 [ ] 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 [ ] add tooltips in in permission matrix when hovering over the top most button/service name - explain what the service does and the dependencies + 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 + 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) @@ -38,9 +41,10 @@ File transfer (all 3 tasks are related) 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. + 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. @@ -60,11 +64,9 @@ VOIP M [ ] Video Messages (send a video greeting to multiple friends/coworkers/developers at once.) H [ ] Audio Conference H [ ] Video Conference - Messages - H [ ] 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 + 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. Chat diff --git a/libretroshare/src/chat/distributedchat.cc b/libretroshare/src/chat/distributedchat.cc index bced27d30..fb2a8a419 100644 --- a/libretroshare/src/chat/distributedchat.cc +++ b/libretroshare/src/chat/distributedchat.cc @@ -202,7 +202,7 @@ bool DistributedChatService::handleRecvChatLobbyMsgItem(RsChatMsgItem *ci) //name = cli->nick; //popupChatFlag = RS_POPUP_CHATLOBBY; - RsServer::notify()->AddPopupMessage(RS_POPUP_CHATLOBBY, virtual_peer_id.toStdString(), cli->signature.keyId.toStdString(), cli->message); /* notify private chat message */ + RsServer::notify()->AddPopupMessage(RS_POPUP_CHATLOBBY, ChatId(cli->lobby_id).toStdString(), cli->signature.keyId.toStdString(), cli->message); /* notify private chat message */ return true ; } @@ -319,11 +319,6 @@ void DistributedChatService::locked_printDebugInfo() const } - std::cerr << "Recorded lobby names: " << std::endl; - - for( std::map::const_iterator it(_lobby_ids.begin()) ;it!=_lobby_ids.end();++it) - std::cerr << " \"" << it->first << "\" id = " << std::hex << it->second << std::dec << std::endl; - std::cerr << "Visible public lobbies: " << std::endl; for( std::map::const_iterator it(_visible_lobbies.begin()) ;it!=_visible_lobbies.end();++it) @@ -339,21 +334,6 @@ void DistributedChatService::locked_printDebugInfo() const std::cerr << " \"" << std::hex << it->first << "\" flags = " << it->second << std::dec << std::endl; } -bool DistributedChatService::isLobbyId(const RsPeerId& virtual_peer_id,ChatLobbyId& lobby_id) -{ - RsStackMutex stack(mDistributedChatMtx); /********** STACK LOCKED MTX ******/ - - std::map::const_iterator it(_lobby_ids.find(virtual_peer_id)) ; - - if(it != _lobby_ids.end()) - { - lobby_id = it->second ; - return true ; - } - - lobby_id = 0; - return false ; -} bool DistributedChatService::locked_bouncingObjectCheck(RsChatLobbyBouncingObject *obj,const RsPeerId& peer_id,uint32_t lobby_count) { static std::map > message_counts ; @@ -1368,7 +1348,6 @@ bool DistributedChatService::acceptLobbyInvite(const ChatLobbyId& lobby_id,const entry.last_connexion_challenge_time = now ; entry.last_keep_alive_packet_time = now ; - _lobby_ids[entry.virtual_peer_id] = lobby_id ; _chat_lobbys[lobby_id] = entry ; _lobby_invites_queue.erase(it) ; // remove the invite from cache. @@ -1487,8 +1466,6 @@ bool DistributedChatService::joinVisibleChatLobby(const ChatLobbyId& lobby_id,co entry.last_connexion_challenge_time = now ; entry.last_keep_alive_packet_time = now ; - _lobby_ids[entry.virtual_peer_id] = lobby_id ; - for(std::set::const_iterator it2(it->second.participating_friends.begin());it2!=it->second.participating_friends.end();++it2) { invited_friends.push_back(*it2) ; @@ -1537,7 +1514,6 @@ ChatLobbyId DistributedChatService::createChatLobby(const std::string& lobby_nam entry.last_connexion_challenge_time = now ; entry.last_keep_alive_packet_time = now ; - _lobby_ids[entry.virtual_peer_id] = lobby_id ; _chat_lobbys[lobby_id] = entry ; } @@ -1619,13 +1595,6 @@ void DistributedChatService::unsubscribeChatLobby(const ChatLobbyId& id) // remove lobby information _chat_lobbys.erase(it) ; - - for(std::map::iterator it2(_lobby_ids.begin());it2!=_lobby_ids.end();++it2) - if(it2->second == id) - { - _lobby_ids.erase(it2) ; - break ; - } } RsServer::notify()->notifyListChange(NOTIFY_LIST_CHAT_LOBBY_LIST, NOTIFY_TYPE_DEL) ; diff --git a/libretroshare/src/chat/distributedchat.h b/libretroshare/src/chat/distributedchat.h index e77a3d802..c311727b1 100644 --- a/libretroshare/src/chat/distributedchat.h +++ b/libretroshare/src/chat/distributedchat.h @@ -60,7 +60,6 @@ class DistributedChatService // Interface part to communicate with // bool getVirtualPeerId(const ChatLobbyId& lobby_id, RsPeerId& virtual_peer_id) ; - bool isLobbyId(const RsPeerId& virtual_peer_id, ChatLobbyId& lobby_id) ; void getChatLobbyList(std::list& clids) ; bool getChatLobbyInfo(const ChatLobbyId& id,ChatLobbyInfo& clinfo) ; bool acceptLobbyInvite(const ChatLobbyId& id,const RsGxsId& identity) ; @@ -149,7 +148,6 @@ class DistributedChatService std::map _chat_lobbys ; std::map _lobby_invites_queue ; std::map _visible_lobbies ; - std::map _lobby_ids ; std::map _known_lobbies_flags ; // flags for all lobbies, including the ones that are not known. So we can't std::map > _pendingPartialLobbyMessages ; // store them in _chat_lobbies (subscribed lobbies) nor _visible_lobbies. // Known flags: diff --git a/libretroshare/src/retroshare/rsmsgs.h b/libretroshare/src/retroshare/rsmsgs.h index 3d18a11ac..d60511f48 100644 --- a/libretroshare/src/retroshare/rsmsgs.h +++ b/libretroshare/src/retroshare/rsmsgs.h @@ -464,10 +464,11 @@ virtual void getOwnAvatarData(unsigned char *& data,int& size) = 0 ; /****************************************/ virtual bool joinVisibleChatLobby(const ChatLobbyId& lobby_id,const RsGxsId& own_id) = 0 ; -virtual bool isLobbyId(const RsPeerId& virtual_peer_id,ChatLobbyId& lobby_id) = 0; -virtual bool getVirtualPeerId(const ChatLobbyId& lobby_id,RsPeerId& vpid) = 0; +/// get ids of subscribed lobbies virtual void getChatLobbyList(std::list& cl_list) = 0; +/// get lobby info of a subscribed chat lobby. Returns true if lobby id is valid. virtual bool getChatLobbyInfo(const ChatLobbyId& id,ChatLobbyInfo& info) = 0 ; +/// get info about all lobbies, subscribed and unsubscribed virtual void getListOfNearbyChatLobbies(std::vector& public_lobbies) = 0 ; virtual void invitePeerToLobby(const ChatLobbyId& lobby_id,const RsPeerId& peer_id) = 0; virtual bool acceptLobbyInvite(const ChatLobbyId& id,const RsGxsId& identity) = 0 ; diff --git a/libretroshare/src/rsserver/p3msgs.cc b/libretroshare/src/rsserver/p3msgs.cc index 64c5b0179..e54c0730d 100644 --- a/libretroshare/src/rsserver/p3msgs.cc +++ b/libretroshare/src/rsserver/p3msgs.cc @@ -444,15 +444,6 @@ void p3Msgs::setCustomStateString(const std::string& state_string) mChatSrv->setOwnCustomStateString(state_string) ; } -bool p3Msgs::getVirtualPeerId(const ChatLobbyId& id,RsPeerId& peer_id) -{ - return mChatSrv->getVirtualPeerId(id,peer_id) ; -} -bool p3Msgs::isLobbyId(const RsPeerId& peer_id,ChatLobbyId& id) -{ - return mChatSrv->isLobbyId(peer_id,id) ; -} - bool p3Msgs::getChatLobbyInfo(const ChatLobbyId& id,ChatLobbyInfo& linfo) { return mChatSrv->getChatLobbyInfo(id,linfo) ; diff --git a/libretroshare/src/rsserver/p3msgs.h b/libretroshare/src/rsserver/p3msgs.h index ecef61b30..691759bed 100644 --- a/libretroshare/src/rsserver/p3msgs.h +++ b/libretroshare/src/rsserver/p3msgs.h @@ -138,8 +138,6 @@ class p3Msgs: public RsMsgs virtual bool joinVisibleChatLobby(const ChatLobbyId& id, const RsGxsId &own_id) ; virtual void getListOfNearbyChatLobbies(std::vector& public_lobbies) ; - virtual bool getVirtualPeerId(const ChatLobbyId& id,RsPeerId& vpid) ; - virtual bool isLobbyId(const RsPeerId& virtual_peer_id,ChatLobbyId& lobby_id) ; virtual void getChatLobbyList(std::list& cl_list) ; virtual bool getChatLobbyInfo(const ChatLobbyId& id,ChatLobbyInfo& info) ; virtual void invitePeerToLobby(const ChatLobbyId&, const RsPeerId&) ; diff --git a/retroshare-gui/src/gui/ChatLobbyWidget.cpp b/retroshare-gui/src/gui/ChatLobbyWidget.cpp index 9e960f364..5eff6908c 100644 --- a/retroshare-gui/src/gui/ChatLobbyWidget.cpp +++ b/retroshare-gui/src/gui/ChatLobbyWidget.cpp @@ -501,10 +501,7 @@ void ChatLobbyWidget::updateDisplay() #endif - bool subscribed = false; - if (rsMsgs->getVirtualPeerId(lobby.lobby_id, vpid)) { - subscribed = true; - } + bool subscribed = std::find(lobbies.begin(), lobbies.end(), lobby.lobby_id) != lobbies.end(); QTreeWidgetItem *item = NULL; QTreeWidgetItem *lobby_item =NULL; @@ -1101,13 +1098,10 @@ void ChatLobbyWidget::readChatLobbyInvites() continue ; } - rsMsgs->acceptLobbyInvite((*it).lobby_id,chosen_id); - - RsPeerId vpid; - if(rsMsgs->getVirtualPeerId((*it).lobby_id,vpid )) + if(rsMsgs->acceptLobbyInvite((*it).lobby_id,chosen_id)) ChatDialog::chatFriend(ChatId((*it).lobby_id),true); else - std::cerr << "No lobby known with id 0x" << std::hex << (*it).lobby_id << std::dec << std::endl; + std::cerr << "Can't join lobby with id 0x" << std::hex << (*it).lobby_id << std::dec << std::endl; } } diff --git a/retroshare-gui/src/gui/connect/ConfCertDialog.ui b/retroshare-gui/src/gui/connect/ConfCertDialog.ui index c9c650549..4a79121b9 100644 --- a/retroshare-gui/src/gui/connect/ConfCertDialog.ui +++ b/retroshare-gui/src/gui/connect/ConfCertDialog.ui @@ -6,8 +6,8 @@ 0 0 - 635 - 634 + 678 + 727 @@ -60,7 +60,7 @@ - 2 + 0 @@ -470,6 +470,9 @@ + + <html><head/><body><p>This option allows you to automatically download a file that is recommended in an message coming from this node. This can be used for instance to send files between your own nodes.</p></body></html> + Auto-download recommended files from this node @@ -495,12 +498,6 @@ - - AvatarWidget - QLabel -
gui/common/AvatarWidget.h
- 1 -
HeaderFrame QFrame @@ -512,6 +509,12 @@ QTextBrowser
gui/common/RSTextBrowser.h
+ + AvatarWidget + QLabel +
gui/common/AvatarWidget.h
+ 1 +
diff --git a/retroshare-gui/src/gui/connect/PGPKeyDialog.ui b/retroshare-gui/src/gui/connect/PGPKeyDialog.ui index 1e498c0e3..26555e9c4 100644 --- a/retroshare-gui/src/gui/connect/PGPKeyDialog.ui +++ b/retroshare-gui/src/gui/connect/PGPKeyDialog.ui @@ -6,7 +6,7 @@ 0 0 - 861 + 990 668
@@ -27,7 +27,7 @@ - 0 + 1 @@ -61,6 +61,9 @@ + + <html><head/><body><p>The PGP key fingerprint is a---supposedly unforgeable---characteristics of the PGP key. In order to make sure that you're dealing with the right key, compare the fingerprints.</p></body></html> + true @@ -78,6 +81,9 @@ + + <html><head/><body><p>The trust level is an optional and local parameter that you can set in order to remember your option about a given PGP key. It is not used whatsoever to authorize connections. </p></body></html> + Unset @@ -158,7 +164,11 @@ - + + + <html><head/><body><p><span style=" font-size:10pt;">Signing a friend's key is a way to express your trust into this friend, to your other friends. The signatures below cryptographically attest that owners of the listed keys recognise the current PGP key as authentic.</span></p></body></html> + + @@ -174,10 +184,8 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;"> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Signing a friend's key is a way to express your trust into this friend, to your other friends. Besides, only signed peers will receive information about your other trusted friends.</p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Signing a key cannot be undone, so do it wisely.</p></body></html> +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Signing a friend's key is a way to express your trust into this friend, to your other friends. It helps them to decide whether to allow connections from that key based on your own trust. Signing a key is absolutely optional and cannot be undone, so do it wisely.</span></p></body></html> Sign this PGP key @@ -199,6 +207,9 @@ p, li { white-space: pre-wrap; } + + <html><head/><body><p><span style=" font-size:10pt;">Signing a friend's key is a way to express your trust into this friend, to your other friends. It helps them to decide whether to allow connections from that key based on your own trust. Signing a key is absolutely optional and cannot be undone, so do it wisely.</span></p></body></html> + Sign PGP key @@ -219,6 +230,9 @@ p, li { white-space: pre-wrap; } + + <html><head/><body><p>Click here if you want to refuse connections to nodes authenticated by this key.</p></body></html> + Deny connections @@ -239,6 +253,9 @@ p, li { white-space: pre-wrap; } + + <html><head/><body><p>Click this if you want your node to accept connecting to Retroshare nodes authenticated by this PGP key. This is done automatically when exchanging your Retroshare certificate with someone. In order to make friends, it is better to exchange certificates than accept connections from a given key, since the certificate also contain useful connection information (IP, DNS, SSL ids, etc).</p></body></html> + Accept connections @@ -292,6 +309,9 @@ p, li { white-space: pre-wrap; } + + <html><head/><body><p>This button will toggle the inclusion of signatures in the ascii display of the PGP key. See the comments about signatures in the other tab. </p></body></html> + Include signatures diff --git a/retroshare-gui/src/gui/notifyqt.cpp b/retroshare-gui/src/gui/notifyqt.cpp index a6b8b5457..7c19da271 100644 --- a/retroshare-gui/src/gui/notifyqt.cpp +++ b/retroshare-gui/src/gui/notifyqt.cpp @@ -863,11 +863,9 @@ void NotifyQt::UpdateGUI() case RS_POPUP_CHATLOBBY: if ((popupflags & RS_POPUP_CHATLOBBY) && !_disableAllToaster) { - ChatLobbyId lobby_id; - if(!rsMsgs->isLobbyId(RsPeerId(id), lobby_id)) - break; + ChatId chat_id(id); - ChatDialog *chatDialog = ChatDialog::getChat(ChatId(lobby_id)); + ChatDialog *chatDialog = ChatDialog::getChat(chat_id); ChatWidget *chatWidget; if (chatDialog && (chatWidget = chatDialog->getChatWidget()) && chatWidget->isActive()) { // do not show when active @@ -879,7 +877,7 @@ void NotifyQt::UpdateGUI() if (!chatLobbyDialog || chatLobbyDialog->isParticipantMuted(sender)) break; // participant is muted - toaster = new ToasterItem(new ChatLobbyToaster(lobby_id, sender, QString::fromUtf8(msg.c_str()))); + toaster = new ToasterItem(new ChatLobbyToaster(chat_id.toLobbyId(), sender, QString::fromUtf8(msg.c_str()))); } break; case RS_POPUP_CONNECT_ATTEMPT: