From 7cac0ed9bc586f2b5e5fb3c9c812fa79ac754b11 Mon Sep 17 00:00:00 2001
From: Leo Franchi <lfranchi@kde.org>
Date: Sun, 5 Jun 2011 16:47:32 -0400
Subject: [PATCH] Really don't go overboard asking for moods/styles

---
 .../dynamic/echonest/EchonestControl.cpp       |  1 -
 .../dynamic/echonest/EchonestGenerator.cpp     | 18 ++++++++++++------
 .../dynamic/echonest/EchonestGenerator.h       |  2 ++
 3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/libtomahawk/playlist/dynamic/echonest/EchonestControl.cpp b/src/libtomahawk/playlist/dynamic/echonest/EchonestControl.cpp
index b04f9ce82..6d9603e79 100644
--- a/src/libtomahawk/playlist/dynamic/echonest/EchonestControl.cpp
+++ b/src/libtomahawk/playlist/dynamic/echonest/EchonestControl.cpp
@@ -724,7 +724,6 @@ Tomahawk::EchonestControl::insertMoodsAndStyles()
     if( !combo )
         return false;
 
-    qDebug() << "Inserting moods and or styles, here's the list" << src;
     foreach( const QString& item, src ) {
         combo->addItem( item, item );
     }
diff --git a/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp b/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp
index ee55ae3a0..2568b3569 100644
--- a/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp
+++ b/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp
@@ -26,6 +26,8 @@ using namespace Tomahawk;
 
 QVector< QString > EchonestGenerator::s_moods = QVector< QString >();
 QVector< QString > EchonestGenerator::s_styles = QVector< QString >();
+QNetworkReply* EchonestGenerator::s_moodsJob = 0;
+QNetworkReply* EchonestGenerator::s_stylesJob = 0;
 
 EchonestFactory::EchonestFactory()
 {}
@@ -59,12 +61,14 @@ EchonestGenerator::EchonestGenerator ( QObject* parent )
     m_mode = OnDemand;
     m_logo.load( RESPATH "/images/echonest_logo.png" );
 
-    // fetch style and moods
-    QNetworkReply* style = Echonest::Artist::listTerms( "style" );
-    connect( style, SIGNAL( finished() ), this, SLOT( stylesReceived() ) );
-
-    QNetworkReply* moods = Echonest::Artist::listTerms( "mood" );
-    connect( moods, SIGNAL( finished() ), this, SLOT( moodsReceived() ) );
+    if( !s_stylesJob && s_styles.isEmpty() ) {
+        // fetch style and moods
+        s_stylesJob = Echonest::Artist::listTerms( "style" );
+        connect( s_stylesJob, SIGNAL( finished() ), this, SLOT( stylesReceived() ) );
+    } else if( !s_moodsJob && s_moods.isEmpty() ) {
+        s_moodsJob = Echonest::Artist::listTerms( "mood" );
+        connect( s_moodsJob, SIGNAL( finished() ), this, SLOT( moodsReceived() ) );
+    }
 
 //    qDebug() << "ECHONEST:" << m_logo.size();
 }
@@ -530,6 +534,7 @@ EchonestGenerator::moodsReceived()
     } catch( Echonest::ParseError& e ) {
         qWarning() << "Echonest failed to parse moods list";
     }
+    s_moodsJob = 0;
 }
 
 QVector< QString >
@@ -549,4 +554,5 @@ EchonestGenerator::stylesReceived()
     } catch( Echonest::ParseError& e ) {
         qWarning() << "Echonest failed to parse styles list";
     }
+    s_stylesJob = 0;
 }
diff --git a/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.h b/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.h
index 1af9fc12c..aac93b25b 100644
--- a/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.h
+++ b/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.h
@@ -95,6 +95,8 @@ private:
 
     static QVector< QString > s_styles;
     static QVector< QString > s_moods;
+    static QNetworkReply* s_stylesJob;
+    static QNetworkReply* s_moodsJob;
 
     // used for the intermediary song id lookup
     QSet< QNetworkReply* > m_waiting;