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.
tdemultimedia/libkcddb/cddb.cpp

228 lines
4.8 KiB

/*
Copyright (C) 2002 Rik Hemsley (rikkus) <rik@kde.org>
Copyright (C) 2002 Benjamin Meyer <ben-devel@meyerhome.net>
CopyRight (C) 2002 Nadeem Hasan <nhasan@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 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 <tqregexp.h>
#include <tqstringlist.h>
#include <kdebug.h>
#include <kstringhandler.h>
#include <klocale.h>
#include "cddb.h"
namespace KCDDB
{
CDDB::CDDB()
: user_( "libkcddb-user" ),
localHostName_( "localHost" ),
readOnly_( false )
{
}
CDDB::~CDDB()
{
// Empty.
}
TQString
CDDB::trackOffsetListToId()
{
return trackOffsetListToId( trackOffsetList_ );
}
TQString
CDDB::trackOffsetListToId( const TrackOffsetList & list )
{
// Taken from version by Michael Matz in kio_audiocd.
unsigned int id = 0;
int numTracks = list.count() - 2;
// The last two in the list are disc begin and disc end.
for ( int i = numTracks-1; i >= 0; i-- )
{
int n = list[ i ]/75;
while ( n > 0 )
{
id += n % 10;
n /= 10;
}
}
unsigned int l = list[numTracks + 1] / 75;
l -= list[0] / 75;
id = ( ( id % 255 ) << 24 ) | ( l << 8 ) | numTracks;
return TQString::number( id, 16 ).rightJustify( 8, '0' );
}
TQString
CDDB::trackOffsetListToString()
{
TQString ret;
uint numTracks = trackOffsetList_.count()-2;
// Disc start.
ret.append( TQString::number( numTracks ) );
ret.append( " " );
for ( uint i = 0; i < numTracks; i++ )
{
ret.append( TQString::number( trackOffsetList_[ i ] ) );
ret.append( " " );
}
unsigned int discLengthInSec = ( trackOffsetList_[ numTracks+1 ] ) / 75;
ret.append( TQString::number( discLengthInSec ) );
return ret;
}
bool
CDDB::parseGreeting( const TQString & line )
{
uint serverStatus = statusCode( line );
if ( 200 == serverStatus )
{
kdDebug(60010) << "Server response: read-only" << endl;
readOnly_ = true;
}
else if ( 201 == serverStatus )
{
kdDebug(60010) << "Server response: read-write" << endl;
}
else
{
kdDebug(60010) << "Server response: bugger off" << endl;
return false;
}
return true;
}
bool
CDDB::parseHandshake( const TQString & line )
{
uint serverStatus = statusCode( line );
if ( ( 200 != serverStatus ) && ( 402 != serverStatus ) )
{
kdDebug(60010) << "Handshake was too tight. Letting go." << endl;
return false;
}
kdDebug(60010) << "Handshake was warm and firm" << endl;
return true;
}
uint
CDDB::statusCode( const TQString & line )
{
TQStringList tokenList = TQStringList::split( ' ', line );
uint serverStatus = tokenList[ 0 ].toUInt();
return serverStatus;
}
/* CDDB::Transport
CDDB::stringToTransport(const TQString & s)
{
if ("HTTP" == s )
return HTTP;
else if ( "CDDBP" == s )
return CDDBP;
else
return SMTP;
}*/
TQString
CDDB::resultToString(Result r)
{
switch (r)
{
case Success:
return i18n("Success");
break;
case ServerError:
return i18n("Server error");
break;
case HostNotFound:
return i18n("Host not found");
break;
case NoResponse:
return i18n("No response");
break;
case NoRecordFound:
return i18n("No record found");
break;
case MultipleRecordFound:
return i18n("Multiple records found");
break;
case CannotSave:
return i18n("Cannot save");
break;
case InvalidCategory:
return i18n("Invalid category");
break;
default:
return i18n("Unknown error");
break;
}
}
/* TQString
CDDB::transportToString(uint t)
{
switch (Transport(t))
{
case HTTP:
return "HTTP";
break;
case CDDBP:
return "CDDBP";
break;
case SMTP:
return "SMTP";
break;
default:
return "UnknownTransport";
break;
}
}*/
}
// vim:tabstop=2:shiftwidth=2:expandtab:cinoptions=(s,U1,m1