⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediabrowser.cpp

📁 Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 经过两年开发后
💻 CPP
📖 第 1 页 / 共 5 页
字号:
}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 + -