⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jobclasses.cpp

📁 konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版本源码包.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    m_mimetype = "";    m_firstdata = true;    KIO_ARGS << m_outgoingMetaData;    m_slave->send( CMD_META_DATA, packedArgs );    SimpleJob::start( slave );}void TransferJob::kill(){// hmmm, disabled this check for now. it breaks 'stop'// (Simon)//    if ( m_detached )//        return;    SimpleJob::kill();}void TransferJob::detach( const QByteArray &cachedData ){    assert( !m_detached );    m_detached = true;    if ( !s_detachedJobs )        s_detachedJobs = new QPtrList<TransferJob>;    assert( s_detachedJobs->findRef( this ) == -1 );    s_detachedJobs->append( this );    m_cachedData.clear();    m_cachedData << cachedData;}void TransferJob::attach(){    assert( s_detachedJobs );    assert( m_detached );    assert( s_detachedJobs->findRef( this ) != -1 );    m_detached = false;    s_detachedJobs->removeRef( this );    QTimer::singleShot( 0, this, SLOT( slotEmitCachedData() ) );    m_cachedDataEmitted = false;}void TransferJob::slotEmitCachedData(){    // ### re-check this    while ( m_cachedData.count() > 0 )    {        QByteArray stuff = *m_cachedData.begin();        m_cachedData.remove( m_cachedData.begin() );        // ### do we need to check for redirection and the like, like in receiveData() ??	recurseEnter();	emit data( this, stuff );	if ( recurseExit() )	    return;    }    m_cachedDataEmitted = true;    if ( m_finishAfterCacheEmit ) // we are done    {	// peri, QTimer::singleShot( 0, this, SLOT( slaveFinished() ) );	// it is not required, here we are it means, slaveFinsihed is called	// code copied from the 'slaveFinished'    	if ( m_redirectionURL.isEmpty() || !m_redirectionURL.isValid() || m_error )            SimpleJob::slaveFinished();        else        {            kdDebug() << "performing redirection" << endl;            m_staticData.truncate( 0 );            m_url = m_redirectionURL;            m_redirectionURL = KURL();            KURL dummyURL;            QString dummyString;            switch ( m_command )            {                case CMD_GET:                    {                        kdDebug() << "CMD_GET redirection" << endl;                        m_packedArgs.truncate( 0 );                        QDataStream stream( m_packedArgs, IO_WriteOnly );                        stream << m_url;                    }                    break;                case CMD_SPECIAL:                    {                        kdDebug() << "HTTP_POST redirection" << endl;                        int specialcmd;                        QDataStream istream( m_packedArgs, IO_ReadOnly );                        istream >> specialcmd;                        assert( specialcmd == 1 );                        addMetaData( "cache", "reload" );                        m_packedArgs.truncate( 0 );                        QDataStream stream( m_packedArgs, IO_WriteOnly );                        stream << m_url;                        m_command = CMD_GET;                    }                    break;                default: assert( 0 );            }             QTimer::singleShot( 0, this, SLOT( slotRedirectDelayed() ) );        }        return;    } }TransferJob *TransferJob::findDetachedJobForURL( const KURL &url ){    if ( !s_detachedJobs )        return 0;    QPtrListIterator<TransferJob> it( *s_detachedJobs );    for ( ; it.current(); ++it )        if ( it.current()->url() == url && !it.current()->isDestructing() )            return it.current();    return 0;}void TransferJob::dataReq(){    m_slave->send( MSG_DATA, m_staticData );    m_staticData = QByteArray();}void TransferJob::slaveRedirection( const KURL &url ){    if ( m_redirectionList.contains( url ) > 5 )    {        m_error = ERR_CYCLIC_LINK;        m_errorText = url.prettyURL();    }    else    {        kdDebug() << "redirection #1 : " << url.prettyURL() << endl;        m_redirectionURL = url;        m_redirectionList.append( url );        emit redirection( this, url );    }}void TransferJob::slaveFinished(){    m_slave->disconnect( this );    // if we are detached then don't kill us.    // also it could happen that the SST for the re-mission of the    // cached data is pending and right before that we get called    // here. so we need to sort that out here.    if ( m_detached || m_cachedData.count() > 0 )    {	Scheduler::self()->releaseJob( this );	m_finishAfterCacheEmit = true;	return;    }    kdDebug() << "_finished" << endl;    if ( m_redirectionURL.isEmpty() || !m_redirectionURL.isValid() || m_error )        SimpleJob::slaveFinished();    else    {        kdDebug() << "performing redirection" << endl;        m_staticData.truncate( 0 );        m_url = m_redirectionURL;        m_redirectionURL = KURL();        KURL dummyURL;        QString dummyString;        switch ( m_command )        {            case CMD_GET:            {                kdDebug() << "CMD_GET redirection" << endl;                m_packedArgs.truncate( 0 );                QDataStream stream( m_packedArgs, IO_WriteOnly );                stream << m_url;            }            break;            case CMD_SPECIAL:            {                kdDebug() << "HTTP_POST redirection" << endl;                int specialcmd;                QDataStream istream( m_packedArgs, IO_ReadOnly );                istream >> specialcmd;                assert( specialcmd == 1 );                addMetaData( "cache", "reload" );                m_packedArgs.truncate( 0 );                QDataStream stream( m_packedArgs, IO_WriteOnly );                stream << m_url;                m_command = CMD_GET;            }            break;            default: assert( 0 );        }        QTimer::singleShot( 0, this, SLOT( slotRedirectDelayed() ) );    }}void TransferJob::slotRedirectDelayed(){    kdDebug() << "slotRedirectDelayed()" << endl;    // ### optimize this    Scheduler::self()->releaseJob( this );    Scheduler::self()->doJob( this );}void TransferJob::filteredData( const QByteArray &dat ){    if ( m_redirectionURL.isEmpty() || !m_redirectionURL.isValid() || m_error )    {        if ( m_detached )            m_cachedData << dat;        else        {            // do we have data pending? if yes, then just append ;)            if ( m_cachedData.count() > 0 && !m_cachedDataEmitted )                m_cachedData << dat;            else		emit data( this, dat );        }    }}void TransferJob::receiveData( const QByteArray &dat ){    if ( m_firstdata )    {	m_firstdata = false;	if ( m_mimetype.isEmpty() )	{	    // Try cheapest solution first	    const MimeHandler* mime = MimeHandler::Find( m_url );	    if ( !mime ) mime = MimeHandler::Find( dat );	    if ( mime )	    {		mimeRules( mime );		if ( m_mimetype.isEmpty() )		    m_mimetype = mime->Preferred();		recurseEnter();		emit mimetype( this, m_mimetype );		if ( recurseExit() )		    return;	    }	}    }    recurseEnter();    if ( m_filter )	m_filter->dataInput( dat );    else	filteredData( dat );    recurseExit();}void TransferJob::mimeRules( const MimeHandler* mime ){    if ( mime )    {	if ( mime->isFilter() )	    AddFilter( mime->isFilter() );	else if ( mime->isAlias() )	    m_mimetype = mime->isAlias()->outputType();    }}bool TransferJob::AddFilter( const MimeFilter* filter ){    if ( m_filter )	return false;    m_filter = filter->createFilter( m_mimetype, m_url );    if ( m_filter )    {	m_mimetype = m_filter->outputType();	if ( m_mimetype.isEmpty() )	    m_mimetype = filter->outputType();	QObject::connect( m_filter, SIGNAL( dataOutput( const QByteArray & ) ),                          this, SLOT( filteredData( const QByteArray & ) ) );	return true;    }    return false;}StatJob::StatJob(const KURL &url, int command,         const QByteArray &packedArgs, bool showProgressInfo)    : TransferJob(url, command, packedArgs, QByteArray(), showProgressInfo){}#include "jobclasses.moc"/* vim: et sw=4 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -