XPlor/tools/zentry/mainwindow.cpp
2025-07-10 00:06:16 -04:00

121 lines
4.5 KiB
C++

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "compression.h"
#include "qfiledialog.h"
#include <QMessageBox>
#include <QLabel>
#include <QFile>
#include <QVBoxLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow{parent} {
setWindowTitle("Zentry Tool");
setMinimumSize(250, 150);
setMaximumSize(250, 150);
setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
QLabel *dragLabel = new QLabel(this);
dragLabel->setText("Drop file here...");
dragLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
dragLabel->setStyleSheet("QLabel {"
" color: white;"
" background-color: grey;"
"}"
"QLabel::hover "
"{"
" background-color: black;"
"}");
setCentralWidget(dragLabel);
}
MainWindow::~MainWindow() {
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event) {
const QMimeData *mimeData = event->mimeData();
bool goodDrag = true;
if (mimeData->hasUrls()) {
qDebug() << mimeData->urls();
} else {
goodDrag = false;
}
if (goodDrag) {
event->acceptProposedAction();
}
}
void MainWindow::dragMoveEvent(QDragMoveEvent *event) {
Q_UNUSED(event);
}
void MainWindow::dragLeaveEvent(QDragLeaveEvent *event) {
Q_UNUSED(event);
}
void MainWindow::dropEvent(QDropEvent *event) {
const QMimeData *mimeData = event->mimeData();
if (mimeData->hasUrls()) {
foreach (const QUrl &url, mimeData->urls()) {
const QString fileName = url.toString().split('/').last();
QMessageBox msgBox;
msgBox.setWindowTitle("Handle File");
msgBox.setText("Choose how to handle " + fileName);
QPushButton *compressButton = msgBox.addButton(tr("Compress"), QMessageBox::AcceptRole);
QPushButton *decompressButton = msgBox.addButton(tr("Decompress"), QMessageBox::RejectRole);
QPushButton *cancelButton = msgBox.addButton(tr("Cancel"), QMessageBox::RejectRole);
msgBox.exec();
if ((QPushButton*)msgBox.clickedButton() == compressButton) {
// Compress
} else if ((QPushButton*)msgBox.clickedButton() == decompressButton) {
// Decompress
QFile compressedFile(url.toLocalFile());
if (!compressedFile.open(QIODevice::ReadOnly)) {
qDebug() << QString("Failed to open %1!").arg(fileName);
continue;
}
const QByteArray compressedData = compressedFile.readAll();
QByteArray decompressedData;
if (compressedData.left(2).toHex() == "7801") {
qDebug() << "Detected zlib data! (No Compression/low)";
decompressedData = Compression::DecompressZLIB(compressedData);
} else if (compressedData.left(2).toHex() == "785e") {
qDebug() << "Detected zlib data! (Fast Compression)";
decompressedData = Compression::DecompressZLIB(compressedData);
} else if (compressedData.left(2).toHex() == "789c") {
qDebug() << "Detected zlib data! (Default Compression)";
decompressedData = Compression::DecompressZLIB(compressedData);
} else if (compressedData.left(2).toHex() == "78da") {
qDebug() << "Detected zlib data! (Best Compression)";
decompressedData = Compression::DecompressZLIB(compressedData);
} else {
qDebug() << "Invalid zlib header!";
continue;
}
if (decompressedData.isEmpty()) {
qDebug() << "Zlib output was empty!";
continue;
}
const QString decompressedPath = QFileDialog::getSaveFileName(this, "Choose save name");
QFile decompressedFile(decompressedPath);
if (!decompressedFile.open(QIODevice::WriteOnly)) {
qDebug() << QString("Failed to open %1!").arg(decompressedPath.split('/').last());
continue;
}
decompressedFile.write(decompressedData);
decompressedFile.close();
} else if ((QPushButton*)msgBox.clickedButton() == cancelButton) {
// Cancel
}
}
}
}