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.
amarok/amarok/src/magnatunebrowser/magnatunedownloadinfo.cpp

265 lines
6.7 KiB

/*
Copyright (c) 2006 Nikolaj Hald Nielsen <nhnFreespirit@gmail.com>
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 "magnatunedownloadinfo.h"
#include "debug.h"
#include <tqfile.h>
MagnatuneDownloadInfo::MagnatuneDownloadInfo()
{
m_selectedDownloadFormat = TQString();
m_albumId = -1;
}
MagnatuneDownloadInfo::~MagnatuneDownloadInfo()
{}
bool MagnatuneDownloadInfo::initFromFile( TQString downloadInfoFileName )
{
TQString xml;
TQFile file( downloadInfoFileName );
if ( file.open( IO_ReadOnly ) )
{
TQTextStream stream( &file );
while ( !stream.atEnd() )
{
xml += (stream.readLine() + '\n');
}
file.close();
} else {
debug() << "Error opening file: '" << downloadInfoFileName << "'" << endl;
return false;
}
//debug() << "XML from file: '" << xml << "'" << endl;
return initFromString( xml );
}
bool MagnatuneDownloadInfo::initFromString( TQString downloadInfoString )
{
//complete overkill to do a full SAX2 parser for this at the moment... I think....
// lets make sure that this is actually a valid result
int testIndex = downloadInfoString.find( "<RESULT>" );
if ( testIndex == -1 )
{
return false;
};
int startIndex;
int endIndex;
startIndex = downloadInfoString.find( "<DL_USERNAME>", 0, false );
if ( startIndex != -1 )
{
endIndex = downloadInfoString.find( "</DL_USERNAME>", 0, false );
if ( endIndex != -1 )
{
startIndex += 13;
debug() << "found username: " << downloadInfoString.mid( startIndex, endIndex - startIndex ) << endl;
m_userName = downloadInfoString.mid( startIndex, endIndex - startIndex );
}
else
{
return false;
}
}
else
{
return false;
}
startIndex = downloadInfoString.find( "<DL_PASSWORD>", 0, false );
if ( startIndex != -1 )
{
endIndex = downloadInfoString.find( "</DL_PASSWORD>", 0, false );
if ( endIndex != -1 )
{
startIndex += 13;
debug() << "found password: " << downloadInfoString.mid( startIndex, endIndex - startIndex ) << endl;
m_password = downloadInfoString.mid( startIndex, endIndex - startIndex );
}
else
{
return false;
}
}
else
{
return false;
}
startIndex = downloadInfoString.find( "<URL_WAVZIP>", 0, false );
if ( startIndex != -1 )
{
endIndex = downloadInfoString.find( "</URL_WAVZIP>", 0, false );
if ( endIndex != -1 )
{
startIndex += 12;
debug() << "found wav" << endl;
m_downloadFormats[ "Wav" ] = downloadInfoString.mid( startIndex, endIndex - startIndex );
}
}
startIndex = downloadInfoString.find( "<URL_128KMP3ZIP>", 0, false );
if ( startIndex != -1 )
{
endIndex = downloadInfoString.find( "</URL_128KMP3ZIP>", 0, false );
if ( endIndex != -1 )
{
startIndex += 16;
debug() << "found 128k mp3" << endl;
m_downloadFormats[ "128 kbit/s MP3" ] = downloadInfoString.mid( startIndex, endIndex - startIndex );
}
}
startIndex = downloadInfoString.find( "<URL_OGGZIP>", 0, false );
if ( startIndex != -1 )
{
endIndex = downloadInfoString.find( "</URL_OGGZIP>", 0, false );
if ( endIndex != -1 )
{
startIndex += 12;
debug() << "found ogg-vorbis" << endl;
m_downloadFormats[ "Ogg-Vorbis" ] = downloadInfoString.mid( startIndex, endIndex - startIndex );
}
}
startIndex = downloadInfoString.find( "<URL_VBRZIP>", 0, false );
if ( startIndex != -1 )
{
endIndex = downloadInfoString.find( "</URL_VBRZIP>", 0, false );
if ( endIndex != -1 )
{
startIndex += 12;
debug() << "found vbr mp3" << endl;
m_downloadFormats[ "VBR MP3" ] = downloadInfoString.mid( startIndex, endIndex - startIndex );
}
}
startIndex = downloadInfoString.find( "<URL_FLACZIP>", 0, false );
if ( startIndex != -1 )
{
endIndex = downloadInfoString.find( "</URL_FLACZIP>", 0, false );
if ( endIndex != -1 )
{
startIndex += 13;
debug() << "found flac" << endl;
m_downloadFormats[ "FLAC" ] = downloadInfoString.mid( startIndex, endIndex - startIndex );
}
}
startIndex = downloadInfoString.find( "<DL_MSG>", 0, false );
if ( startIndex != -1 )
{
endIndex = downloadInfoString.find( "</DL_MSG>", 0, false );
if ( endIndex != -1 )
{
startIndex += 9;
debug() << "found dl-message" << endl;
m_downloadMessage = downloadInfoString.mid( startIndex, endIndex - startIndex );
}
}
return true;
}
TQString MagnatuneDownloadInfo::getUserName( )
{
return m_userName;
}
TQString MagnatuneDownloadInfo::getPassword( )
{
return m_password;
}
TQString MagnatuneDownloadInfo::getDownloadMessage( )
{
return m_downloadMessage;
}
DownloadFormatMap MagnatuneDownloadInfo::getFormatMap()
{
return m_downloadFormats;
}
void MagnatuneDownloadInfo::setFormatSelection( TQString selectedFormat )
{
m_selectedDownloadFormat = selectedFormat;
}
bool MagnatuneDownloadInfo::isReadyForDownload( )
{
return !m_selectedDownloadFormat.isEmpty();
}
KURL MagnatuneDownloadInfo::getCompleteDownloadUrl( )
{
TQString url = m_downloadFormats[ m_selectedDownloadFormat ];
KURL downloadUrl(url);
downloadUrl.setUser(m_userName);
downloadUrl.setPass(m_password);
return downloadUrl;
}
void MagnatuneDownloadInfo::setUnpackUrl( TQString unpackUrl )
{
m_unpackUrl = unpackUrl;
}
TQString MagnatuneDownloadInfo::getUnpackLocation( )
{
return m_unpackUrl;
}
int MagnatuneDownloadInfo::getAlbumId()
{
return m_albumId;
}
void MagnatuneDownloadInfo::setAlbumId(int id)
{
m_albumId = id;
}