亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mountpointmanager.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統中運行的音頻播放器軟件。 經過兩年開發后
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
    }    else    {        m_handlerMapMutex.lock();        foreachType( HandlerMap, m_handlerMap )        {            if ( it.data()->deviceIsMedium( m ) )            {                delete it.data();                int key = it.key();                m_handlerMap.erase( key );                debug() << "removed device " << key << endl;                m_handlerMapMutex.unlock();                emit mediumRemoved( key );                //we found the medium which was removed, so we can abort the loop                return;            }        }        m_handlerMapMutex.unlock();    }}voidMountPointManager::mediumRemoved( const Medium *m ){    DEBUG_BLOCK    if ( !m )    {        //reinit?    }    else    {        //this works for USB devices, special cases might be required for other devices        m_handlerMapMutex.lock();        foreachType( HandlerMap, m_handlerMap )        {            if ( it.data()->deviceIsMedium( m ) )            {                delete it.data();                int key = it.key();                m_handlerMap.erase( key );                debug() << "removed device " << key << endl;                m_handlerMapMutex.unlock();                emit mediumRemoved( key );                //we found the medium which was removed, so we can abort the loop                return;            }        }        m_handlerMapMutex.unlock();    }}voidMountPointManager::mediumAdded( const Medium *m ){    DEBUG_BLOCK    if ( !m ) return;    if ( m->isMounted() )    {        debug() << "Device added and mounted, checking handlers" << endl;        foreachType( FactoryList, m_mediumFactories )        {            if ( (*it)->canHandle ( m ) )            {                debug() << "found handler for " << m->id() << endl;                DeviceHandler *handler = (*it)->createHandler( m );                if( !handler )                {                    debug() << "Factory " << (*it)->type() << "could not create device handler" << endl;                    break;                }                int key = handler->getDeviceID();                m_handlerMapMutex.lock();                if ( m_handlerMap.contains( key ) )                {                    debug() << "Key " << key << " already exists in handlerMap, replacing" << endl;                    delete m_handlerMap[key];                    m_handlerMap.erase( key );                }                m_handlerMap.insert( key, handler );                m_handlerMapMutex.unlock();                debug() << "added device " << key << " with mount point " << m->mountPoint() << endl;                emit mediumConnected( key );                break;  //we found the added medium and don't have to check the other device handlers            }        }    }}IdListMountPointManager::getMountedDeviceIds() const {    m_handlerMapMutex.lock();    IdList list( m_handlerMap.keys() );    m_handlerMapMutex.unlock();    list.append( -1 );    return list;}QStringListMountPointManager::collectionFolders( ){    //TODO max: cache data    QStringList result;    KConfig* const folders = Amarok::config( "Collection Folders" );    IdList ids = getMountedDeviceIds();    foreachType( IdList, ids )    {        QStringList rpaths = folders->readListEntry( QString::number( *it ) );        for( QStringList::ConstIterator strIt = rpaths.begin(), end = rpaths.end(); strIt != end; ++strIt )        {            QString absPath;            if ( *strIt == "./" )            {                absPath = getMountPointForId( *it );            }            else            {                absPath = getAbsolutePath( *it, *strIt );            }            if ( !result.contains( absPath ) )                result.append( absPath );        }    }    return result;}voidMountPointManager::setCollectionFolders( const QStringList &folders ){    //TODO max: cache data    typedef QMap<int, QStringList> FolderMap;    KConfig* const folderConf = Amarok::config( "Collection Folders" );    FolderMap folderMap;    foreach( folders )    {        int id = getIdForUrl( *it );        QString rpath = getRelativePath( id, *it );        if ( folderMap.contains( id ) ) {            if ( !folderMap[id].contains( rpath ) )                folderMap[id].append( rpath );        }        else            folderMap[id] = QStringList( rpath );    }    //make sure that collection folders on devices which are not in foldermap are deleted    IdList ids = getMountedDeviceIds();    foreachType( IdList, ids )    {        if( !folderMap.contains( *it ) )        {            folderConf->deleteEntry( QString::number( *it ) );        }    }    foreachType( FolderMap, folderMap )    {        folderConf->writeEntry( QString::number( it.key() ), it.data() );    }}voidMountPointManager::migrateStatistics(){    QStringList urls = CollectionDB::instance()->query( "SELECT url FROM statistics WHERE deviceid = -2;" );    foreach( urls )    {        if ( QFile::exists( *it) )        {            int deviceid = getIdForUrl( *it );            QString rpath = getRelativePath( deviceid, *it );            QString update = QString( "UPDATE statistics SET deviceid = %1, url = '%2'" )                                      .arg( deviceid )                                      .arg( CollectionDB::instance()->escapeString( rpath ) );            update += QString( " WHERE url = '%1' AND deviceid = -2;" )                               .arg( CollectionDB::instance()->escapeString( *it ) );            CollectionDB::instance()->query( update );        }    }}voidMountPointManager::updateStatisticsURLs( bool changed ){    if ( changed )        QTimer::singleShot( 0, this, SLOT( startStatisticsUpdateJob() ) );}voidMountPointManager::startStatisticsUpdateJob(){    ThreadManager::instance()->queueJob( new UrlUpdateJob( this ) );}voidMountPointManager::handleMissingMediaManager(){    //TODO this method should activate a fallback mode which simply shows all songs and uses the    //device's last mount point to build the absolute path    m_noDeviceManager = true;    //Amarok::StatusBar::instance()->longMessage( i18n( "BlaBla" ), KDE::StatusBar::Warning );}voidMountPointManager::checkDeviceAvailability(){    //code to actively scan for devices which are not supported by KDE mediamanager should go here    //method is not actually called yet}bool UrlUpdateJob::doJob( ){    DEBUG_BLOCK    updateStatistics();    updateLabels();    return true;}void UrlUpdateJob::updateStatistics( ){    CollectionDB *collDB = CollectionDB::instance();    MountPointManager *mpm = MountPointManager::instance();    QStringList urls = collDB->query( "SELECT s.deviceid,s.url "                                      "FROM statistics AS s LEFT JOIN tags AS t ON s.deviceid = t.deviceid AND s.url = t.url "                                      "WHERE t.url IS NULL AND s.deviceid != -2;" );    debug() << "Trying to update " << urls.count() / 2 << " statistics rows" << endl;    foreach( urls )    {        int deviceid = (*it).toInt();        QString rpath = *++it;        QString realURL = mpm->getAbsolutePath( deviceid, rpath );        if( QFile::exists( realURL ) )        {            int newDeviceid = mpm->getIdForUrl( realURL );            if( newDeviceid == deviceid )                continue;            QString newRpath = mpm->getRelativePath( newDeviceid, realURL );            int statCount = collDB->query(                            QString( "SELECT COUNT( url ) FROM statistics WHERE deviceid = %1 AND url = '%2';" )                                        .arg( newDeviceid )                                        .arg( collDB->escapeString( newRpath ) ) ).first().toInt();            if( statCount )                continue;       //statistics row with new URL/deviceid values already exists            QString sql = QString( "UPDATE statistics SET deviceid = %1, url = '%2'" )                                .arg( newDeviceid ).arg( collDB->escapeString( newRpath ) );            sql += QString( " WHERE deviceid = %1 AND url = '%2';" )                                .arg( deviceid ).arg( collDB->escapeString( rpath ) );            collDB->query( sql );        }    }}void UrlUpdateJob::updateLabels( ){    CollectionDB *collDB = CollectionDB::instance();    MountPointManager *mpm = MountPointManager::instance();    QStringList labels = collDB->query( "SELECT l.deviceid,l.url "                                        "FROM tags_labels AS l LEFT JOIN tags as t ON l.deviceid = t.deviceid AND l.url = t.url "                                        "WHERE t.url IS NULL;" );    debug() << "Trying to update " << labels.count() / 2 << " tags_labels rows" << endl;    foreach( labels )    {        int deviceid = (*it).toInt();        QString rpath = *++it;        QString realUrl = mpm->getAbsolutePath( deviceid, rpath );        if( QFile::exists( realUrl ) )        {            int newDeviceid = mpm->getIdForUrl( realUrl );            if( newDeviceid == deviceid )                continue;            QString newRpath = mpm->getRelativePath( newDeviceid, realUrl );            //only update rows if there is not already a row with the new deviceid/rpath and the same labelid            QStringList labelids = collDB->query(                                         QString( "SELECT labelid FROM tags_labels WHERE deviceid = %1 AND url = '%2';" )                                                 .arg( QString::number( newDeviceid ), collDB->escapeString( newRpath ) ) );            QString existingLabelids;            if( !labelids.isEmpty() )            {                existingLabelids = " AND labelid NOT IN (";                foreach( labelids )                {                    if( it != labelids.begin() )                        existingLabelids += ',';                    existingLabelids += *it;                }                existingLabelids += ')';            }            QString sql = QString( "UPDATE tags_labels SET deviceid = %1, url = '%2' "                                    "WHERE deviceid = %3 AND url = '%4'%5;" )                                    .arg( newDeviceid )                                    .arg( collDB->escapeString( newRpath ),                                          QString::number( deviceid ),                                          collDB->escapeString( rpath ),                                          existingLabelids );            collDB->query( sql );        }    }}#include "mountpointmanager.moc"

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久疯狂做爰流白浆xx| 国产精品成人一区二区艾草| 色狠狠色噜噜噜综合网| 波多野结衣在线aⅴ中文字幕不卡| 九九九久久久精品| 韩国女主播成人在线| 裸体健美xxxx欧美裸体表演| 男男视频亚洲欧美| 久久国产精品免费| 国产精品 欧美精品| 风间由美一区二区av101| eeuss影院一区二区三区| 91蝌蚪porny九色| 欧美日韩精品久久久| 日韩欧美一级精品久久| 国产校园另类小说区| 亚洲欧洲日产国码二区| 五月天网站亚洲| 麻豆91精品91久久久的内涵| 丁香桃色午夜亚洲一区二区三区| 成人午夜免费电影| 欧美亚洲国产一区二区三区 | 欧美成人一区二区三区| 精品黑人一区二区三区久久| 国产精品美女www爽爽爽| 亚洲精品高清在线| 日本中文字幕不卡| 粉嫩一区二区三区性色av| 色域天天综合网| 日韩免费成人网| 国产精品久久久久影院亚瑟| 亚洲高清视频的网址| 久久69国产一区二区蜜臀| 99久久精品免费看| 日韩免费观看高清完整版在线观看| 国产视频一区在线播放| 亚洲成人精品一区二区| 国产精品一区二区视频| 在线观看视频欧美| 国产亚洲精品免费| 三级成人在线视频| 99久久久国产精品| 日韩精品一区二区三区在线| **欧美大码日韩| 国产一区二区不卡在线| 91精品福利在线一区二区三区| 亚洲国产精品成人综合色在线婷婷| 一个色妞综合视频在线观看| 国产毛片精品视频| 91精品免费在线| 依依成人精品视频| 成人av在线播放网址| 欧美成人激情免费网| 午夜精品视频在线观看| 91一区二区三区在线播放| 国产亚洲一本大道中文在线| 蜜臀va亚洲va欧美va天堂| 欧美午夜宅男影院| 亚洲欧美日韩成人高清在线一区| 国产剧情一区二区三区| 日韩精品在线网站| 日韩中文字幕区一区有砖一区| 91香蕉视频污| 亚洲欧洲在线观看av| 国产91清纯白嫩初高中在线观看| 日韩精品在线一区二区| 麻豆精品视频在线| 日韩欧美一级二级三级久久久 | 5566中文字幕一区二区电影| 亚洲欧洲综合另类在线| 99riav一区二区三区| 国产日产欧产精品推荐色| 国内精品免费在线观看| 久久亚洲私人国产精品va媚药| 日日摸夜夜添夜夜添国产精品| 欧美性猛交xxxx黑人交| 一区二区三区丝袜| 欧美午夜影院一区| 五月婷婷激情综合网| 欧美一区日韩一区| 日本欧美一区二区在线观看| 91精品国产综合久久蜜臀| 日韩精彩视频在线观看| 91精品国产综合久久精品| 日本aⅴ亚洲精品中文乱码| 日韩一区二区在线观看视频播放| 日韩国产精品91| 日韩欧美成人午夜| 国产成人精品亚洲午夜麻豆| 日本一区二区三区在线不卡| 97精品久久久午夜一区二区三区 | 五月天国产精品| 欧美一区三区二区| 国产精品一区二区在线观看网站| 欧美国产精品一区二区| 色94色欧美sute亚洲13| 午夜激情久久久| 日韩精品最新网址| 成人精品国产福利| 亚洲最大的成人av| 日韩一区二区在线看| 成人精品电影在线观看| 亚洲成av人综合在线观看| 日韩欧美激情一区| aaa国产一区| 视频一区在线播放| 国产日韩精品一区| 欧美三级欧美一级| 久久国产精品免费| 亚洲欧美欧美一区二区三区| 日韩一区二区三区视频| 成人精品鲁一区一区二区| 亚洲专区一二三| 久久亚洲精精品中文字幕早川悠里| 99久久精品免费观看| 玖玖九九国产精品| 亚洲综合在线电影| 欧美激情资源网| 日韩一区二区麻豆国产| 色天天综合色天天久久| 国模少妇一区二区三区| 亚洲成人动漫精品| 国产精品卡一卡二卡三| 精品人伦一区二区色婷婷| 在线视频一区二区三区| 成人深夜福利app| 蜜臀久久久久久久| 亚洲精品少妇30p| 国产欧美日韩中文久久| 日韩一区二区免费在线观看| 在线观看亚洲a| 成+人+亚洲+综合天堂| 黄色日韩网站视频| 日韩成人午夜精品| 亚洲大片一区二区三区| 中文字幕一区二区三区在线观看| 久久综合九色综合欧美98 | 欧美一区二区三区免费视频| 色婷婷综合久久| 成人18视频在线播放| 国产精品中文字幕欧美| 美日韩黄色大片| 免费一级片91| 日本在线不卡一区| 午夜电影一区二区| 亚洲成a人片综合在线| 亚洲女同一区二区| 亚洲欧美另类小说视频| 中文字幕在线免费不卡| 国产精品美女久久久久av爽李琼 | 日韩欧美综合在线| 777xxx欧美| 日韩一级二级三级| 91精品国产丝袜白色高跟鞋| 欧美一区二区三区影视| 欧美一区二区日韩| 欧美白人最猛性xxxxx69交| 精品区一区二区| 精品久久久久99| 久久久99精品免费观看不卡| 久久你懂得1024| 国产女人18毛片水真多成人如厕| 久久影院视频免费| 国产精品另类一区| 亚洲视频在线一区观看| 亚洲精品日韩一| 三级亚洲高清视频| 极品少妇xxxx偷拍精品少妇| 国产精品99久久久久久似苏梦涵| 成人一区在线观看| 91色porny| 欧美一区二区精品| 久久精品欧美一区二区三区麻豆| 国产午夜精品久久久久久免费视 | 免费久久精品视频| 国产在线一区二区综合免费视频| 国产乱国产乱300精品| 白白色亚洲国产精品| 欧美色图12p| 精品理论电影在线| 亚洲色图欧洲色图| 久久国产欧美日韩精品| 国产精品一区二区视频| 在线一区二区三区四区| 日韩精品自拍偷拍| 亚洲欧美欧美一区二区三区| 日韩和欧美一区二区| 国产成人精品网址| 在线观看精品一区| 久久综合色综合88| 夜夜精品视频一区二区 | 99久久伊人久久99| 欧美一区二视频| 1024国产精品| 精品中文av资源站在线观看| av一区二区三区在线| 精品日韩一区二区三区免费视频| 国产精品高潮呻吟久久| 免费在线欧美视频| 欧美色爱综合网|