aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/General/General.pro16
-rw-r--r--src/plugins/General/converter/converter.cpp42
-rw-r--r--src/plugins/General/converter/converterdialog.cpp14
-rw-r--r--src/plugins/General/kdenotify/kdenotify.cpp11
-rw-r--r--src/plugins/General/mpris/mpris1/playerobject.cpp37
-rw-r--r--src/plugins/General/mpris/mpris1/tracklistobject.cpp12
-rw-r--r--src/plugins/General/mpris/mpris2/player2object.cpp59
-rw-r--r--src/plugins/General/rgscan/rgscandialog.cpp20
-rw-r--r--src/plugins/General/rgscan/rgscanner.cpp6
-rw-r--r--src/plugins/General/scrobbler/scrobbler.cpp4
-rw-r--r--src/plugins/General/trackchange/trackchange.cpp27
-rw-r--r--src/plugins/General/trackchange/trackchange.h10
-rw-r--r--src/qmmpui/metadataformatter.cpp5
-rw-r--r--src/qmmpui/metadataformatter.h2
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.