📄 mediabrowser.cpp
字号:
}KURLMediaBrowser::getProxyUrl( const KURL& daapUrl ) const{ DEBUG_BLOCK KURL url; MediaDevice* dc = dynamic_cast<MediaDevice*>( queryList( "DaapClient" )->getFirst() ); if( dc ) url = dc->getProxyUrl( daapUrl ); return url;}MediaDevice *MediaBrowser::currentDevice() const{ QValueList<MediaDevice *>::const_iterator current = m_currentDevice; if( current != m_devices.constEnd() ) { return *m_currentDevice; } return 0;}MediaDevice *MediaBrowser::deviceFromId( const QString &id ) const{ for( QValueList<MediaDevice *>::const_iterator it = m_devices.constBegin(); it != m_devices.end(); it++ ) { if( (*it)->uniqueId() == id ) return (*it); } return NULL;}voidMediaBrowser::activateDevice( const MediaDevice *dev ){ int index = 0; for( QValueList<MediaDevice *>::iterator it = m_devices.begin(); it != m_devices.end(); it++ ) { if( *it == dev ) { activateDevice( index ); break; } index++; }}voidMediaBrowser::activateDevice( int index, bool skipDummy ){ if( currentDevice() && currentDevice()->customAction() ) { currentDevice()->customAction()->unplug( m_toolbar ); m_toolbar->hide(); m_toolbar->show(); } for( QValueList<MediaDevice *>::iterator it = m_devices.begin(); it != m_devices.end(); it++ ) { (*it)->view()->hide(); } if( index < 0 ) { m_currentDevice = m_devices.end(); return; } if( skipDummy ) index++; if( (uint)index >= m_devices.count() ) { m_currentDevice = m_devices.end(); updateButtons(); queue()->computeSize(); updateStats(); return; } m_currentDevice = m_devices.at( index ); if( currentDevice() ) { currentDevice()->view()->show(); if( currentDevice()->customAction() ) { m_toolbar->setIconText( KToolBar::IconTextRight, false ); currentDevice()->customAction()->plug( m_toolbar ); m_toolbar->hide(); m_toolbar->show(); } } m_deviceCombo->setCurrentItem( index-1 ); updateButtons(); queue()->computeSize(); updateStats();}voidMediaBrowser::addDevice( MediaDevice *device ){ m_devices.append( device ); device->loadConfig(); if( device->autoConnect() ) { device->connectDevice( true ); updateButtons(); } updateDevices();}voidMediaBrowser::removeDevice( MediaDevice *device ){ DEBUG_BLOCK debug() << "remove device: type=" << device->deviceType() << endl; for( QValueList<MediaDevice *>::iterator it = m_devices.begin(); it != m_devices.end(); it++ ) { if( *it == device ) { bool current = (it == m_currentDevice); m_devices.remove( device ); if( current ) activateDevice( 0, false ); break; } } if( device->isConnected() ) { if( device->disconnectDevice( false /* don't run post-disconnect command */ ) ) unloadDevicePlugin( device ); else { debug() << "Cannot remove device because disconnect failed" << endl; Amarok::StatusBar::instance()->longMessage( i18n( "Cannot remove device because disconnect failed" ), KDE::StatusBar::Warning ); } } else unloadDevicePlugin( device ); updateDevices();}voidMediaBrowser::updateDevices(){ m_deviceCombo->clear(); uint i = 0; for( QValueList<MediaDevice *>::iterator it = m_devices.begin(); it != m_devices.end(); it++ ) { if( m_devices.count() > 1 && dynamic_cast<DummyMediaDevice *>(*it) ) continue; QString name = (*it)->name(); if( !(*it)->deviceNode().isEmpty() ) { name = i18n( "%1 at %2" ).arg( name, (*it)->deviceNode() ); } if( (*it)->hasMountPoint() && !(*it)->mountPoint().isEmpty() ) { name += i18n( " (mounted at %1)" ).arg( (*it)->mountPoint() ); } m_deviceCombo->insertItem( name, i ); if( it == m_currentDevice ) { m_deviceCombo->setCurrentItem( i ); } i++; } m_deviceCombo->setEnabled( m_devices.count() > 1 ); m_haveDevices = m_devices.count() > 1; emit availabilityChanged( m_haveDevices );}QStringListMediaBrowser::deviceNames() const{ QStringList list; for( QValueList<MediaDevice *>::const_iterator it = m_devices.constBegin(); it != m_devices.constEnd(); it++ ) { QString name = (*it)->name(); list << name; } return list;}boolMediaBrowser::deviceSwitch( const QString &name ){ int index = 0; for( QValueList<MediaDevice *>::iterator it = m_devices.begin(); it != m_devices.end(); it++ ) { if( (*it)->name() == name ) { activateDevice( index, false ); return true; } index++; } return false;}voidMediaBrowser::transcodingFinished( const QString &src, const QString &dst ){ KURL srcJob = KURL::fromPathOrURL( m_transcodeSrc ); KURL srcResult = KURL::fromPathOrURL( src ); if( srcJob.path() == srcResult.path() ) { m_transcodedUrl = KURL::fromPathOrURL( dst ); m_waitForTranscode = false; } else { debug() << "transcoding for " << src << " finished, " << "but we are waiting for " << m_transcodeSrc << " -- aborting" << endl; m_waitForTranscode = false; }}KURLMediaBrowser::transcode( const KURL &src, const QString &filetype ){ const ScriptManager* const sm = ScriptManager::instance(); if( sm->transcodeScriptRunning().isEmpty() ) { debug() << "cannot transcode with no transcoder registered" << endl; return KURL(); } m_waitForTranscode = true; m_transcodeSrc = src.url(); m_transcodedUrl = KURL(); ScriptManager::instance()->notifyTranscode( src.url(), filetype ); while( m_waitForTranscode && sm->transcodeScriptRunning() != QString::null ) { usleep( 10000 ); kapp->processEvents( 100 ); } return m_transcodedUrl;}voidMediaBrowser::slotSetFilterTimeout() //SLOT{ m_timer->start( 280, true ); //stops the timer for us first}voidMediaBrowser::slotSetFilter() //SLOT{ m_timer->stop(); if( currentDevice() ) currentDevice()->view()->setFilter( m_searchEdit->text() );}voidMediaBrowser::slotSetFilter( const QString &text ){ m_searchEdit->setText( text ); slotSetFilter();}voidMediaBrowser::slotEditFilter(){ EditFilterDialog *fd = new EditFilterDialog( this, true, m_searchEdit->text() ); connect( fd, SIGNAL(filterChanged(const QString &)), SLOT(slotSetFilter(const QString &)) ); if( fd->exec() ) m_searchEdit->setText( fd->filter() ); delete fd;}voidMediaBrowser::prepareToQuit(){ m_waitForTranscode = false; m_quitting = true; for( QValueList<MediaDevice *>::iterator it = m_devices.begin(); it != m_devices.end(); ++it ) { if( (*it)->isConnected() ) (*it)->disconnectDevice( false /* don't unmount */ ); }}MediaBrowser::~MediaBrowser(){ debug() << "having to remove " << m_devices.count() << " devices" << endl; while( !m_devices.isEmpty() ) { removeDevice( m_devices.last() ); } queue()->save( Amarok::saveLocation() + "transferlist.xml" ); delete m_deviceCombo; delete m_queue;}MediaItem::MediaItem( QListView* parent ): KListViewItem( parent ){ init();}MediaItem::MediaItem( QListViewItem* parent ): KListViewItem( parent ){ init();}MediaItem::MediaItem( QListView* parent, QListViewItem* after ): KListViewItem( parent, after ){ init();}MediaItem::MediaItem( QListViewItem* parent, QListViewItem* after ): KListViewItem( parent, after ){ init();}MediaItem::~MediaItem(){ setBundle( 0 );}voidMediaItem::init(){ m_bundle=0; m_order=0; m_type=UNKNOWN; m_playlistName = QString::null; m_device=0; m_flags=0; setExpandable( false ); setDragEnabled( true ); setDropEnabled( true );}voidMediaItem::setBundle( MetaBundle *bundle ){ MediaBrowser::instance()->m_itemMapMutex.lock(); if( m_bundle ) { QString itemUrl = url().url(); MediaBrowser::ItemMap::iterator it = MediaBrowser::instance()->m_itemMap.find( itemUrl ); if( it != MediaBrowser::instance()->m_itemMap.end() && *it == this ) MediaBrowser::instance()->m_itemMap.remove( itemUrl ); } delete m_bundle; m_bundle = bundle; if( m_bundle ) { QString itemUrl = url().url(); MediaBrowser::ItemMap::iterator it = MediaBrowser::instance()->m_itemMap.find( itemUrl ); if( it == MediaBrowser::instance()->m_itemMap.end() ) MediaBrowser::instance()->m_itemMap[itemUrl] = this; } MediaBrowser::instance()->m_itemMapMutex.unlock();}void MediaItem::paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align ){ switch( type() ) { case INVISIBLE: case PODCASTSROOT: case PLAYLISTSROOT: case ORPHANEDROOT: case STALEROOT: { QFont font( p->font() ); font.setBold( true ); p->setFont( font ); } default: break; } KListViewItem::paintCell( p, cg, column, width, align );}const MetaBundle *MediaItem::bundle() const{ return m_bundle;}KURLMediaItem::url() const{ if( bundle() ) return bundle()->url(); else return KURL();}boolMediaItem::isFileBacked() const{ switch( type() ) { case ARTIST: case ALBUM: case PODCASTSROOT: case PODCASTCHANNEL: case PLAYLISTSROOT: case PLAYLIST: case PLAYLISTITEM:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -