From 00d4921e47e5eef08b10dac127795ecc8ccf84ae Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Tue, 25 Jun 2019 15:36:46 -0400 Subject: only load nexus website on activation fixed refresh not working, will now always clear the browser so the refresh is obvious --- src/modinfodialog.cpp | 34 +++++++++++++++++++++++++++++++++- src/modinfodialog.h | 3 ++- src/modinfodialognexus.cpp | 31 ++++++++++++++++--------------- src/modinfodialognexus.h | 1 + src/modinfodialogtab.cpp | 20 +++++++++++++++++++- src/modinfodialogtab.h | 5 +++++ 6 files changed, 76 insertions(+), 18 deletions(-) diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp index c6cdb961..f11fa6f3 100644 --- a/src/modinfodialog.cpp +++ b/src/modinfodialog.cpp @@ -157,6 +157,8 @@ ModInfoDialog::ModInfoDialog( update(); }); } + + connect(ui->tabWidget, &QTabWidget::currentChanged, [&]{ onTabChanged(); }); } ModInfoDialog::~ModInfoDialog() = default; @@ -196,6 +198,10 @@ int ModInfoDialog::exec() void ModInfoDialog::setMod(ModInfo::Ptr mod) { m_mod = mod; + + for (auto& tabInfo : m_tabs) { + tabInfo.tab->resetFirstActivation(); + } } void ModInfoDialog::setMod(const QString& name) @@ -225,8 +231,25 @@ void ModInfoDialog::setTab(ETabs id) switchToTab(id); } +ModInfoDialog::TabInfo* ModInfoDialog::currentTab() +{ + const auto index = ui->tabWidget->currentIndex(); + if (index < 0) { + return nullptr; + } + + const auto i = static_cast(index); + if (i >= m_tabs.size()) { + return nullptr; + } + + return &m_tabs[i]; +} + void ModInfoDialog::update(bool firstTime) { + const int oldTab = ui->tabWidget->currentIndex(); + setWindowTitle(m_mod->name()); setTabsVisibility(firstTime); @@ -236,6 +259,12 @@ void ModInfoDialog::update(bool firstTime) switchToTab(m_initialTab); m_initialTab = ETabs(-1); } + + if (ui->tabWidget->currentIndex() == oldTab) { + if (auto* tabInfo=currentTab()) { + tabInfo->tab->activated(); + } + } } void ModInfoDialog::setTabsVisibility(bool firstTime) @@ -533,8 +562,11 @@ void ModInfoDialog::on_closeButton_clicked() close(); } -void ModInfoDialog::on_tabWidget_currentChanged(int index) +void ModInfoDialog::onTabChanged() { + if (auto* tabInfo=currentTab()) { + tabInfo->tab->activated(); + } } void ModInfoDialog::on_nextButton_clicked() diff --git a/src/modinfodialog.h b/src/modinfodialog.h index 8ddaf86c..36363c34 100644 --- a/src/modinfodialog.h +++ b/src/modinfodialog.h @@ -118,7 +118,6 @@ signals: private slots: void on_closeButton_clicked(); - void on_tabWidget_currentChanged(int index); void on_nextButton_clicked(); void on_prevButton_clicked(); @@ -144,6 +143,7 @@ private: ETabs m_initialTab; std::vector createTabs(); + TabInfo* currentTab(); void restoreTabState(const QString& state); QString saveTabState() const; void update(bool firstTime=false); @@ -157,6 +157,7 @@ private: void reAddTabs(const std::vector& visibility, ETabs sel); std::vector getOrderedTabNames() const; void onOriginModified(std::size_t tabIndex, int originID); + void onTabChanged(); template std::unique_ptr createTab(int index) diff --git a/src/modinfodialognexus.cpp b/src/modinfodialognexus.cpp index 797f7923..adf79060 100644 --- a/src/modinfodialognexus.cpp +++ b/src/modinfodialognexus.cpp @@ -26,7 +26,7 @@ NexusTab::NexusTab( connect(ui->openInBrowser, &QToolButton::clicked, [&]{ onOpenLink(); }); connect(ui->url, &QLineEdit::editingFinished, [&]{ onUrlChanged(); }); connect(ui->endorse, &QToolButton::clicked, [&]{ onEndorse(); }); - connect(ui->refresh, &QToolButton::clicked, [&]{ updateWebpage(); }); + connect(ui->refresh, &QToolButton::clicked, [&]{ onRefreshBrowser(); }); connect( ui->sourceGame, @@ -96,10 +96,14 @@ void NexusTab::update() (mod()->endorsedState() == ModInfo::ENDORSED_FALSE) || (mod()->endorsedState() == ModInfo::ENDORSED_NEVER)); - updateWebpage(); setHasData(mod()->getNexusID() >= 0); } +void NexusTab::firstActivation() +{ + updateWebpage(); +} + void NexusTab::setMod(ModInfo::Ptr mod, MOShared::FilesOrigin* origin) { cleanup(); @@ -265,9 +269,11 @@ void NexusTab::onRefreshBrowser() const auto modID = mod()->getNexusID(); if (isValidModID(modID)) { - refreshData(modID); - } else + mod()->setLastNexusQuery(QDateTime::fromSecsSinceEpoch(0)); + updateWebpage(); + } else { qInfo("Mod has no valid Nexus ID, info can't be updated."); + } } void NexusTab::onEndorse() @@ -286,17 +292,12 @@ void NexusTab::refreshData(int modID) bool NexusTab::tryRefreshData(int modID) { - if (!isValidModID(modID)) { - return false; - } - - if (m_requestStarted) { - return false; - } - - if (!mod()->updateNXMInfo()) { - return false; + if (isValidModID(modID) && !m_requestStarted) { + if (mod()->updateNXMInfo()) { + ui->browser->setHtml(""); + return true; + } } - return true; + return false; } diff --git a/src/modinfodialognexus.h b/src/modinfodialognexus.h index 86d87c30..92330704 100644 --- a/src/modinfodialognexus.h +++ b/src/modinfodialognexus.h @@ -41,6 +41,7 @@ public: void clear() override; void update() override; + void firstActivation() override; void setMod(ModInfo::Ptr mod, MOShared::FilesOrigin* origin) override; bool usesOriginFiles() const override; diff --git a/src/modinfodialogtab.cpp b/src/modinfodialogtab.cpp index 009fb804..d99e8727 100644 --- a/src/modinfodialogtab.cpp +++ b/src/modinfodialogtab.cpp @@ -7,10 +7,23 @@ ModInfoDialogTab::ModInfoDialogTab( OrganizerCore& oc, PluginContainer& plugin, QWidget* parent, Ui::ModInfoDialog* ui, int id) : ui(ui), m_core(oc), m_plugin(plugin), m_parent(parent), - m_origin(nullptr), m_tabID(id), m_hasData(false) + m_origin(nullptr), m_tabID(id), m_hasData(false), m_firstActivation(true) { } +void ModInfoDialogTab::activated() +{ + if (m_firstActivation) { + m_firstActivation = false; + firstActivation(); + } +} + +void ModInfoDialogTab::resetFirstActivation() +{ + m_firstActivation = true; +} + void ModInfoDialogTab::update() { // no-op @@ -22,6 +35,11 @@ bool ModInfoDialogTab::feedFile(const QString&, const QString&) return false; } +void ModInfoDialogTab::firstActivation() +{ + // no-op +} + bool ModInfoDialogTab::canClose() { return true; diff --git a/src/modinfodialogtab.h b/src/modinfodialogtab.h index c85d2ded..41d913f8 100644 --- a/src/modinfodialogtab.h +++ b/src/modinfodialogtab.h @@ -21,9 +21,13 @@ public: ModInfoDialogTab& operator=(ModInfoDialogTab&&) = default; virtual ~ModInfoDialogTab() = default; + void activated(); + void resetFirstActivation(); + virtual void clear() = 0; virtual void update(); virtual bool feedFile(const QString& rootPath, const QString& filename); + virtual void firstActivation(); virtual bool canClose(); virtual void saveState(Settings& s); virtual void restoreState(const Settings& s); @@ -70,6 +74,7 @@ private: MOShared::FilesOrigin* m_origin; int m_tabID; bool m_hasData; + bool m_firstActivation; }; -- cgit v1.3.1