/* Copyright (C) 2002 Rik Hemsley (rikkus) Copyright (C) 2002 Benjamin Meyer CopyRight (C) 2002 Nadeem Hasan 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 #include #include #include #include #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 tdeio_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; } }*/ }