Newer
Older
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 "simplecastservice.h"
SimpleCastEngine::SimpleCastEngine(QObject *parent, const QVariantList &args)
: Plasma::DataEngine(parent,args), player(new MiniMediaPlayer(this))
rootInt = new MPRISInterface(this);
playerInt = new MPRISPlayerInterface(player,this);
QDBusConnection::sessionBus().registerObject("/org/mpris/MediaPlayer2","org.mpris.MediaPlayer2",rootInt);
QDBusConnection::sessionBus().registerObject("/org/mpris/MediaPlayer2","org.mpris.MediaPlayer2.Player",playerInt);
QDBusConnection::sessionBus().registerService("org.mpris.MediaPlayer2.Player.simplecast");
tcpService = new SimpleCastTcpService(player,this);
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)));
tcpService->listen(QHostAddress::Any,54634);
}
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","trackNames",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"