You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
4.3 KiB
199 lines
4.3 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 2004 Matthias Kretz <kretz@kde.org>
|
|
|
|
This library 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 library 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
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
#include "simpleplayer.h"
|
|
#include <kurl.h>
|
|
#include <kglobal.h>
|
|
#include <kinstance.h>
|
|
#include <kaboutdata.h>
|
|
|
|
namespace KDE
|
|
{
|
|
namespace Multimedia
|
|
{
|
|
|
|
class SimplePlayer::Private
|
|
{
|
|
public:
|
|
Channel * channel;
|
|
Player * player;
|
|
|
|
KURL url;
|
|
Player::State state;
|
|
float channelvolume;
|
|
long time;
|
|
TQString title;
|
|
TQString type;
|
|
};
|
|
|
|
SimplePlayer::SimplePlayer( TQObject * parent, const char * name )
|
|
: TQObject( parent, name )
|
|
, d( new Private )
|
|
{
|
|
connect( Factory::self(), TQT_SIGNAL( deleteYourObjects() ), TQT_SLOT( deleteYourObjects() ) );
|
|
connect( Factory::self(), TQT_SIGNAL( recreateObjects() ), TQT_SLOT( recreateObjects() ) );
|
|
d->channel = Factory::self()->createChannel( KGlobal::instance()->aboutData()->programName() );
|
|
d->player = Factory::self()->createPlayer();
|
|
if ( d->player ) {
|
|
d->player->setOutputChannel( d->channel );
|
|
connect( d->player, TQT_SIGNAL( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ),
|
|
TQT_SLOT( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ) );
|
|
connect( d->player, TQT_SIGNAL( finished() ), TQT_SIGNAL( finished() ) );
|
|
};
|
|
}
|
|
|
|
SimplePlayer::~SimplePlayer()
|
|
{
|
|
delete d->player;
|
|
delete d->channel;
|
|
}
|
|
|
|
void SimplePlayer::play( const KURL & url )
|
|
{
|
|
if( ! d->player )
|
|
return;
|
|
if( isPaused() && url == d->url )
|
|
{
|
|
d->player->play();
|
|
return;
|
|
}
|
|
if( ! d->player->load( url ) )
|
|
return;
|
|
d->url = url;
|
|
if( d->player->state() == Player::Stopped )
|
|
d->player->play();
|
|
}
|
|
|
|
void SimplePlayer::pause()
|
|
{
|
|
if( ! d->player )
|
|
return;
|
|
d->player->pause();
|
|
}
|
|
|
|
void SimplePlayer::stop()
|
|
{
|
|
if( ! d->player )
|
|
return;
|
|
d->player->stop();
|
|
}
|
|
|
|
long SimplePlayer::totalTime() const
|
|
{
|
|
if( ! d->player )
|
|
return 0;
|
|
return d->player->totalTime();
|
|
}
|
|
|
|
long SimplePlayer::currentTime() const
|
|
{
|
|
if( ! d->player )
|
|
return 0;
|
|
return d->player->currentTime();
|
|
}
|
|
|
|
void SimplePlayer::seek( long ms )
|
|
{
|
|
if( ! d->player )
|
|
return;
|
|
d->player->seek( ms );
|
|
}
|
|
|
|
float SimplePlayer::volume() const
|
|
{
|
|
if( ! d->player )
|
|
return 0;
|
|
return d->channel->volume();
|
|
}
|
|
|
|
void SimplePlayer::setVolume( float v )
|
|
{
|
|
if( ! d->player )
|
|
return;
|
|
d->channel->setVolume( v );
|
|
}
|
|
|
|
bool SimplePlayer::isPlaying() const
|
|
{
|
|
if( ! d->player )
|
|
return false;
|
|
return ( d->player->state() == Player::Playing );
|
|
}
|
|
|
|
bool SimplePlayer::isPaused() const
|
|
{
|
|
if( ! d->player )
|
|
return false;
|
|
return ( d->player->state() == Player::Paused );
|
|
}
|
|
|
|
void SimplePlayer::stateChanged( Player::State ns, Player::State os )
|
|
{
|
|
if( ! d->player )
|
|
return;
|
|
if( os == Player::Loading && ns == Player::Stopped )
|
|
d->player->play();
|
|
}
|
|
|
|
void SimplePlayer::deleteYourObjects()
|
|
{
|
|
d->state = d->player->state();
|
|
d->channelvolume = d->channel->volume();
|
|
d->time = d->player->currentTime();
|
|
d->title = d->channel->channelName();
|
|
d->type = d->channel->channelType();
|
|
|
|
if( d->player )
|
|
d->player->stop();
|
|
|
|
delete d->player;
|
|
delete d->channel;
|
|
d->player = 0;
|
|
d->channel = 0;
|
|
}
|
|
|
|
void SimplePlayer::recreateObjects()
|
|
{
|
|
d->channel = Factory::self()->createChannel( d->title, d->type );
|
|
d->channel->setVolume( d->channelvolume );
|
|
|
|
d->player = Factory::self()->createPlayer();
|
|
if( ! d->player )
|
|
return;
|
|
|
|
d->player->setOutputChannel( d->channel );
|
|
|
|
if( d->state != Player::NoMedia )
|
|
if( ! d->player->load( d->url ) )
|
|
return;
|
|
if( d->state == Player::Playing || d->state == Player::Paused || d->state == Player::Buffering )
|
|
{
|
|
d->player->play();
|
|
d->player->seek( d->time );
|
|
if( d->state == Player::Paused )
|
|
d->player->pause();
|
|
}
|
|
}
|
|
|
|
}} // namespaces
|
|
|
|
#include "simpleplayer.moc"
|
|
|
|
// vim: sw=4 ts=4 noet
|