/* * Copyright 2007 Alex Merry * * Based on Xmms support in the Kopete Now Listening plugin * Copyright 2002 by Will Stephenson * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License version 2 as * published by the Free Software Foundation * * 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 Library General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "xmms.h" #include "xmms_p.h" #include #include XmmsFactory::XmmsFactory(QObject* parent) : PollingPlayerFactory(parent) { setObjectName( QLatin1String("XmmsFactory" )); } Player::Ptr XmmsFactory::create(const QVariantList& args) { int session = 0; if (!args.isEmpty() && args.first().canConvert()) { session = args.first().toInt(); if (session < 0) { return Player::Ptr(0); } } if (xmms_remote_is_running(session)) { Xmms* player = new Xmms(session, this); kDebug() << "Creating a player for XMMS session" << session; return Player::Ptr(player); } return Player::Ptr(0); } bool XmmsFactory::exists(const QVariantList& args) { int session = 0; if (!args.isEmpty() && args.first().canConvert()) { session = args.first().toInt(); } return (session >= 0) && xmms_remote_is_running(session); } Xmms::Xmms(int session, PlayerFactory* factory) : Player(factory), m_session(session) { if (m_session == 0) { setName("XMMS"); } else { setName("XMMS" + QString::number(m_session)); } } Xmms::~Xmms() { } bool Xmms::isRunning() { return xmms_remote_is_running(m_session); } Player::State Xmms::state() { if (xmms_remote_is_paused(m_session)) { return Paused; } else if (xmms_remote_is_playing(m_session)) { return Playing; } return Stopped; } QString Xmms::artist() { // let's hope no-one changes the default title string QString track = xmms_remote_get_playlist_title(m_session, xmms_remote_get_playlist_pos(0)); return track.section(" - ", 0, 0); } QString Xmms::album() { return QString(); } QString Xmms::title() { // let's hope no-one changes the default title string QString track = xmms_remote_get_playlist_title(m_session, xmms_remote_get_playlist_pos(0)); return track.section(" - ", -1, -1); } int Xmms::trackNumber() { // we can get the playlist pos, but that's not what we mean by "trackNumber" return 0; } QString Xmms::comment() { return QString(); } QString Xmms::genre() { return QString(); } int Xmms::length() { return xmms_remote_get_playlist_time(m_session, xmms_remote_get_playlist_pos(0)); } int Xmms::position() { return xmms_remote_get_output_time(m_session); } float Xmms::volume() { return xmms_remote_get_main_volume(m_session); } void Xmms::play() { xmms_remote_play(m_session); } void Xmms::pause() { xmms_remote_pause(m_session); } void Xmms::stop() { xmms_remote_stop(m_session); } void Xmms::previous() { xmms_remote_playlist_prev(m_session); } void Xmms::next() { xmms_remote_playlist_next(m_session); } void Xmms::setVolume(qreal volume) { xmms_remote_set_main_volume(m_session, volume); } void Xmms::seek(int time) { xmms_remote_jump_to_time(m_session, time); } #include "moc_xmms.cpp"