From cd08c8e1bf9a1a326db797c8c6fbf19daa7be7b0 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 5 Aug 2019 18:54:44 +0200 Subject: [PATCH] ChanViewer: Add a status bar to show loading status Also update the window title with the current board after loading. :^) --- Applications/ChanViewer/ThreadCatalogModel.cpp | 11 ++++++++++- Applications/ChanViewer/ThreadCatalogModel.h | 4 ++++ Applications/ChanViewer/main.cpp | 17 ++++++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Applications/ChanViewer/ThreadCatalogModel.cpp b/Applications/ChanViewer/ThreadCatalogModel.cpp index 828e314410..b1cefaf5fc 100644 --- a/Applications/ChanViewer/ThreadCatalogModel.cpp +++ b/Applications/ChanViewer/ThreadCatalogModel.cpp @@ -32,12 +32,18 @@ void ThreadCatalogModel::update() auto* job = request.schedule(); + if (on_load_started) + on_load_started(); + job->on_finish = [job, this](bool success) { auto* response = job->response(); dbg() << "Catalog download finished, success=" << success << ", response=" << response; - if (!success) + if (!success) { + if (on_load_finished) + on_load_finished(false); return; + } dbg() << "Catalog payload size: " << response->payload().size(); @@ -61,6 +67,9 @@ void ThreadCatalogModel::update() } did_update(); + + if (on_load_finished) + on_load_finished(true); }; } diff --git a/Applications/ChanViewer/ThreadCatalogModel.h b/Applications/ChanViewer/ThreadCatalogModel.h index a2b03cddde..84210c2b13 100644 --- a/Applications/ChanViewer/ThreadCatalogModel.h +++ b/Applications/ChanViewer/ThreadCatalogModel.h @@ -25,8 +25,12 @@ public: virtual GVariant data(const GModelIndex&, Role = Role::Display) const override; virtual void update() override; + const String& board() const { return m_board; } void set_board(const String&); + Function on_load_started; + Function on_load_finished; + private: ThreadCatalogModel(); diff --git a/Applications/ChanViewer/main.cpp b/Applications/ChanViewer/main.cpp index 851903e7eb..9561b69a41 100644 --- a/Applications/ChanViewer/main.cpp +++ b/Applications/ChanViewer/main.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -29,11 +30,25 @@ int main(int argc, char** argv) auto* catalog_view = new GTableView(widget); catalog_view->set_model(ThreadCatalogModel::create()); + auto& catalog_model = *static_cast(catalog_view->model()); + + auto* statusbar = new GStatusBar(widget); board_combo->on_change = [&] (auto&, const GModelIndex& index) { auto selected_board = board_combo->model()->data(index, GModel::Role::Custom); ASSERT(selected_board.is_string()); - static_cast(catalog_view->model())->set_board(selected_board.to_string()); + catalog_model.set_board(selected_board.to_string()); + }; + + catalog_model.on_load_started = [&] { + statusbar->set_text(String::format("Loading /%s/...", catalog_model.board().characters())); + }; + + catalog_model.on_load_finished = [&](bool success) { + statusbar->set_text(success ? "Load finished" : "Load failed"); + if (success) { + window->set_title(String::format("/%s/ - ChanViewer", catalog_model.board().characters())); + } }; window->show();