121 lines
4.5 KiB
C++
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
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|