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();