inline //because it is used only in one place bool KFileItemPrivate::cmp(const KFileItemPrivate &item) const { #if 0 //qDebug() << "Comparing" << m_url << "and" << item.m_url; //qDebug() << " name" << (m_strName == item.m_strName); //qDebug() << " local" << (m_bIsLocalUrl == item.m_bIsLocalUrl); //qDebug() << " mode" << (m_fileMode == item.m_fileMode); //qDebug() << " perm" << (m_permissions == item.m_permissions); //qDebug() << " UDS_EXTENDED_ACL" << (m_entry.stringValue( KIO::UDSEntry::UDS_EXTENDED_ACL ) == item.m_entry.stringValue( KIO::UDSEntry::UDS_EXTENDED_ACL )); //qDebug() << " UDS_ACL_STRING" << (m_entry.stringValue( KIO::UDSEntry::UDS_ACL_STRING ) == item.m_entry.stringValue( KIO::UDSEntry::UDS_ACL_STRING )); //qDebug() << " UDS_DEFAULT_ACL_STRING" << (m_entry.stringValue( KIO::UDSEntry::UDS_DEFAULT_ACL_STRING ) == item.m_entry.stringValue( KIO::UDSEntry::UDS_DEFAULT_ACL_STRING )); //qDebug() << " m_bLink" << (m_bLink == item.m_bLink); //qDebug() << " m_hidden" << (m_hidden == item.m_hidden); //qDebug() << " size" << (size() == item.size()); //qDebug() << " ModificationTime" << m_entry.numberValue(KIO::UDSEntry::UDS_MODIFICATION_TIME) << item.m_entry.numberValue(KIO::UDSEntry::UDS_MODIFICATION_TIME); //qDebug() << " UDS_ICON_NAME" << (m_entry.stringValue( KIO::UDSEntry::UDS_ICON_NAME ) == item.m_entry.stringValue( KIO::UDSEntry::UDS_ICON_NAME )); #endif return (m_strName == item.m_strName && m_bIsLocalUrl == item.m_bIsLocalUrl && m_fileMode == item.m_fileMode && m_permissions == item.m_permissions && m_entry.stringValue(KIO::UDSEntry::UDS_EXTENDED_ACL) == item.m_entry.stringValue(KIO::UDSEntry::UDS_EXTENDED_ACL) && m_entry.stringValue(KIO::UDSEntry::UDS_ACL_STRING) == item.m_entry.stringValue(KIO::UDSEntry::UDS_ACL_STRING) && m_entry.stringValue(KIO::UDSEntry::UDS_DEFAULT_ACL_STRING) == item.m_entry.stringValue(KIO::UDSEntry::UDS_DEFAULT_ACL_STRING) && m_bLink == item.m_bLink && m_hidden == item.m_hidden && size() == item.size() && m_entry.numberValue(KIO::UDSEntry::UDS_MODIFICATION_TIME) == item.m_entry.numberValue(KIO::UDSEntry::UDS_MODIFICATION_TIME) && m_entry.stringValue(KIO::UDSEntry::UDS_ICON_NAME) == item.m_entry.stringValue(KIO::UDSEntry::UDS_ICON_NAME) ); // Don't compare the mimetypes here. They might not be known, and we don't want to // do the slow operation of determining them here. }
QString KFileItemPrivate::group() const { QString groupName = m_entry.stringValue( KIO::UDSEntry::UDS_GROUP ); if (groupName.isEmpty() && m_bIsLocalUrl ) { #ifdef Q_WS_WIN QFileInfo a(m_url.toLocalFile( KUrl::RemoveTrailingSlash )); groupName = a.group(); m_entry.insert( KIO::UDSEntry::UDS_GROUP, groupName ); #else KDE_struct_stat buff; if ( KDE::lstat( m_url.toLocalFile( KUrl::RemoveTrailingSlash ), &buff ) == 0) // get uid/gid of the link, if it's a link { struct group *ge = getgrgid( buff.st_gid ); if ( ge != 0 ) { groupName = QString::fromLocal8Bit(ge->gr_name); if (groupName.isEmpty()) groupName.sprintf("%d",ge->gr_gid); } else groupName.sprintf("%d",buff.st_gid); m_entry.insert( KIO::UDSEntry::UDS_GROUP, groupName ); } #endif } return groupName; }
QString KFileItemPrivate::localPath() const { if (m_bIsLocalUrl) { return m_url.toLocalFile(); } // Extract the local path from the KIO::UDSEntry return m_entry.stringValue(KIO::UDSEntry::UDS_LOCAL_PATH); }
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); }
QString KFileItemPrivate::user() const { QString userName = m_entry.stringValue(KIO::UDSEntry::UDS_USER); if (userName.isEmpty() && m_bIsLocalUrl) { #ifdef Q_WS_WIN QFileInfo a(m_url.toLocalFile( KUrl::RemoveTrailingSlash )); userName = a.owner(); m_entry.insert( KIO::UDSEntry::UDS_USER, userName ); #else KDE_struct_stat buff; if ( KDE::lstat( m_url.toLocalFile( KUrl::RemoveTrailingSlash ), &buff ) == 0) // get uid/gid of the link, if it's a link { struct passwd *pwuser = getpwuid( buff.st_uid ); if ( pwuser != 0 ) { userName = QString::fromLocal8Bit(pwuser->pw_name); m_entry.insert( KIO::UDSEntry::UDS_USER, userName ); } } #endif } return userName; }
void KFileItemPrivate::readUDSEntry(bool _urlIsDirectory) { // extract fields from the KIO::UDS Entry m_fileMode = m_entry.numberValue(KIO::UDSEntry::UDS_FILE_TYPE, KFileItem::Unknown); m_permissions = m_entry.numberValue(KIO::UDSEntry::UDS_ACCESS, KFileItem::Unknown); m_strName = m_entry.stringValue(KIO::UDSEntry::UDS_NAME); const QString displayName = m_entry.stringValue(KIO::UDSEntry::UDS_DISPLAY_NAME); if (!displayName.isEmpty()) { m_strText = displayName; } else { m_strText = KIO::decodeFileName(m_strName); } const QString urlStr = m_entry.stringValue(KIO::UDSEntry::UDS_URL); const bool UDS_URL_seen = !urlStr.isEmpty(); if (UDS_URL_seen) { m_url = QUrl(urlStr); if (m_url.isLocalFile()) { m_bIsLocalUrl = true; } } QMimeDatabase db; const QString mimeTypeStr = m_entry.stringValue(KIO::UDSEntry::UDS_MIME_TYPE); m_bMimeTypeKnown = !mimeTypeStr.isEmpty(); if (m_bMimeTypeKnown) { m_mimeType = db.mimeTypeForName(mimeTypeStr); } m_guessedMimeType = m_entry.stringValue(KIO::UDSEntry::UDS_GUESSED_MIME_TYPE); m_bLink = !m_entry.stringValue(KIO::UDSEntry::UDS_LINK_DEST).isEmpty(); // we don't store the link dest const int hiddenVal = m_entry.numberValue(KIO::UDSEntry::UDS_HIDDEN, -1); m_hidden = hiddenVal == 1 ? Hidden : (hiddenVal == 0 ? Shown : Auto); if (_urlIsDirectory && !UDS_URL_seen && !m_strName.isEmpty() && m_strName != QLatin1String(".")) { if (!m_url.path().endsWith('/')) { m_url.setPath(m_url.path() + '/'); } m_url.setPath(m_url.path() + m_strName); } m_iconName.clear(); }
KUrl NetAccess::mostLocalUrl(const KUrl & url, QWidget* window) { if ( url.isLocalFile() ) { return url; } KIO::UDSEntry entry; if (!stat(url, entry, window)) { return url; } const QString path = entry.stringValue( KIO::UDSEntry::UDS_LOCAL_PATH ); if ( !path.isEmpty() ) { KUrl new_url; new_url.setPath(path); return new_url; } return url; }
void KFileItemPrivate::readUDSEntry( bool _urlIsDirectory ) { // extract fields from the KIO::UDS Entry m_fileMode = m_entry.numberValue( KIO::UDSEntry::UDS_FILE_TYPE ); m_permissions = m_entry.numberValue( KIO::UDSEntry::UDS_ACCESS ); m_strName = m_entry.stringValue( KIO::UDSEntry::UDS_NAME ); const QString displayName = m_entry.stringValue( KIO::UDSEntry::UDS_DISPLAY_NAME ); if (!displayName.isEmpty()) m_strText = displayName; else m_strText = KIO::decodeFileName( m_strName ); const QString urlStr = m_entry.stringValue( KIO::UDSEntry::UDS_URL ); const bool UDS_URL_seen = !urlStr.isEmpty(); if ( UDS_URL_seen ) { m_url = KUrl( urlStr ); if ( m_url.isLocalFile() ) m_bIsLocalUrl = true; } const QString mimeTypeStr = m_entry.stringValue( KIO::UDSEntry::UDS_MIME_TYPE ); m_bMimeTypeKnown = !mimeTypeStr.isEmpty(); if ( m_bMimeTypeKnown ) m_pMimeType = KMimeType::mimeType( mimeTypeStr ); m_guessedMimeType = m_entry.stringValue( KIO::UDSEntry::UDS_GUESSED_MIME_TYPE ); m_bLink = !m_entry.stringValue( KIO::UDSEntry::UDS_LINK_DEST ).isEmpty(); // we don't store the link dest const int hiddenVal = m_entry.numberValue( KIO::UDSEntry::UDS_HIDDEN, -1 ); m_hidden = hiddenVal == 1 ? Hidden : ( hiddenVal == 0 ? Shown : Auto ); // avoid creating these QStrings again and again static const QString& dot = KGlobal::staticQString("."); if ( _urlIsDirectory && !UDS_URL_seen && !m_strName.isEmpty() && m_strName != dot ) m_url.addPath( m_strName ); m_iconName.clear(); }
Meta::TrackPtr UpnpCache::getTrack( const KIO::UDSEntry &entry, bool refresh ) { QMutexLocker lock( &m_cacheMutex ); // a little indirection to get the nicely formatted track uidUrl Meta::UpnpTrackPtr track( new Meta::UpnpTrack( m_collection ) ); track->setUidUrl( entry.stringValue( KIO::UPNP_ID ) ); // if we have a reference ID search for that // in either case the original ID (refID) becomes our UID URL instead of the UPNP_ID if( entry.contains( KIO::UPNP_REF_ID ) ) { track->setUidUrl( entry.stringValue( KIO::UPNP_REF_ID ) ); } QString uidUrl = track->uidUrl(); if( m_trackMap.contains( uidUrl ) && !refresh ) { return m_trackMap[uidUrl]; } // UDS_NAME is the plain ASCII, relative path prefixed name // but UDS_DISPLAY_NAME is the unicode, 'file' name. track->setTitle( entry.stringValue( KIO::UDSEntry::UDS_DISPLAY_NAME ) ); track->setPlayableUrl( entry.stringValue(KIO::UDSEntry::UDS_TARGET_URL) ); track->setTrackNumber( entry.stringValue(KIO::UPNP_TRACK_NUMBER).toInt() ); // TODO validate and then convert to kbps track->setBitrate( entry.stringValue( KIO::UPNP_BITRATE ).toInt() / 1024 ); track->setLength( duration( entry.stringValue( KIO::UPNP_DURATION ) ) ); Meta::UpnpArtistPtr artist = Meta::UpnpArtistPtr::staticCast( getArtist( entry.stringValue( KIO::UPNP_ARTIST ) ) ); artist->addTrack( track ); track->setArtist( artist ); Meta::UpnpAlbumPtr album = Meta::UpnpAlbumPtr::staticCast( getAlbum( entry.stringValue( KIO::UPNP_ALBUM ), artist->name() ) ); album->setAlbumArtist( artist ); album->addTrack( track ); track->setAlbum( album ); // album art if( ! album->imageLocation().isValid() ) album->setAlbumArtUrl( entry.stringValue( KIO::UPNP_ALBUMART_URI ) ); Meta::UpnpGenrePtr genre = Meta::UpnpGenrePtr::staticCast( getGenre( entry.stringValue( KIO::UPNP_GENRE ) ) ); genre->addTrack( track ); track->setGenre( genre ); // TODO this is plain WRONG! the UPNP_DATE will not have year of the album // it will have year of addition to the collection //QString yearStr = yearForDate( entry.stringValue( KIO::UPNP_DATE ) ); // //Meta::UpnpYearPtr year = Meta::UpnpYearPtr::staticCast( getYear( yearStr ) ); //year->addTrack( track ); //track->setYear( year ); m_trackMap.insert( uidUrl, Meta::TrackPtr::staticCast( track ) ); return Meta::TrackPtr::staticCast( track ); }
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