void AsyncFileTester::statResult(KJob *job) { if (object && !job->error()) { KIO::StatJob *statJob = static_cast<KIO::StatJob*>(job); callResultMethod(object.data(), member, index, statJob->statResult().isDir()); } deleteLater(); }
void KSysinfoPart::slotResult( KIO::Job *job ) { KIO::StatJob *sjob = dynamic_cast<KIO::StatJob*>( job ); if (!job) return; KFileItem item(sjob->statResult(), sjob->url()); KFileItemList list; list.append(&item); emit browserExtension()->popupMenu( 0, QCursor::pos(), list ); }
void KonqRun::init() { KParts::BrowserRun::init(); // Maybe init went to the "let's try stat'ing" part. Then connect to info messages. // (in case it goes to scanFile, this will be done below) KIO::StatJob *job = dynamic_cast<KIO::StatJob*>(KRun::job()); if (job && !job->error() && m_pView) { connect(job, SIGNAL(infoMessage(KJob*,QString,QString)), m_pView, SLOT(slotInfoMessage(KJob*,QString))); } }
bool ExportManager::isFileExists(const QUrl &url) { if (!(url.isValid())) { return false; } KIO::StatJob * existsJob = KIO::stat(url, KIO::StatJob::DestinationSide, 0); existsJob->exec(); return (existsJob->error() == KJob::NoError); }
bool NetAccess::statInternal( const KUrl & url, int details, StatSide side, QWidget* window ) { d->bJobOK = true; // success unless further error occurs KIO::JobFlags flags = url.isLocalFile() ? KIO::HideProgressInfo : KIO::DefaultFlags; KIO::StatJob * job = KIO::stat( url, flags ); job->ui()->setWindow (window); job->setDetails( details ); job->setSide( side == SourceSide ? StatJob::SourceSide : StatJob::DestinationSide ); connect( job, SIGNAL( result (KJob *) ), this, SLOT( slotResult (KJob *) ) ); enter_loop(); return d->bJobOK; }
KUrl KDirSelectDialog::url() const { KUrl comboUrl(d->m_urlCombo->currentText()); if ( comboUrl.isValid() ) { KIO::StatJob *statJob = KIO::stat(comboUrl, KIO::HideProgressInfo); const bool ok = KIO::NetAccess::synchronousRun(statJob, d->m_parent); if (ok && statJob->statResult().isDir()) { return comboUrl; } } kDebug() << comboUrl.path() << " is not an accessible directory"; return d->m_treeView->currentUrl(); }
bool KPlatoWork_MainWindow::openDocument(const QUrl & url) { // TODO: m_part->openUrl will find out about this as well, no? KIO::StatJob* statJob = KIO::stat( url ); statJob->setSide( KIO::StatJob::SourceSide ); const bool isUrlReadable = statJob->exec(); if (! isUrlReadable) { KMessageBox::error(0L, i18n("The file %1 does not exist.", url.url())); // d->recent->removeUrl(url); //remove the file from the recent-opened-file-list // saveRecentFiles(); return false; } return m_part->openUrl( url ); }
/* return true if the url exists*/ bool QExtFileInfo::internalExists(const KURL& url) { bJobOK = true; // kdDebug(24000)<<"QExtFileInfo::internalExists"<<endl; KIO::StatJob * job = KIO::stat( url, false); job->setDetails(0); job->setSide(false); //check the url for writing connect( job, SIGNAL( result (KIO::Job *) ), this, SLOT( slotResult (KIO::Job *) ) ); //To avoid lock-ups, start a timer. QTimer::singleShot(60*1000, this,SLOT(slotTimeout())); // kdDebug(24000)<<"QExtFileInfo::internalExists:before enter_loop"<<endl; enter_loop(); // kdDebug(24000)<<"QExtFileInfo::internalExists:after enter_loop"<<endl; return bJobOK; }
void RecentDocuments::listDir(const QUrl& url) { if (isRootUrl(url)) { QStringList list = KRecentDocument::recentDocuments(); KIO::UDSEntryList udslist; QSet<QString> urlSet; Q_FOREACH(const QString & entry, list) { if (KDesktopFile::isDesktopFile(entry)) { QFileInfo info(entry); KDesktopFile file(entry); QUrl urlInside(file.readUrl()); QString toDisplayString = urlInside.toDisplayString(); if (urlInside.scheme() == "recentdocuments" || urlSet.contains(toDisplayString)) continue; KIO::UDSEntry uds; if (urlInside.isLocalFile()) { KIO::StatJob* job = KIO::stat(urlInside, KIO::HideProgressInfo); // we do not want to wait for the event loop to delete the job QScopedPointer<KIO::StatJob> sp(job); job->setAutoDelete(false); if (KIO::NetAccess::synchronousRun(job, 0)) { uds = job->statResult(); } } urlSet.insert(toDisplayString); uds.insert(KIO::UDSEntry::UDS_NAME, info.completeBaseName()); if (urlInside.isLocalFile()) { uds.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, urlInside.toLocalFile()); uds.insert(KIO::UDSEntry::UDS_LOCAL_PATH, urlInside.path()); } else { uds.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, toDisplayString); uds.insert(KIO::UDSEntry::UDS_ICON_NAME, file.readIcon()); } uds.insert(KIO::UDSEntry::UDS_TARGET_URL, toDisplayString); udslist << uds; } } listEntries(udslist); finished(); } else
static QUrl getNewFileName(const QUrl &u, const QString &text, const QString &suggestedFileName, QWidget *widget) { bool ok; QString dialogText(text); if (dialogText.isEmpty()) { dialogText = i18n("Filename for clipboard content:"); } QString file = QInputDialog::getText(widget, QString(), dialogText, QLineEdit::Normal, suggestedFileName, &ok); if (!ok) { return QUrl(); } QUrl myurl(u); myurl.setPath(myurl.path() + '/' + file); KIO::StatJob *job = KIO::stat(myurl, myurl.isLocalFile() ? KIO::HideProgressInfo : KIO::DefaultFlags); job->setDetails(0); job->setSide(KIO::StatJob::DestinationSide); KJobWidgets::setWindow(job, widget); // Check for existing destination file. // When we were using CopyJob, we couldn't let it do that (would expose // an ugly tempfile name as the source URL) // And now we're using a put job anyway, no destination checking included. if (job->exec()) { //qDebug() << "Paste will overwrite file. Prompting..."; KIO::RenameDialog dlg(widget, i18n("File Already Exists"), u, myurl, KIO::RenameDialog_Overwrite); KIO::RenameDialog_Result res = static_cast<KIO::RenameDialog_Result>(dlg.exec()); if (res == KIO::Result_Rename) { myurl = dlg.newDestUrl(); } else if (res == KIO::Result_Cancel) { return QUrl(); } else if (res == KIO::Result_Overwrite) { // OK, proceed } } return myurl; }
QUrl setUpRemoteTestDir(const QString& testFile) { QWidget* authWindow = 0; if (qgetenv("GV_REMOTE_TESTS_BASE_URL").isEmpty()) { qWarning() << "Environment variable GV_REMOTE_TESTS_BASE_URL not set: remote tests disabled"; return QUrl(); } QUrl baseUrl(QString::fromLocal8Bit(qgetenv("GV_REMOTE_TESTS_BASE_URL"))); baseUrl = baseUrl.adjusted(QUrl::StripTrailingSlash); baseUrl.setPath(baseUrl.path() + "/gwenview-remote-tests"); KIO::StatJob *statJob = KIO::stat(baseUrl, KIO::StatJob::DestinationSide, 0); KJobWidgets::setWindow(statJob, authWindow); if (statJob->exec()) { KIO::DeleteJob *deleteJob = KIO::del(baseUrl); KJobWidgets::setWindow(deleteJob, authWindow); deleteJob->exec(); } KIO::MkdirJob *mkdirJob = KIO::mkdir(baseUrl); KJobWidgets::setWindow(mkdirJob, authWindow); if (!mkdirJob->exec()) { qCritical() << "Could not create dir" << baseUrl << ":" << mkdirJob->errorString(); return QUrl(); } if (!testFile.isEmpty()) { QUrl dstUrl = baseUrl; dstUrl = dstUrl.adjusted(QUrl::StripTrailingSlash); dstUrl.setPath(dstUrl.path() + '/' + testFile); KIO::FileCopyJob *copyJob = KIO::file_copy(urlForTestFile(testFile), dstUrl); KJobWidgets::setWindow(copyJob, authWindow); if (!copyJob->exec()) { qCritical() << "Could not copy" << testFile << "to" << dstUrl << ":" << copyJob->errorString(); return QUrl(); } } return baseUrl; }
void AccessManagerReply::slotStatResult(KJob* kJob) { if (jobError(kJob)) { emit error (error()); emitFinished(true); return; } KIO::StatJob* statJob = qobject_cast<KIO::StatJob*>(kJob); Q_ASSERT(statJob); KIO::UDSEntry entry = statJob->statResult(); QString mimeType = entry.stringValue(KIO::UDSEntry::UDS_MIME_TYPE); if (mimeType.isEmpty() && entry.isDir()) mimeType = QL1S("inode/directory"); if (!mimeType.isEmpty()) setHeader(QNetworkRequest::ContentTypeHeader, mimeType.toUtf8()); emitFinished(true); }
KIO::UDSEntry MediaImpl::extractUrlInfos(const KURL &url) { m_entryBuffer.clear(); KIO::StatJob *job = KIO::stat(url, false); job->setAutoWarningHandlingEnabled(false); connect(job, SIGNAL(result(KIO::Job *)), this, SLOT(slotStatResult(KIO::Job *))); connect(job, SIGNAL(warning(KIO::Job *, const QString &)), this, SLOT(slotWarning(KIO::Job *, const QString &))); qApp->eventLoop()->enterLoop(); KIO::UDSEntry::iterator it = m_entryBuffer.begin(); KIO::UDSEntry::iterator end = m_entryBuffer.end(); KIO::UDSEntry infos; for(; it != end; ++it) { switch((*it).m_uds) { case KIO::UDS_ACCESS: case KIO::UDS_USER: case KIO::UDS_GROUP: case KIO::UDS_CREATION_TIME: case KIO::UDS_MODIFICATION_TIME: case KIO::UDS_ACCESS_TIME: infos.append(*it); break; default: break; } } if(url.isLocalFile()) { addAtom(infos, KIO::UDS_LOCAL_PATH, 0, url.path()); } return infos; }
void GvCore::saveAs(const QUrl &url) { QByteArray format; QUrl saveAsUrl; if (!d->showSaveAsDialog(url, &saveAsUrl, &format)) { return; } // Check for overwrite KIO::StatJob *statJob = KIO::stat(saveAsUrl, KIO::StatJob::DestinationSide, 0); KJobWidgets::setWindow(statJob, d->mMainWindow); if (statJob->exec()) { int answer = KMessageBox::warningContinueCancel( d->mMainWindow, xi18nc("@info", "A file named <filename>%1</filename> already exists.\n" "Are you sure you want to overwrite it?", saveAsUrl.fileName()), QString(), KStandardGuiItem::overwrite()); if (answer == KMessageBox::Cancel) { return; } } // Start save Document::Ptr doc = DocumentFactory::instance()->load(url); KJob* job = doc->save(saveAsUrl, format.data()); if (!job) { const QString name = saveAsUrl.fileName().isEmpty() ? saveAsUrl.toDisplayString() : saveAsUrl.fileName(); const QString msg = xi18nc("@info", "<b>Saving <filename>%1</filename> failed:</b><br />%2", name, doc->errorString()); KMessageBox::sorry(QApplication::activeWindow(), msg); } else { connect(job, SIGNAL(result(KJob*)), SLOT(slotSaveResult(KJob*))); } }
void AsyncFileTester::delayedFolderCheck(const KUrl &url) { KIO::StatJob *job = KIO::stat(url, KIO::HideProgressInfo); job->setSide(KIO::StatJob::SourceSide); // We will only read the file connect(job, SIGNAL(result(KJob*)), SLOT(statResult(KJob*))); }
KIOExec::KIOExec(const QStringList &args, bool tempFiles, const QString &suggestedFileName) : mExited(false) , mTempFiles(tempFiles) , mSuggestedFileName(suggestedFileName) , expectedCounter(0) , command(args.first()) , jobCounter(0) { qDebug() << "command=" << command << "args=" << args; for ( int i = 1; i < args.count(); i++ ) { const QUrl urlArg = QUrl::fromUserInput(args.value(i)); if (!urlArg.isValid()) { KMessageBox::error( 0L, i18n("Invalid URL: %1", args.value(i)) ); exit(1); } KIO::StatJob* mostlocal = KIO::mostLocalUrl( urlArg ); bool b = mostlocal->exec(); if (!b) { KMessageBox::error( 0L, i18n("File not found: %1", urlArg.toDisplayString())); exit(1); } Q_ASSERT(b); const QUrl url = mostlocal->mostLocalUrl(); //kDebug() << "url=" << url.url() << " filename=" << url.fileName(); // A local file, not an URL ? // => It is not encoded and not shell escaped, too. if ( url.isLocalFile() ) { FileInfo file; file.path = url.toLocalFile(); file.url = url; fileList.append(file); } // It is an URL else { if ( !url.isValid() ) KMessageBox::error( 0L, i18n( "The URL %1\nis malformed" , url.url() ) ); else if ( mTempFiles ) KMessageBox::error( 0L, i18n( "Remote URL %1\nnot allowed with --tempfiles switch" , url.toDisplayString() ) ); else // We must fetch the file { QString fileName = KIO::encodeFileName( url.fileName() ); if ( !suggestedFileName.isEmpty() ) fileName = suggestedFileName; // Build the destination filename, in ~/.kde/cache-*/krun/ // Unlike KDE-1.1, we put the filename at the end so that the extension is kept // (Some programs rely on it) QString krun_writable = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/krun/"; QDir().mkpath(krun_writable); // error handling will be done by the job QString tmp = krun_writable + QStringLiteral("%1_%2_%3").arg(QCoreApplication::applicationPid()).arg(jobCounter++).arg(fileName); FileInfo file; file.path = tmp; file.url = url; fileList.append(file); expectedCounter++; const QUrl dest = QUrl::fromLocalFile(tmp); qDebug() << "Copying" << url << " to" << dest; KIO::Job *job = KIO::file_copy( url, dest ); jobList.append( job ); connect( job, SIGNAL( result( KJob * ) ), SLOT( slotResult( KJob * ) ) ); } } } if ( mTempFiles ) { slotRunApp(); return; } counter = 0; if ( counter == expectedCounter ) slotResult( 0L ); }
void OpenProjectDialog::validateOpenUrl( const QUrl& url_ ) { bool isDir = false; QString extension; bool isValid = false; const QUrl url = url_.adjusted(QUrl::StripTrailingSlash); if( url.isLocalFile() ) { QFileInfo info( url.toLocalFile() ); isValid = info.exists(); if ( isValid ) { isDir = info.isDir(); extension = info.suffix(); } } else if ( url.isValid() ) { KIO::StatJob* statJob = KIO::stat( url, KIO::HideProgressInfo ); KJobWidgets::setWindow(statJob, Core::self()->uiControllerInternal()->defaultMainWindow() ); isValid = statJob->exec(); // TODO: do this asynchronously so that the user isn't blocked while typing every letter of the hostname in sftp://hostname if ( isValid ) { KIO::UDSEntry entry = statJob->statResult(); isDir = entry.isDir(); extension = QFileInfo( entry.stringValue( KIO::UDSEntry::UDS_NAME ) ).suffix(); } } if ( isValid ) { // reset header openPage->setHeader(i18n("Open \"%1\" as project", url.fileName())); } else { // report error KColorScheme scheme(palette().currentColorGroup()); const QString errorMsg = i18n("Selected URL is invalid"); openPage->setHeader(QStringLiteral("<font color='%1'>%2</font>") .arg(scheme.foreground(KColorScheme::NegativeText).color().name(), errorMsg) ); setAppropriate( projectInfoPage, false ); setAppropriate( openPage, true ); setValid( openPage, false ); return; } if( isDir || extension != ShellExtension::getInstance()->projectFileExtension() ) { setAppropriate( projectInfoPage, true ); m_url = url; if( !isDir ) { m_url = m_url.adjusted(QUrl::StripTrailingSlash | QUrl::RemoveFilename); } ProjectInfoPage* page = qobject_cast<ProjectInfoPage*>( projectInfoPage->widget() ); if( page ) { page->setProjectName( m_url.fileName() ); OpenProjectPage* page2 = qobject_cast<OpenProjectPage*>( openPage->widget() ); if( page2 ) { // Default manager page->setProjectManager( QStringLiteral("Generic Project Manager") ); // clear the filelist m_fileList.clear(); if( isDir ) { // If a dir was selected fetch all files in it KIO::ListJob* job = KIO::listDir( m_url ); connect( job, &KIO::ListJob::entries, this, &OpenProjectDialog::storeFileList); KJobWidgets::setWindow(job, Core::self()->uiController()->activeMainWindow()); job->exec(); } else { // Else we'lll just take the given file m_fileList << url.fileName(); } // Now find a manager for the file(s) in our filelist. bool managerFound = false; foreach( const QString& manager, page2->projectFilters().keys() ) { foreach( const QString& filterexp, page2->projectFilters().value(manager) ) { if( !m_fileList.filter( QRegExp( filterexp, Qt::CaseSensitive, QRegExp::Wildcard ) ).isEmpty() ) { managerFound = true; break; } } if( managerFound ) { page->setProjectManager( manager ); break; } } } } m_url.setPath( m_url.path() + '/' + m_url.fileName() + '.' + ShellExtension::getInstance()->projectFileExtension() ); } else