add data Items

This commit is contained in:
xyz
2025-06-08 20:20:37 +08:00
parent 44a1452251
commit 030b5d6101
13 changed files with 810 additions and 13 deletions

View File

@ -8,6 +8,8 @@
#include <QString>
#include <QUuid>
#include "base.qpb.h"
// 创建命名空间
namespace model {
///////////////////////////
@ -87,6 +89,21 @@ public:
QString description = ""; //用户签名
QString phone = ""; //手机号码
QIcon avatar; //用户头像
//从protobuffer的UserInfo对象转换为当前代码的UserInfo对象
void load(const bite_im::UserInfo& userInfo) {
this->userId = userInfo.userId();
this->nickname = userInfo.nickname();
this->phone = userInfo.phone();
this->description = userInfo.description();
if (userInfo.avatar().isEmpty()) {
//使用默认的头像即可
this->avatar = QIcon(":resource/image/defaultAvatar.png");
}
else {
this->avatar = makeIcon(userInfo.avatar());
}
}
};
///////////////////////////
@ -126,6 +143,52 @@ static Message makeMessage(MessageType messageType, const QString& chatSessionId
}
}
void load(const bite_im::MessageInfo& messageInfo) {
this->messageId = messageInfo.messageId();
this->chatSessionId = messageInfo.chatSessionId();
this->time = formatTime(messageInfo.timestamp());
this->sender.load(messageInfo.sender());
//设置消息的类型
auto type = messageInfo.message().messageType();
if (type == bite_im::MessageTypeGadget::MessageType::STRING) {
this->messageType = TEXT_TYPE;
this->content = messageInfo.message().stringMessage().content().toUtf8();
}
else if (type == bite_im::MessageTypeGadget::MessageType::IMAGE) {
this->messageType = IMAGE_TYPE;
if (messageInfo.message().imageMessage().hasImageContent()) {
this->content = messageInfo.message().imageMessage().imageContent();
}
if (messageInfo.message().imageMessage().hasFileId()) {
this->fileId = messageInfo.message().imageMessage().fileId();
}else if (type == bite_im::MessageTypeGadget::MessageType::FILE) {
this->messageType = FILE_TYPE;
if (messageInfo.message().fileMessage().hasFileContents()) {
this->content = messageInfo.message().fileMessage().fileContents();
}
if (messageInfo.message().fileMessage().hasFileId()) {
this->fileId = messageInfo.message().fileMessage().fileId();
}
this->fileName = messageInfo.message().fileMessage().fileName();
}
else if (type == bite_im::MessageTypeGadget::MessageType::SPEECH) {
this->messageType = SPEECH_TYPE;
if (messageInfo.message().speechMessage().hasFileContents()) {
this->content = messageInfo.message().speechMessage().fileContents();
}
if (messageInfo.message().speechMessage().hasFileId()) {
this->fileId = messageInfo.message().speechMessage().fileId();
}
}
else {
// 错误的类型, 啥都不做了, 只是打印一个日志
LOG() << "非法的消息类型! type=" << type;
}
}
}
private:
static QString makeId() {
@ -215,6 +278,33 @@ public:
Message lastMessage; //表示会话的最新消息
QIcon avatar; //会话的头像(单聊或群聊)
QString userId = ""; //(单聊为对方的id群聊为"")
void load(bite_im::ChatSessionInfo& chatSessionInfo) {
this->chatSessionId = chatSessionInfo.chatSessionId();
this->chatSessionName = chatSessionInfo.chatSessionName();
if (chatSessionInfo.hasSingleChatFriendId()) {
this->userId = chatSessionInfo.singleChatFriendId();
}
if (chatSessionInfo.hasPrevMessage()) {
lastMessage.load(chatSessionInfo.prevMessage());
}
if (chatSessionInfo.hasAvatar() && !chatSessionInfo.avatar().isEmpty()) {
//如果有头像,则设置这个头像
this->avatar = makeIcon(chatSessionInfo.avatar());
}
else {
//如果没有,则会根据是单聊还是群聊,使用不同的默认头像
if (userId != "") {
//单聊
this->avatar = QIcon(":/resource/image/defaultAvatar.png");
}
else {
//群聊
this->avatar = QIcon(":/resource/image/groupAvatar.png");
}
}
}
};
} //end namespace model

19
model/datacenter.cpp Normal file
View File

@ -0,0 +1,19 @@
#include "datacenter.h"
namespace model
{
DataCenter* DataCenter::instance = nullptr;
DataCenter* DataCenter::getInstance()
{
if (instance == nullptr) {
instance = new DataCenter();
}
return nullptr;
}
DataCenter::DataCenter()
{
}
}

56
model/datacenter.h Normal file
View File

@ -0,0 +1,56 @@
#pragma once
#include <QWidget>
#include "data.h"
namespace model
{
class DataCenter : public QObject
{
Q_OBJECT
public:
static DataCenter* getInstance();
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ͡<C4BA>
/// </summary>
/// <param name="a"><3E><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="b"><3E>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <returns><3E><><EFBFBD><EFBFBD> a + b <20>Ľ<EFBFBD><C4BD><EFBFBD></returns>
/*int add(int a, int b) {
return a + b;
}*/
private:
DataCenter();
static DataCenter* instance;
//<2F>г<EFBFBD>DataCenter<65><72>Ҫ<EFBFBD><D2AA>֯<EFBFBD><D6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ǰ<EFBFBD>ͻ<EFBFBD><CDBB>˵<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ĵ<EFBFBD>¼<EFBFBD>ỰId
QString loginSessionId;
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD>û<EFBFBD><C3BB><EFBFBD>Ϣ
UserInfo* myself = nullptr;
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
QList<UserInfo>* firendList = nullptr;
//<2F><EFBFBD>б<EFBFBD>
QList<ChatSessionInfo>* chatSessionList = nullptr;
//<2F><>¼<EFBFBD><C2BC>ǰѡ<C7B0>еĻỰ<C4BB><E1BBB0><EFBFBD>ĸ<EFBFBD>
QString currentChatSession = "";
//<2F><>¼ÿ<C2BC><C3BF><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9>Ա
QHash<QString, QList<UserInfo>>* memberList = nullptr;//unordered_map
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
QList<UserInfo>* applyList = nullptr;
signals:
};
} //end namespace model