diff options
| -rw-r--r-- | src/plugins/General/General.pro | 16 | ||||
| -rw-r--r-- | src/plugins/General/converter/converter.cpp | 42 | ||||
| -rw-r--r-- | src/plugins/General/converter/converterdialog.cpp | 14 | ||||
| -rw-r--r-- | src/plugins/General/kdenotify/kdenotify.cpp | 11 | ||||
| -rw-r--r-- | src/plugins/General/mpris/mpris1/playerobject.cpp | 37 | ||||
| -rw-r--r-- | src/plugins/General/mpris/mpris1/tracklistobject.cpp | 12 | ||||
| -rw-r--r-- | src/plugins/General/mpris/mpris2/player2object.cpp | 59 | ||||
| -rw-r--r-- | src/plugins/General/rgscan/rgscandialog.cpp | 20 | ||||
| -rw-r--r-- | src/plugins/General/rgscan/rgscanner.cpp | 6 | ||||
| -rw-r--r-- | src/plugins/General/scrobbler/scrobbler.cpp | 4 | ||||
| -rw-r--r-- | src/plugins/General/trackchange/trackchange.cpp | 27 | ||||
| -rw-r--r-- | src/plugins/General/trackchange/trackchange.h | 10 | ||||
| -rw-r--r-- | src/qmmpui/metadataformatter.cpp | 5 | ||||
| -rw-r--r-- | src/qmmpui/metadataformatter.h | 2 |
14 files changed, 138 insertions, 127 deletions
diff --git a/src/plugins/General/General.pro b/src/plugins/General/General.pro index 5931fae4d..03727ba7d 100644 --- a/src/plugins/General/General.pro +++ b/src/plugins/General/General.pro @@ -3,18 +3,18 @@ include(../../../qmmp.pri) SUBDIRS += statusicon \ notifier \ lyrics \ -# scrobbler \ + scrobbler \ fileops \ covermanager \ streambrowser \ -# trackchange \ + trackchange \ hotkey \ - copypaste -# rgscan -#unix:SUBDIRS += mpris \ -# kdenotify \ -# converter \ -# gnomehotkey + copypaste \ + rgscan +unix:SUBDIRS += mpris \ + kdenotify \ + converter \ + gnomehotkey contains(CONFIG, UDISKS2_PLUGIN){ unix:SUBDIRS += udisks2 diff --git a/src/plugins/General/converter/converter.cpp b/src/plugins/General/converter/converter.cpp index f11a28ca5..d5e39c8a0 100644 --- a/src/plugins/General/converter/converter.cpp +++ b/src/plugins/General/converter/converter.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2011-2017 by Ilya Kotov * + * Copyright (C) 2011-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -80,14 +80,14 @@ bool Converter::prepare(const QString &url, int row, const QVariantMap &preset) DecoderFactory *factory = 0; - if(!source->url().contains("://")) - factory = Decoder::findByFilePath(source->url()); + if(!source->path().contains("://")) + factory = Decoder::findByFilePath(source->path()); if(!factory) factory = Decoder::findByMime(source->contentType()); - if(!factory && source->ioDevice() && source->url().contains("://")) //ignore content of local files + if(!factory && source->ioDevice() && source->path().contains("://")) //ignore content of local files factory = Decoder::findByContent(source->ioDevice()); - if(!factory && source->url().contains("://")) - factory = Decoder::findByProtocol(source->url().section("://",0,0)); + if(!factory && source->path().contains("://")) + factory = Decoder::findByProtocol(source->path().section("://",0,0)); if(!factory) { qWarning("Converter: unsupported file format"); @@ -97,7 +97,7 @@ bool Converter::prepare(const QString &url, int row, const QVariantMap &preset) qDebug("Converter: selected decoder: %s",qPrintable(factory->properties().shortName)); if(factory->properties().noInput && source->ioDevice()) source->ioDevice()->close(); - Decoder *decoder = factory->create(source->url(), source->ioDevice()); + Decoder *decoder = factory->create(source->path(), source->ioDevice()); if(!decoder->initialize()) { qWarning("Converter: invalid file format"); @@ -132,11 +132,11 @@ void Converter::run() } AudioParameters ap = m_decoder->audioParameters(); - QString url = m_input->url(); + QString path = m_input->path(); QString out_path = m_preset["out_dir"].toString(); QString pattern = m_preset["file_name"].toString(); - QList <FileInfo *> list = MetaDataManager::instance()->createPlayList(url); + QList<TrackInfo *> list = MetaDataManager::instance()->createPlayList(path); if(list.isEmpty() || out_path.isEmpty() || pattern.isEmpty()) { @@ -145,10 +145,13 @@ void Converter::run() return; } - QMap<Qmmp::MetaData, QString> metadata = list[0]->metaData(); + TrackInfo info = *list.first(); + qDeleteAll(list); + list.clear(); MetaDataFormatter formatter(pattern); - QString name = formatter.format(list[0]->metaData(), list[0]->length()); + + QString name = formatter.format(list.first()); QString full_path = out_path + "/" + name + "." + m_preset["ext"].toString(); if(QFile::exists(full_path)) @@ -175,9 +178,6 @@ void Converter::run() qDebug("Converter: starting task '%s'", qPrintable(m_preset["name"].toString())); emit message(m_row, tr("Converting")); - qDeleteAll(list); - list.clear(); - char wave_header[] = { 0x52, 0x49, 0x46, 0x46, //"RIFF" 0x00, 0x00, 0x00, 0x00, //(file size) - 8 0x57, 0x41, 0x56, 0x45, //WAVE @@ -256,13 +256,13 @@ void Converter::run() TagLib::FileRef file(qPrintable(full_path)); if(file.tag()) { - file.tag()->setTitle(QStringToTString(metadata[Qmmp::TITLE])); - file.tag()->setArtist(QStringToTString(metadata[Qmmp::ARTIST])); - file.tag()->setAlbum(QStringToTString(metadata[Qmmp::ALBUM])); - file.tag()->setGenre(QStringToTString(metadata[Qmmp::GENRE])); - file.tag()->setComment(QStringToTString(metadata[Qmmp::COMMENT])); - file.tag()->setYear(metadata[Qmmp::YEAR].toUInt()); - file.tag()->setTrack(metadata[Qmmp::TRACK].toUInt()); + file.tag()->setTitle(QStringToTString(info.value(Qmmp::TITLE))); + file.tag()->setArtist(QStringToTString(info.value(Qmmp::ARTIST))); + file.tag()->setAlbum(QStringToTString(info.value(Qmmp::ALBUM))); + file.tag()->setGenre(QStringToTString(info.value(Qmmp::GENRE))); + file.tag()->setComment(QStringToTString(info.value(Qmmp::COMMENT))); + file.tag()->setYear(info.value(Qmmp::YEAR).toUInt()); + file.tag()->setTrack(info.value(Qmmp::TRACK).toUInt()); if(full_path.endsWith(".mp3", Qt::CaseInsensitive)) { diff --git a/src/plugins/General/converter/converterdialog.cpp b/src/plugins/General/converter/converterdialog.cpp index 2325b125b..eb4f39e1f 100644 --- a/src/plugins/General/converter/converterdialog.cpp +++ b/src/plugins/General/converter/converterdialog.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2011-2017 by Ilya Kotov * + * Copyright (C) 2011-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -47,20 +47,20 @@ ConverterDialog::ConverterDialog(QList <PlayListTrack *> tracks, QWidget *paren foreach(PlayListTrack *track, tracks) { //skip streams - if(track->length() == 0 || track->url().contains("://")) + if(track->duration() == 0 || track->path().contains("://")) continue; //skip duplicates - if(paths.contains(track->url())) + if(paths.contains(track->path())) continue; //skip unsupported files - if(!MetaDataManager::instance()->supports(track->url())) + if(!MetaDataManager::instance()->supports(track->path())) continue; - paths.append(track->url()); + paths.append(track->path()); QString name = formatter.format(track); QTableWidgetItem *item = new QTableWidgetItem(name); - item->setData(Qt::UserRole, track->url()); - item->setData(Qt::ToolTipRole, track->url()); + item->setData(Qt::UserRole, track->path()); + item->setData(Qt::ToolTipRole, track->path()); m_ui.tableWidget->insertRow(m_ui.tableWidget->rowCount()); m_ui.tableWidget->setItem(m_ui.tableWidget->rowCount() - 1, 0, item); QProgressBar *progressBar = new QProgressBar(this); diff --git a/src/plugins/General/kdenotify/kdenotify.cpp b/src/plugins/General/kdenotify/kdenotify.cpp index 6b0826769..70dfa1489 100644 --- a/src/plugins/General/kdenotify/kdenotify.cpp +++ b/src/plugins/General/kdenotify/kdenotify.cpp @@ -74,7 +74,7 @@ KdeNotify::KdeNotify(QObject *parent) : QObject(parent),m_useFreedesktopSpec(fal if(m_updateNotify) { - connect(SoundCore::instance(),SIGNAL(metaDataChanged()),SLOT(showMetaData())); + connect(SoundCore::instance(),SIGNAL(trackInfoChanged()),SLOT(showMetaData())); connect(m_notifier,SIGNAL(NotificationClosed(uint,uint)),this,SLOT(notificationClosed(uint,uint))); } else @@ -83,7 +83,7 @@ KdeNotify::KdeNotify(QObject *parent) : QObject(parent),m_useFreedesktopSpec(fal timer->setSingleShot(true); timer->setInterval(NOTIFY_DELAY); //after that notification will be showed. connect(timer,SIGNAL(timeout()),SLOT(showMetaData())); - connect(SoundCore::instance(),SIGNAL(metaDataChanged()),timer, SLOT(start())); + connect(SoundCore::instance(),SIGNAL(trackInfoChanged()),timer, SLOT(start())); } } @@ -108,7 +108,8 @@ QString KdeNotify::totalTimeString() QList<QVariant> KdeNotify::prepareNotification() { SoundCore *core = SoundCore::instance(); - if(core->metaData(Qmmp::URL).isEmpty()) //prevent show empty notification + TrackInfo info = core->trackInfo(); + if(info.isEmpty()) //prevent show empty notification { return QList<QVariant>(); } @@ -121,12 +122,12 @@ QList<QVariant> KdeNotify::prepareNotification() args.append(tr("Qmmp now playing:")); //summary (notification title) MetaDataFormatter f(m_template); - QString body = f.format(core->metaData(), core->duration()/1000); + QString body = f.format(info); QString coverPath; if(m_showCovers) { - QPixmap cover = MetaDataManager::instance()->getCover(core->metaData(Qmmp::URL)); + QPixmap cover = MetaDataManager::instance()->getCover(info.path()); if(!cover.isNull()) { coverPath = m_coverPath; diff --git a/src/plugins/General/mpris/mpris1/playerobject.cpp b/src/plugins/General/mpris/mpris1/playerobject.cpp index a1b3c490b..77ea85d2a 100644 --- a/src/plugins/General/mpris/mpris1/playerobject.cpp +++ b/src/plugins/General/mpris/mpris1/playerobject.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2017 by Ilya Kotov * + * Copyright (C) 2008-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -61,7 +61,7 @@ PlayerObject::PlayerObject(QObject *parent) : QObject(parent) m_pl_manager = m_player->playListManager(); m_ui_settings = QmmpUiSettings::instance(); connect(m_core, SIGNAL(stateChanged (Qmmp::State)), SLOT(updateCaps())); - connect(m_core, SIGNAL(metaDataChanged ()), SLOT(updateTrack())); + connect(m_core, SIGNAL(trackInfoChanged()), SLOT(updateTrack())); connect(m_core, SIGNAL(stateChanged (Qmmp::State)), SLOT(updateStatus())); connect(m_ui_settings, SIGNAL(repeatableListChanged(bool)), SLOT(updateStatus())); connect(m_ui_settings, SIGNAL(shuffleChanged(bool)), SLOT(updateStatus())); @@ -126,25 +126,26 @@ PlayerStatus PlayerObject::GetStatus() QVariantMap PlayerObject::GetMetadata() { + TrackInfo info = m_core->trackInfo(); QVariantMap map; - if (m_core->metaData(Qmmp::URL).contains("://")) - map.insert("location", m_core->metaData(Qmmp::URL)); + if (info.path().contains("://")) + map.insert("location", info.path()); else - map.insert("location", "file://" + m_core->metaData(Qmmp::URL)); - map.insert("arturl", MetaDataManager::instance()->getCoverPath(m_core->metaData(Qmmp::URL))); - map.insert("title", m_core->metaData(Qmmp::TITLE)); - map.insert("artist", m_core->metaData(Qmmp::ARTIST)); - map.insert("albumartist", m_core->metaData(Qmmp::ALBUMARTIST)); - map.insert("album", m_core->metaData(Qmmp::ALBUM)); - map.insert("tracknumber", m_core->metaData(Qmmp::TRACK)); - map.insert("time", (quint32)m_core->duration()/1000); - map.insert("mtime", (quint32)m_core->duration()); - map.insert("genre", m_core->metaData(Qmmp::GENRE)); - map.insert("comment", m_core->metaData(Qmmp::COMMENT)); - map.insert("audio-bitrate", (quint32)m_core->bitrate()); - map.insert("audio-samplerate", (quint32)m_core->audioParameters().sampleRate()); - map.insert("year", m_core->metaData(Qmmp::YEAR).toUInt()); + map.insert("location", "file://" + info.path()); + map.insert("arturl", MetaDataManager::instance()->getCoverPath(info.path())); + map.insert("title", info.value(Qmmp::TITLE)); + map.insert("artist", info.value(Qmmp::ARTIST)); + map.insert("albumartist", info.value(Qmmp::ALBUMARTIST)); + map.insert("album", info.value(Qmmp::ALBUM)); + map.insert("tracknumber", info.value(Qmmp::TRACK)); + map.insert("time", (quint32)info.duration()/1000); + map.insert("mtime", (quint32)info.duration()); + map.insert("genre", info.value(Qmmp::GENRE)); + map.insert("comment", info.value(Qmmp::COMMENT)); + map.insert("audio-bitrate", (quint32)info.value(Qmmp::BITRATE).toInt()); + map.insert("audio-samplerate", (quint32)info.value(Qmmp::SAMPLERATE).toInt()); + map.insert("year", info.value(Qmmp::YEAR).toUInt()); return map; } diff --git a/src/plugins/General/mpris/mpris1/tracklistobject.cpp b/src/plugins/General/mpris/mpris1/tracklistobject.cpp index 740339c11..64b03bc51 100644 --- a/src/plugins/General/mpris/mpris1/tracklistobject.cpp +++ b/src/plugins/General/mpris/mpris1/tracklistobject.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2015 by Ilya Kotov * + * Copyright (C) 2008-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -84,17 +84,17 @@ QVariantMap TrackListObject::GetMetadata(int in0) if (track) { - if (track->url().contains("://")) - map.insert("location", track->url()); + if (track->path().contains("://")) + map.insert("location", track->path()); else - map.insert("location", "file://" + track->url()); + map.insert("location", "file://" + track->path()); map.insert("title", track->value(Qmmp::TITLE)); map.insert("artist", track->value(Qmmp::ARTIST)); map.insert("albumartist", track->value(Qmmp::ALBUMARTIST)); map.insert("album", track->value(Qmmp::ALBUM)); map.insert("tracknumber", track->value(Qmmp::TRACK)); - map.insert("time", (quint32)track->length()); - map.insert("mtime", (quint32)track->length() * 1000); + map.insert("time", (quint32)track->duration() / 1000); + map.insert("mtime", (quint32)track->duration()); map.insert("genre", track->value(Qmmp::GENRE)); map.insert("comment", track->value(Qmmp::COMMENT)); map.insert("year", track->value(Qmmp::YEAR).toUInt()); diff --git a/src/plugins/General/mpris/mpris2/player2object.cpp b/src/plugins/General/mpris/mpris2/player2object.cpp index cee1aebfe..962d8a618 100644 --- a/src/plugins/General/mpris/mpris2/player2object.cpp +++ b/src/plugins/General/mpris/mpris2/player2object.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010-2017 by Ilya Kotov * + * Copyright (C) 2010-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -38,8 +38,8 @@ Player2Object::Player2Object(QObject *parent) : QDBusAbstractAdaptor(parent) m_player = MediaPlayer::instance(); m_pl_manager = m_player->playListManager(); m_ui_settings = QmmpUiSettings::instance(); - connect(m_core, SIGNAL(metaDataChanged ()), SLOT(updateId())); - connect(m_core, SIGNAL(metaDataChanged ()), SLOT(emitPropertiesChanged())); + connect(m_core, SIGNAL(trackInfoChanged()), SLOT(updateId())); + connect(m_core, SIGNAL(trackInfoChanged()), SLOT(emitPropertiesChanged())); connect(m_core, SIGNAL(stateChanged (Qmmp::State)), SLOT(checkState(Qmmp::State))); connect(m_core, SIGNAL(stateChanged (Qmmp::State)), SLOT(emitPropertiesChanged())); connect(m_core, SIGNAL(volumeChanged(int,int)), SLOT(emitPropertiesChanged())); @@ -123,40 +123,41 @@ double Player2Object::maximumRate() const QVariantMap Player2Object::metadata() const { PlayListTrack *track = m_pl_manager->currentPlayList()->currentTrack(); - if(!track || m_core->metaData(Qmmp::URL).isEmpty()) + if(!track || m_core->path().isEmpty()) return QVariantMap(); QVariantMap map; + TrackInfo info = m_core->trackInfo(); map["mpris:length"] = qMax(m_core->duration() * 1000 , qint64(0)); - if(!MetaDataManager::instance()->getCoverPath(m_core->metaData(Qmmp::URL)).isEmpty()) + if(!MetaDataManager::instance()->getCoverPath(info.path()).isEmpty()) { map["mpris:artUrl"] = QUrl::fromLocalFile( - MetaDataManager::instance()->getCoverPath(m_core->metaData(Qmmp::URL))).toString(); + MetaDataManager::instance()->getCoverPath(info.path())).toString(); } - if(!m_core->metaData(Qmmp::ALBUM).isEmpty()) - map["xesam:album"] = m_core->metaData(Qmmp::ALBUM); - if(!m_core->metaData(Qmmp::ARTIST).isEmpty()) - map["xesam:artist"] = QStringList() << m_core->metaData(Qmmp::ARTIST); - if(!m_core->metaData(Qmmp::ALBUMARTIST).isEmpty()) - map["xesam:albumArtist"] = QStringList() << m_core->metaData(Qmmp::ALBUMARTIST); - if(!m_core->metaData(Qmmp::COMMENT).isEmpty()) - map["xesam:comment"] = QStringList() << m_core->metaData(Qmmp::COMMENT); - if(!m_core->metaData(Qmmp::COMPOSER).isEmpty()) - map["xesam:composer"] = QStringList() << m_core->metaData(Qmmp::COMPOSER); - if(!m_core->metaData(Qmmp::DISCNUMBER).isEmpty()) - map["xesam:discNumber"] = m_core->metaData(Qmmp::DISCNUMBER).toInt(); - if(!m_core->metaData(Qmmp::GENRE).isEmpty()) - map["xesam:genre"] = QStringList() << m_core->metaData(Qmmp::GENRE); - if(!m_core->metaData(Qmmp::TITLE).isEmpty()) - map["xesam:title"] = m_core->metaData(Qmmp::TITLE); - if(!m_core->metaData(Qmmp::TRACK).isEmpty()) - map["xesam:trackNumber"] = m_core->metaData(Qmmp::TRACK).toInt(); - if(!m_core->metaData(Qmmp::YEAR).isEmpty()) - map["xesam:contentCreated"] = m_core->metaData(Qmmp::YEAR); + if(!info.value(Qmmp::ALBUM).isEmpty()) + map["xesam:album"] = info.value(Qmmp::ALBUM); + if(!info.value(Qmmp::ARTIST).isEmpty()) + map["xesam:artist"] = QStringList() << info.value(Qmmp::ARTIST); + if(!info.value(Qmmp::ALBUMARTIST).isEmpty()) + map["xesam:albumArtist"] = QStringList() << info.value(Qmmp::ALBUMARTIST); + if(!info.value(Qmmp::COMMENT).isEmpty()) + map["xesam:comment"] = QStringList() << info.value(Qmmp::COMMENT); + if(!info.value(Qmmp::COMPOSER).isEmpty()) + map["xesam:composer"] = QStringList() << info.value(Qmmp::COMPOSER); + if(!info.value(Qmmp::DISCNUMBER).isEmpty()) + map["xesam:discNumber"] = info.value(Qmmp::DISCNUMBER).toInt(); + if(!info.value(Qmmp::GENRE).isEmpty()) + map["xesam:genre"] = QStringList() << info.value(Qmmp::GENRE); + if(!info.value(Qmmp::TITLE).isEmpty()) + map["xesam:title"] = info.value(Qmmp::TITLE); + if(!info.value(Qmmp::TRACK).isEmpty()) + map["xesam:trackNumber"] = info.value(Qmmp::TRACK).toInt(); + if(!info.value(Qmmp::YEAR).isEmpty()) + map["xesam:contentCreated"] = info.value(Qmmp::YEAR); map["mpris:trackid"] = QVariant::fromValue<QDBusObjectPath>(m_trackID); - if(m_core->metaData(Qmmp::URL).startsWith("/")) - map["xesam:url"] = QUrl::fromLocalFile(m_core->metaData(Qmmp::URL)).toString(); + if(info.path().startsWith("/")) + map["xesam:url"] = QUrl::fromLocalFile(info.path()).toString(); else - map["xesam:url"] = m_core->metaData(Qmmp::URL); + map["xesam:url"] = info.path(); return map; } diff --git a/src/plugins/General/rgscan/rgscandialog.cpp b/src/plugins/General/rgscan/rgscandialog.cpp index 2784a1a42..c2814b60c 100644 --- a/src/plugins/General/rgscan/rgscandialog.cpp +++ b/src/plugins/General/rgscan/rgscandialog.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2013-2016 by Ilya Kotov * + * Copyright (C) 2013-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -60,16 +60,16 @@ RGScanDialog::RGScanDialog(QList <PlayListTrack *> tracks, QWidget *parent) : Q foreach(PlayListTrack *track, tracks) { //skip streams - if(track->length() == 0 || track->url().contains("://")) + if(track->duration() == 0 || track->path().contains("://")) continue; //skip duplicates - if(paths.contains(track->url())) + if(paths.contains(track->path())) continue; //skip unsupported files - if(!MetaDataManager::instance()->supports(track->url())) + if(!MetaDataManager::instance()->supports(track->path())) continue; - QString ext = track->url().section(".", -1).toLower(); + QString ext = track->path().section(".", -1).toLower(); if((ext == "mp3") || //mpeg 1 layer 3 ext == "flac" || //native flac @@ -78,11 +78,11 @@ RGScanDialog::RGScanDialog(QList <PlayListTrack *> tracks, QWidget *parent) : Q ext == "wv" || //wavpack ext == "m4a") //aac (mp4 container) { - paths.append(track->url()); + paths.append(track->path()); QString name = formatter.format(track); QTableWidgetItem *item = new QTableWidgetItem(name); - item->setData(Qt::UserRole, track->url()); - item->setData(Qt::ToolTipRole, track->url()); + item->setData(Qt::UserRole, track->path()); + item->setData(Qt::ToolTipRole, track->path()); m_ui.tableWidget->insertRow(m_ui.tableWidget->rowCount()); m_ui.tableWidget->setItem(m_ui.tableWidget->rowCount() - 1, 0, item); QProgressBar *progressBar = new QProgressBar(this); @@ -275,10 +275,10 @@ RGScanner *RGScanDialog::findScannerByUrl(const QString &url) QString RGScanDialog::getAlbumName(const QString &url) { - QList <FileInfo *> infoList = MetaDataManager::instance()->createPlayList(url); + QList<TrackInfo *> infoList = MetaDataManager::instance()->createPlayList(url); if(infoList.isEmpty()) return QString(); - QString album = infoList.first()->metaData(Qmmp::ALBUM); + QString album = infoList.first()->value(Qmmp::ALBUM); qDeleteAll(infoList); return album; } diff --git a/src/plugins/General/rgscan/rgscanner.cpp b/src/plugins/General/rgscan/rgscanner.cpp index 5d7719284..e1311bd97 100644 --- a/src/plugins/General/rgscan/rgscanner.cpp +++ b/src/plugins/General/rgscan/rgscanner.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2013-2017 by Ilya Kotov * + * Copyright (C) 2013-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -74,7 +74,7 @@ bool RGScanner::prepare(const QString &url) return false; } - DecoderFactory *factory = Decoder::findByFilePath(source->url()); + DecoderFactory *factory = Decoder::findByFilePath(source->path()); if(!factory) { @@ -88,7 +88,7 @@ bool RGScanner::prepare(const QString &url) if(factory->properties().noInput && source->ioDevice()) source->ioDevice()->close(); - Decoder *decoder = factory->create(source->url(), source->ioDevice()); + Decoder *decoder = factory->create(source->path(), source->ioDevice()); if(!decoder->initialize()) { qWarning("RGScanner: [%s] invalid file format", qPrintable(name)); diff --git a/src/plugins/General/scrobbler/scrobbler.cpp b/src/plugins/General/scrobbler/scrobbler.cpp index 3c90abbbe..2652e3523 100644 --- a/src/plugins/General/scrobbler/scrobbler.cpp +++ b/src/plugins/General/scrobbler/scrobbler.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010-2016 by Ilya Kotov * + * Copyright (C) 2010-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -99,7 +99,7 @@ Scrobbler::Scrobbler(const QString &scrobblerUrl, const QString &name, QObject * connect(m_http, SIGNAL(finished (QNetworkReply *)), SLOT(processResponse(QNetworkReply *))); connect(QmmpSettings::instance(), SIGNAL(networkSettingsChanged()), SLOT(setupProxy())); - connect(m_core, SIGNAL(metaDataChanged()), SLOT(updateMetaData())); + connect(m_core, SIGNAL(trackInfoChanged()), SLOT(updateMetaData())); connect(m_core, SIGNAL(stateChanged (Qmmp::State)), SLOT(setState(Qmmp::State))); setupProxy(); diff --git a/src/plugins/General/trackchange/trackchange.cpp b/src/plugins/General/trackchange/trackchange.cpp index c72d5305f..cf19030a1 100644 --- a/src/plugins/General/trackchange/trackchange.cpp +++ b/src/plugins/General/trackchange/trackchange.cpp @@ -27,6 +27,7 @@ #include <QFile> #include <QDir> #include <QProcess> +#include <QMap> #include <qmmp/soundcore.h> #include <qmmpui/uihelper.h> #include <qmmpui/playlistmodel.h> @@ -41,7 +42,7 @@ TrackChange::TrackChange(QObject *parent) : QObject(parent) m_core = SoundCore::instance(); m_plManager = PlayListManager::instance(); connect(m_core, SIGNAL(stateChanged(Qmmp::State)), SLOT(onStateChanged(Qmmp::State))); - connect(m_core, SIGNAL(metaDataChanged()), SLOT(onMetaDataChanged())); + connect(m_core, SIGNAL(trackInfoChanged()), SLOT(onTrackInfoChanged())); connect(m_core, SIGNAL(finished()), SLOT(onFinised())); QSettings settings(Qmmp::configFile(), QSettings::IniFormat); m_newTrackCommand = settings.value("TrackChange/new_track_command").toString(); @@ -60,21 +61,21 @@ void TrackChange::onStateChanged(Qmmp::State state) case Qmmp::Playing: break; default: - m_prevMetaData.clear(); + m_prevInfo.clear(); } } -void TrackChange::onMetaDataChanged() +void TrackChange::onTrackInfoChanged() { - QMap <Qmmp::MetaData, QString> metaData = m_core->metaData(); - if(m_prevMetaData != metaData) + TrackInfo info = m_core->trackInfo(); + if(m_prevInfo.metaData() != info.metaData()) { - if(m_prevMetaData[Qmmp::URL] == metaData[Qmmp::URL]) + if(m_prevInfo.path() == info.path()) { if(!m_titleChangeCommand.isEmpty()) { qDebug("TrackChange: starting title change command.."); - executeCommand(metaData, m_titleChangeCommand); + executeCommand(info, m_titleChangeCommand); } } else @@ -82,11 +83,11 @@ void TrackChange::onMetaDataChanged() if(!m_newTrackCommand.isEmpty()) { qDebug("TrackChange: starting new track command.."); - executeCommand(metaData, m_newTrackCommand); + executeCommand(info, m_newTrackCommand); } } } - m_prevMetaData = metaData; + m_prevInfo = info; } void TrackChange::onFinised() @@ -94,19 +95,19 @@ void TrackChange::onFinised() if(!m_endOfTrackCommand.isEmpty()) { qDebug("TrackChange: starting end of track command.."); - executeCommand(m_prevMetaData, m_endOfTrackCommand); + executeCommand(m_prevInfo, m_endOfTrackCommand); } if(!m_endOfPlCommand.isEmpty() && !m_plManager->currentPlayList()->nextTrack()) { qDebug("TrackChange: starting end of playlist command.."); - executeCommand(m_prevMetaData, m_endOfPlCommand); + executeCommand(m_prevInfo, m_endOfPlCommand); } } -bool TrackChange::executeCommand(const QMap<Qmmp::MetaData, QString> &metaData, const QString &format) +bool TrackChange::executeCommand(const TrackInfo &info, const QString &format) { MetaDataFormatter formatter(format); - QString command = formatter.format(metaData); + QString command = formatter.format(info); #ifdef Q_OS_WIN bool ok = QProcess::startDetached(QString("cmd.exe \"%1\"").arg(command)); #else diff --git a/src/plugins/General/trackchange/trackchange.h b/src/plugins/General/trackchange/trackchange.h index 859973731..0ea02ad43 100644 --- a/src/plugins/General/trackchange/trackchange.h +++ b/src/plugins/General/trackchange/trackchange.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2013 by Ilya Kotov * + * Copyright (C) 2013-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -20,9 +20,9 @@ #ifndef TRACKCHANGE_H #define TRACKCHANGE_H -#include <QMap> #include <qmmpui/general.h> #include <qmmp/qmmp.h> +#include <qmmp/trackinfo.h> class QAction; class SoundCore; @@ -42,18 +42,18 @@ public: private slots: void onStateChanged(Qmmp::State state); - void onMetaDataChanged(); + void onTrackInfoChanged(); void onFinised(); private: - bool executeCommand(const QMap <Qmmp::MetaData, QString> &metaData, const QString &format); + bool executeCommand(const TrackInfo &info, const QString &format); QString m_newTrackCommand; QString m_endOfTrackCommand; QString m_endOfPlCommand; QString m_titleChangeCommand; SoundCore *m_core; PlayListManager *m_plManager; - QMap <Qmmp::MetaData, QString> m_prevMetaData; + TrackInfo m_prevInfo; }; #endif diff --git a/src/qmmpui/metadataformatter.cpp b/src/qmmpui/metadataformatter.cpp index b508f1cad..84a426ce1 100644 --- a/src/qmmpui/metadataformatter.cpp +++ b/src/qmmpui/metadataformatter.cpp @@ -106,6 +106,11 @@ QString MetaDataFormatter::format(const TrackInfo &info, int trackIndex) const return evalute(&m_nodes, &info, trackIndex); } +QString MetaDataFormatter::format(const TrackInfo *info, int trackIndex) const +{ + return format(*info, trackIndex); +} + QString MetaDataFormatter::formatDuration(qint64 duration, bool hideZero, bool showMs) { if(duration <= 0) diff --git a/src/qmmpui/metadataformatter.h b/src/qmmpui/metadataformatter.h index 086989e72..00dede227 100644 --- a/src/qmmpui/metadataformatter.h +++ b/src/qmmpui/metadataformatter.h @@ -76,6 +76,8 @@ public: * \param track Index of track. */ QString format(const TrackInfo &info, int trackIndex = 0) const; + + QString format(const TrackInfo *info, int trackIndex = 0) const; /*! * Returns formatted duration (example: 05:02:03). * \param duration Duration in milliseconds. |
