aboutsummaryrefslogtreecommitdiffstats
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
authorConfuSomu2023-06-10 18:53:35 -0400
committerConfuSomu2023-06-10 18:59:30 -0400
commit7e4c7905c9e74d76de2e03413af0dc9e4cb84683 (patch)
treeca0de8ab135ecc9af006664b5f505c0e2415de5a /src/mainwindow.cpp
parentd3d14e07c202f9350f817802777720ded85e4248 (diff)
downloadActorViewer-7e4c7905c9e74d76de2e03413af0dc9e4cb84683.tar
ActorViewer-7e4c7905c9e74d76de2e03413af0dc9e4cb84683.tar.gz
ActorViewer-7e4c7905c9e74d76de2e03413af0dc9e4cb84683.zip
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.
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp93
1 files changed, 59 insertions, 34 deletions
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 <QFileDialog>
#include <QMessageBox>
#include <QRandomGenerator>
#include <QClipboard>
#include <QMimeData>
+#include <QCommandLineParser>
+#include <QMessageBox>
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(), "<pre>" + parser.helpText() + "</pre>"); 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();
+}