[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