Ref T165, directly display distributions info

* use digest signal to avoid unnecessary signals
* better user experience by directly displaying info
This commit is contained in:
Klaus Basan
2017-09-27 19:35:09 +02:00
parent 15e46ba94a
commit a5a32a1722
2 changed files with 17 additions and 15 deletions

View File

@@ -36,16 +36,14 @@ namespace BlackGui
ui->lbl_NewVersionUrl->setOpenExternalLinks(true); ui->lbl_NewVersionUrl->setOpenExternalLinks(true);
// use version signal as trigger for completion // use version signal as trigger for completion
if (!m_distributionsInfo.get().isEmpty()) const CDistributionList distributions = m_distributionsInfo.get();
if (!distributions.isEmpty())
{ {
// we have at least cached data: // we have at least cached data:
// in case CGuiApplication::distributionInfoAvailable never comes/was already sent // in case CGuiApplication::distributionInfoAvailable never comes/was already sent
QTimer::singleShot(15 * 1000, this, [ = ] // 1) we do not know if we missed the signal, the server is down etc
{ // 2) for better user experience we display straight away, it will overridden if the signal will br received
// use this as timeout failover with cached data this->ps_loadedDistributionInfo(true);
if (m_distributionsLoaded) { return; }
this->ps_loadedDistributionInfo(true);
});
} }
Q_ASSERT_X(sGui, Q_FUNC_INFO, "Need sGui"); Q_ASSERT_X(sGui, Q_FUNC_INFO, "Need sGui");
@@ -76,7 +74,6 @@ namespace BlackGui
if (msgs.isSuccess()) if (msgs.isSuccess())
{ {
ui->le_LatestVersion->setText(""); ui->le_LatestVersion->setText("");
m_distributionsLoaded = false; // reset
} }
} }
} }
@@ -85,20 +82,16 @@ namespace BlackGui
{ {
if (!success) if (!success)
{ {
m_distributionsLoaded = false;
ui->pb_CheckForUpdates->setToolTip(""); ui->pb_CheckForUpdates->setToolTip("");
CLogMessage(this).warning("Loading setup or distribution information failed"); CLogMessage(this).warning("Loading setup or distribution information failed");
return; return;
} }
// only emit once
if (m_distributionsLoaded) { return; }
m_distributionsLoaded = true;
this->ps_channelChanged(); this->ps_channelChanged();
ui->pb_CheckForUpdates->setToolTip(sApp->getLastSuccesfulDistributionUrl()); ui->pb_CheckForUpdates->setToolTip(sApp->getLastSuccesfulDistributionUrl());
// emit only after all has been set // emit via digest signal
emit this->distributionInfoAvailable(success); m_dsDistributionAvailable.inputSignal();
} }
void CDistributionInfoComponent::ps_changedDistributionCache() void CDistributionInfoComponent::ps_changedDistributionCache()
@@ -128,6 +121,11 @@ namespace BlackGui
} }
} }
void CDistributionInfoComponent::triggerInfoAvailableSignal()
{
emit this->distributionInfoAvailable(true);
}
void CDistributionInfoComponent::ps_channelChanged() void CDistributionInfoComponent::ps_channelChanged()
{ {
const CDistributionList distributions(m_distributionsInfo.get()); const CDistributionList distributions(m_distributionsInfo.get());

View File

@@ -16,6 +16,7 @@
#include "blackgui/blackguiexport.h" #include "blackgui/blackguiexport.h"
#include "blackmisc/db/distributionlist.h" #include "blackmisc/db/distributionlist.h"
#include "blackmisc/settingscache.h" #include "blackmisc/settingscache.h"
#include "blackmisc/digestsignal.h"
#include <QFrame> #include <QFrame>
namespace Ui { class CDistributionInfoComponent; } namespace Ui { class CDistributionInfoComponent; }
@@ -77,15 +78,18 @@ namespace BlackGui
private: private:
QScopedPointer<Ui::CDistributionInfoComponent> ui; QScopedPointer<Ui::CDistributionInfoComponent> ui;
QScopedPointer<CInstallXSwiftBusDialog> m_installXSwiftBusDialog; //!< dialog, install XSwiftXBus QScopedPointer<CInstallXSwiftBusDialog> m_installXSwiftBusDialog; //!< dialog, install XSwiftXBus
bool m_distributionsLoaded = false; //!< distribution info loaded
QString m_newVersionAvailable; //!< new version number if any QString m_newVersionAvailable; //!< new version number if any
BlackMisc::Db::CDistribution m_currentDistribution; //!< current distribution BlackMisc::Db::CDistribution m_currentDistribution; //!< current distribution
BlackMisc::CDataReadOnly<BlackMisc::Db::TDistributionsInfo> m_distributionsInfo { this, &CDistributionInfoComponent::ps_changedDistributionCache }; //!< version cache BlackMisc::CDataReadOnly<BlackMisc::Db::TDistributionsInfo> m_distributionsInfo { this, &CDistributionInfoComponent::ps_changedDistributionCache }; //!< version cache
BlackMisc::CSetting<BlackCore::Application::TDistribution> m_distributionSetting { this }; //!< channel/platform selected BlackMisc::CSetting<BlackCore::Application::TDistribution> m_distributionSetting { this }; //!< channel/platform selected
BlackMisc::CDigestSignal m_dsDistributionAvailable { this, &CDistributionInfoComponent::triggerInfoAvailableSignal, 10000, 2 };
//! Save the current settings //! Save the current settings
void saveSettings(); void saveSettings();
//! Trigger the CDistributionInfoComponent::distributionInfoAvailable signal
void triggerInfoAvailableSignal();
//! Selected platform from UI or guessed platform //! Selected platform from UI or guessed platform
QString getSelectedOrGuessedPlatform() const; QString getSelectedOrGuessedPlatform() const;
}; };