From 7e4c7905c9e74d76de2e03413af0dc9e4cb84683 Mon Sep 17 00:00:00 2001 From: ConfuSomu Date: Sat, 10 Jun 2023 18:53:35 -0400 Subject: Implement command line options Implementing a command line argument specifying the data export to open allows iterating faster as the file to open can be specified without navigating through a GUI. In the future, more command line options could be specified to specify the view filters for instance. --- src/mainwindow.cpp | 93 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 59 insertions(+), 34 deletions(-) (limited to 'src/mainwindow.cpp') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1e961ba..cb02bc9 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2,12 +2,15 @@ #include "./ui_mainwindow.h" #include "src/archive_parser.h" #include "src/list_item.h" +#include "src/command_line.h" #include #include #include #include #include +#include +#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) @@ -21,47 +24,33 @@ MainWindow::~MainWindow() delete ui; } +void MainWindow::act_command_line(CommandLineParsedOptions &options, QCommandLineParser &parser) { + switch (options.result) { + case CommandLineError: + QMessageBox::critical(this, tr("Command line"), tr("The passed command line is incorrect and will be ignored.\nMore information: %1").arg(options.error_message)); + break; + case CommandLineHelpRequested: + QMessageBox::information(this, QGuiApplication::applicationDisplayName(), "
" + parser.helpText() + "
"); exit(0); + break; + case CommandLineVersionRequested: + on_actionAbout_triggered(true); exit(0); + break; + case CommandLineOk: + if (!options.outbox_filename.isEmpty()) + open_file(options.outbox_filename); + break; + } +} + void MainWindow::on_actionOpen_triggered(bool checked) { QFileDialog fileDialog; fileDialog.setFileMode(QFileDialog::AnyFile); fileDialog.setNameFilter(tr("Mastodon data export directory (outbox.json)")); if (fileDialog.exec()) { QStringList files = fileDialog.selectedFiles(); - outbox_filename = files[0]; - ui->statusInfoText->setText(outbox_filename); - } - - if (data_archive) { - delete data_archive; - data_archive = nullptr; - } - - // TODO: Do this in another thread - QApplication::setOverrideCursor(Qt::WaitCursor); - data_archive = new Archive(outbox_filename, ArchiveType::MASTODON); - auto parse_error = data_archive->init(); - - switch (parse_error) { - case Archive::FailedOpeningFile: - QMessageBox::warning(this, tr("Archive Parser"), tr("Failed opening file.")); break; - case Archive::JsonParseError: - QMessageBox::warning(this, tr("Archive Parser"), tr("Failed parsing outbox JSON.")); break; - case Archive::JsonEmpty: - case Archive::JsonNull: - case Archive::JsonNotObject: - case Archive::JsonNotActivityStream: - QMessageBox::warning(this, tr("Archive Parser"), tr("The outbox JSON is empty or invalid in another way. Not an outbox.json?")); break; - case Archive::NoError: - break; - } - - ui->listWidget->clear(); - - if (parse_error == Archive::NoError) { - data_archive->update_status_list(view_filters, ui->listWidget); + ui->statusInfoText->setText(files[0]); + open_file(files[0]); } - - QApplication::restoreOverrideCursor(); } void MainWindow::on_actionQuit_triggered(bool checked) { @@ -201,3 +190,39 @@ void MainWindow::on_menuView_aboutToHide() { if (view_filters_changed) relist_statuses(); } + +void MainWindow::open_file(const QString &filename) { + outbox_filename = filename; + + if (data_archive) { + delete data_archive; + data_archive = nullptr; + } + + // TODO: Do this in another thread + QApplication::setOverrideCursor(Qt::WaitCursor); + data_archive = new Archive(outbox_filename, ArchiveType::MASTODON); + auto parse_error = data_archive->init(); + + switch (parse_error) { + case Archive::FailedOpeningFile: + QMessageBox::warning(this, tr("Archive Parser"), tr("Failed opening file %1").arg(filename)); break; + case Archive::JsonParseError: + QMessageBox::warning(this, tr("Archive Parser"), tr("Failed parsing outbox JSON.")); break; + case Archive::JsonEmpty: + case Archive::JsonNull: + case Archive::JsonNotObject: + case Archive::JsonNotActivityStream: + QMessageBox::warning(this, tr("Archive Parser"), tr("The outbox JSON is empty or invalid in another way. Not an outbox.json?")); break; + case Archive::NoError: + break; + } + + ui->listWidget->clear(); + + if (parse_error == Archive::NoError) { + data_archive->update_status_list(view_filters, ui->listWidget); + } + + QApplication::restoreOverrideCursor(); +} -- cgit v1.2.3-54-g00ecf