// FIXME: remember the iso instance for quicker something and search for the videodvd // in the available devices. K3bIso9660* kio_videodvdProtocol::openIso( const KURL& url, QString& plainIsoPath ) { // get the volume id from the url QString volumeId = url.path().section( '/', 1, 1 ); kdDebug() << "(kio_videodvdProtocol) searching for Video dvd: " << volumeId << endl; // now search the devices for this volume id // FIXME: use the cache created in listVideoDVDs for( QPtrListIterator<K3bDevice::Device> it( s_deviceManager->dvdReader() ); *it; ++it ) { K3bDevice::Device* dev = *it; K3bDevice::DiskInfo di = dev->diskInfo(); // we search for a DVD with a single track. // this time let K3bIso9660 decide if we need dvdcss or not // FIXME: check for encryption and libdvdcss and report an error if( di.isDvdMedia() && di.numTracks() == 1 ) { K3bIso9660* iso = new K3bIso9660( dev ); iso->setPlainIso9660( true ); if( iso->open() && iso->primaryDescriptor().volumeId == volumeId ) { plainIsoPath = url.path().section( "/", 2, -1 ) + "/"; kdDebug() << "(kio_videodvdProtocol) using iso path: " << plainIsoPath << endl; return iso; } delete iso; } } error( ERR_SLAVE_DEFINED, i18n("No VideoDVD found") ); return 0; }
void kio_videodvdProtocol::listVideoDVDs() { int cnt = 0; for( QPtrListIterator<K3bDevice::Device> it( s_deviceManager->dvdReader() ); *it; ++it ) { K3bDevice::Device* dev = *it; K3bDevice::DiskInfo di = dev->diskInfo(); // we search for a DVD with a single track. if( di.isDvdMedia() && di.numTracks() == 1 ) { // // now do a quick check for VideoDVD. // - no dvdcss for speed // - only a check for the VIDEO_TS dir // K3bIso9660 iso( new K3bIso9660DeviceBackend(dev) ); iso.setPlainIso9660( true ); if( iso.open() && iso.firstIsoDirEntry()->entry( "VIDEO_TS" ) ) { // FIXME: cache the entry for speedup UDSEntryList udsl; KIO::UDSEntry uds; KIO::UDSAtom a; a.m_uds = KIO::UDS_NAME; a.m_str = iso.primaryDescriptor().volumeId; uds.append( a ); a.m_uds = KIO::UDS_FILE_TYPE; a.m_long = S_IFDIR; uds.append( a ); a.m_uds = KIO::UDS_MIME_TYPE; a.m_str = "inode/directory"; uds.append( a ); a.m_uds = KIO::UDS_ICON_NAME; a.m_str = "dvd_unmount"; uds.append( a ); udsl.append( uds ); listEntries( udsl ); ++cnt; } } } if( cnt ) finished(); else error( ERR_SLAVE_DEFINED, i18n("No VideoDVD found") ); }