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.
196 lines
4.8 KiB
196 lines
4.8 KiB
/*
|
|
Copyright (C) 2001 Matthias Kretz <kretz@kde.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) any later version.
|
|
|
|
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, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
/* $Id$ */
|
|
#include "wavecapture.h"
|
|
|
|
#include <noatun/player.h>
|
|
#include <noatun/app.h>
|
|
#include <noatun/engine.h>
|
|
#include <noatun/noatunarts.h>
|
|
|
|
#include <arts/soundserver.h>
|
|
#include <arts/mcoputils.h>
|
|
|
|
#include <tdelocale.h>
|
|
#include <tdepopupmenu.h>
|
|
#include <tdefiledialog.h>
|
|
#include <kurl.h>
|
|
#include <tderecentdocument.h>
|
|
#include <tdeio/job.h>
|
|
#include <tdeio/jobclasses.h>
|
|
|
|
#include <tqfile.h>
|
|
#include <tqstring.h>
|
|
#include <tqtimer.h>
|
|
|
|
#include <string>
|
|
|
|
extern "C"
|
|
{
|
|
KDE_EXPORT Plugin* create_plugin()
|
|
{
|
|
TDEGlobal::locale()->insertCatalogue("wavecapture");
|
|
return new WaveCapture();
|
|
}
|
|
}
|
|
|
|
WaveCapture::WaveCapture() : TQObject(0,0), Plugin(),
|
|
_enabled( false ),
|
|
_status( STOPPED ),
|
|
_capture( Arts::DynamicCast( napp->player()->engine()->server()->createObject( "Arts::Effect_WAVECAPTURE" ) ) ),
|
|
_count( 0 ),
|
|
_id( 0 ),
|
|
_filename( "" ),
|
|
_timer( new TQTimer( this ) ),
|
|
m_job( 0 )
|
|
{
|
|
NOATUNPLUGINC(WaveCapture);
|
|
|
|
if( napp->player()->isPlaying() )
|
|
_status = PLAYING;
|
|
else if( napp->player()->isPaused() )
|
|
_status = PAUSED;
|
|
|
|
newSong();
|
|
|
|
connect( _timer, TQ_SIGNAL( timeout() ), TQ_SLOT( saveAs() ) );
|
|
|
|
connect(napp->player(), TQ_SIGNAL(changed()), TQ_SLOT(newSong()));
|
|
connect(napp->player(), TQ_SIGNAL(stopped()), TQ_SLOT(stopped()));
|
|
connect(napp->player(), TQ_SIGNAL(playing()), TQ_SLOT(playing()));
|
|
connect(napp->player(), TQ_SIGNAL( paused()), TQ_SLOT( paused()));
|
|
}
|
|
|
|
WaveCapture::~WaveCapture()
|
|
{
|
|
napp->pluginMenuRemove(pluginMenuItem);
|
|
if( _enabled )
|
|
{
|
|
if( PLAYING == _status )
|
|
stop();
|
|
TQString filename = TQFile::decodeName( (Arts::MCOPUtils::createFilePath( _filename ) + ".wav").c_str() );
|
|
TQFile::remove( filename );
|
|
}
|
|
delete m_job;
|
|
}
|
|
|
|
void WaveCapture::init()
|
|
{
|
|
pluginMenuItem = napp->pluginMenuAdd( i18n( "Wave Capture" ), this, TQ_SLOT( toggle() ) );
|
|
napp->pluginMenu()->setCheckable( true );
|
|
}
|
|
|
|
void WaveCapture::toggle()
|
|
{
|
|
_enabled = ! _enabled;
|
|
if( PLAYING == _status )
|
|
{
|
|
if( _enabled )
|
|
start();
|
|
else
|
|
{
|
|
stop();
|
|
TQString filename = TQFile::decodeName( (Arts::MCOPUtils::createFilePath( _filename ) + ".wav").c_str() );
|
|
TQFile::remove( filename );
|
|
}
|
|
}
|
|
napp->pluginMenu()->setItemChecked( pluginMenuItem, _enabled );
|
|
}
|
|
|
|
void WaveCapture::newSong()
|
|
{
|
|
if( napp->player()->current() )
|
|
{
|
|
TQString title = napp->player()->current().title();
|
|
_capture.filename( std::string( TQFile::encodeName( title ) ) );
|
|
}
|
|
_timer->start( 0, true );
|
|
}
|
|
|
|
void WaveCapture::saveAs()
|
|
{
|
|
// this could be a candidate for a race condition - but unlikely and harmless
|
|
std::string filename = _filename;
|
|
_filename = _capture.filename().c_str();
|
|
if( _enabled && ( !filename.empty() ) )
|
|
{
|
|
KFileDialog dlg( ":savedir", "*.wav", 0, "filedialog", true );
|
|
dlg.setCaption( i18n( "Save Last Wave File As" ) );
|
|
dlg.setOperationMode( KFileDialog::Saving );
|
|
dlg.setSelection( TQFile::decodeName( filename.c_str() ) + ".wav" );
|
|
|
|
TQString filename2 = TQFile::decodeName( (Arts::MCOPUtils::createFilePath( filename ) + ".wav").c_str() );
|
|
if( dlg.exec() )
|
|
{
|
|
KURL url = dlg.selectedURL();
|
|
if (url.isValid())
|
|
TDERecentDocument::add( url );
|
|
|
|
m_job = TDEIO::file_move( KURL( filename2 ), url, -1, true );
|
|
connect( m_job, TQ_SIGNAL( result( TDEIO::Job* ) ), TQ_SLOT( copyFinished( TDEIO::Job* ) ) );
|
|
}
|
|
else
|
|
{
|
|
TQFile::remove( filename2 );
|
|
}
|
|
}
|
|
}
|
|
|
|
void WaveCapture::stopped()
|
|
{
|
|
if( _enabled && PLAYING == _status )
|
|
stop();
|
|
_status = STOPPED;
|
|
_capture.filename( std::string( "" ) );
|
|
}
|
|
|
|
void WaveCapture::playing()
|
|
{
|
|
if( _enabled && PLAYING != _status )
|
|
start();
|
|
_status = PLAYING;
|
|
}
|
|
|
|
void WaveCapture::paused()
|
|
{
|
|
if( _enabled && PLAYING == _status )
|
|
stop();
|
|
_status = PAUSED;
|
|
}
|
|
|
|
void WaveCapture::start()
|
|
{
|
|
_capture.start();
|
|
_id = napp->player()->engine()->globalEffectStack()->insertBottom( _capture, "capture too wave" );
|
|
}
|
|
|
|
void WaveCapture::stop()
|
|
{
|
|
napp->player()->engine()->globalEffectStack()->remove( _id );
|
|
_capture.stop();
|
|
_timer->start( 0, true );
|
|
}
|
|
|
|
void WaveCapture::copyFinished( TDEIO::Job* job )
|
|
{
|
|
if( job == m_job )
|
|
m_job = 0;
|
|
}
|
|
|
|
#include "wavecapture.moc"
|