95 lines
3.0 KiB
C++
95 lines
3.0 KiB
C++
/*
|
|
Copyright (C) 2019 by Kevin Whitaker <eyecreate@eyecreate.org>
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License as
|
|
published by the Free Software Foundation; either version 2 of
|
|
the License or (at your option) version 3 or any later version
|
|
accepted by the membership of KDE e.V. (or its successor approved
|
|
by the membership of KDE e.V.), which shall act as a proxy
|
|
defined in Section 14 of version 3 of the license.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "simplecastengine.h"
|
|
#include "simplecastservice.h"
|
|
|
|
SimpleCastEngine::SimpleCastEngine(QObject *parent, const QVariantList &args)
|
|
: Plasma::DataEngine(parent,args), player(new MiniMediaPlayer(this))
|
|
{
|
|
Q_UNUSED(args)
|
|
setMinimumPollingInterval(333);
|
|
connect(player,SIGNAL(playStateChanged(bool)),this,SLOT(playStateChanged(bool)));
|
|
connect(player,SIGNAL(trackDurationChanged(qint64)),this,SLOT(durationChanged(qint64)));
|
|
connect(player,SIGNAL(trackPositionChanged(qint64)),this,SLOT(positionChanged(qint64)));
|
|
connect(player,SIGNAL(playlistChanged(QStringList)),this,SLOT(playlistChanged(QStringList)));
|
|
}
|
|
|
|
void SimpleCastEngine::durationChanged(qint64 length)
|
|
{
|
|
setData("CurrentState","trackDuration",length);
|
|
}
|
|
|
|
void SimpleCastEngine::playStateChanged(bool isPlaying)
|
|
{
|
|
setData("CurrentState","playingState",isPlaying);
|
|
}
|
|
|
|
void SimpleCastEngine::positionChanged(qint64 position)
|
|
{
|
|
setData("CurrentState","trackPosition",position);
|
|
}
|
|
|
|
bool SimpleCastEngine::sourceRequestEvent(const QString& source)
|
|
{
|
|
return updateSourceEvent(source);
|
|
}
|
|
|
|
void SimpleCastEngine::playlistChanged(QStringList playlist)
|
|
{
|
|
setData("Playlist",playlist);
|
|
}
|
|
|
|
bool SimpleCastEngine::updateSourceEvent(const QString& source)
|
|
{
|
|
if(source == "Playlist")
|
|
{
|
|
setData(source, QStringList(player->getTrackNames()));
|
|
}
|
|
else if(source == "CurrentState")
|
|
{
|
|
QMap<QString,qint64> state = player->currentState();
|
|
setData(source,"trackDuration",state["duration"]);
|
|
setData(source,"trackPosition",state["position"]);
|
|
setData(source,"playingState",state["state"]);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
QStringList SimpleCastEngine::sources() const
|
|
{
|
|
return QStringList() << "Playlist" << "CurrentState";
|
|
}
|
|
|
|
Plasma::Service * SimpleCastEngine::serviceForSource(const QString& source)
|
|
{
|
|
if(source == "CurrentState")
|
|
{
|
|
return new SimpleCastService(source, player, this);
|
|
}
|
|
return Plasma::DataEngine::serviceForSource(source);
|
|
}
|
|
|
|
|
|
|
|
K_EXPORT_PLASMA_DATAENGINE_WITH_JSON(org.eyecreate.simplecast, SimpleCastEngine,"plasma-dataengine-simplecast.json")
|
|
|
|
#include "simplecastengine.moc"
|