summaryrefslogtreecommitdiffstats
path: root/libkcddb/cddb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libkcddb/cddb.cpp')
-rw-r--r--libkcddb/cddb.cpp227
1 files changed, 227 insertions, 0 deletions
diff --git a/libkcddb/cddb.cpp b/libkcddb/cddb.cpp
new file mode 100644
index 00000000..3e5cb893
--- /dev/null
+++ b/libkcddb/cddb.cpp
@@ -0,0 +1,227 @@
+/*
+ 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <qregexp.h>
+#include <qstringlist.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.
+ }
+
+ QString
+ CDDB::trackOffsetListToId()
+ {
+ return trackOffsetListToId( trackOffsetList_ );
+ }
+ QString
+ 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 QString::number( id, 16 ).rightJustify( 8, '0' );
+ }
+
+ QString
+ CDDB::trackOffsetListToString()
+ {
+ QString ret;
+ uint numTracks = trackOffsetList_.count()-2;
+
+ // Disc start.
+ ret.append( QString::number( numTracks ) );
+ ret.append( " " );
+
+ for ( uint i = 0; i < numTracks; i++ )
+ {
+ ret.append( QString::number( trackOffsetList_[ i ] ) );
+ ret.append( " " );
+ }
+
+ unsigned int discLengthInSec = ( trackOffsetList_[ numTracks+1 ] ) / 75;
+
+ ret.append( QString::number( discLengthInSec ) );
+
+ return ret;
+ }
+
+ bool
+ CDDB::parseGreeting( const QString & 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 QString & 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 QString & line )
+ {
+ QStringList tokenList = QStringList::split( ' ', line );
+
+ uint serverStatus = tokenList[ 0 ].toUInt();
+
+ return serverStatus;
+ }
+
+/* CDDB::Transport
+ CDDB::stringToTransport(const QString & s)
+ {
+ if ("HTTP" == s )
+ return HTTP;
+ else if ( "CDDBP" == s )
+ return CDDBP;
+ else
+ return SMTP;
+ }*/
+
+ QString
+ 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;
+ }
+ }
+
+/* QString
+ 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