void AIMContact::updateAwayMessage( const QString& contact, const QString& message ) { if ( Oscar::normalize( contact ) != Oscar::normalize( contactId() ) ) return; else { if ( message.isEmpty() ) { removeProperty( mProtocol->awayMessage ); if ( !m_mobile ) setOnlineStatus( mProtocol->statusOnline ); else setOnlineStatus( mProtocol->statusWirelessOnline ); m_haveAwayMessage = false; } else { m_haveAwayMessage = true; setAwayMessage( message ); if ( !m_mobile ) setOnlineStatus( mProtocol->statusAway ); else setOnlineStatus( mProtocol->statusWirelessAway ); } } emit updatedProfile(); }
AIMContact::AIMContact( Kopete::Account* account, const QString& name, Kopete::MetaContact* parent, const QString& icon, const Oscar::SSI& ssiItem ) : OscarContact(account, name, parent, icon, ssiItem ) { mProtocol=static_cast<AIMProtocol *>(protocol()); setOnlineStatus( mProtocol->statusOffline ); m_infoDialog = 0L; m_warnUserAction = 0L; mUserProfile=""; m_haveAwayMessage = false; m_mobile = false; // Set the last autoresponse time to the current time yesterday m_lastAutoresponseTime = QDateTime::currentDateTime().addDays(-1); QObject::connect( mAccount->engine(), SIGNAL( receivedUserInfo( const QString&, const UserDetails& ) ), this, SLOT( userInfoUpdated( const QString&, const UserDetails& ) ) ); QObject::connect( mAccount->engine(), SIGNAL( userIsOffline( const QString& ) ), this, SLOT( userOffline( const QString& ) ) ); QObject::connect( mAccount->engine(), SIGNAL( receivedAwayMessage( const QString&, const QString& ) ), this, SLOT( updateAwayMessage( const QString&, const QString& ) ) ); QObject::connect( mAccount->engine(), SIGNAL( receivedProfile( const QString&, const QString& ) ), this, SLOT( updateProfile( const QString&, const QString& ) ) ); QObject::connect( mAccount->engine(), SIGNAL( userWarned( const QString&, Q_UINT16, Q_UINT16 ) ), this, SLOT( gotWarning( const QString&, Q_UINT16, Q_UINT16 ) ) ); QObject::connect( mAccount->engine(), SIGNAL( haveIconForContact( const QString&, QByteArray ) ), this, SLOT( haveIcon( const QString&, QByteArray ) ) ); QObject::connect( mAccount->engine(), SIGNAL( iconServerConnected() ), this, SLOT( requestBuddyIcon() ) ); QObject::connect( this, SIGNAL( featuresUpdated() ), this, SLOT( updateFeatures() ) ); }
WlmContact::WlmContact (Kopete::Account * _account, const QString & uniqueName, const QString & contactSerial, Kopete::MetaContact * parent): Kopete::Contact (_account, uniqueName, parent) { kDebug (14210) << k_funcinfo << " uniqueName: " << uniqueName; m_msgManager = 0L; m_account = qobject_cast<WlmAccount*>(account()); setFileCapable (true); setOnlineStatus (WlmProtocol::protocol ()->wlmOffline); m_contactSerial = contactSerial; m_disabled = false; m_dontShowEmoticons = false; if ( metaContact() ) m_currentGroup = metaContact()->groups().first(); m_actionBlockContact = new KToggleAction(KIcon("wlm_blocked"), i18n("Block Contact"), this ); QObject::connect( m_actionBlockContact, SIGNAL(triggered(bool)), this, SLOT(blockContact(bool)) ); m_actionShowProfile = new KAction(i18n("Show Profile"), this); QObject::connect(m_actionShowProfile, SIGNAL(triggered(bool)), this, SLOT(slotShowProfile())); m_actionUpdateDisplayPicture = new KAction(i18n("Update Photo"), this); QObject::connect(m_actionUpdateDisplayPicture, SIGNAL(triggered(bool)), this, SLOT(slotUpdateDisplayPicture())); m_actionDontShowEmoticons = new KToggleAction (KIcon ("wlm_fakefriend"), i18n ("&Block custom emoticons"), this); QObject::connect (m_actionDontShowEmoticons, SIGNAL(triggered(bool)), this, SLOT(slotDontShowEmoticons(bool))); }
WPContact::WPContact(Kopete::Account *account, const QString &newHostName, const QString &nickName, Kopete::MetaContact *metaContact) : Kopete::Contact(account, newHostName, metaContact) { // kdDebug(14170) << "WPContact::WPContact(<account>, " << newHostName << ", " << nickName << ", <parent>)" << endl; kdDebug(14170) << "WPContact::WPContact: " << this << endl; QString theNickName = nickName; if (theNickName.isEmpty()) { // Construct nickname from hostname with first letter to upper. GF theNickName = newHostName.lower(); theNickName = theNickName.replace(0, 1, theNickName[0].upper()); } setNickName(theNickName); myWasConnected = false; m_manager = 0; m_infoDialog = 0; // Initialise and start the periodical checking for contact's status setOnlineStatus(static_cast<WPProtocol *>(protocol())->WPOffline); connect(&checkStatus, SIGNAL(timeout()), this, SLOT(slotCheckStatus())); checkStatus.start(1000, false); }
void AIMContact::userOffline( const QString& userId ) { if ( Oscar::normalize( userId ) == Oscar::normalize( contactId() ) ) { setOnlineStatus( mProtocol->statusOffline ); removeProperty( mProtocol->awayMessage ); } }
void AIMContact::userOnline( const QString& userId ) { if ( Oscar::normalize( userId ) == Oscar::normalize( contactId() ) ) { kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Getting more contact info" << endl; setOnlineStatus( mProtocol->statusOnline ); } }
void AIMContact::updateSSIItem() { if ( m_ssiItem.type() != 0xFFFF && m_ssiItem.waitingAuth() == false && onlineStatus() == Kopete::OnlineStatus::Unknown ) { //make sure they're offline setOnlineStatus( static_cast<AIMProtocol*>( protocol() )->statusOffline ); } }
bool Account::resume() { if ( !d->suspended ) return false; if ( d->suspendStatus != Kopete::OnlineStatus::Offline ) setOnlineStatus( d->suspendStatus, d->restoreMessage, Kopete::Account::None ); return true; }
void WlmContact::setDisabled(bool disabled, bool updateServer) { WlmAccount* acc = qobject_cast<WlmAccount*>(account()); if(!acc) return; if(disabled) { // already disabled if(isDisabled()) return; m_disabled = true; if(!metaContact()) return; metaContact()->setTemporary(m_disabled); setOnlineStatus(WlmProtocol::protocol()->wlmOffline); if(updateServer && account ()->isConnected ()) acc->server ()->mainConnection->disableContactOnAddressBook( m_contactSerial.toLatin1().constData(), contactId ().toLatin1().constData() ); } else { // already enabled if(!isDisabled()) return; m_disabled = false; if(!metaContact()) return; metaContact()->setTemporary(m_disabled); setOnlineStatus(WlmProtocol::protocol()->wlmOffline); if(updateServer && account ()->isConnected ()) acc->server()->mainConnection->enableContactOnAddressBook(m_contactSerial.toLatin1().constData(), contactId().toLatin1().constData()); } }
TestbedContact::TestbedContact( Kopete::Account* _account, const QString &uniqueName, const TestbedContactType type, const QString &displayName, Kopete::MetaContact *parent ) : Kopete::Contact( _account, uniqueName, parent ) { kdDebug( 14210 ) << k_funcinfo << " uniqueName: " << uniqueName << ", displayName: " << displayName << endl; m_type = type; // FIXME: ? setDisplayName( displayName ); m_msgManager = 0L; setOnlineStatus( TestbedProtocol::protocol()->testbedOffline ); }
bool Account::suspend( const Kopete::StatusMessage &reason ) { if ( d->suspended ) return false; d->suspendStatus = myself()->onlineStatus(); if( myself()->onlineStatus().status() == OnlineStatus::Connecting ) d->suspendStatus = d->restoreStatus; setOnlineStatus( OnlineStatus::Offline, reason ); d->suspended = true; return true; }
FacebookContact::FacebookContact( Kopete::Account* _account, const QString &uniqueName, const QString &displayName, Kopete::MetaContact *parent ) : Kopete::Contact( _account, uniqueName, parent ) , m_actionShowProfile(0L) { kDebug( FBDBG ) << " uniqueName: " << uniqueName << ", displayName: " << displayName; m_type = FacebookContact::Null; // FIXME: ? setDisplayName( displayName ); m_msgManager = 0L; setOnlineStatus( FacebookProtocol::protocol()->facebookOffline ); m_actionShowProfile = new KAction(i18n("Show Profile"), this); QObject::connect(m_actionShowProfile, SIGNAL(triggered(bool)), this, SLOT(slotShowProfile())); }
void AIMContact::userInfoUpdated( const QString& contact, const UserDetails& details ) { if ( Oscar::normalize( contact ) != Oscar::normalize( contactId() ) ) return; kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << contact << endl; //if they don't have an SSI alias, make sure we use the capitalization from the //server so their contact id looks all pretty. QString nickname = property( Kopete::Global::Properties::self()->nickName() ).value().toString(); if ( nickname.isEmpty() || Oscar::normalize( nickname ) == Oscar::normalize( contact ) ) setNickName( contact ); ( details.userClass() & CLASS_WIRELESS ) ? m_mobile = true : m_mobile = false; if ( ( details.userClass() & CLASS_AWAY ) == STATUS_ONLINE ) { if ( m_mobile ) { kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Contact: " << contact << " is mobile-online." << endl; setOnlineStatus( mProtocol->statusWirelessOnline ); } else { kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Contact: " << contact << " is online." << endl; setOnlineStatus( mProtocol->statusOnline ); //we're online } removeProperty( mProtocol->awayMessage ); m_haveAwayMessage = false; } else if ( ( details.userClass() & CLASS_AWAY ) ) // STATUS_AWAY { if ( m_mobile ) { kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Contact: " << contact << " is mobile-away." << endl; setOnlineStatus( mProtocol->statusWirelessOnline ); } else { kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Contact: " << contact << " is away." << endl; setOnlineStatus( mProtocol->statusAway ); //we're away } if ( !m_haveAwayMessage ) //prevent cyclic away message requests { mAccount->engine()->requestAIMAwayMessage( contactId() ); m_haveAwayMessage = true; } } else { kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Contact: " << contact << " class " << details.userClass() << " is unhandled... defaulting to away." << endl; setOnlineStatus( mProtocol->statusAway ); //we're away if ( !m_haveAwayMessage ) //prevent cyclic away message requests { mAccount->engine()->requestAIMAwayMessage( contactId() ); m_haveAwayMessage = true; } } if ( details.buddyIconHash().size() > 0 && details.buddyIconHash() != m_details.buddyIconHash() ) { if ( !mAccount->engine()->hasIconConnection() ) mAccount->engine()->requestServerRedirect( 0x0010 ); int time = ( KApplication::random() % 10 ) * 1000; kdDebug(OSCAR_ICQ_DEBUG) << k_funcinfo << "updating buddy icon in " << time/1000 << " seconds" << endl; QTimer::singleShot( time, this, SLOT( requestBuddyIcon() ) ); } OscarContact::userInfoUpdated( contact, details ); }
void IRCUserContact::updateStatus() { //kdDebug(14120) << k_funcinfo << endl; Kopete::OnlineStatus newStatus; switch (kircEngine()->status()) { case KIRC::Engine::Idle: newStatus = m_protocol->m_UserStatusOffline; break; case KIRC::Engine::Connecting: case KIRC::Engine::Authentifying: if (this == ircAccount()->mySelf()) newStatus = m_protocol->m_UserStatusConnecting; else newStatus = m_protocol->m_UserStatusOffline; break; case KIRC::Engine::Connected: case KIRC::Engine::Closing: if (mInfo.away) newStatus = m_protocol->m_UserStatusAway; else if (mInfo.online) newStatus = m_protocol->m_UserStatusOnline; break; default: newStatus = m_protocol->m_StatusUnknown; } // Try hard not to emit several onlineStatusChanged() signals. bool onlineStatusChanged = false; /* The away status is global, so if the user goes away, we must set * the new status on all channels. */ // This may not be created yet ( for myself() on startup ) if( ircAccount()->contactManager() ) { QValueList<IRCChannelContact*> channels = ircAccount()->contactManager()->findChannelsByMember(this); for( QValueList<IRCChannelContact*>::iterator it = channels.begin(); it != channels.end(); ++it ) { IRCChannelContact *channel = *it; Kopete::OnlineStatus currentStatus = channel->manager()->contactOnlineStatus(this); //kdDebug(14120) << k_funcinfo << "iterating channel " << channel->nickName() << " internal status: " << currentStatus.internalStatus() << endl; if( currentStatus.internalStatus() >= IRCProtocol::Online ) { onlineStatusChanged = true; if( !(currentStatus.internalStatus() & IRCProtocol::Away) && newStatus == m_protocol->m_UserStatusAway ) { setOnlineStatus( newStatus ); //kdDebug(14120) << k_funcinfo << "was NOT away, but is now, channel " << channel->nickName() << endl; adjustInternalOnlineStatusBits(channel, IRCProtocol::Away, AddBits); } else if( (currentStatus.internalStatus() & IRCProtocol::Away) && newStatus == m_protocol->m_UserStatusOnline ) { setOnlineStatus( newStatus ); //kdDebug(14120) << k_funcinfo << "was away, but not anymore, channel " << channel->nickName() << endl; adjustInternalOnlineStatusBits(channel, IRCProtocol::Away, RemoveBits); } else if( newStatus.internalStatus() < IRCProtocol::Away ) { //kdDebug(14120) << k_funcinfo << "offline or connecting?" << endl; channel->manager()->setContactOnlineStatus( this, newStatus ); } } } } if (!onlineStatusChanged) { //kdDebug(14120) << k_funcinfo << "setting status at last" << endl; setOnlineStatus( newStatus ); } }