1
0
mirror of https://gitlab.com/comunic/comunicterm synced 2024-11-16 02:21:08 +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 \
conversations_screen.cpp \
helpers/conversationshelper.cpp \
entities/conversation.cpp
entities/conversation.cpp \
entities/conversationslist.cpp
HEADERS += \
config.h \
@ -31,4 +32,5 @@ HEADERS += \
mainmenu.h \
conversations_screen.h \
helpers/conversationshelper.h \
entities/conversation.h
entities/conversation.h \
entities/conversationslist.h

View File

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

View File

@ -1,5 +1,11 @@
#include <iostream>
#include "conversation.h"
#include "../helpers/accounthelper.h"
using namespace std;
Conversation::Conversation()
{
@ -35,6 +41,34 @@ void Conversation::setLastActive(int 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
{
return mName;
@ -45,6 +79,11 @@ void Conversation::setName(const std::string &name)
mName = name;
}
bool Conversation::hasName() const
{
return mName.size() > 0;
}
bool Conversation::following() const
{
return mFollowing;

View File

@ -10,6 +10,8 @@
#include <string>
#include <vector>
#include "user.h"
class Conversation
{
public:
@ -24,8 +26,10 @@ public:
int lastActive() const;
void setLastActive(int lastActive);
std::string name(UsersList users);
std::string name() const;
void setName(const std::string &name);
bool hasName() const;
bool following() const;
void setFollowing(bool following);
@ -41,6 +45,7 @@ private:
int mID_Owner;
int mLastActive;
std::string mName;
std::string mComputedName = "";
bool mFollowing;
bool mSawLastMessage;
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
#include <string>
#include <map>
class User
{
@ -31,3 +31,5 @@ private:
std::string mFirstName;
std::string mLastName;
};
typedef std::map<int, User> UsersList;

View File

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

View File

@ -9,6 +9,7 @@
#include <vector>
class Conversation;
class ConversationsList;
class ConversationsHelper
{
@ -18,5 +19,5 @@ public:
/**
* 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];
}
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;
// Check for missing users in cache
@ -62,3 +62,8 @@ map<int, User> UserHelper::getMultiple(std::vector<int> ids)
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 <vector>
#include <set>
#include <entities/user.h>
class UserHelper
{
public:
UserHelper();
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:
static std::map<int, User> mCache;