📄 updaterservermanager.cpp.svn-base
字号:
}
//双击,进入修改模式
void UpdaterServerManager::on_list_soft_itemdoubleclick(QListWidgetItem* item)
{
if (!lastEditSoftItem)
{
lastEditSoftItem = item;
}
pSoftList->openPersistentEditor(item);
lastEditSoftItem = item;
}
//增加软件
void UpdaterServerManager::on_addsoft_clicked()
{
//关闭修改
softitemCloseEdit();
const QString oritext(tr("newsoft"));
//遍历所有的text,不能存在和newsoft 相通的项
for (int rowi = 0; rowi < pSoftList->count(); rowi++)
{
QString itemtext = pSoftList->item(rowi)->text();
if (itemtext == oritext)
{
QMessageBox::information(0, tr("info"), tr("soft exist"));
return;
}
}
QListWidgetItem* pItem = new QListWidgetItem(pSoftList);
pItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable);
pItem->setText(oritext);
getUpdateXmlPlistServerTree()->addSoft(oritext);
//放入修改队列
UpdateDeque::OneRecode* precode = gUpdateDeque.push_back(UpdateDeque::OneRecode::addsoft);
precode->name[0] = oritext;
}
//移除软件
void UpdaterServerManager::on_removeSoft_clicked()
{
//关闭soft的修改
softitemCloseEdit(true);
//先确定是否可以移除(updatequeue中不存在addsoft项目
if (gUpdateDeque.existType(UpdateDeque::OneRecode::addsoft))
{
QMessageBox::information(this, tr("info"), tr("please submit first"));
return;
}
QListWidgetItem* psoftitem = pSoftList->currentItem();
if (!psoftitem)
{
QMessageBox::information(this, tr("info"), tr("please select a soft"));
return;
}
QString softname = psoftitem->text();
getUpdateXmlPlistServerTree()->removeSoft(softname);
//
UpdateDeque::OneRecode* precode = gUpdateDeque.push_back(UpdateDeque::OneRecode::removesoft);
precode->name[0] = softname;
//
putPacksIntoList();//重新写入列表,qlistwidget的removeitem功能无用
}
//添加补丁
void UpdaterServerManager::on_addPack_clicked()
{
//关闭soft的修改
softitemCloseEdit(true);
const QListWidgetItem* psoftitem = pSoftList->currentItem();
if (!psoftitem)
{
QMessageBox::information(0, tr("info"), tr("please select a soft"));
return;
}
const QString oritext(tr("newpack"));
//遍历所有的text,不能存在和newsoft 相通的项
for (int rowi = 0; rowi < pPackList->count(); rowi++)
{
QString itemtext = pPackList->item(rowi)->text();
if (itemtext == oritext)
{
QMessageBox::information(0, tr("info"), tr("pack exist"));
return;
}
}
pPackList->addItem(oritext);
//由于默认生成的补丁包为所有数值都是空的,所以只有当用户点击 更新补丁信息 按钮后,才真正把补丁放入上传序列
}
//移除补丁
void UpdaterServerManager::on_removePack_clicked()
{
//关闭soft的修改
softitemCloseEdit(true);
QListWidgetItem* ppackitem = pPackList->currentItem();
QListWidgetItem* psoftitem = pSoftList->currentItem();
if (!ppackitem || !psoftitem)
{
QMessageBox::information(0, tr("info"), tr("please select a pack"));
return;
}
QString softname = psoftitem->text();
QString packname = ppackitem->text();
QString packfilename = ui.editPackFileName->text();
CUpdateXmlPlistTree* pServerTree = (CUpdateXmlPlistTree*)getUpdateXmlPlistServerTree();
pServerTree->removePack(softname, packname);
//
UpdateDeque::OneRecode* precode = gUpdateDeque.push_back(UpdateDeque::OneRecode::removepack);
precode->name[0] = softname;
precode->name[1] = packfilename;
//刷新packlist
pPackList->clear();
ui.comboBoxValidPacks->clear();
ui.comboBoxValidPacks->addItem("-----");
ui.listPackDependPacks->clear();
if (pServerTree->isSoftFound(softname))
{
CUpdateXmlPlistTree::TIterEachSoftware objsoft = pServerTree->findSoft(softname);
CUpdateXmlPlistTree::EachSoftUpdate* pObjSoft = &objsoft->second;
CUpdateXmlPlistTree::EachSoftUpdate::TIterEachPack iterPack = pObjSoft->begin();
while (iterPack != pObjSoft->end())
{
CUpdatePack* pPack = &*iterPack;
//放入补丁的信息
pPackList->addItem(new QListWidgetItem(pPack->name));
//初始化依赖pack可供选择的列表
ui.comboBoxValidPacks->addItem(pPack->name);
++iterPack;
}
ui.comboBoxValidPacks->setCurrentIndex(0);
}
}
//浏览补丁文件
void UpdaterServerManager::on_browserPack_clicked()
{
QString filepath = QFileDialog::getOpenFileName(this, tr("locate a pack file"), QString(), "packfile (*.exe)");
if (filepath.isEmpty())
return;
ui.editPackPath->setText(filepath);
//找到补丁文件,则计算文件大小以及md5
QFile packfile(filepath);
packfile.open(QIODevice::ReadOnly);
qint64 packfilesize = packfile.size();
packfile.close();
ui.statusBar->showMessage(tr("calc md5"));
QString md5 = wFileFunc::calcFileMd5(filepath);
ui.statusBar->clearMessage();
ui.editPackMd5->setText( md5 );
//需要将byte换算成K,M或者G
int k = int(packfilesize / 1024);
int m = int(packfilesize / 1024 / 1024);
int g = int(packfilesize /1024 / 1024 / 1024);
int t = int(packfilesize / 1024 / 1024 / 1024 / 1024);
QString filesize;
if (k == 0)
{
filesize = QString::number(packfilesize) + "B";
}
else if ( m == 0)
{
filesize = QString::number(k) + "KB";
}
else if ( g == 0)
{
filesize = QString::number(m) + "MB";
}
else
filesize = QString::number(g) + "GB";
ui.editPackSize->setText( filesize );
QStringList filelist = filepath.split("/",QString::SkipEmptyParts);
ui.editPackFileName->setText(filelist.at(filelist.size() -1));
//将exe换成txt,自动从nsis打包程序获取补丁的信息
QString infofile = filepath.replace(".exe", ".txt", Qt::CaseInsensitive);
if (QFile::exists(infofile))
{
QFile xfile(infofile);
if (xfile.open(QIODevice::ReadOnly | QIODevice::Text))
{
QByteArray linedata = xfile.readLine();
linedata = linedata.left(linedata.count() -1);//去除掉/0
QString linestr(linedata);
ui.editPackName->setText(linestr);//显示名称
linestr = QString(xfile.readLine());
ui.editPackPublishTime->setText(linestr);//发布时间
linestr = QString(xfile.readLine());
ui.checkPackShowUi->setChecked(linestr.toInt() == 0 ? false : true);//安装过程中显示界面
linestr = QString(xfile.readLine());
ui.checkPackSelfUpdater->setChecked(linestr.toInt() == 0 ? false : true);//自升级包
linestr = QString(xfile.readLine());
ui.editPackSoftKey->setText(linestr);//软件锁类型
linestr = QString(xfile.readAll());
ui.textPackInfo->setHtml(linestr);
xfile.close();
}
else
QMessageBox::information(this, tr("info"), tr("failed to open info file"));
}
else
{
QMessageBox::information(this, tr("info"), tr("info file lost"));
}
}
void UpdaterServerManager::on_refreshPackInfo_clicked()
{
QListWidgetItem* ppackitem = pPackList->currentItem();
QListWidgetItem* psoftitem = pSoftList->currentItem();
if (!ppackitem || !psoftitem)
{
QMessageBox::information(0, tr("info"), tr("please select a pack"));
return;
}
QString softname = psoftitem->text();
QString packname = ppackitem->text();
//更新界面数据到树之上
CUpdateXmlPlistTree* pServerTree = (CUpdateXmlPlistTree*)getUpdateXmlPlistServerTree();
CUpdateXmlPlistTree::EachSoftUpdate* pSoft = &pServerTree->findSoft(softname)->second;
CUpdatePack* pPack;bool needrelease = false;
if (!pSoft->isPackFound(packname))
{
pPack = new CUpdatePack();
needrelease = true;
pPack->softname = softname;
}
else
{
CUpdateXmlPlistTree::EachSoftUpdate::TIterEachPack iterpack = pSoft->findPack(packname);
pPack = &*iterpack;
}
//对pack进行修改
if (pPack->md5 != ui.editPackMd5->text())
{
UpdateDeque::OneRecode* pRecode = gUpdateDeque.push_back(UpdateDeque::OneRecode::modifypack);
pPack->md5 = ui.editPackMd5->text();
pPack->packName = ui.editPackFileName->text();
pPack->packSize = ui.editPackSize->text();
pRecode->localefilepath = ui.editPackPath->text();
pRecode->serverfilepath = pPack->getServerPath();
}
//其余的直接改变信息
pPack->name = ui.editPackName->text();
ppackitem->setText(pPack->name);
pPack->info = ui.textPackInfo->toHtml();
pPack->softname = softname;
pPack->isSelfUpdate = ui.checkPackSelfUpdater->isChecked();
pPack->minSoftTime = ui.editPackSoftMinTime->text().toLongLong();
pPack->needUiShow = ui.checkPackShowUi->isChecked();
pPack->publishTime = ui.editPackPublishTime->text().toLongLong();
pPack->debugmode = ui.checkDebug->isChecked();
pPack->mustdownload = ui.checkMustdownload->isChecked();
pPack->dependPacks.clear();
pPack->appendKey = ui.editPackSoftKey->text().toInt();
for (int dlistrowi = 0; dlistrowi < ui.listPackDependPacks->count(); dlistrowi++)
{
QString dstr = ui.listPackDependPacks->item(dlistrowi)->text();
pPack->dependPacks.insert(std::make_pair(dstr, true));
}
if (needrelease)
{
pServerTree->addPack(pPack);
pubfunc::release(pPack);
}
//刷新combo
ui.comboBoxValidPacks->clear();
ui.comboBoxValidPacks->addItem("-----");
CUpdateXmlPlistTree::TIterEachSoftware objsoft = pServerTree->findSoft(currentSoftname);
CUpdateXmlPlistTree::EachSoftUpdate* pObjSoft = &objsoft->second;
CUpdateXmlPlistTree::EachSoftUpdate::TIterEachPack iterPack = pObjSoft->begin();
while (iterPack != pObjSoft->end())
{
CUpdatePack* pPack = &*iterPack;
//初始化依赖pack可供选择的列表
ui.comboBoxValidPacks->addItem(pPack->name);
++iterPack;
}
ui.comboBoxValidPacks->setCurrentIndex(0);
}
void UpdaterServerManager::on_addPackDepend_clicked()
{
QListWidgetItem* ppackitem = pPackList->currentItem();
QListWidgetItem* psoftitem = pSoftList->currentItem();
if (!ppackitem || !psoftitem)
{
QMessageBox::information(0, tr("info"), tr("please select a pack"));
return;
}
QString packname = ui.comboBoxValidPacks->currentText();
if (packname == QString("-----"))
{
return;
}
if (packname != ppackitem->text())//如果选中的是自己,则不能用来依赖
ui.listPackDependPacks->addItem(new QListWidgetItem(packname));
else
QMessageBox::information(this, tr("info"), tr("can`t use self as a depended pack "));
}
void UpdaterServerManager::on_removeDepend_clicked()
{
if (!ui.listPackDependPacks->count())
return;
QListWidgetItem* pitem = ui.listPackDependPacks->currentItem();
if (!pitem)
{
QMessageBox::information(this, tr("info"), tr("select a pack"));
return;
}
ui.listPackDependPacks->removeItemWidget(pitem);
}
//启动打包程序
void UpdaterServerManager::on_runPackApp_clicked()
{
QString packapp = "./UpdaterMaker.exe";
if (!QFile::exists(packapp))
{
QMessageBox::information(this, tr("info"), tr("packmaker lost"));
return;
}
QProcess::execute(packapp);
}
void UpdaterServerManager::on_pushButtonImportInfo_clicked()
{
QString filepath = QFileDialog::getOpenFileName(this, tr("locate a info file"), QString(), "infofile (*.html | *.txt)");
if (filepath.isEmpty())
return;
ui.textPackInfo->clear();
QFile xfile(filepath);
if (xfile.open(QIODevice::ReadOnly | QIODevice::Text))
{
QByteArray xdate = xfile.readAll();
ui.textPackInfo->setHtml(QString(xdate));
xfile.close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -