[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: extragear/multimedia/amarok/src
From: Nikolaj Hald Nielsen <nhnFreespirit () gmail ! com>
Date: 2007-07-07 13:30:33
Message-ID: 1183815033.066044.12337.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 684876 by nhnielsen:
Redo borked 684480 commit with all the correct files. Also, more fixes for the \
ServiceSqlRegistry than you can shake a stick at. Warning, may contain traces of \
early-morning-airport-hacking code. One problem still left is that tracks are somehow \
multiplied as the query does not respect the DISTINCT keyword
M +1 -0 CMakeLists.txt
A servicebrowser/ServiceSqlRegistry.cpp [License: GPL (v2+)]
A servicebrowser/ServiceSqlRegistry.h [License: GPL (v2+)]
M +3 -1 servicebrowser/jamendo/jamendoservice.cpp
M +6 -5 servicebrowser/servicemetabase.cpp
M +1 -1 servicebrowser/servicemetabase.h
M +3 -2 servicebrowser/servicesqlcollection.cpp
M +3 -1 servicebrowser/servicesqlcollection.h
M +40 -11 servicebrowser/servicesqlquerymaker.cpp
M +3 -2 servicebrowser/servicesqlquerymaker.h
--- trunk/extragear/multimedia/amarok/src/CMakeLists.txt #684875:684876
@@ -105,6 +105,7 @@
servicebrowser/servicesqlquerymaker.cpp
servicebrowser/servicesqlcollection.cpp
servicebrowser/infoparserbase.cpp
+ servicebrowser/ServiceSqlRegistry.cpp
)
--- trunk/extragear/multimedia/amarok/src/servicebrowser/jamendo/jamendoservice.cpp \
#684875:684876 @@ -20,6 +20,7 @@
#include "JamendoInfoParser.h"
#include "jamendoservice.h"
#include "servicesqlcollection.h"
+#include "ServiceSqlRegistry.h"
#include "jamendoxmlparser.h"
@@ -75,7 +76,8 @@
ServiceMetaFactory * metaFactory = new JamendoMetaFactory( "jamendo" );
- ServiceSqlCollection * collection = new ServiceSqlCollection( "jamendo", \
"Jamendo.com", metaFactory ); + ServiceSqlRegistry * registry = new \
ServiceSqlRegistry( metaFactory ); + ServiceSqlCollection * collection = new \
ServiceSqlCollection( "jamendo", "Jamendo.com", metaFactory, registry );
setModel( new SingleCollectionTreeItemModel( collection, levels ) );
--- trunk/extragear/multimedia/amarok/src/servicebrowser/servicemetabase.cpp \
#684875:684876 @@ -96,14 +96,15 @@
int ServiceMetaFactory::getGenreSqlRowCount()
{
- return 1;
+ return 2;
}
QString ServiceMetaFactory::getGenreSqlRows()
{
//subclasses must not change the order of these items, but only append new ones
- return m_dbTablePrefix + "_genre.name " ;
+ return m_dbTablePrefix + "_genre.id, " +
+ m_dbTablePrefix + "_genre.name " ;
}
@@ -751,7 +752,7 @@
: Meta::Genre()
, m_tracks()
{
- m_name = row[0];
+ m_name = row[1];
}
ServiceGenre::~ServiceGenre()
@@ -795,9 +796,9 @@
}
void
-ServiceGenre::addTrack( ServiceTrackPtr track )
+ServiceGenre::addTrack( TrackPtr track )
{
- m_tracks.append( TrackPtr::staticCast( track ) );
+ m_tracks.append( track );
}
void ServiceGenre::processInfoOf(InfoParserBase * infoParser)
--- trunk/extragear/multimedia/amarok/src/servicebrowser/servicemetabase.h \
#684875:684876 @@ -303,7 +303,7 @@
virtual void processInfoOf( InfoParserBase * infoParser );
//ServiceGenre specific methods
- void addTrack( ServiceTrackPtr track );
+ void addTrack( TrackPtr track );
void setName( const QString &name );
int albumId();
void setAlbumId( int albumId );
--- trunk/extragear/multimedia/amarok/src/servicebrowser/servicesqlcollection.cpp \
#684875:684876 @@ -28,9 +28,10 @@
#include <QTimer>
-ServiceSqlCollection::ServiceSqlCollection( const QString &id, const QString \
&prettyName, ServiceMetaFactory * metaFactory ) \
+ServiceSqlCollection::ServiceSqlCollection( const QString &id, const QString \
&prettyName, ServiceMetaFactory * metaFactory, ServiceSqlRegistry * registry ) : \
Collection() , m_metaFactory( metaFactory )
+ , m_registry( registry )
, m_collectionId( id )
, m_prettyName( prettyName )
{
@@ -55,7 +56,7 @@
QueryMaker*
ServiceSqlCollection::queryMaker()
{
- return new ServiceSqlQueryMaker( this, m_metaFactory );
+ return new ServiceSqlQueryMaker( this, m_metaFactory, m_registry );
}
QStringList
--- trunk/extragear/multimedia/amarok/src/servicebrowser/servicesqlcollection.h \
#684875:684876 @@ -21,13 +21,14 @@
#include "collection.h"
#include "servicemetabase.h"
+#include "ServiceSqlRegistry.h"
class ServiceSqlCollection : public Collection
{
Q_OBJECT
public:
- ServiceSqlCollection( const QString &id, const QString &prettyName, \
ServiceMetaFactory * metaFactory ); + ServiceSqlCollection( const QString &id, \
const QString &prettyName, ServiceMetaFactory * metaFactory, ServiceSqlRegistry * \
registry ); virtual ~ServiceSqlCollection();
virtual void startFullScan() {} //TODO
@@ -44,6 +45,7 @@
private:
ServiceMetaFactory * m_metaFactory;
+ ServiceSqlRegistry * m_registry;
QString m_collectionId;
QString m_prettyName;
--- trunk/extragear/multimedia/amarok/src/servicebrowser/servicesqlquerymaker.cpp \
#684875:684876 @@ -79,10 +79,12 @@
ServiceSqlWorkerThread *worker;
};
-ServiceSqlQueryMaker::ServiceSqlQueryMaker( ServiceSqlCollection* collection, \
ServiceMetaFactory * metaFactory ) +ServiceSqlQueryMaker::ServiceSqlQueryMaker( \
ServiceSqlCollection* collection, ServiceMetaFactory * metaFactory, \
ServiceSqlRegistry * registry ) : QueryMaker()
, m_collection( collection )
+ , m_registry( registry )
, m_metaFactory( metaFactory )
+
, d( new Private )
{
//d->includedBuilder = true;
@@ -166,10 +168,17 @@
//make sure to keep this method in sync with handleTracks(QStringList) and the \
SqlTrack ctor if( d->queryType == Private::NONE )
{
+
+ d->withoutDuplicates = true;
+
d->queryType = Private::TRACK;
d->linkedTables |= Private::TRACKS_TABLE;
//d->queryFrom = m_metaFactory->tablePrefix() + "_tracks";
- d->queryReturnValues = m_metaFactory->getTrackSqlRows();
+ d->queryReturnValues = m_metaFactory->getTrackSqlRows() + ',' +
+ m_metaFactory->getAlbumSqlRows() + ',' +
+ m_metaFactory->getArtistSqlRows() + ',' +
+ m_metaFactory->getGenreSqlRows();
+
}
return this;
}
@@ -441,8 +450,17 @@
QString prefix = m_metaFactory->tablePrefix();
- if( d->linkedTables & Private::TRACKS_TABLE )
+ if( d->linkedTables & Private::TRACKS_TABLE ) {
+
d->queryFrom += ' ' + prefix + "_tracks";
+ d->queryFrom += " LEFT JOIN " + prefix + "_albums ON " + prefix + \
"_tracks.album_id = " + prefix + "_albums.id"; + d->queryFrom += " LEFT JOIN " \
+ prefix + "_artists ON " + prefix + "_tracks.artist_id = " + prefix + "_artists.id"; \
+ d->queryFrom += " LEFT JOIN " + prefix + "_genre ON " + prefix + \
"_genre.album_id = " + prefix + "_albums.id"; +
+
+
+
+ }
if( d->linkedTables & Private::ALBUMS_TABLE )
d->queryFrom += ' ' + prefix + "_albums";
if( d->linkedTables & Private::ARTISTS_TABLE )
@@ -474,7 +492,8 @@
query += d->queryReturnValues;
query += " FROM ";
query += d->queryFrom;
- query += " WHERE 1 "; // oh... to not have to bother with the leadig "AND"
+ query += " WHERE 1 "; // oh... to not have to bother with the leadig "AND"
+ // that may or may not be needed
query += d->queryMatch;
query += d->queryFilter;
query += d->queryOrderBy;
@@ -591,14 +610,24 @@
DEBUG_BLOCK
TrackList tracks;
//SqlRegistry* reg = m_collection->registry();
- //there are 28 columns in the result set as generated by startTrackQuery()
- int rowCount = m_metaFactory->getTrackSqlRowCount();
- int resultRows = result.size() / rowCount;
+ int rowCount = ( m_metaFactory->getTrackSqlRowCount() +
+ m_metaFactory->getAlbumSqlRowCount() +
+ m_metaFactory->getArtistSqlRowCount() +
+ m_metaFactory->getGenreSqlRowCount() );
+
+ int resultRows = result.count() / rowCount;
+
+ debug() << "number of result rows: " << resultRows << endl;
for( int i = 0; i < resultRows; i++ )
{
QStringList row = result.mid( i*rowCount, rowCount );
- tracks.append( m_metaFactory->createTrack( row ) );
+
+ TrackPtr trackptr = m_registry->getTrack( row );
+
+ // trackptr->setAlbum( );
+ tracks.append( trackptr );
}
+
emitProperResult( TrackPtr, tracks );
}
@@ -614,7 +643,7 @@
{
QStringList row = result.mid( i*rowCount, rowCount );
- artists.append( m_metaFactory->createArtist( row ) );
+ artists.append( m_registry->getArtist( row ) );
}
emitProperResult( ArtistPtr, artists );
}
@@ -630,7 +659,7 @@
for( int i = 0; i < resultRows; i++ )
{
QStringList row = result.mid( i*rowCount, rowCount );
- albums.append( m_metaFactory->createAlbum( row ) );
+ albums.append( m_registry->getAlbum( row ) );
}
emitProperResult( AlbumPtr, albums );
}
@@ -646,7 +675,7 @@
for( int i = 0; i < resultRows; i++ )
{
QStringList row = result.mid( i*rowCount, rowCount );
- genres.append( m_metaFactory->createGenre( row ) );
+ genres.append( m_registry->getGenre( row ) );
}
emitProperResult( GenrePtr, genres );
}
--- trunk/extragear/multimedia/amarok/src/servicebrowser/servicesqlquerymaker.h \
#684875:684876 @@ -21,6 +21,7 @@
#define AMAROK_SERVICESQLQUERYBUILDER_H
#include "servicemetabase.h"
+#include "ServiceSqlRegistry.h"
#include "querymaker.h"
#include "threadmanager.h"
@@ -34,7 +35,7 @@
Q_OBJECT
public:
- ServiceSqlQueryMaker( ServiceSqlCollection* collection, ServiceMetaFactory * \
metaFactory ); + ServiceSqlQueryMaker( ServiceSqlCollection* collection, \
ServiceMetaFactory * metaFactory, ServiceSqlRegistry * registry ); virtual \
~ServiceSqlQueryMaker();
virtual QueryMaker* reset();
@@ -100,7 +101,7 @@
//void handleYears( const QStringList &result );
ServiceSqlCollection *m_collection;
-
+ ServiceSqlRegistry * m_registry;
ServiceMetaFactory * m_metaFactory;
class Private;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic