From 006d3cec6779ee85337bbabe02a6ff859d71f656 Mon Sep 17 00:00:00 2001 From: ConfuSomu Date: Tue, 27 Dec 2022 03:58:29 -0500 Subject: Store metadata of items that are in status list There is more control and customizability of elements added to the status list, which allows us to set the icon used and also to store additional information about the status that has been selected, useful when we have to display it with more detail. --- src/archive_parser.cpp | 15 ++++++++------- src/archive_parser.h | 3 ++- src/list_item.cpp | 12 ++++++++++++ src/list_item.h | 18 ++++++++++++++++++ src/mainwindow.cpp | 4 ++-- src/types.h | 7 +++++++ 6 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 src/list_item.cpp create mode 100644 src/list_item.h (limited to 'src') diff --git a/src/archive_parser.cpp b/src/archive_parser.cpp index e370bcd..62edfd9 100644 --- a/src/archive_parser.cpp +++ b/src/archive_parser.cpp @@ -1,4 +1,5 @@ #include "archive_parser.h" +#include "src/list_item.h" #include "src/types.h" #include @@ -47,14 +48,14 @@ Archive::~Archive() { delete outbox_items; outbox_items = nullptr; } -QStringList Archive::get_status_list(ViewStatusTypes types) { - QStringList statuses; - +void Archive::update_status_list(ViewStatusTypes allowed_types, QListWidget *parent) { + int i = 0; for (auto&& item : *outbox_items) { if (item.isObject()){ QJsonObject obj = item.toObject(); - // TODO: check the status type + // TODO: check the status type by looking at cc field + StatusType status_type = PUBLIC; if (obj.value("object").isObject()) { QJsonObject activity = obj.value("object").toObject(); @@ -63,11 +64,11 @@ QStringList Archive::get_status_list(ViewStatusTypes types) { // Strip HTML for display in list, according to https://stackoverflow.com/a/12157835 QTextDocument strip_html; strip_html.setHtml(activity.value("content").toString()); - statuses.append(strip_html.toPlainText()); + + ListItem *item = new ListItem(strip_html.toPlainText(), status_type, parent, i); } } } + ++i; } - - return statuses; } diff --git a/src/archive_parser.h b/src/archive_parser.h index 47c7ea4..73adb2c 100644 --- a/src/archive_parser.h +++ b/src/archive_parser.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "types.h" @@ -28,7 +29,7 @@ public: ~Archive(); InitError init(); - QStringList get_status_list(ViewStatusTypes types); + void update_status_list(ViewStatusTypes allowed_types, QListWidget *parent); private: QString outbox_filename; ArchiveType archive_type; diff --git a/src/list_item.cpp b/src/list_item.cpp new file mode 100644 index 0000000..6409169 --- /dev/null +++ b/src/list_item.cpp @@ -0,0 +1,12 @@ +#include "list_item.h" +#include "types.h" + +QIcon* choose_icon(StatusType status_type) { + return new QIcon(); // TODO: null icon for the moment +} + +ListItem::ListItem(const QString &text, StatusType status_type, QListWidget *parent, int index) : + QListWidgetItem(*choose_icon(status_type), text, parent, ArchiveListItemType), status_index(index) +{ + +} diff --git a/src/list_item.h b/src/list_item.h new file mode 100644 index 0000000..e2b3c3f --- /dev/null +++ b/src/list_item.h @@ -0,0 +1,18 @@ +#pragma once + +#include +#include "types.h" + +class ListItem : QListWidgetItem { +public: + enum ItemType { + ArchiveListItemType = QListWidgetItem::UserType + }; + + ListItem(const QString &text, StatusType status_type, QListWidget *parent = nullptr, int index = 0); + +private: + int status_index; + StatusType status_type; + bool has_attachement; +}; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1424ff5..0b77012 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -54,7 +54,7 @@ void MainWindow::on_actionOpen_triggered(bool checked) { ui->listWidget->clear(); if (parse_error == Archive::NoError) { - ui->listWidget->addItems(data_archive->get_status_list(view_filters)); + data_archive->update_status_list(view_filters, ui->listWidget); } QApplication::restoreOverrideCursor(); @@ -71,7 +71,7 @@ void MainWindow::on_actionAbout_triggered(bool checked) { void MainWindow::relist_statuses() { if (data_archive) { ui->listWidget->clear(); - ui->listWidget->addItems(data_archive->get_status_list(view_filters)); + data_archive->update_status_list(view_filters, ui->listWidget); view_filters_changed = false; } } diff --git a/src/types.h b/src/types.h index 632d8ff..b78c564 100644 --- a/src/types.h +++ b/src/types.h @@ -7,3 +7,10 @@ struct ViewStatusTypes { bool includeDirect = true; bool onlyWithAttachment = false; }; + +enum StatusType { + PUBLIC, + UNLISTED, + PRIVATE, + DIRECT +}; -- cgit v1.2.3-54-g00ecf