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 ); }
inline //because it is used only in one place QString KFileItemPrivate::parsePermissions(mode_t perm) const { static char buffer[ 12 ]; char uxbit, gxbit, oxbit; if ((perm & (S_IXUSR | S_ISUID)) == (S_IXUSR | S_ISUID)) { uxbit = 's'; } else if ((perm & (S_IXUSR | S_ISUID)) == S_ISUID) { uxbit = 'S'; } else if ((perm & (S_IXUSR | S_ISUID)) == S_IXUSR) { uxbit = 'x'; } else { uxbit = '-'; } if ((perm & (S_IXGRP | S_ISGID)) == (S_IXGRP | S_ISGID)) { gxbit = 's'; } else if ((perm & (S_IXGRP | S_ISGID)) == S_ISGID) { gxbit = 'S'; } else if ((perm & (S_IXGRP | S_ISGID)) == S_IXGRP) { gxbit = 'x'; } else { gxbit = '-'; } if ((perm & (S_IXOTH | S_ISVTX)) == (S_IXOTH | S_ISVTX)) { oxbit = 't'; } else if ((perm & (S_IXOTH | S_ISVTX)) == S_ISVTX) { oxbit = 'T'; } else if ((perm & (S_IXOTH | S_ISVTX)) == S_IXOTH) { oxbit = 'x'; } else { oxbit = '-'; } // Include the type in the first char like ls does; people are more used to seeing it, // even though it's not really part of the permissions per se. if (m_bLink) { buffer[0] = 'l'; } else if (m_fileMode != KFileItem::Unknown) { if ((m_fileMode & QT_STAT_MASK) == QT_STAT_DIR) { buffer[0] = 'd'; } #ifdef Q_OS_UNIX else if (S_ISSOCK(m_fileMode)) { buffer[0] = 's'; } else if (S_ISCHR(m_fileMode)) { buffer[0] = 'c'; } else if (S_ISBLK(m_fileMode)) { buffer[0] = 'b'; } else if (S_ISFIFO(m_fileMode)) { buffer[0] = 'p'; } #endif // Q_OS_UNIX else { buffer[0] = '-'; } } else { buffer[0] = '-'; } buffer[1] = (((perm & S_IRUSR) == S_IRUSR) ? 'r' : '-'); buffer[2] = (((perm & S_IWUSR) == S_IWUSR) ? 'w' : '-'); buffer[3] = uxbit; buffer[4] = (((perm & S_IRGRP) == S_IRGRP) ? 'r' : '-'); buffer[5] = (((perm & S_IWGRP) == S_IWGRP) ? 'w' : '-'); buffer[6] = gxbit; buffer[7] = (((perm & S_IROTH) == S_IROTH) ? 'r' : '-'); buffer[8] = (((perm & S_IWOTH) == S_IWOTH) ? 'w' : '-'); buffer[9] = oxbit; // if (hasExtendedACL()) if (m_entry.contains(KIO::UDSEntry::UDS_EXTENDED_ACL)) { buffer[10] = '+'; buffer[11] = 0; } else { buffer[10] = 0; } return QString::fromLatin1(buffer); }