Exemplo n.º 1
0
void KonqMultiRestoreJob::slotStart()
{
    if (m_urlsIterator == m_urls.begin())   // first time: emit total
        setTotalAmount(KJob::Files, m_urls.count());

    if (m_urlsIterator != m_urls.end()) {
        const QUrl &url = *m_urlsIterator;

        QUrl new_url = url;
        if (new_url.scheme() == QStringLiteral("system") &&
                new_url.path().startsWith(QLatin1String("/trash"))) {
            QString path = new_url.path();
            path.remove(0, 6);
            new_url.setScheme(QStringLiteral("trash"));
            new_url.setPath(path);
        }

        Q_ASSERT(new_url.scheme() == QStringLiteral("trash"));
        QByteArray packedArgs;
        QDataStream stream(&packedArgs, QIODevice::WriteOnly);
        stream << (int)3 << new_url;
        KIO::Job* job = KIO::special(new_url, packedArgs, KIO::HideProgressInfo);
        addSubjob(job);
        setProcessedAmount(KJob::Files, processedAmount(KJob::Files) + 1);
    } else { // done!
        emitResult();
    }
}
Exemplo n.º 2
0
void KSecretChangeAuthenticationCollectionJob::start()
{
    CollectionUnlockInfo unlockInfo( peer() );
    UnlockCollectionJob *unlockJob = collection()->createUnlockJob( unlockInfo );
    connect( unlockJob, SIGNAL(finished(KJob*)), this, SLOT(slotUnlockResult(KJob*)) );
    if (addSubjob( unlockJob )) {
        unlockJob->start();
    }
    else {
        qDebug() << "Failed to add unlock subjob";
        setError(BackendErrorOther, i18n("Cannot start secret collection unlocking"));
    }
}
Exemplo n.º 3
0
void KSecretCreateCollectionJob::newPasswordJobResult(KJob *job)
{
    AbstractNewPasswordJob *npj = qobject_cast<AbstractNewPasswordJob*>(job);
    Q_ASSERT(npj);

    if(npj->cancelled()) {
        setCollection(0);
        setError(BackendErrorOther, i18n("Creating the secret collection was cancelled by the user."));
        dismiss(); // this will also emitResult()
        return;
    }

    // TODO: collection needs authentication methods, filenames, ...
    QString errorMessage;
    QString collId = createId();
    manager()->creatingCollection( collId );
    KSecretCollection *coll = KSecretCollection::create(collId, npj->password(),
                              manager(), errorMessage);
    if(!coll) {
        setCollection(0);
        setError(BackendErrorOther, errorMessage);
        dismiss(); // this will also emitResult()
        return;
    }
    coll->setLabel(label());

    // NOTE: coll has to be added to m_collections before serializing it for the
    //       first time, so when slotDirectoryChanged is called, the collection
    //       is already known.
    m_manager->addCollection(coll);

    if(locked()) {
        coll->lock();
    }

    setCollection(coll);
    // not yet time for  emitResult(); 
    // let the ACL dialog to pop before 
    AbstractUiManager *uiManager = BackendMaster::instance()->uiManager();
    AbstractAskAclPrefsJob *aclSubjob = uiManager->createAskAclPrefsJob(createCollectionInfo());
    if ( addSubjob( aclSubjob ) ) {
        connect(aclSubjob, SIGNAL(result(KJob*)),
                SLOT(askAclPrefsJobResult(KJob*)));
        aclSubjob->start();
    }
    else {
        qDebug() << "Cannot add aclSubjob";
        setErrorText( i18n("Cannot launch ACL preferences job") );
        emitResult();
    }
}
Exemplo n.º 4
0
void KSecretCreateCollectionJob::start()
{
    // start a job for getting a new password for the collection from the user.
    AbstractUiManager *uiManager = BackendMaster::instance()->uiManager();
    AbstractNewPasswordJob *subJob = uiManager->createNewPasswordJob(label());
    if ( addSubjob( subJob ) ) {
        connect(subJob, SIGNAL(result(KJob*)),
                SLOT(newPasswordJobResult(KJob*)));
        subJob->start();
    }
    else {
        qDebug() << "Cannot start password subJob";
        setErrorText( i18n("Cannot change password due to an internal error.") );
        emitResult();
    }
}
Exemplo n.º 5
0
void BatchExtract::addExtraction(const QUrl& url)
{
    QString destination = destinationFolder();

    auto job = Kerfuffle::Archive::batchExtract(url.toLocalFile(), destination, autoSubfolder(), preservePaths());

    qCDebug(ARK) << QString(QStringLiteral("Registering job from archive %1, to %2, preservePaths %3")).arg(url.toLocalFile(), destination, QString::number(preservePaths()));

    addSubjob(job);

    m_fileNames[job] = qMakePair(url.toLocalFile(), destination);

    connect(job, SIGNAL(percent(KJob*,ulong)),
            this, SLOT(forwardProgress(KJob*,ulong)));
    connect(job, &Kerfuffle::BatchExtractJob::userQuery,
            this, &BatchExtract::slotUserQuery);
}
Exemplo n.º 6
0
void KSecretUnlockCollectionJob::askPasswordJobResult(KJob *job)
{
    AbstractAskPasswordJob *apj = qobject_cast<AbstractAskPasswordJob*>(job);
    Q_ASSERT(apj);

    if(apj->cancelled()) {
        setResult(false);
        setError(BackendErrorOther, i18n("Unlocking the secret collection was canceled by the user."));
        emitResult();
        return;
    }

    KSecretCollection *ksecretColl = dynamic_cast< KSecretCollection* >(collection());
    BackendReturn<bool> rc = ksecretColl->tryUnlockPassword(apj->password());
    if(rc.isError()) {
        setResult(false);
        setError(rc.error(), rc.errorMessage());
        emitResult();
    } else if(!rc.value()) {
        // try again the password
        createAskPasswordJob();
    } else {
        m_passwordAsked = true;
    
        m_collectionPerm = collection()->applicationPermission( unlockInfo().m_peer.exePath() );
        if ( m_collectionPerm == PermissionUndefined ) {
            // ask for the ACL preference if the application is unknown by this collection
            AbstractUiManager *uiManager = BackendMaster::instance()->uiManager();
            AbstractAskAclPrefsJob* askAclPrefsJob = uiManager->createAskAclPrefsJob(unlockInfo());
            connect(askAclPrefsJob, SIGNAL(result(KJob*)), SLOT(askAclPrefsJobResult(KJob*)));
            if ( addSubjob( askAclPrefsJob ) ) {
                askAclPrefsJob->start();        
            }
            else {
                setResult(false);
                emitResult();
            }
        }
        else {
            setResult(true);
            emitResult();
        }
    }
}
Exemplo n.º 7
0
ApplyViewPropsJob::ApplyViewPropsJob(const QUrl& dir,
                                     const ViewProperties& viewProps) :
    KIO::Job(),
    m_viewProps(0),
    m_progress(0),
    m_dir(dir)
{
    m_viewProps = new ViewProperties(dir);
    m_viewProps->setViewMode(viewProps.viewMode());
    m_viewProps->setPreviewsShown(viewProps.previewsShown());
    m_viewProps->setHiddenFilesShown(viewProps.hiddenFilesShown());
    m_viewProps->setSortRole(viewProps.sortRole());
    m_viewProps->setSortOrder(viewProps.sortOrder());

    KIO::ListJob* listJob = KIO::listRecursive(dir, KIO::HideProgressInfo);
    connect(listJob, &KIO::ListJob::entries,
            this, &ApplyViewPropsJob::slotEntries);
    addSubjob(listJob);
}
Exemplo n.º 8
0
void KSecretUnlockCollectionJob::createAskPasswordJob()
{
    if ( !m_passwordAsked ) {
        AbstractUiManager *uiManager = BackendMaster::instance()->uiManager();
        // start a job for getting the password for the collection from the user.
        AbstractAskPasswordJob *subJob = uiManager->createAskPasswordJob(collection()->label().value(),
                                        !m_firstTry);
        if ( addSubjob( subJob ) ) {
            connect(subJob, SIGNAL(result(KJob*)), SLOT(askPasswordJobResult(KJob*)));

            // TODO: handle severaly retries
            subJob->start();
            m_firstTry = false;
        }
        else {
            qDebug() << "Cannot add subJob";
            setErrorText(i18n("Cannot launch asking password job"));
            emitResult();
        }
    }
}
Exemplo n.º 9
0
void CreateCollectionMasterJob::start()
{
    if(m_master->managers().count() == 0) {
        setError(BackendErrorOther, i18n("No backend to create the collection was found."));
        emitResult();
    } else if(m_master->managers().count() == 1) {
        Q_ASSERT(!m_subJob);
        m_subJob = m_master->managers().first()->createCreateCollectionJob(m_createCollectionInfo);
        connect(m_subJob, SIGNAL(result(KJob*)),
                SLOT(createCollectionJobFinished(KJob*)));
        if (addSubjob(m_subJob)) {
            m_subJob->start();
        }
        else {
            setError(BackendErrorOther, i18n("Cannot start subjob."));
            emitResult();
        }
    } else {
        setError(BackendErrorOther, i18n("Not implemented."));
        emitResult();
    }
}