From 3095e11bfaba99fe4fb598a53914b80979aafe0f Mon Sep 17 00:00:00 2001 From: ConfuSomu Date: Tue, 4 Apr 2023 00:10:58 -0400 Subject: Display Activity publish date following locale This is an improved user experience over displaying the raw ISO 8601 date stored in the ActivityStream JSON-LD. --- src/archive_parser.cpp | 11 ++++++++--- src/archive_parser.h | 2 +- src/mainwindow.cpp | 2 +- src/mainwindow.h | 3 +++ 4 files changed, 13 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/archive_parser.cpp b/src/archive_parser.cpp index d16cd49..2522ffa 100644 --- a/src/archive_parser.cpp +++ b/src/archive_parser.cpp @@ -6,6 +6,7 @@ #include #include #include +#include Archive::Archive(QString outbox_filename, ArchiveType archive_type) : outbox_filename(outbox_filename), archive_type(archive_type) {} @@ -264,15 +265,19 @@ QString Archive::get_html_status_attachments(QJsonValueRef attachments_ref, int } // status_index is assumed to be a valid index -QString Archive::get_html_status_info(int status_index, int text_zone_width, StatusType status_type) { +QString Archive::get_html_status_info(int status_index, int text_zone_width, StatusType status_type, QLocale* locale) { QString info_text(*get_html_status_info_template()); QJsonObject obj = outbox_items->at(status_index).toObject(); if (obj.contains("type") and obj["type"].isString()) info_text.replace("{{type}}", obj["type"].toString()); - if (obj.contains("published") and obj["published"].isString()) - info_text.replace("{{published}}", obj["published"].toString()); + if (obj.contains("published") and obj["published"].isString()) { + // TODO: add a UI setting for configuring the display of local time or UTC time. + QDateTime date = QDateTime::fromString(obj["published"].toString(), Qt::ISODate).toLocalTime(); + // Using QLocale::toString() is forward compatible with Qt 6 as QDateTime::toString() will not return anymore a string in the system locale. + info_text.replace("{{published}}", locale->toString(date)); + } if (obj.contains("id") and obj["id"].isString()) info_text.replace("{{url-id}}", obj["id"].toString()); diff --git a/src/archive_parser.h b/src/archive_parser.h index 5d45812..6b2baa4 100644 --- a/src/archive_parser.h +++ b/src/archive_parser.h @@ -30,7 +30,7 @@ public: InitError init(); void update_status_list(ViewStatusTypes allowed_types, QListWidget *parent); - QString get_html_status_info(int status_index, int text_zone_width, StatusType status_type); + QString get_html_status_info(int status_index, int text_zone_width, StatusType status_type, QLocale* locale); QString get_html_status_text(int status_index); private: QString outbox_filename; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 0437826..b08fd14 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -75,7 +75,7 @@ void MainWindow::on_actionAbout_triggered(bool checked) { void MainWindow::on_listWidget_itemActivated(QListWidgetItem *item) { ListItem* casted = dynamic_cast(item); if (casted != nullptr) { - QString status_info = data_archive->get_html_status_info(casted->get_status_index(), ui->statusInfoText->width(), casted->get_status_type()); + QString status_info = data_archive->get_html_status_info(casted->get_status_index(), ui->statusInfoText->width(), casted->get_status_type(), &locale_context); ui->statusInfoText->setHtml(status_info); } } diff --git a/src/mainwindow.h b/src/mainwindow.h index c37ce28..8bfa3b2 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -2,6 +2,7 @@ #include #include +#include #include #include "archive_parser.h" @@ -51,4 +52,6 @@ private: bool view_filters_changed = false; Archive *data_archive = nullptr; + + QLocale locale_context; }; -- cgit v1.2.3-54-g00ecf