ctai/src/ctai_session_info.cpp
2025-03-05 16:03:21 +08:00

180 lines
5.9 KiB
C++

#include "ctai_session_info.h"
ctai_session_info::ctai_session_info()
{
init_layout();
init_sub_layout();
init_curl();
}
ctai_session_info::~ctai_session_info()
{
}
void ctai_session_info::init_layout()
{
mainLayout = new QVBoxLayout();
splitter = new QSplitter(Qt::Vertical);
m_sub_systeam_widget = new QWidget();
m_sub_user_widget = new QWidget();
splitter->addWidget(m_sub_systeam_widget);
splitter->addWidget(m_sub_user_widget);
splitter->setSizes({400, 100});
mainLayout->addWidget(splitter);
mainLayout->setContentsMargins(0, 0, 0, 0);
setLayout(mainLayout);
}
void ctai_session_info::init_sub_layout()
{
m_list_widget = new QListWidget();
m_list_widget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_list_widget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_list_widget->setStyleSheet(R"(
QListWidget {
border: none;
}
QScrollBar:vertical {
width: 0px;
}
QScrollBar:horizontal {
height: 0px;
}
)");
m_session_systeam_info = new ctai_history_widget();
m_session_systeam_info->setObjectName(tr("m_session_systeam_info"));
m_session_systeam_info_layout = new QVBoxLayout();
m_session_systeam_info_layout->addWidget(m_session_systeam_info);
m_session_systeam_info_layout->setContentsMargins(0, 0, 0, 0);
m_sub_systeam_widget->setLayout(m_session_systeam_info_layout);
m_session_user_group_layout = new QVBoxLayout();
m_session_user_edit_info = new QTextEdit(tr("1+1为什么等于2"));
m_session_user_edit_layout = new QVBoxLayout();
m_session_user_edit_layout->addWidget(m_session_user_edit_info);
m_session_user_btn_layout = new QHBoxLayout();
m_stream_switch = new ctai_switch_button();
m_stream_switch->setSwBtn_Status(true);
ctai_session_set_steam_mode(true);
m_stream_switch->setMinimumSize(QSize(75, 25));
m_stream_mode_tips = new QLabel(tr("流式模式:"));
m_info_error_tips = new QLabel();
init_user_btn_layout();
m_session_user_group_layout->addLayout(m_session_user_edit_layout);
m_session_user_group_layout->addLayout(m_session_user_btn_layout);
m_session_user_group_layout->setStretch(0, 9);
m_session_user_group_layout->setStretch(1, 1);
m_session_user_group_layout->setContentsMargins(0, 0, 0, 0);
m_sub_user_widget->setLayout(m_session_user_group_layout);
}
void ctai_session_info::init_user_btn_layout()
{
for (int i = 0; i <= m_user_btn_list.size() - 1; i++)
{
QPushButton *btn = new QPushButton();
btn->setIcon(QIcon(m_user_btn_icon_list[i]));
btn->setObjectName(m_user_btn_list[i]);
init_user_btn_size_tips(*btn, QSize(25, 25), m_user_btn_tips_list[i]);
m_btns.push_back(btn);
if (i == 4)
{
m_session_user_btn_layout->addItem(sparcer_item);
m_session_user_btn_layout->addWidget(m_stream_mode_tips);
m_session_user_btn_layout->addWidget(m_stream_switch);
connect(m_stream_switch, SIGNAL(SwBtn_SWITCH(bool)), this, SLOT(ctai_session_set_steam_mode(bool)));
}
m_session_user_btn_layout->addWidget(btn);
switch (i)
{
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
connect(btn, SIGNAL(clicked(bool)), this, SLOT(ctai_session_user_sending()));
break;
default:
break;
}
}
}
void ctai_session_info::init_user_btn_size_tips(QPushButton &btn, QSize size, QString tip_str)
{
btn.setIconSize(size);
btn.setToolTip(tip_str);
}
void ctai_session_info::init_curl()
{
m_curl = new ctai_curl();
m_curl->curl_init();
connect(m_curl, SIGNAL(send_post_out_data(model_data)), this, SLOT(ctai_session_postback_info(model_data)));
connect(m_curl, SIGNAL(send_post_out_error(std::string)), this, SLOT(ctai_session_curl_state_tips(std::string)));
}
void ctai_session_info::btn_disable_enable(bool state)
{
m_btns[5]->setEnabled(state);
}
void ctai_session_info::ctai_session_postback_info(model_data resp_data)
{
if (resp_data.postback_send_id != current_info_id)
{
current_info_id = resp_data.postback_send_id;
m_session_systeam_info->add_message(resp_data);
}
else
{
m_session_systeam_info->add_message(resp_data);
}
if (QSL(resp_data.postback_model_data).contains("[DONE]"))
{
current_info_id = {};
}
btn_disable_enable(true);
ctai_session_curl_state_tips("");
}
void ctai_session_info::ctai_session_curl_state_tips(std::string state_str)
{
m_info_error_tips->setText(QString::fromStdString(state_str));
}
void ctai_session_info::ctai_session_set_steam_mode(bool state)
{
m_stream_mode!=state;
qDebug() << "steam mode:" << state;
}
void ctai_session_info::ctai_session_user_sending()
{
if (m_session_user_edit_info->toPlainText().isEmpty())
{
QMessageBox::warning(this, tr("警告"), tr("发送内容不能为空"));
return;
}
else
{
user_model_data.msg_type_mode = USER;
user_model_data.send_user_id=QUuid::createUuid().toString(QUuid::WithoutBraces).toStdString();
user_model_data.send_user_data=m_session_user_edit_info->toPlainText().toStdString();
user_model_data.send_user_time=(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz")).toStdString();
m_session_systeam_info->add_message(user_model_data);
QFuture<void> future = QtConcurrent::run([=]()
{
user_model_data.msg_type_mode = SYSTEM;
user_model_data.postback_stream_mode=m_stream_mode;
m_curl->send_post_response(user_model_data,curl_opt);
});
btn_disable_enable(false);
m_session_user_edit_info->clear();
ctai_session_curl_state_tips("正在获取结果...");
}
}