void Plugin::hookEntryStatusChanged (IHookProxy_ptr, QObject *entryObj, QString) { if (!IsGoodEntry (entryObj)) return; ICLEntry *entry = qobject_cast<ICLEntry*> (entryObj); const QString& id = entry->GetEntryID (); const EntryStatus& status = entry->GetStatus (); if (!LastState_.contains (id)) { LastState_ [id] = status.State_; return; } const State oldState = LastState_ [id]; LastState_ [id] = status.State_; switch (oldState) { case SOffline: case SProbe: case SError: case SInvalid: case SConnecting: return; case SOnline: LastAvailable_ [id] = QDateTime::currentDateTime (); default: LastOnline_ [id] = QDateTime::currentDateTime (); ScheduleSave (); } }
void Plugin::hookTooltipBeforeVariants (IHookProxy_ptr proxy, QObject *entryObj) { if (!IsGoodEntry (entryObj)) return; const auto entry = qobject_cast<ICLEntry*> (entryObj); const auto& id = entry->GetEntryID (); const auto& maybeStats = Storage_->GetEntryStats (id); if (!maybeStats) return; const auto& stats = *maybeStats; QString addition; const auto curState = entry->GetStatus ().State_; if (curState != SOnline) { const auto& avail = stats.Available_; if (avail.isValid ()) addition += tr ("Was available: %1") .arg (avail.toString ()); } if (curState == SOffline || curState == SError || curState == SInvalid) { const auto& online = stats.Online_; if (online.isValid ()) { if (!addition.isEmpty ()) addition += "<br/>"; addition += tr ("Was online: %1") .arg (online.toString ()); } } const auto& lastChange = stats.StatusChange_; if (lastChange.isValid ()) { if (!addition.isEmpty ()) addition += "<br/>"; addition += tr ("Last status change: %1") .arg (lastChange.toString ()); } if (addition.isEmpty ()) return; const auto& tip = proxy->GetValue ("tooltip").toString (); proxy->SetValue ("tooltip", tip + "<br/><br/>" + addition + "<br/>"); }
void Plugin::hookEntryStatusChanged (IHookProxy_ptr, QObject *entryObj, QString variant) { if (!IsGoodEntry (entryObj)) return; if (variant.isEmpty ()) return; const auto entry = qobject_cast<ICLEntry*> (entryObj); const auto& id = entry->GetEntryID (); const auto& status = entry->GetStatus (); if (!LastState_.contains (id)) { LastState_ [id] = status.State_; return; } const State oldState = LastState_ [id]; if (oldState == status.State_) return; LastState_ [id] = status.State_; const auto& now = QDateTime::currentDateTime (); auto stats = Storage_->GetEntryStats (id).get_value_or ({}); stats.StatusChange_ = now; switch (oldState) { case SOffline: case SProbe: case SError: case SInvalid: case SConnecting: return; case SOnline: stats.Available_ = now; default: stats.Online_ = now; break; } auto st = Storage_; Util::ExecuteLater ([stats, st, id] { st->SetEntryStats (id, stats); }); }
void Plugin::hookTooltipBeforeVariants (IHookProxy_ptr proxy, QObject *entryObj) { if (!IsGoodEntry (entryObj)) return; ICLEntry *entry = qobject_cast<ICLEntry*> (entryObj); const QString& id = entry->GetEntryID (); QString addition; const State curState = entry->GetStatus ().State_; if (curState != SOnline) { const QDateTime& avail = LastAvailable_.value (id); if (avail.isValid ()) addition += tr ("Was available: %1") .arg (avail.toString ()); } if (curState == SOffline || curState == SError || curState == SInvalid) { const QDateTime& online = LastOnline_.value (id); if (LastOnline_.contains (id)) { if (!addition.isEmpty ()) addition += "<br/>"; addition += tr ("Was online: %1") .arg (online.toString ()); } } if (addition.isEmpty ()) return; const QString& tip = proxy->GetValue ("tooltip").toString (); proxy->SetValue ("tooltip", tip + "<br/><br/>" + addition + "<br/>"); }