/* Copyright (c) 2006 Nikolaj Hald Nielsen This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "amarok.h" #include "debug.h" #include "magnatunedatabasehandler.h" #include "magnatunepurchasehandler.h" #include "statusbar.h" #include #include #include #include MagnatunePurchaseHandler::MagnatunePurchaseHandler() : TQObject() { m_downloadDialog = 0; m_purchaseDialog = 0; m_albumDownloader = 0; } MagnatunePurchaseHandler::~MagnatunePurchaseHandler() { delete m_downloadDialog; delete m_purchaseDialog; delete m_albumDownloader; } void MagnatunePurchaseHandler::purchaseAlbum( const MagnatuneAlbum &album ) { m_currentAlbum = album; //first lets get the album cover for the album we are about to purchase. //Then we can show it on the purchase dialog as well as put it in the //same directory as the album. TQString albumCoverUrlString = album.getCoverURL(); if ( m_albumDownloader == 0 ) { m_albumDownloader = new MagnatuneAlbumDownloader(); connect( m_albumDownloader, TQT_SIGNAL( coverDownloadCompleted( TQString ) ), this, TQT_SLOT( showPurchaseDialog( TQString ) ) ); } m_currentAlbumCoverName = album.getName() + " - cover.jpg"; m_albumDownloader->downloadCover( albumCoverUrlString, m_currentAlbumCoverName ); } void MagnatunePurchaseHandler::showPurchaseDialog( TQString coverTempLocation ) { if ( m_albumDownloader != 0 ) { delete m_albumDownloader; m_albumDownloader = 0; } if ( m_purchaseDialog == 0 ) { m_purchaseDialog = new MagnatunePurchaseDialog( m_parent, "PurchaseDialog", true, 0 ); connect( m_purchaseDialog, TQT_SIGNAL( makePurchase( TQString, TQString, TQString, TQString, TQString, TQString, int ) ), this, TQT_SLOT( processPayment( TQString, TQString, TQString, TQString, TQString, TQString, int ) ) ); connect ( m_purchaseDialog, TQT_SIGNAL( cancelled() ), this, TQT_SLOT( albumPurchaseCancelled() ) ); } if ( m_currentAlbum.getId() != 0 ) { KTempDir tempDir; m_purchaseDialog->setAlbum( m_currentAlbum ); m_purchaseDialog->setCover( coverTempLocation + m_currentAlbumCoverName ); m_purchaseDialog->show(); } } void MagnatunePurchaseHandler::processPayment( TQString ccNumber, TQString expYear, TQString expMonth, TQString name, TQString email, TQString albumCode, int amount ) { TQString amountString; amountString.setNum( amount, 10 ); TQString purchaseURL = "https://magnatune.com/buy/buy_dl_cc_xml?cc=" + ccNumber + "&mm=" + expMonth + "&yy=" + expYear + "&sku=" + albumCode + "&name=" + name + "&email=" + email + "&id=amarok&amount=" + amountString; TQString debugPurchaseURL = "https://magnatune.com/buy/buy_dl_cc_xml?cc=**********&mm=**&yy=**&sku=" + albumCode + "&name=" + name + "&email=********&id=amarok&amount=" + amountString; debug() << "purchase url : " << debugPurchaseURL << endl; m_resultDownloadJob = KIO::storedGet( KURL( purchaseURL ), false, false ); Amarok::StatusBar::instance() ->newProgressOperation( m_resultDownloadJob ).setDescription( i18n( "Processing Payment" ) ); connect( m_resultDownloadJob, TQT_SIGNAL( result( KIO::Job* ) ), TQT_SLOT( xmlDownloadComplete( KIO::Job* ) ) ); } void MagnatunePurchaseHandler::xmlDownloadComplete( KIO::Job * downloadJob ) { debug() << "xml download complete" << endl; if ( !downloadJob->error() == 0 ) { //TODO: error handling here return ; } if ( downloadJob != m_resultDownloadJob ) return ; //not the right job, so let's ignore it KIO::StoredTransferJob* const storedJob = static_cast( downloadJob ); TQString resultXml = TQString( storedJob->data() ); debug() << endl << endl << "result: " << resultXml << endl << endl; if ( m_albumDownloader == 0 ) { m_albumDownloader = new MagnatuneAlbumDownloader(); connect( m_albumDownloader, TQT_SIGNAL( downloadComplete( bool ) ), this, TQT_SLOT( albumDownloadComplete( bool ) ) ); } if ( m_downloadDialog == 0 ) { m_downloadDialog = new MagnatuneDownloadDialog( m_parent, "downloaddialog", true, 0 ); connect( m_downloadDialog, TQT_SIGNAL( downloadAlbum( MagnatuneDownloadInfo * ) ), m_albumDownloader, TQT_SLOT( downloadAlbum( MagnatuneDownloadInfo * ) ) ); } MagnatuneDownloadInfo * downloadInfo = new MagnatuneDownloadInfo(); if ( downloadInfo->initFromString( resultXml ) ) { downloadInfo->setAlbumId( m_currentAlbum.getId() ); saveDownloadInfo( resultXml ); m_downloadDialog->setDownloadInfo( downloadInfo ); //m_purchaseDialog->close(); delete m_purchaseDialog; m_purchaseDialog = 0; m_downloadDialog->show(); } else { TQMessageBox::information( m_parent, "Could not process payment", "There seems to be an error in the information entered (check the credit card number), please try again\n" ); m_purchaseDialog->setEnabled( true ); } } void MagnatunePurchaseHandler::setParent( TQWidget * parent ) { m_parent = parent; } void MagnatunePurchaseHandler::saveDownloadInfo( TQString infoXml ) { TQDir purchaseDir( Amarok::saveLocation( "magnatune.com/purchases/" ) ); debug() << "magnatune save location" << purchaseDir.absPath() << endl; //if directory does not exist, create it if ( ! purchaseDir.exists () ) { purchaseDir.mkdir( ".", false ); } //Create file name MagnatuneArtist artist = MagnatuneDatabaseHandler::instance() ->getArtistById( m_currentAlbum.getArtistId() ); TQString artistName = artist.getName(); TQString fileName = artistName + " - " + m_currentAlbum.getName(); TQFile file( purchaseDir.absPath() + "/" + fileName ); //Skip if file already exists if ( file.exists () ) return ; //write info if ( file.open( IO_WriteOnly ) ) { TQTextStream stream( &file ); stream << infoXml << "\n"; file.close(); } } void MagnatunePurchaseHandler::albumDownloadComplete( bool success ) { //cleanup time! debug() << "MagnatunePurchaseHandler::albumDownloadComplete" << endl; delete m_downloadDialog; m_downloadDialog = 0; emit( purchaseCompleted( success ) ); } void MagnatunePurchaseHandler::albumPurchaseCancelled( ) { debug() << "Purchased dialog cancelled, deleting..." << endl; delete m_purchaseDialog; m_purchaseDialog = 0; emit( purchaseCompleted( false ) ); } #include "magnatunepurchasehandler.moc"