summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-06-25 15:36:46 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-07-02 10:10:19 -0400
commit00d4921e47e5eef08b10dac127795ecc8ccf84ae (patch)
treed985993aa1713af103a19ca345fb898f47421e3a /src
parentfb93d9ff2d1c158fb546471f6e18e4dc9b965c2f (diff)
only load nexus website on activation
fixed refresh not working, will now always clear the browser so the refresh is obvious
Diffstat (limited to 'src')
-rw-r--r--src/modinfodialog.cpp34
-rw-r--r--src/modinfodialog.h3
-rw-r--r--src/modinfodialognexus.cpp31
-rw-r--r--src/modinfodialognexus.h1
-rw-r--r--src/modinfodialogtab.cpp20
-rw-r--r--src/modinfodialogtab.h5
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<std::size_t>(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<TabInfo> 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<bool>& visibility, ETabs sel);
std::vector<QString> getOrderedTabNames() const;
void onOriginModified(std::size_t tabIndex, int originID);
+ void onTabChanged();
template <class T>
std::unique_ptr<ModInfoDialogTab> 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;
};