From c51ca312db4c993a5aecbe50dec85fdd61ac38f7 Mon Sep 17 00:00:00 2001
From: Christian Muehlhaeuser <muesli@gmail.com>
Date: Sat, 22 Dec 2012 14:37:47 +0100
Subject: [PATCH] * Properly implemented SingleTrackPlaylistInterface.

---
 src/libtomahawk/CMakeLists.txt                |  2 +-
 .../playlist/SingleTrackPlaylistInterface.cpp | 95 +++++++++++++++++++
 .../playlist/SingleTrackPlaylistInterface.h   | 18 ++--
 3 files changed, 103 insertions(+), 12 deletions(-)
 create mode 100644 src/libtomahawk/playlist/SingleTrackPlaylistInterface.cpp

diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt
index 6c0109518..4322ea769 100644
--- a/src/libtomahawk/CMakeLists.txt
+++ b/src/libtomahawk/CMakeLists.txt
@@ -81,7 +81,7 @@ set( libGuiSources
     playlist/PlaylistLargeItemDelegate.cpp
     playlist/PlaylistChartItemDelegate.cpp
     playlist/PlayableItem.cpp
-    playlist/SingleTrackPlaylistInterface.h
+    playlist/SingleTrackPlaylistInterface.cpp
 
     playlist/dynamic/DynamicPlaylist.cpp
     playlist/dynamic/DynamicView.cpp
diff --git a/src/libtomahawk/playlist/SingleTrackPlaylistInterface.cpp b/src/libtomahawk/playlist/SingleTrackPlaylistInterface.cpp
new file mode 100644
index 000000000..54e9bf821
--- /dev/null
+++ b/src/libtomahawk/playlist/SingleTrackPlaylistInterface.cpp
@@ -0,0 +1,95 @@
+/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
+ * 
+ *   Copyright 2012 Leo Franchi <lfranchi@kde.org>
+ *   Copyright 2012, Christian Muehlhaeuser <muesli@tomahawk-player.org>
+ *
+ *   Tomahawk is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, either version 3 of the License, or
+ *   (at your option) any later version.
+ *
+ *   Tomahawk 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 General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "SingleTrackPlaylistInterface.h"
+
+namespace Tomahawk
+{
+
+SingleTrackPlaylistInterface::SingleTrackPlaylistInterface( const Tomahawk::query_ptr& query )
+    : PlaylistInterface()
+    , m_track( query )
+{
+}
+
+
+Tomahawk::result_ptr
+SingleTrackPlaylistInterface::currentItem() const
+{
+    if ( m_track && m_track->numResults() )
+        return m_track->results().first();
+
+    return result_ptr();
+}
+
+
+Tomahawk::result_ptr
+SingleTrackPlaylistInterface::resultAt( qint64 index ) const
+{
+    if ( index == 0 && m_track && m_track->numResults() )
+        return m_track->results().first();
+
+    return result_ptr();
+}
+
+
+Tomahawk::query_ptr
+SingleTrackPlaylistInterface::queryAt( qint64 index ) const
+{
+    if ( index == 0 )
+        return m_track;
+
+    return query_ptr();
+}
+
+
+qint64
+SingleTrackPlaylistInterface::indexOfResult( const Tomahawk::result_ptr& result ) const
+{
+    if ( m_track && m_track->results().contains( result ) )
+        return 0;
+
+    return -1;
+}
+
+
+qint64
+SingleTrackPlaylistInterface::indexOfQuery( const Tomahawk::query_ptr& query ) const
+{
+    if ( m_track == query )
+        return 0;
+    
+    return -1;
+}
+
+
+QList< Tomahawk::query_ptr >
+SingleTrackPlaylistInterface::tracks() const
+{
+    QList< query_ptr > ql;
+
+    if ( m_track )
+        ql << m_track;
+
+    return ql;
+}
+
+}
+
diff --git a/src/libtomahawk/playlist/SingleTrackPlaylistInterface.h b/src/libtomahawk/playlist/SingleTrackPlaylistInterface.h
index f692e7457..494714b43 100644
--- a/src/libtomahawk/playlist/SingleTrackPlaylistInterface.h
+++ b/src/libtomahawk/playlist/SingleTrackPlaylistInterface.h
@@ -32,22 +32,18 @@ class DLLEXPORT SingleTrackPlaylistInterface : public PlaylistInterface
 {
     Q_OBJECT
 public:
-    explicit SingleTrackPlaylistInterface( const query_ptr& query )
-        : PlaylistInterface()
-        , m_track( query )
-    {
-    }
+    explicit SingleTrackPlaylistInterface( const query_ptr& query );
 
     query_ptr track() const { return m_track; }
     void setQuery( const query_ptr& track ) { m_track = track; }
 
     virtual void setCurrentIndex( qint64 index ) { Q_UNUSED( index ); }
-    virtual result_ptr currentItem() const { return result_ptr(); }
+    virtual result_ptr currentItem() const;
 
-    virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); }
-    virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
-    virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
-    virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
+    virtual Tomahawk::result_ptr resultAt( qint64 index ) const;
+    virtual Tomahawk::query_ptr queryAt( qint64 index ) const;
+    virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const;
+    virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const;
 
     virtual PlaylistModes::RepeatMode repeatMode() const { return PlaylistModes::NoRepeat; }
     virtual void setRepeatMode( PlaylistModes::RepeatMode ) {}
@@ -57,7 +53,7 @@ public:
 
     virtual qint64 siblingIndex( int, qint64 rootIndex = -1 ) const { Q_UNUSED( rootIndex ); return -1; }
     virtual int trackCount() const { return 1; }
-    virtual QList< query_ptr > tracks() const { return QList< query_ptr >(); }
+    virtual QList< query_ptr > tracks() const;
 
 private:
     query_ptr m_track;