QDateTime KFileItemPrivate::time(KFileItem::FileTimes mappedWhich) const { if (!m_time[mappedWhich].isNull()) { return m_time[mappedWhich]; } // Extract it from the KIO::UDSEntry long long fieldVal = -1; switch (mappedWhich) { case KFileItem::ModificationTime: fieldVal = m_entry.numberValue(KIO::UDSEntry::UDS_MODIFICATION_TIME, -1); break; case KFileItem::AccessTime: fieldVal = m_entry.numberValue(KIO::UDSEntry::UDS_ACCESS_TIME, -1); break; case KFileItem::CreationTime: fieldVal = m_entry.numberValue(KIO::UDSEntry::UDS_CREATION_TIME, -1); break; } if (fieldVal != -1) { setTime(mappedWhich, QDateTime::fromMSecsSinceEpoch(1000 * fieldVal)); return m_time[mappedWhich]; } // If not in the KIO::UDSEntry, or if UDSEntry empty, use stat() [if local URL] if (m_bIsLocalUrl) { QFileInfo info(localPath()); setTime(KFileItem::ModificationTime, info.lastModified()); setTime(KFileItem::AccessTime, info.lastRead()); setTime(KFileItem::CreationTime, info.created()); return m_time[mappedWhich]; } return QDateTime(); }
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. }
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(); }
QDateTime KFileItemPrivate::time(KFileItem::FileTimes mappedWhich) const { // Extract it from the KIO::UDSEntry const uint uds = udsFieldForTime(mappedWhich); if (uds > 0) { const long long fieldVal = m_entry.numberValue(uds, -1); if (fieldVal != -1) { return QDateTime::fromMSecsSinceEpoch(1000 * fieldVal); } } return QDateTime(); }
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(); }
KDateTime KFileItemPrivate::time( KFileItem::FileTimes mappedWhich ) const { if ( !m_time[mappedWhich].isNull() ) return m_time[mappedWhich]; // Extract it from the KIO::UDSEntry long long fieldVal = -1; switch ( mappedWhich ) { case KFileItem::ModificationTime: fieldVal = m_entry.numberValue( KIO::UDSEntry::UDS_MODIFICATION_TIME, -1 ); break; case KFileItem::AccessTime: fieldVal = m_entry.numberValue( KIO::UDSEntry::UDS_ACCESS_TIME, -1 ); break; case KFileItem::CreationTime: fieldVal = m_entry.numberValue( KIO::UDSEntry::UDS_CREATION_TIME, -1 ); break; } if ( fieldVal != -1 ) { setTime(mappedWhich, fieldVal); return m_time[mappedWhich]; } // If not in the KIO::UDSEntry, or if UDSEntry empty, use stat() [if local URL] if ( m_bIsLocalUrl ) { KDE_struct_stat buf; if ( KDE::stat( m_url.toLocalFile(KUrl::RemoveTrailingSlash), &buf ) == 0 ) { setTime(KFileItem::ModificationTime, buf.st_mtime); setTime(KFileItem::AccessTime, buf.st_atime); m_time[KFileItem::CreationTime] = KDateTime(); return m_time[mappedWhich]; } } return KDateTime(); }
inline //because it is used only in one place KIO::filesize_t KFileItemPrivate::size() const { // Extract it from the KIO::UDSEntry long long fieldVal = m_entry.numberValue(KIO::UDSEntry::UDS_SIZE, -1); if (fieldVal != -1) { return fieldVal; } // If not in the KIO::UDSEntry, or if UDSEntry empty, use stat() [if local URL] if (m_bIsLocalUrl) { return QFileInfo(m_url.toLocalFile()).size(); } return 0; }
KIO::filesize_t K3b::filesize( const KUrl& url ) { KIO::filesize_t fSize = 0; if( url.isLocalFile() ) { QFileInfo fi( url.toLocalFile() ); fSize = fi.size(); } else { KIO::UDSEntry uds; KIO::NetAccess::stat( url, uds, 0 ); fSize = uds.numberValue( KIO::UDSEntry::UDS_SIZE ); } return fSize; }
inline //because it is used only in one place KIO::filesize_t KFileItemPrivate::size() const { // Extract it from the KIO::UDSEntry long long fieldVal = m_entry.numberValue( KIO::UDSEntry::UDS_SIZE, -1 ); if ( fieldVal != -1 ) { return fieldVal; } // If not in the KIO::UDSEntry, or if UDSEntry empty, use stat() [if local URL] if ( m_bIsLocalUrl ) { KDE_struct_stat buf; if ( KDE::stat( m_url.toLocalFile(KUrl::RemoveTrailingSlash), &buf ) == 0 ) return buf.st_size; } return 0; }