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

📄 newstuff.cpp.svn-base

📁 okular
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
    displayMessage( i18n("Timeout. Check internet connection!"), Error );}void NewStuffDialog::slotSortingSelected( int sortType ) // SLOT{    d->itemsView->setSorting( sortType );}//BEGIN ProvidersList Loadingvoid NewStuffDialog::slotLoadProvidersList(){    // delete an eventually pending job. note that this method should be called once!    if ( d->providersListJob.job )        d->providersListJob.job->kill();    // create a job that will feed providersList data    KIO::TransferJob * job = KIO::get( KUrl( PROVIDERS_URL ), false /*refetch*/, false /*progress*/ );    connect( job, SIGNAL( data( KIO::Job *, const QByteArray & ) ),             this, SLOT( slotProvidersListInfoData( KIO::Job *, const QByteArray & ) ) );    connect( job, SIGNAL( result( KJob * ) ),             this, SLOT( slotProvidersListResult( KJob * ) ) );    // create a job description and data holder    d->providersListJob.job = job;    d->providersListJob.receivedData = "";    // start the 'network watchdog timer'    d->networkTimer->start( 10*1000 );    // inform the user    displayMessage( i18n("Loading providers list...") );}void NewStuffDialog::slotProvidersListInfoData( KIO::Job * job, const QByteArray & data ){    // safety checks    if ( job != d->providersListJob.job || data.isEmpty() )        return;    // append the data buffer to the 'receivedData' string    d->providersListJob.receivedData.append( QString::fromUtf8( data ) );}void NewStuffDialog::slotProvidersListResult( KJob * job ){    // discard contents from older jobs    if ( d->providersListJob.job != job )        return;    // stop network watchdog    d->networkTimer->stop();    // discard job pointer (will be deleted by itself)    d->providersListJob.job = 0;    // if there are no errors parse dom from xml data    QDomDocument doc;    if ( job->error() || d->providersListJob.receivedData.isEmpty() )    {        displayMessage( i18n("Network: Error loading the list of providers!"), Error );        return;    }    else if ( d->providersListJob.receivedData.contains("404 Not Found") )    {        displayMessage( i18n("Network: Cannot find the list of providers!"), Error );        return;    }    else if ( !doc.setContent( d->providersListJob.receivedData ) )    {        displayMessage( i18n("Problems reading the list of providers. Please retry later."), Info );        return;    }    // clear the current list of providers    QList< Provider * >::iterator it = d->providers.begin(), iEnd = d->providers.end();    for ( ; it != iEnd; ++it )        delete *it;    d->providers.clear();    d->typeCombo->clear();    // fill in the list of providers    QDomNode providerNode = doc.documentElement().firstChild();    while ( !providerNode.isNull() )    {        QDomElement elem = providerNode.toElement();        providerNode = providerNode.nextSibling();        if ( elem.tagName() == "provider" )            d->providers.append( new Provider( elem ) );    }    // inform user about providers in the list    if ( d->providers.count() < 1 )    {        displayMessage( i18n("No providers available at the moment. Please retry later."), Info );        return;    }    else        displayMessage( i18n("Loaded %1 providers", d->providers.count() ) );    // update the providers ComboBox    for ( it = d->providers.begin(), iEnd = d->providers.end(); it != iEnd; ++it )    {        const Provider * provider =  *it;        // provider icon: using local KIconLoader, not loading from remote url        QIcon icon = DesktopIconSet( provider->icon().url(), 16 );        QString name = provider->name();        // insert provider in combo        d->typeCombo->addItem( icon, name );    }    // automatically load the first provider    d->typeCombo->setEnabled( true );    d->typeCombo->setCurrentIndex( 0 );    QTimer::singleShot( 500, this, SLOT( slotLoadProvider() ) );}//END ProvidersList Loading//BEGIN Provider contents Loadingvoid NewStuffDialog::slotLoadProvider( int pNumber ){    // safety check    if ( !d->typeCombo->isEnabled() || pNumber < 0 || pNumber >= (int)d->providers.count() )    {        displayMessage( i18n("Error with this provider"), Error );        return;    }    // create a job that will feed provider data    const Provider * provider = d->providers[ pNumber ];    KIO::TransferJob * job = KIO::get( provider->downloadUrl(), false /*refetch*/, false /*progress*/ );    connect( job, SIGNAL( data( KIO::Job *, const QByteArray & ) ),             this, SLOT( slotProviderInfoData( KIO::Job *, const QByteArray & ) ) );    connect( job, SIGNAL( result( KJob * ) ),             this, SLOT( slotProviderInfoResult( KJob * ) ) );    // create a job description and data holder    ProviderJobInfo info;    d->providerJobs[ job ] = info;    // inform the user    displayMessage( i18n( "Loading %1...", provider->name() ) );    // start the 'network watchdog timer'    d->networkTimer->start( 30*1000 );    // block any possible recourring calls while we're running    d->typeCombo->setEnabled( false );}void NewStuffDialog::slotProviderInfoData( KIO::Job * job, const QByteArray & data ){    // safety checks    if ( data.isEmpty() || !d->providerJobs.contains( job ) )        return;    // append the data buffer to the 'receivedData' string    d->providerJobs[ job ].receivedData.append( QString::fromUtf8( data ) );}void NewStuffDialog::slotProviderInfoResult( KJob * job ){    // stop network watchdog    d->networkTimer->stop();    // enable gui controls    d->typeCombo->setEnabled( true );    d->sortCombo->setEnabled( true );    // safety check    if ( job->error() || !d->providerJobs.contains( job ) ||         d->providerJobs[ job ].receivedData.isEmpty() ||         d->providerJobs[ job ].receivedData.contains("404 Not Found") )    {        d->providerJobs.remove( job );        displayMessage( i18n("Error loading provider description!"), Error );        return;    }    // build XML DOM from the received data    QDomDocument doc;    bool docOk = doc.setContent( d->providerJobs[ job ].receivedData );    d->providerJobs.remove( job );    if ( !docOk )    {        displayMessage( i18n("Problems parsing provider description."), Info );        return;    }    // create AvailableItem(s) based on the knewstuff.dtd    AvailableItem::List itemList;    QDomNode stuffNode = doc.documentElement().firstChild();    while ( !stuffNode.isNull() )    {        QDomElement elem = stuffNode.toElement();        stuffNode = stuffNode.nextSibling();        // WARNING: disabled the stuff type checking (use only in kate afaik)        if ( elem.tagName() == "stuff" /*&& elem.attribute( "type", RES_TYPE ) == RES_TYPE*/ )            itemList.append( new AvailableItem( elem ) );    }    // update the control widget and inform user about the current operation    d->itemsView->setItems( itemList );    if ( itemList.count() )        displayMessage( i18n("There are %1 resources available.", itemList.count() ) );    else        displayMessage( i18n("No resources available on this provider." ) );}//END Provider contents loading//BEGIN File(s) Transferringvoid NewStuffDialog::slotDownloadItem( AvailableItem * item ){    // create a job that will download the file    KIO::FileCopyJob * job = KIO::file_copy( item->url(), item->destinationPath(),        -1 /*perms*/, true /*overwrite*/, false /*resume*/, false /*showProgressInfo*/ );    connect( job, SIGNAL( infoMessage( KJob *, const QString & ) ),             this, SLOT( slotItemMessage( KJob *, const QString & ) ) );    connect( job, SIGNAL( percent ( KJob *, unsigned long ) ),             this, SLOT( slotItemPercentage( KJob *, unsigned long ) ) );    connect( job, SIGNAL( result( KJob * ) ),             this, SLOT( slotItemResult( KJob * ) ) );    // create a job description and data holder    ItemTransferInfo info;    info.item = item;    d->transferJobs[ job ] = info;    // update item status    item->setState( AvailableItem::Installing );    item->setProgress( 0.0 );    d->itemsView->updateItem( item );    // inform the user    displayMessage( i18n( "Installing '%1', this could take some time ...", item->name() ) );}void NewStuffDialog::slotItemMessage( KJob * job, const QString & message ){    // safety check    if ( !d->transferJobs.contains( job ) )        return;    // update item state    AvailableItem * item = d->transferJobs[ job ].item;    kDebug() << "Name: " << item->name() << " msg: '" << message << "'." << endl;    d->itemsView->updateItem( item );}void NewStuffDialog::slotItemPercentage( KJob * job, unsigned long percent ){    // safety check    if ( !d->transferJobs.contains( job ) )        return;    // update item state    AvailableItem * item = d->transferJobs[ job ].item;    item->setProgress( (float)percent / 100.0 );    d->itemsView->updateItem( item );}void NewStuffDialog::slotItemResult( KJob * job ){    // safety check    if ( !d->transferJobs.contains( job ) )        return;    // get item and remove job    AvailableItem * item = d->transferJobs[ job ].item;    d->transferJobs.remove( job );    // error handling    if ( job->error() )    {        displayMessage( i18n( "Network error while retrieving %1. Installation canceled.", item->name() ), Error );        return;    }    // update item state    item->setState( AvailableItem::Normal );    item->setProgress( 100.0 );    d->itemsView->updateItem( item );    /* UNCOMPRESS (specify uncompression method)    KTar tar( fileName, "application/x-gzip" );    tar.open( QIODevice::ReadOnly );    const KArchiveDirectory *dir = tar.directory();    dir->copyTo( "somedir" );    tar.close();    QFile::remove( fileName );    */    /* EXECUTE (specify the 'cmd' command)    QStringList list = QStringList::split( " ", cmd ),                list2;    for ( QStringList::iterator it = list.begin(); it != list.end(); it++ )        list2 << (*it).replace("%f", fileName);    KProcess proc;    proc << list2;    proc.start( KProcess::Block );    */    // inform the user ...    displayMessage( i18n( "Installed! %1 is yours now.", item->name() ), Info );    // ... and any listening object    emit installedFile( item->name(), item->category() );}//END File(s) Transferring#include "newstuff.moc"

⌨️ 快捷键说明

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