encfs/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/main.cpp
Valient Gough 5f0806c5cc Add "easylogging" from "https://github.com/muflihun/easyloggingpp@master"
git-vendor-name: easylogging
git-vendor-dir: vendor/github.com/muflihun/easyloggingpp
git-vendor-repository: https://github.com/muflihun/easyloggingpp
git-vendor-ref: master
2017-08-05 23:23:41 -07:00

100 lines
3.1 KiB
C++

#include <QApplication>
#include <QStandardItemModel>
#include <QFileInfo>
#include "mainwindow.h"
#include "easylogging++.h"
#include "splittercore.h"
#include "joinercore.h"
#include "partprocessor.h"
INITIALIZE_EASYLOGGINGPP
void split(int argc, char** argv);
void merge(int argc, char** argv);
int main(int argc, char** argv) {
START_EASYLOGGINGPP(argc, argv);
// TODO: Use getopt with following params
// -p : process_type
// -s : source_file (for split only)
// -d : destination_dir / destination_file (depending on process_type)
// -t : total_parts (for split only)
// For [parts...] in join we just force user to have last arguments to be all parts
if (argc > 2) {
int status = -1;
if (strcmp(argv[1], "split") == 0) {
//use splitter core
split(argc - 2, argv + 2);
} else if ((strcmp(argv[1], "merge") == 0) || (strcmp(argv[1], "join") == 0)) {
//use merger core
merge(argc - 2, argv + 2);
} else {
LOG(ERROR) << "Invalid process type!";
}
return status;
} else {
QApplication app(argc, argv);
MainWindow w;
w.show();
return app.exec();
}
}
void help(PartProcessor::kProcessType type) {
if (type == PartProcessor::kSplit) {
LOG(INFO) << "split [source_file] [total_parts] [destination_dir]";
} else {
LOG(INFO) << "join [destination_file] [parts...]";
}
}
void split(int argc, char** argv) {
//Syntax: split [source_file] [total_parts] [destination_dir]
if (argc >= 3) {
QStandardItemModel* fileModel = new QStandardItemModel(1, 6);
fileModel->deleteLater();
SplitterCore* core = new SplitterCore(fileModel);
core->deleteLater();
//TODO: connect signals and implement them to show progress in terminal
QString filePath(argv[0]);
int parts = QString(argv[1]).toInt();
QString destPath(argv[2]);
QFileInfo fileinfo(filePath);
if (fileinfo.isFile()) {
fileModel->setData(fileModel->index(0, 0), filePath);
fileModel->setData(fileModel->index(0, 1), destPath);
fileModel->setData(fileModel->index(0, 2), 0);
fileModel->setData(fileModel->index(0, 3), parts);
fileModel->setData(fileModel->index(0, 4), fileinfo.size());
}
core->start();
core->wait();
} else {
help(PartProcessor::kSplit);
}
}
void merge(int argc, char** argv) {
//Syntax: join [destination_file] [parts...]
if (argc >= 2) {
QString destinationFile(argv[0]);
argc--;
++*argv;
QList<QString> parts;
int index = 0;
while (index != argc) {
parts << QString(argv[index]);
index++;
}
PartProcessor *core = new PartProcessor(parts, destinationFile, QModelIndex(), PartProcessor::kMerge);
core->deleteLater();
//TODO: connect signals and implement them to show progress in terminal
core->start();
core->wait();
} else {
help(PartProcessor::kMerge);
}
}