Skip to content

Commit

Permalink
fixed: auto play next item didn't work for music add-ons
Browse files Browse the repository at this point in the history
(cherry picked from commit 810901a1f6e0de5114e0e0c80e90245c2dc37193)

git-svn-id: https://xbmc.svn.sourceforge.net/svnroot/xbmc/branches/Dharma@35442 568bbfeb-2a22-0410-94d2-cc84cf5bfa90
  • Loading branch information
spiff_ committed Nov 23, 2010
1 parent 14c7076 commit 190fb38
Showing 1 changed file with 47 additions and 33 deletions.
80 changes: 47 additions & 33 deletions xbmc/GUIMediaWindow.cpp
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 190fb38

Please sign in to comment.