fixed: auto play next item didn't work for music add-ons
authorspiff_ <spiff_@svn>
Tue, 23 Nov 2010 22:44:37 +0000 (22:44 +0000)
committerspiff_ <spiff_@svn>
Tue, 23 Nov 2010 22:44:37 +0000 (22:44 +0000)
(cherry picked from commit 810901a1f6e0de5114e0e0c80e90245c2dc37193)

git-svn-id: https://xbmc.svn.sourceforge.net/svnroot/xbmc/branches/Dharma@35442 568bbfeb-2a22-0410-94d2-cc84cf5bfa90

xbmc/GUIMediaWindow.cpp

index 9c75835..62102b2 100644 (file)
@@ -24,6 +24,7 @@
 #include "Util.h"
 #include "PlayListPlayer.h"
 #include "addons/AddonManager.h"
+#include "addons/PluginSource.h"
 #include "FileSystem/ZipManager.h"
 #include "FileSystem/PluginDirectory.h"
 #include "FileSystem/MultiPathDirectory.h"
@@ -945,50 +946,63 @@ bool CGUIMediaWindow::OnClick(int iItem)
     // If karaoke song is being played AND popup autoselector is enabled, the playlist should not be added
     bool do_not_add_karaoke = g_guiSettings.GetBool("karaoke.enabled") &&
       g_guiSettings.GetBool("karaoke.autopopupselector") && pItem->IsKaraoke();
+    bool autoplay = m_guiState.get() && m_guiState->AutoPlayNextItem();
+    int iPlaylist = m_guiState.get()?m_guiState->GetPlaylist():PLAYLIST_MUSIC;
 
-    if (m_guiState.get() && m_guiState->AutoPlayNextItem() && !g_partyModeManager.IsEnabled() && !pItem->IsPlayList() && !do_not_add_karaoke )
+    if (pItem->IsPlugin())
     {
-      //play and add current directory to temporary playlist
-      int iPlaylist=m_guiState->GetPlaylist();
-      if (iPlaylist != PLAYLIST_NONE)
+      CURL url(pItem->m_strPath);
+      AddonPtr addon;
+      if (CAddonMgr::Get().GetAddon(url.GetHostName(),addon))
       {
-        g_playlistPlayer.ClearPlaylist(iPlaylist);
-        g_playlistPlayer.Reset();
-        int songToPlay = 0;
-        CFileItemList queueItems;
-        for ( int i = 0; i < m_vecItems->Size(); i++ )
+        PluginPtr plugin = boost::dynamic_pointer_cast<CPluginSource>(addon);
+        if (plugin && plugin->Provides(CPluginSource::AUDIO))
         {
-          CFileItemPtr item = m_vecItems->Get(i);
+          iPlaylist = PLAYLIST_MUSIC;
+          autoplay = g_guiSettings.GetBool("musicplayer.autoplaynextitem");
+        }
+      }
+    }
 
-          if (item->m_bIsFolder)
-            continue;
+    if (autoplay && !g_partyModeManager.IsEnabled() && 
+        !pItem->IsPlayList() && !do_not_add_karaoke)
+    {
+      g_playlistPlayer.ClearPlaylist(iPlaylist);
+      g_playlistPlayer.Reset();
+      int songToPlay = 0;
+      CFileItemList queueItems;
+      for ( int i = 0; i < m_vecItems->Size(); i++ )
+      {
+        CFileItemPtr item = m_vecItems->Get(i);
 
-          if (!item->IsPlayList() && !item->IsZIP() && !item->IsRAR())
-            queueItems.Add(item);
+        if (item->m_bIsFolder)
+          continue;
 
-          if (item == pItem)
-          { // item that was clicked
-            songToPlay = queueItems.Size() - 1;
-          }
-        }
-        g_playlistPlayer.Add(iPlaylist, queueItems);
+        if (!item->IsPlayList() && !item->IsZIP() && !item->IsRAR())
+          queueItems.Add(item);
 
-        // Save current window and directory to know where the selected item was
-        if (m_guiState.get())
-          m_guiState->SetPlaylistDirectory(m_vecItems->m_strPath);
-
-        // figure out where we start playback
-        if (g_playlistPlayer.IsShuffled(iPlaylist))
-        {
-          int iIndex = g_playlistPlayer.GetPlaylist(iPlaylist).FindOrder(songToPlay);
-          g_playlistPlayer.GetPlaylist(iPlaylist).Swap(0, iIndex);
-          songToPlay = 0;
+        if (item == pItem)
+        { // item that was clicked
+          songToPlay = queueItems.Size() - 1;
         }
+      }
+      g_playlistPlayer.Add(iPlaylist, queueItems);
 
-        // play
-        g_playlistPlayer.SetCurrentPlaylist(iPlaylist);
-        g_playlistPlayer.Play(songToPlay);
+      // Save current window and directory to know where the selected item was
+      if (m_guiState.get())
+        m_guiState->SetPlaylistDirectory(m_vecItems->m_strPath);
+
+      // figure out where we start playback
+      if (g_playlistPlayer.IsShuffled(iPlaylist))
+      {
+        int iIndex = g_playlistPlayer.GetPlaylist(iPlaylist).FindOrder(songToPlay);
+        g_playlistPlayer.GetPlaylist(iPlaylist).Swap(0, iIndex);
+        songToPlay = 0;
       }
+
+      // play
+      g_playlistPlayer.SetCurrentPlaylist(iPlaylist);
+      g_playlistPlayer.Play(songToPlay);
       return true;
     }
     else