void MailboxReader::execute() { while ( q->hasResults() ) { Row * r = q->nextRow(); UString n = r->getUString( "name" ); uint id = r->getInt( "id" ); Mailbox * m = ::mailboxes->find( id ); if ( !m || m->name() != n ) { m = Mailbox::obtain( n ); if ( n != m->d->name ) m->d->name = n; m->setId( id ); ::mailboxes->insert( id, m ); } if ( r->getBoolean( "deleted" ) ) m->setType( Mailbox::Deleted ); else m->setType( Mailbox::Ordinary ); uint uidvalidity = r->getInt( "uidvalidity" ); if ( m->d->uidvalidity != uidvalidity ) { m->d->uidvalidity = uidvalidity; m->abortSessions(); } if ( !r->isNull( "owner" ) ) m->setOwner( r->getInt( "owner" ) ); m->setUidnextAndNextModSeq( r->getInt( "uidnext" ), r->getBigint( "nextmodseq" ), q->transaction() ); m->setFlag( r->getEString( "flag" ) ); } if ( !q->done() || done ) return; done = true; if ( q->transaction() ) q->transaction()->commit(); ::readers->remove( this ); ::wiped = false; if ( q->failed() && !EventLoop::global()->inShutdown() ) { List<Mailbox> * c = Mailbox::root()->children(); if ( c && !c->isEmpty() ) log( "Couldn't update mailbox tree: " + q->error() ); else log( "Couldn't create mailbox tree: " + q->error(), Log::Disaster ); } if ( owner ) owner->execute(); };