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

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

?? metabundle.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統中運行的音頻播放器軟件。 經過兩年開發后
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
// Max Howell <max.howell@methylblue.com>, (C) 2004// Alexandre Pereira de Oliveira <aleprj@gmail.com>, (C) 2005, 2006// Gábor Lehel <illissius@gmail.com>, (C) 2005, 2006// Shane King <kde@dontletsstart.com>, (C) 2006// Peter C. Ndikuwera <pndiku@gmail.com>, (C) 2006// License: GNU General Public License V2#define DEBUG_PREFIX "MetaBundle"#include <stdlib.h>#include <unistd.h>#include <stdio.h>#include <time.h>#include <sys/time.h>#include <sys/types.h>#include <fcntl.h>#include "amarok.h"#include "amarokconfig.h"#include "debug.h"#include "collectiondb.h"#include "metabundlesaver.h"#include <kapplication.h>#include <kfilemetainfo.h>#include <kio/global.h>#include <kio/job.h>#include <kio/jobclasses.h>#include <kio/netaccess.h>#include <kmdcodec.h>#include <qdeepcopy.h>#include <qfile.h> //decodePath()#include <taglib/attachedpictureframe.h>#include <taglib/fileref.h>#include <taglib/id3v1genres.h> //used to load genre list#include <taglib/mpegfile.h>#include <taglib/tag.h>#include <taglib/tstring.h>#include <taglib/tlist.h>#include <taglib/apetag.h>#include <taglib/id3v2tag.h>#include <taglib/id3v1tag.h>#include <taglib/mpcfile.h>#include <taglib/mpegfile.h>#include <taglib/oggfile.h>#include <taglib/oggflacfile.h>#include <taglib/vorbisfile.h>#include <taglib/flacfile.h>#include <taglib/textidentificationframe.h>#include <taglib/uniquefileidentifierframe.h>#include <taglib/xiphcomment.h>#include <config.h>#ifdef HAVE_MP4V2#include "metadata/mp4/mp4file.h"#include "metadata/mp4/mp4tag.h"#else#include "metadata/m4a/mp4file.h"#include "metadata/m4a/mp4itunestag.h"#endif#include "lastfm.h"#include "metabundle.h"#include "podcastbundle.h"namespace Amarok {    KURL detachedKURL( const KURL &url ) {        KURL urlCopy;        if (!url.isEmpty())            urlCopy = KURL(url.url());        return urlCopy;    }}MetaBundle::EmbeddedImage::EmbeddedImage( const TagLib::ByteVector& data, const TagLib::String& description )    : m_description( TStringToQString( description ) ){    m_data.duplicate( data.data(), data.size() );}const QCString &MetaBundle::EmbeddedImage::hash() const{    if( m_hash.isEmpty() ) {        m_hash = KMD5( m_data ).hexDigest();    }    return m_hash;}bool MetaBundle::EmbeddedImage::save( const QDir& dir ) const{    QFile   file( dir.filePath( hash() ) );    if( file.open( IO_WriteOnly | IO_Raw ) ) {        const Q_LONG s = file.writeBlock( m_data.data(), m_data.size() );        if( s >= 0 && Q_ULONG( s ) == m_data.size() ) {            debug() << "EmbeddedImage::save " << file.name() << endl;            return true;        }        file.remove();    }    debug() << "EmbeddedImage::save failed! " << file.name() << endl;    return false;}/// These are untranslated and used for storing/retrieving XML playlistconst QString &MetaBundle::exactColumnName( int c ) //static{    // construct static qstrings to avoid constructing them all the time    static QString columns[] = {        "Filename", "Title", "Artist", "AlbumArtist", "Composer", "Year", "Album", "DiscNumber", "Track", "BPM", "Genre", "Comment",        "Directory", "Type", "Length", "Bitrate", "SampleRate", "Score", "Rating", "PlayCount", "LastPlayed",        "Mood", "Filesize" };    static QString error( "ERROR" );    if ( c >= 0 && c < NUM_COLUMNS )        return columns[c];    else        return error;}const QString MetaBundle::prettyColumnName( int index ) //static{    switch( index )    {        case Filename:   return i18n( "Filename"    );        case Title:      return i18n( "Title"       );        case Artist:     return i18n( "Artist"      );        case AlbumArtist:return i18n( "Album Artist");        case Composer:   return i18n( "Composer"    );        case Year:       return i18n( "Year"        );        case Album:      return i18n( "Album"       );        case DiscNumber: return i18n( "Disc Number" );        case Track:      return i18n( "Track"       );        case Bpm:        return i18n( "BPM"         );        case Genre:      return i18n( "Genre"       );        case Comment:    return i18n( "Comment"     );        case Directory:  return i18n( "Directory"   );        case Type:       return i18n( "Type"        );        case Length:     return i18n( "Length"      );        case Bitrate:    return i18n( "Bitrate"     );        case SampleRate: return i18n( "Sample Rate" );        case Score:      return i18n( "Score"       );        case Rating:     return i18n( "Rating"      );        case PlayCount:  return i18n( "Play Count"  );        case LastPlayed: return i18n( "Column name", "Last Played" );        case Mood:       return i18n( "Mood"        );        case Filesize:   return i18n( "File Size"   );    }    return "This is a bug.";}int MetaBundle::columnIndex( const QString &name ){    for( int i = 0; i < NUM_COLUMNS; ++i )        if( exactColumnName( i ).lower() == name.lower() )            return i;    return -1;}MetaBundle::MetaBundle()        : m_uniqueId( QString::null )        , m_year( Undetermined )        , m_discNumber( Undetermined )        , m_track( Undetermined )        , m_bpm( Undetermined )        , m_bitrate( Undetermined )        , m_length( Undetermined )        , m_sampleRate( Undetermined )        , m_score( Undetermined )        , m_rating( Undetermined )        , m_playCount( Undetermined )        , m_lastPlay( abs( Undetermined ) )        , m_filesize( Undetermined )        , m_moodbar( 0 )        , m_type( other )        , m_exists( true )        , m_isValidMedia( true )        , m_isCompilation( false )        , m_notCompilation( false )        , m_safeToSave( false )        , m_waitingOnKIO( 0 )        , m_tempSavePath( QString::null )        , m_origRenamedSavePath( QString::null )        , m_tempSaveDigest( 0 )        , m_saveFileref( 0 )        , m_podcastBundle( 0 )        , m_lastFmBundle( 0 )        , m_isSearchDirty(true)        , m_searchColumns( Undetermined ){    init();}MetaBundle::MetaBundle( const KURL &url, bool noCache, TagLib::AudioProperties::ReadStyle readStyle, EmbeddedImageList* images )    : m_url( url )    , m_uniqueId( QString::null )    , m_year( Undetermined )    , m_discNumber( Undetermined )    , m_track( Undetermined )    , m_bpm( Undetermined )    , m_bitrate( Undetermined )    , m_length( Undetermined )    , m_sampleRate( Undetermined )    , m_score( Undetermined )    , m_rating( Undetermined )    , m_playCount( Undetermined )    , m_lastPlay( abs( Undetermined ) )    , m_filesize( Undetermined )    , m_moodbar( 0 )    , m_type( other )    , m_exists( isFile() && QFile::exists( url.path() ) )    , m_isValidMedia( false )    , m_isCompilation( false )    , m_notCompilation( false )    , m_safeToSave( false )    , m_waitingOnKIO( 0 )    , m_tempSavePath( QString::null )    , m_origRenamedSavePath( QString::null )    , m_tempSaveDigest( 0 )    , m_saveFileref( 0 )    , m_podcastBundle( 0 )    , m_lastFmBundle( 0 )    , m_isSearchDirty(true)    , m_searchColumns( Undetermined ){    if ( exists() )    {        if ( !noCache )            m_isValidMedia = CollectionDB::instance()->bundleForUrl( this );        if ( !isValidMedia() || ( !m_podcastBundle && m_length <= 0 ) )            readTags( readStyle, images );    }    else    {        // if it's a podcast we might get some info this way        CollectionDB::instance()->bundleForUrl( this );        m_bitrate = m_length = m_sampleRate = Unavailable;    }}//StreamProvider ctorMetaBundle::MetaBundle( const QString& title,                        const QString& streamUrl,                        const int      bitrate,                        const QString& genre,                        const QString& streamName,                        const KURL& url )        : m_url       ( url )        , m_genre     ( genre )        , m_streamName( streamName )        , m_streamUrl ( streamUrl )        , m_uniqueId( QString::null )        , m_year( 0 )        , m_discNumber( 0 )        , m_track( 0 )        , m_bpm( Undetermined )        , m_bitrate( bitrate )        , m_length( Irrelevant )        , m_sampleRate( Unavailable )        , m_score( Undetermined )        , m_rating( Undetermined )        , m_playCount( Undetermined )        , m_lastPlay( abs( Undetermined ) )        , m_filesize( Undetermined )        , m_moodbar( 0 )        , m_type( other )        , m_exists( true )        , m_isValidMedia( false )        , m_isCompilation( false )        , m_notCompilation( false )        , m_safeToSave( false )        , m_waitingOnKIO( 0 )        , m_tempSavePath( QString::null )        , m_origRenamedSavePath( QString::null )        , m_tempSaveDigest( 0 )        , m_saveFileref( 0 )        , m_podcastBundle( 0 )        , m_lastFmBundle( 0 )        , m_isSearchDirty( true )        , m_searchColumns( Undetermined ){    if( title.contains( '-' ) )    {        m_title  = title.section( '-', 1, 1 ).stripWhiteSpace();        m_artist = title.section( '-', 0, 0 ).stripWhiteSpace();    }    else    {        m_title  = title;        m_artist = streamName; //which is sort of correct..    }}MetaBundle::MetaBundle( const MetaBundle &bundle )        : m_moodbar( 0 ){    *this = bundle;}MetaBundle::~MetaBundle(){    delete m_podcastBundle;    delete m_lastFmBundle;    if( m_moodbar != 0 )      delete m_moodbar;}MetaBundle&MetaBundle::operator=( const MetaBundle& bundle ){    m_url = bundle.m_url;    m_title = bundle.m_title;    m_artist = bundle.m_artist;    m_albumArtist = bundle.m_albumArtist;    m_composer = bundle.m_composer;    m_album = bundle.m_album;    m_comment = bundle.m_comment;    m_genre = bundle.m_genre;    m_streamName = bundle.m_streamName;    m_streamUrl = bundle.m_streamUrl;    m_uniqueId = bundle.m_uniqueId;    m_year = bundle.m_year;    m_discNumber = bundle.m_discNumber;    m_track = bundle.m_track;    m_bpm = bundle.m_bpm;    m_bitrate = bundle.m_bitrate;    m_length = bundle.m_length;    m_sampleRate = bundle.m_sampleRate;    m_score = bundle.m_score;    m_rating = bundle.m_rating;    m_playCount = bundle.m_playCount;    m_lastPlay = bundle.m_lastPlay;    m_filesize = bundle.m_filesize;    m_type = bundle.m_type;    m_exists = bundle.m_exists;    m_isValidMedia = bundle.m_isValidMedia;    m_isCompilation = bundle.m_isCompilation;    m_notCompilation = bundle.m_notCompilation;    m_safeToSave = bundle.m_safeToSave;    m_waitingOnKIO = bundle.m_waitingOnKIO;    m_tempSavePath = bundle.m_tempSavePath;    m_origRenamedSavePath = bundle.m_origRenamedSavePath;    m_tempSaveDigest = bundle.m_tempSaveDigest;    m_saveFileref = bundle.m_saveFileref;    if( bundle.m_moodbar != 0)      {        if( m_moodbar == 0 )          m_moodbar = new Moodbar( this );        *m_moodbar = *bundle.m_moodbar;      }    else      {        // If m_moodbar != 0, it's initialized for a reason        // Deleting it makes the PrettySlider code more ugly,        // since it'd have to reconnect the jobEvent() signal.        if( m_moodbar != 0 )          m_moodbar->reset();      }//    delete m_podcastBundle; why does this crash Amarok? apparently m_podcastBundle isn't always initialized.    m_podcastBundle = 0;    if( bundle.m_podcastBundle )        setPodcastBundle( *bundle.m_podcastBundle );//    delete m_lastFmBundle; same as above    m_lastFmBundle = 0;    if( bundle.m_lastFmBundle )        setLastFmBundle( *bundle.m_lastFmBundle );	m_isSearchDirty = true;    return *this;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人综合婷婷国产精品久久免费| 777午夜精品免费视频| 欧美三级视频在线播放| www欧美成人18+| 亚洲综合视频在线| 国产91精品免费| 日韩美女在线视频| 一二三四社区欧美黄| 不卡av电影在线播放| 2021久久国产精品不只是精品| 一区二区三区av电影 | 亚洲香肠在线观看| 国产麻豆视频一区二区| 欧美日本在线视频| 一区二区高清在线| 99精品欧美一区二区三区小说 | 在线免费精品视频| 中文字幕不卡的av| 国产精品乡下勾搭老头1| 91麻豆精品国产91久久久资源速度 | 欧美精品一区在线观看| 亚洲综合在线五月| 色八戒一区二区三区| 国产精品激情偷乱一区二区∴| 国产一区二三区好的| 欧美成人免费网站| 奇米一区二区三区| 欧美精品久久天天躁| 亚洲图片欧美一区| 欧美日韩国产成人在线免费| 一区二区三区在线播放| 在线观看精品一区| 亚洲小说欧美激情另类| 欧美三级日韩三级| 亚洲国产精品嫩草影院| 欧美日韩国产首页| 日本不卡免费在线视频| 欧美一级淫片007| 九九**精品视频免费播放| 欧美精品一区二区三区四区| 国产裸体歌舞团一区二区| 久久久久久免费| av一区二区不卡| 亚洲精品欧美综合四区| 欧美人与z0zoxxxx视频| 蜜臀久久久久久久| 久久婷婷成人综合色| 成人免费视频app| 亚洲激情图片小说视频| 欧美精品777| 国产馆精品极品| 亚洲欧美偷拍三级| 91.com在线观看| 国产乱码精品一区二区三| 亚洲欧洲三级电影| 欧美精品久久99| 国产成人精品影院| 亚洲一区二区三区四区在线免费观看 | 亚洲一区二区偷拍精品| 欧美精品vⅰdeose4hd| 国产在线视频一区二区三区| 国产精品视频第一区| 欧美图区在线视频| 精品在线观看视频| 亚洲私人黄色宅男| 欧美一区二区视频网站| 成人毛片视频在线观看| 午夜精品一区在线观看| 国产亚洲欧美日韩俺去了| 一本一道综合狠狠老| 久久精品国产一区二区三| 国产精品不卡视频| 欧美精品高清视频| 高清不卡一区二区| 免费观看一级欧美片| 国产精品国产三级国产普通话99| 欧美美女激情18p| 99久久免费视频.com| 青青草国产成人av片免费| 18涩涩午夜精品.www| 日韩精品一区二区三区在线| av不卡免费在线观看| 免费精品视频在线| 亚洲综合偷拍欧美一区色| 国产色一区二区| 91麻豆精品国产自产在线| 99久久99久久精品免费观看| 精品一区二区精品| 午夜视频在线观看一区二区| 亚洲欧洲美洲综合色网| 久久精品一区八戒影视| 日韩一区二区三区在线视频| 91成人免费在线视频| 不卡区在线中文字幕| 国产成人亚洲综合a∨猫咪| 日本一区中文字幕| 黄页网站大全一区二区| 亚洲成人一区在线| 亚洲欧美一区二区三区孕妇| 国产精品人妖ts系列视频| 久久午夜国产精品| 日韩欧美亚洲一区二区| 91精品国产一区二区三区蜜臀| 欧美午夜精品久久久久久孕妇| 成人综合激情网| 成人在线视频一区| 成人性生交大片免费看在线播放| 久99久精品视频免费观看| 日韩成人一级大片| 全部av―极品视觉盛宴亚洲| 天天影视色香欲综合网老头| 一区二区三区在线视频播放| 亚洲激情中文1区| 亚洲综合自拍偷拍| 亚洲高清免费在线| 视频在线在亚洲| 日精品一区二区| 日本成人在线一区| 久久99国产精品尤物| 毛片不卡一区二区| 国产一二精品视频| 国产成人午夜精品影院观看视频| 国产高清不卡二三区| 国产 欧美在线| 91在线观看地址| 欧美无人高清视频在线观看| 欧美日本在线一区| 精品久久久久久综合日本欧美| 久久美女高清视频| 国产精品色呦呦| 亚洲免费观看高清完整版在线| 亚洲永久免费视频| 丝袜国产日韩另类美女| 久久精品国产在热久久| 国产成人日日夜夜| 日本高清无吗v一区| 在线播放国产精品二区一二区四区 | 久久久久亚洲蜜桃| 国产精品短视频| 亚洲成av人在线观看| 久久精品av麻豆的观看方式| 成人中文字幕在线| 欧美性一区二区| 精品国产一区二区国模嫣然| 国产精品久久久一区麻豆最新章节| 一区二区欧美视频| 久久精品国产精品亚洲综合| 成人午夜电影小说| 欧美日韩和欧美的一区二区| 日韩欧美国产不卡| 亚洲视频在线一区观看| 日韩制服丝袜av| 懂色av噜噜一区二区三区av | 99久久综合国产精品| 欧美喷水一区二区| 中文字幕 久热精品 视频在线| 亚洲综合免费观看高清在线观看| 久久精工是国产品牌吗| 一本一道久久a久久精品| 欧美一区二区三区免费| 日韩伦理av电影| 久久99国产精品免费网站| 91精品福利视频| 国产视频911| 日本亚洲欧美天堂免费| 成人高清在线视频| 精品捆绑美女sm三区| 伊人婷婷欧美激情| 国产精品亚洲一区二区三区在线 | 亚洲一二三四久久| 国产成人免费视频网站高清观看视频 | 一区二区久久久久久| 国产成人啪免费观看软件| 欧美日韩美女一区二区| 18成人在线观看| 成人免费视频caoporn| 日韩免费电影一区| 午夜精品久久久久久久| 97se亚洲国产综合自在线| 国产亚洲综合性久久久影院| 日本亚洲视频在线| 911国产精品| 亚洲国产美国国产综合一区二区| 99视频国产精品| 国产精品情趣视频| 国产成人免费视频网站| 精品国产不卡一区二区三区| 日韩av不卡一区二区| 欧美日韩一级二级三级| 亚洲制服欧美中文字幕中文字幕| 波波电影院一区二区三区| 国产蜜臀av在线一区二区三区| 狠狠色狠狠色综合系列| 欧美电视剧在线观看完整版| 日本va欧美va瓶| 欧美一区二区成人| 久久99精品久久久久| 日韩视频一区二区在线观看| 麻豆精品视频在线观看视频| 日韩欧美激情一区|