#include "versionmanage.h"
|
#include "ui_versionmanage.h"
|
#include<QDateTime>
|
#include<QThread>
|
|
VersionManage::VersionManage(QWidget *parent)
|
:QMainWindow(parent)
|
{
|
//Tcp链接
|
m_client=new QTcpSocket(this);
|
m_client->connectToHost("127.0.0.1",16888);
|
if(m_client->waitForConnected()){
|
qDebug()<<"conn ok!";
|
connect(m_client,SIGNAL(readyRead()),this,SLOT(myRead()));
|
|
}else{
|
qDebug()<<"conn fail or waiting for conn";
|
}
|
|
//向客户端发送版本号请求
|
sendVersionNumReq();
|
|
/*创建一个中央窗口部件 centralWidget,并将其作为当前窗口的子控件。
|
设置一个垂直布局 layout 到 centralWidget 上,
|
使得任何添加到 layout 的子控件都会在 centralWidget 中从上到下排列。*/
|
QWidget *centralWidget=new QWidget(this);
|
QVBoxLayout *layout=new QVBoxLayout(centralWidget);
|
|
//获取当前工作目录
|
QString currentPath=QDir::currentPath();
|
qDebug()<<"当前工作路径:"<<currentPath;
|
|
//文件导入按钮和文件名标签创建
|
QPushButton *importButton=new QPushButton(tr("导入文件"),this);
|
connect(importButton,&QPushButton::clicked,this,&VersionManage::importFile);
|
fileNameLabel=new QLabel(tr("未选择文件"),this);
|
orignalPathLabel=new QLabel(tr("未选择文件路径"),this);
|
|
//版本号和路径编辑框初始化
|
currVersionEdit=new QLineEdit(this);
|
clientPathEdit=new QLineEdit(this);
|
serverPathEdit=new QLineEdit(this);
|
versionDescriptionEdit = new QTextEdit(this);
|
//prevVersionEdit=new QLineEdit(this);
|
|
//老版本组合下拉框,各种占位符设计
|
prevVersionComboBox=new QComboBox(this);
|
prevVersionComboBox->addItem(tr("上一个版本号"));
|
|
//prevVersionEdit->setPlaceholderText(tr("上一个版本号"));
|
currVersionEdit->setPlaceholderText(tr("当前版本号"));
|
clientPathEdit->setPlaceholderText(tr("客户端路劲"));
|
serverPathEdit->setPlaceholderText(tr("服务器路径"));
|
versionDescriptionEdit->setPlaceholderText(tr("请输入新版本描述"));
|
|
//添加版本的按钮,到表格
|
QPushButton *addButton =new QPushButton(tr("添加"),this);
|
connect(addButton,&QPushButton::clicked,this,&VersionManage::addFileInfo);
|
|
//布局上半部分
|
layout->addWidget(prevVersionComboBox);
|
prevVersionComboBox->setStyleSheet("font-size: 22px;");
|
layout->addWidget(currVersionEdit);
|
currVersionEdit->setStyleSheet("font-family: 'Microsoft YaHei'; font-size: 22px;");
|
layout->addWidget(serverPathEdit);
|
serverPathEdit->setStyleSheet("font-family: 'Microsoft YaHei'; font-size: 22px;");
|
layout->addWidget(versionDescriptionEdit);
|
versionDescriptionEdit->setStyleSheet("font-family: 'Microsoft YaHei'; font-size: 22px;");
|
//自动填写服务端路径
|
connect(currVersionEdit,&QLineEdit::textChanged,
|
this,[this](const QString &text){
|
serverPathEdit->setText("./version/"+text);
|
});
|
layout->addWidget(importButton);
|
importButton->setStyleSheet("font-family: 'Microsoft YaHei'; font-size: 22px;");
|
layout->addWidget(fileNameLabel);
|
fileNameLabel->setStyleSheet("font-family: 'Microsoft YaHei'; font-size: 22px;");
|
layout->addWidget(orignalPathLabel);
|
orignalPathLabel->setStyleSheet("font-family: 'Microsoft YaHei'; font-size: 22px;");
|
layout->addWidget(clientPathEdit);
|
clientPathEdit->setStyleSheet("font-family: 'Microsoft YaHei'; font-size: 22px;");
|
layout->addWidget(addButton);
|
addButton->setStyleSheet("font-family: 'Microsoft YaHei'; font-size: 22px;");
|
|
//下半部分表格创建
|
fileTable=new QTableWidget(0,7,this);
|
fileTable->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
|
fileTable->setHorizontalHeaderLabels({tr("文件名"), tr("文件大小"), tr("上一个版本号"), tr("当前版本号"), tr("文件原始路径"), tr("客户端路径"), tr("服务器路径")});
|
QPushButton *savebutton=new QPushButton(tr("保存至数据库"),this);
|
connect(savebutton,&QPushButton::clicked,this,&VersionManage::saveToDisk);
|
|
layout->addWidget(fileTable);
|
fileTable->setStyleSheet("font-family: 'Microsoft YaHei'; font-size: 22px;");
|
layout->addWidget(savebutton);
|
savebutton->setStyleSheet("font-family: 'Microsoft YaHei'; font-size: 22px;");
|
|
QPushButton* deleteButton=new QPushButton(tr("删除一个文件"),this);
|
deleteButton->setStyleSheet("font-family: 'Microsoft YaHei'; font-size: 22px");
|
connect(deleteButton,&QPushButton::clicked,this,[&](){
|
int currrow=fileTable->currentRow();
|
if(currrow!=-1){
|
fileTable->removeRow(currrow);
|
}
|
});
|
layout->addWidget(deleteButton);
|
//窗口
|
resize(1500, 800);
|
setCentralWidget(centralWidget);
|
|
|
}
|
|
// 发送版本号请求
|
void VersionManage::sendVersionNumReq()
|
{
|
VersionNumReq req;
|
int len = m_client->write((char*)&req,req.head.len);
|
qDebug()<<"len:"<<len;
|
|
}
|
|
//导入文件功能
|
void VersionManage::importFile()
|
{ //打开文件对话框
|
importedFilePath=QFileDialog::getOpenFileName(this,
|
tr("选择文件"),"",tr("所有文件(*)"));
|
if(!importedFilePath.isEmpty()){
|
QFileInfo fileInfo(importedFilePath);
|
fileNameLabel->setText(fileInfo.fileName()); //显示文件名+路径
|
orignalPathLabel->setText(importedFilePath);
|
clientPathEdit->setText(importedFilePath);
|
serverPathEdit->setText(importedFilePath);
|
|
}
|
}
|
|
void VersionManage::addFileInfo()
|
{
|
if(importedFilePath.isEmpty()){
|
return ;
|
}
|
int rowCount=fileTable->rowCount();
|
fileTable->insertRow(rowCount);
|
|
QFileInfo fileInfo(importedFilePath);
|
fileTable->setItem(rowCount,0,new QTableWidgetItem(fileInfo.fileName()));
|
qDebug()<<fileInfo.size();
|
fileTable->setItem(rowCount,1,new QTableWidgetItem(QString::number(fileInfo.size())));
|
fileTable->setItem(rowCount,2,new QTableWidgetItem(prevVersionComboBox->currentText()));//**
|
fileTable->setItem(rowCount,3,new QTableWidgetItem(currVersionEdit->text()));
|
fileTable->setItem(rowCount,4,new QTableWidgetItem(orignalPathLabel->text()));
|
fileTable->setItem(rowCount,5,new QTableWidgetItem(clientPathEdit->text()));
|
fileTable->setItem(rowCount,6,new QTableWidgetItem(serverPathEdit->text()));
|
|
//添加到表格,清空内容
|
//prevVersionComboBox->clear();
|
//currVersionEdit->clear();
|
//serverPathEdit->clear();
|
clientPathEdit->clear();
|
fileNameLabel->clear();
|
orignalPathLabel->clear();
|
importedFilePath.clear();
|
}
|
|
//将表格中的文件另存为指定地点
|
void VersionManage::saveToDisk()
|
{
|
if(fileTable->rowCount()!=0){
|
for(int row=0;row<fileTable->rowCount();++row){
|
QString saveDirectory = fileTable->item(row, 6)->text();//服务器地址
|
QString fileName = fileTable->item(row, 0)->text();
|
QString sourceFilePath = fileTable->item(row, 4)->text(); //客户文件原路径
|
// QString destinationFilePath = saveDirectory + "/" + fileName;
|
|
QFile fl(sourceFilePath); //打开本地文件(版本跟信号的文件)
|
qDebug()<< "打开前";
|
qDebug()<< sourceFilePath;
|
if(fl.open(QIODevice::ReadOnly)){
|
|
//QFile::copy(sourceFilePath,destinationFilePath);
|
qDebug()<< "打开前";
|
long long all_size = fl.size() + sizeof(UploadFileReq);//总大小把控info了
|
UploadFileReq *req=(UploadFileReq*) (new char[all_size]);
|
req->head.type=UPLOAD_FILE_REQ;
|
req->head.len==all_size;
|
req->fileInfo.fileSize=fl.size();
|
strcpy(req->fileInfo.s_filepath,saveDirectory.toLocal8Bit().data());
|
qDebug()<<"s_filepath:"<< req->fileInfo.s_filepath;
|
strcpy(req->fileInfo.fileName,fileName.toLocal8Bit().data());
|
memcpy(req->fileInfo.content,fl.readAll().data(),fl.size());
|
//组包完成,发包
|
qDebug()<<m_client->write((char*)req,req->head.len);
|
m_client->flush(); //立即发送
|
m_client->waitForBytesWritten(); //同步等待数据写入完成
|
|
delete req;
|
qDebug()<<"发送数据库成功!";
|
fl.close();
|
|
//等待回应
|
qDebug()<<"waiting for 8 seconds...";
|
QThread::sleep(8);
|
qDebug()<<"Done waiting";
|
|
//数据库信息录入,版本信息条目
|
VersionInfoEntryReq *req_2=new VersionInfoEntryReq;
|
strcpy_s(req_2->versionId,currVersionEdit->text().toLocal8Bit().data());
|
strcpy_s(req_2->versionIdOld,prevVersionComboBox->currentText().toLocal8Bit().data());
|
req_2->fileNum=fileTable->rowCount();
|
|
QString str=serverPathEdit->text()+versionDescriptionEdit->toPlainText()
|
+QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
|
for(int i=0;i<fileTable->rowCount();++i){
|
str+=fileTable->item(i,0)->text()+fileTable->item(i,1)->text()+fileTable->item(i,5)->text();
|
}
|
strcpy(req_2->context,str.toLocal8Bit().data());//_s 保护
|
qDebug()<<"len:"<<m_client->write((char*)req_2,req_2->head.len);
|
|
fileTable->setRowCount(0);
|
}
|
|
|
}
|
}
|
}
|
|
void VersionManage::myRead()
|
{
|
QByteArray buffer=m_client->readAll();
|
qDebug()<<"buffer:"<<buffer;
|
//心跳检查
|
//解包
|
int type=((Head*)buffer.data())->type;
|
if(type==VERSION_NUM_RES){
|
//版本号相应
|
}
|
else if(type==UPLOAD_FILE_RES){}
|
}
|