1
0
mirror of https://gitlab.com/comunic/comunicterm synced 2024-12-25 13:08:54 +00:00

Can process & return the real name of conversations

This commit is contained in:
Pierre HUBERT 2020-01-12 21:15:51 +01:00
parent 6a8a0d2c6d
commit 14d960713c
11 changed files with 113 additions and 11 deletions

View File

@ -17,7 +17,8 @@ SOURCES += \
mainmenu.cpp \ mainmenu.cpp \
conversations_screen.cpp \ conversations_screen.cpp \
helpers/conversationshelper.cpp \ helpers/conversationshelper.cpp \
entities/conversation.cpp entities/conversation.cpp \
entities/conversationslist.cpp
HEADERS += \ HEADERS += \
config.h \ config.h \
@ -31,4 +32,5 @@ HEADERS += \
mainmenu.h \ mainmenu.h \
conversations_screen.h \ conversations_screen.h \
helpers/conversationshelper.h \ helpers/conversationshelper.h \
entities/conversation.h entities/conversation.h \
entities/conversationslist.h

View File

@ -1,8 +1,10 @@
#include <iostream> #include <iostream>
#include "helpers/userhelper.h"
#include "conversations_screen.h" #include "conversations_screen.h"
#include "helpers/conversationshelper.h" #include "helpers/conversationshelper.h"
#include "entities/conversation.h" #include "entities/conversation.h"
#include "entities/conversationslist.h"
using namespace std; using namespace std;
@ -10,10 +12,12 @@ using namespace std;
void showConversationsScreen() void showConversationsScreen()
{ {
auto list = ConversationsHelper::GetList(); auto list = ConversationsHelper::GetList();
auto users = UserHelper::getMultiple(list.usersList());
for(auto c : list) for(auto c : list)
cout << "Conv: " << c.name() << endl; cout << "Conv: " << c.name(users) << endl;
cout << "done" << endl; cout << "done" << endl;

View File

@ -1,5 +1,11 @@
#include <iostream>
#include "conversation.h" #include "conversation.h"
#include "../helpers/accounthelper.h"
using namespace std;
Conversation::Conversation() Conversation::Conversation()
{ {
@ -35,6 +41,34 @@ void Conversation::setLastActive(int lastActive)
mLastActive = lastActive; mLastActive = lastActive;
} }
std::string Conversation::name(UsersList users)
{
if(hasName())
return mName;
if(mComputedName.size() == 0) {
size_t i = 0;
for(size_t j = 0; i < 3 && j < mMembers.size(); j++) {
auto userID = mMembers[j];
if(userID == AccountHelper::userID())
continue;
if(mComputedName.length() > 0)
mComputedName += ", ";
mComputedName += users[userID].fullName();
i++;
}
if(i < mMembers.size() - 2)
mComputedName += ", ...";
}
return mComputedName;
}
std::string Conversation::name() const std::string Conversation::name() const
{ {
return mName; return mName;
@ -45,6 +79,11 @@ void Conversation::setName(const std::string &name)
mName = name; mName = name;
} }
bool Conversation::hasName() const
{
return mName.size() > 0;
}
bool Conversation::following() const bool Conversation::following() const
{ {
return mFollowing; return mFollowing;

View File

@ -10,6 +10,8 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "user.h"
class Conversation class Conversation
{ {
public: public:
@ -24,8 +26,10 @@ public:
int lastActive() const; int lastActive() const;
void setLastActive(int lastActive); void setLastActive(int lastActive);
std::string name(UsersList users);
std::string name() const; std::string name() const;
void setName(const std::string &name); void setName(const std::string &name);
bool hasName() const;
bool following() const; bool following() const;
void setFollowing(bool following); void setFollowing(bool following);
@ -41,6 +45,7 @@ private:
int mID_Owner; int mID_Owner;
int mLastActive; int mLastActive;
std::string mName; std::string mName;
std::string mComputedName = "";
bool mFollowing; bool mFollowing;
bool mSawLastMessage; bool mSawLastMessage;
std::vector<int> mMembers; std::vector<int> mMembers;

View File

@ -0,0 +1,22 @@
#include "conversationslist.h"
using namespace std;
ConversationsList::ConversationsList()
{
}
set<int> ConversationsList::usersList() const
{
set<int> list;
for(auto conv : *this) {
list.insert(conv.iD_Owner());
for(auto m : conv.members())
list.insert(m);
}
return list;
}

View File

@ -0,0 +1,20 @@
/**
* List of conversations
*
* @author Pierre HUBERT
*/
#pragma once
#include <set>
#include "conversation.h"
class ConversationsList : public std::vector<Conversation>
{
public:
ConversationsList();
std::set<int> usersList() const;
};

View File

@ -7,7 +7,7 @@
#pragma once #pragma once
#include <string> #include <string>
#include <map>
class User class User
{ {
@ -31,3 +31,5 @@ private:
std::string mFirstName; std::string mFirstName;
std::string mLastName; std::string mLastName;
}; };
typedef std::map<int, User> UsersList;

View File

@ -3,6 +3,7 @@
#include "conversationshelper.h" #include "conversationshelper.h"
#include "../api_request.h" #include "../api_request.h"
#include "../entities/conversation.h" #include "../entities/conversation.h"
#include "../entities/conversationslist.h"
using namespace std; using namespace std;
@ -11,14 +12,14 @@ ConversationsHelper::ConversationsHelper()
} }
vector<Conversation> ConversationsHelper::GetList() ConversationsList ConversationsHelper::GetList()
{ {
const auto response = ApiRequest("conversations/getList").exec(); const auto response = ApiRequest("conversations/getList").exec();
if(response.code() != 200) if(response.code() != 200)
throw runtime_error("Get conversations list failed! (code: " + to_string(response.code())); throw runtime_error("Get conversations list failed! (code: " + to_string(response.code()));
vector<Conversation> list; ConversationsList list;
for(auto el : response.array()) { for(auto el : response.array()) {
auto obj = el.as_object(); auto obj = el.as_object();

View File

@ -9,6 +9,7 @@
#include <vector> #include <vector>
class Conversation; class Conversation;
class ConversationsList;
class ConversationsHelper class ConversationsHelper
{ {
@ -18,5 +19,5 @@ public:
/** /**
* Get the list of conversations of the current user * Get the list of conversations of the current user
*/ */
static std::vector<Conversation> GetList(); static ConversationsList GetList();
}; };

View File

@ -18,9 +18,9 @@ User UserHelper::GetSingle(int id)
return getMultiple(l)[id]; return getMultiple(l)[id];
} }
map<int, User> UserHelper::getMultiple(std::vector<int> ids) UsersList UserHelper::getMultiple(std::vector<int> ids)
{ {
map<int, User> users; UsersList users;
vector<int> toGet; vector<int> toGet;
// Check for missing users in cache // Check for missing users in cache
@ -62,3 +62,8 @@ map<int, User> UserHelper::getMultiple(std::vector<int> ids)
return users; return users;
} }
UsersList UserHelper::getMultiple(std::set<int> ids)
{
return getMultiple(vector<int>(ids.begin(), ids.end()));
}

View File

@ -8,17 +8,18 @@
#include <map> #include <map>
#include <vector> #include <vector>
#include <set>
#include <entities/user.h> #include <entities/user.h>
class UserHelper class UserHelper
{ {
public: public:
UserHelper(); UserHelper();
static User GetSingle(int id); static User GetSingle(int id);
static std::map<int, User> getMultiple(std::vector<int> ids); static UsersList getMultiple(std::vector<int> ids);
static UsersList getMultiple(std::set<int> ids);
private: private:
static std::map<int, User> mCache; static std::map<int, User> mCache;