代码拉取完成,页面将自动刷新
同步操作将从 蜗牛程序员/Deluac 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QFileDialog>
#include <QMimeData>
#include <QSettings>
#include <QThread>
#include "deluacore.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
task(new DeluacCore())
{
ui->setupUi(this);
resize(640, 480);
setAcceptDrops(true);
ini = qApp->applicationDirPath() + "/deluac.ini";
auto cfg = std::make_shared<QSettings>(ini, QSettings::Format::IniFormat);
QString xxteaSign = cfg->value("xxtea-sign", "请输入正确的XXTEA签名").toString();
QString xxteaKey = cfg->value("xxtea-key", "请输入正确的XXTEA密钥").toString();
QString searchPath = cfg->value("search-path", "请输入要批量解密的文件夹").toString();
QString srcExtension = cfg->value("src-extension", "luac").toString();
QString destExtension = cfg->value("dest-extension", "lua").toString();
ui->txtXxteaSign->setText(xxteaSign);
ui->txtXxteaKey->setText(xxteaKey);
ui->txtSearchPath->setText(searchPath);
ui->txtSrcExt->setText(srcExtension);
ui->txtDestExt->setText(destExtension);
qRegisterMetaType<DeluacState>("DeluacState");
connect(task, &DeluacCore::decryptCompleted, this, &MainWindow::decryptCompleted);
connect(task, &DeluacCore::guessCompleted, this, &MainWindow::guessCompleted);
connect(task, &DeluacCore::started, this, [this]()
{
ui->btnDecryptFile->setEnabled(false);
ui->btnGuessSignKey->setEnabled(false);
});
connect(task, &DeluacCore::finished, this, [this]()
{
on_txtSearchPath_textChanged(ui->txtSearchPath->text());
});
auto textChanged = [this](const QString &) {
auto isSameExt = (ui->txtSrcExt->text() == ui->txtDestExt->text());
ui->rbKeepFile->setEnabled(!isSameExt);
ui->rbMoveFile->setEnabled(!isSameExt);
if (isSameExt) {
ui->rbKeepFile->setChecked(true);
}
};
connect(ui->txtSrcExt, &QLineEdit::textChanged, textChanged);
connect(ui->txtDestExt, &QLineEdit::textChanged, textChanged);
textChanged(QString());
ui->txtSrcExt->setAttribute(Qt::WA_InputMethodEnabled, false);
ui->txtDestExt->setAttribute(Qt::WA_InputMethodEnabled, false);
}
MainWindow::~MainWindow()
{
if (task->isRunning())
task->wait();
delete task;
delete ui;
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
QString path = event->mimeData()->urls().first().toLocalFile();
if (QFileInfo(path).isDir())
event->acceptProposedAction();
}
void MainWindow::dropEvent(QDropEvent *event)
{
QString path = event->mimeData()->urls().first().toLocalFile();
ui->txtSearchPath->setText(path.replace("/", QDir::separator()));
}
void MainWindow::fetchDeluacArgs(DeluacArgs &args)
{
auto cfg = std::make_shared<QSettings>(ini, QSettings::Format::IniFormat);
cfg->setValue("xxtea-sign", ui->txtXxteaSign->text());
cfg->setValue("xxtea-key", ui->txtXxteaKey->text());
cfg->setValue("search-path", ui->txtSearchPath->text());
cfg->setValue("src-extension", ui->txtSrcExt->text());
cfg->setValue("dest-extension", ui->txtDestExt->text());
args =
{
ui->txtSearchPath->text(),
ui->txtXxteaSign->text(),
ui->txtXxteaKey->text(),
ui->txtSrcExt->text(),
ui->txtDestExt->text()
};
}
void MainWindow::on_btnBrowseDir_clicked()
{
QString folder = QFileDialog::getExistingDirectory();
ui->txtSearchPath->setText(folder.replace("/", QDir::separator()));
// FOR /R %i IN (*.lua) DO REN %i *.luac
}
void MainWindow::on_btnGuessSignKey_clicked()
{
if (!task->isRunning())
{
DeluacArgs args;
fetchDeluacArgs(args);
task->startGuess(args);
}
}
void MainWindow::on_btnDecryptFile_clicked()
{
if (!task->isRunning())
{
DeluacArgs args;
fetchDeluacArgs(args);
ui->txtLogger->clear();
task->startDecrypt(args);
}
}
void MainWindow::on_txtSearchPath_textChanged(const QString &text)
{
if (!task->isRunning())
{
ui->btnDecryptFile->setEnabled(QFile::exists(text));
ui->btnGuessSignKey->setEnabled(QFile::exists(QString("%1%2lib").arg(text).arg(QDir::separator())));
}
}
void MainWindow::decryptCompleted(const QString &filePath, DeluacState state, int progressValue)
{
switch (state)
{
case DeluacState::Failed:
{
ui->txtLogger->append(filePath + " <span style='color:blue'>--></span> <span style='color:red;'>" + "解密失败" + "</span>");
}
break;
case DeluacState::Succeed:
{
ui->txtLogger->append(filePath + " <span style='color:blue'>--></span> <span style='color:green;'>" + "解密成功" + "</span>");
if (ui->rbMoveFile->isChecked() && !QFile(filePath).remove())
{
ui->txtLogger->append(filePath + " <span style='color:blue'>--></span> <span style='color:red;'>" + "删除失败" + "</span>");
}
}
break;
default:
{
ui->txtLogger->append(filePath + " <span style='color:blue'>--></span> <span style='color:blue;'>" + "文件未加密" + "</span>");
if (ui->rbMoveFile->isChecked() && !QFile(filePath).remove())
{
ui->txtLogger->append(filePath + " <span style='color:blue'>--></span> <span style='color:red;'>" + "删除失败" + "</span>");
}
}
break;
}
ui->pbDecryptFile->setValue(progressValue);
}
void MainWindow::guessCompleted(const QString &xxteaSign, const QString &xxteaKey)
{
ui->txtXxteaSign->setText(xxteaSign);
ui->txtXxteaKey->setText(xxteaKey);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。