bool GetStatusTask::take( Transfer * transfer ) { if ( !forMe( transfer ) ) return false; Response * response = dynamic_cast<Response *>( transfer ); if ( !response ) return false; Field::FieldList responseFields = response->fields(); responseFields.dump( true ); // parse received details and signal like billio Field::SingleField * sf = 0; Q_UINT16 status; sf = responseFields.findSingleField( NM_A_SZ_STATUS ); if ( sf ) { // As of Sept 2004 the server always responds with 2 (Available) here, even if the sender is not // This must be because the sender is not on our contact list but has sent us a message. // TODO: Check that the change to sending DNs above has fixed this problem. status = sf->value().toInt(); // unfortunately getstatus doesn't give us an away message so we pass QString::null here emit gotStatus( m_userDN, status, QString::null ); setSuccess(); } else setError(); return true; }
bool ModifyContactListTask::take( Transfer * transfer ) { if ( !forMe( transfer ) ) return false; Response * response = dynamic_cast<Response *>( transfer ); if ( !response ) return false; client()->debug( "ModifyContactListTask::take()" ); // scan the contact list received // emit each add and delete as a signal Field::FieldList fl = response->fields(); fl.dump( true ); Field::FieldListIterator it = fl.begin(); Field::FieldListIterator end = fl.end(); Field::MultiField * current = fl.findMultiField( NM_A_FA_RESULTS ); if ( current ) fl = current->fields(); current = fl.findMultiField( NM_A_FA_CONTACT_LIST ); if ( current ) { Field::FieldList contactList = current->fields(); Field::FieldListIterator cursor = contactList.begin(); const Field::FieldListIterator end = contactList.end(); while ( cursor != end ) { Field::MultiField * mf = dynamic_cast< Field::MultiField * >( *cursor ); if ( mf->tag() == NM_A_FA_CONTACT ) { // contact change processContactChange( mf ); } else if ( mf->tag() == NM_A_FA_FOLDER ) { // folder change processFolderChange( mf ); } ++cursor; } } // TODO: call virtual here to read any fields after the contact list... if ( response->resultCode() == GroupWise::None ) setSuccess(); else setError( response->resultCode() ); return true; }