void ImapSessionCommand::AddActivity(const ActivityPtr& activity) { if(activity.get()) { m_commandActivitySet->AddActivity(activity); // Attempt to adopt immediately (async) to avoid blocking ActivityManager queue activity->Adopt(m_session.GetBusClient()); } }
void ActivitySet::AddActivity(const ActivityPtr& activity) { if(activity.get() == NULL) { throw MailException("AddActivity called with null activity", __FILE__, __LINE__); } // Only add if it's not already in the set if(FindActivitySlot(activity.get()) == m_activities.end()) { ActivitySlotPtr activityState(new ActivitySlot(this, activity)); m_activities.push_back(activityState); if(activity->IsStarting()) { m_starting.insert(activity); } else if(activity->IsEnding()) { m_ending.insert(activity); } } }
void SyncSession::AttachActivity(ActivityPtr activity) { if (activity.get()) { if (IsActive()) { m_activities->AddActivity(activity); } else if (IsEnding()) { m_queuedActivities->AddActivity(activity); } } }
UpdateAccountCommand::UpdateAccountCommand(ImapClient& client, ActivityPtr activity, bool credentialsChanged) : ImapClientCommand(client), m_activitySet(new ActivitySet(client)), m_credentialsChanged(credentialsChanged), m_getAccountTransportSlot(this, &UpdateAccountCommand::GetAccountTransportResponse), m_updateFolderActivitiesSlot(this, &UpdateAccountCommand::UpdateFolderActivitiesDone), m_endActivitiesSlot(this, &UpdateAccountCommand::ActivitiesEnded), m_notifySmtpSlot(this, &UpdateAccountCommand::NotifySmtpResponse) { // FIXME wait for adoption to complete // EndActivities will wait for us, but it's not as polite if(activity.get() && activity->CanAdopt()) { m_activitySet->AddActivity(activity); activity->Adopt(client); activity->SetEndOrder(Activity::EndOrder_Last); } }