QImage GlooxAccount::GetSelfAvatar () const { auto self = GetSelfContact (); return self ? qobject_cast<ICLEntry*> (self)->GetAvatar () : QImage (); }
QObject* GlooxAccount::Call (const QString& id, const QString& variant) { if (id == qobject_cast<ICLEntry*> (GetSelfContact ())->GetEntryID ()) { Core::Instance ().SendEntity (Util::MakeNotification ("LeechCraft", tr ("Why would you call yourself?"), PWarning_)); return 0; } QString target = GlooxCLEntry::JIDFromID (this, id); QString var = variant; if (var.isEmpty ()) { QObject *entryObj = GetClientConnection ()-> GetCLEntry (target, QString ()); GlooxCLEntry *entry = qobject_cast<GlooxCLEntry*> (entryObj); if (entry) var = entry->Variants ().value (0); else qWarning () << Q_FUNC_INFO << "null entry for" << target; } target += '/' + var; return new MediaCall (this, ClientConnection_->GetCallManager ()->call (target)); }
void NotificationsManager::HandleStatusChanged (ICLEntry *entry, const EntryStatus& entrySt, const QString& variant) { const auto acc = entry->GetParentAccount (); if (!LastAccountStatusChange_.contains (acc) || LastAccountStatusChange_ [acc].secsTo (QDateTime::currentDateTime ()) < 5) return; const auto extAcc = qobject_cast<IExtSelfInfoAccount*> (entry->GetParentAccount ()->GetQObject ()); if (extAcc && extAcc->GetSelfContact () == entry->GetQObject ()) return; const auto& status = ProxyObject {}.StateToString (entrySt.State_); const auto& text = GetStatusChangeText (entry, entrySt, variant, status); auto e = Util::MakeNotification ("LeechCraft", text, PInfo_); e.Mime_ += "+advanced"; BuildNotification (e, entry, "StatusChangeEvent"); e.Additional_ ["org.LC.AdvNotifications.EventType"] = AN::TypeIMStatusChange; e.Additional_ ["org.LC.AdvNotifications.FullText"] = text; e.Additional_ ["org.LC.AdvNotifications.ExtendedText"] = text; e.Additional_ ["org.LC.AdvNotifications.Count"] = 1; e.Additional_ ["org.LC.Plugins.Azoth.Msg"] = entrySt.StatusString_; e.Additional_ ["org.LC.Plugins.Azoth.NewStatus"] = status; EntityMgr_->HandleEntity (e); }
void Plugin::checkDates () { if (!XmlSettingsManager::Instance ().property ("NotifyEnabled").toBool ()) return; const auto& ranges = XmlSettingsManager::Instance () .property ("NotificationDays").toString ().split (',', QString::SkipEmptyParts); QList<int> allowedDays; Q_FOREACH (const auto& range, ranges) { if (!range.contains ('-')) { bool ok = false; const int day = range.toInt (&ok); if (ok) allowedDays << day; continue; } const auto& ends = range.split ('-', QString::SkipEmptyParts); if (ends.size () != 2) continue; bool bOk = false, eOk = false; const int begin = ends.at (0).toInt (&bOk); const int end = ends.at (1).toInt (&eOk); if (!bOk || !eOk) continue; for (int i = begin; i <= end; ++i) allowedDays << i; } const auto& today = QDate::currentDate (); auto accs = AzothProxy_->GetAllAccounts (); Q_FOREACH (auto accObj, AzothProxy_->GetAllAccounts ()) { auto acc = qobject_cast<IAccount*> (accObj); auto extSelf = qobject_cast<IExtSelfInfoAccount*> (accObj); Q_FOREACH (auto entryObj, acc->GetCLEntries ()) { auto entry = qobject_cast<ICLEntry*> (entryObj); if (!entry || entry->GetEntryType () != ICLEntry::ETChat) continue; if (extSelf && extSelf->GetSelfContact () == entryObj) continue; auto meta = qobject_cast<IMetaInfoEntry*> (entryObj); if (!meta) continue; auto dt = meta->GetMetaInfo (IMetaInfoEntry::DataField::BirthDate).toDate (); if (!dt.isValid ()) continue; dt.setDate (today.year (), dt.month (), dt.day ()); if (!dt.isValid ()) continue; int days = today.daysTo (dt); if (days < 0) { dt.setDate (today.year () + 1, dt.month (), dt.day ()); if (!dt.isValid ()) continue; days = today.daysTo (dt); } if (allowedDays.contains (days)) NotifyBirthday (entry, days); } } }