Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No GUI dependency for library scans #916

Merged
merged 6 commits into from May 7, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
122 changes: 104 additions & 18 deletions xbmc/Application.cpp
Expand Up @@ -362,6 +362,8 @@ CApplication::CApplication(void)
, m_itemCurrentFile(new CFileItem)
, m_progressTrackingVideoResumeBookmark(*new CBookmark)
, m_progressTrackingItem(new CFileItem)
, m_videoInfoScanner(new CVideoInfoScanner)
, m_musicInfoScanner(new CMusicInfoScanner)
{
m_iPlaySpeed = 1;
m_bScreenSave = false;
Expand Down Expand Up @@ -2125,7 +2127,6 @@ void CApplication::Render()
// fresh for the next process(), or after a windowclose animation (where process()
// isn't called)
g_infoManager.ResetCache();

lock.Leave();

unsigned int now = XbmcThreads::SystemClockMillis();
Expand Down Expand Up @@ -3365,13 +3366,11 @@ void CApplication::Stop(int exitCode)
CLog::Log(LOGNOTICE, "stop all");

// stop scanning before we kill the network and so on
CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
if (musicScan)
musicScan->StopScanning();
if (m_musicInfoScanner->IsScanning())
m_musicInfoScanner->Stop();

CGUIDialogVideoScan *videoScan = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
if (videoScan)
videoScan->StopScanning();
if (m_videoInfoScanner->IsScanning())
m_videoInfoScanner->Stop();

m_applicationMessenger.Cleanup();

Expand Down Expand Up @@ -4587,18 +4586,15 @@ void CApplication::ActivateScreenSaver(bool forceType /*= false */)

void CApplication::CheckShutdown()
{
CGUIDialogMusicScan *pMusicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
CGUIDialogVideoScan *pVideoScan = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);

// first check if we should reset the timer
bool resetTimer = false;
if (IsPlaying() || IsPaused()) // is something playing?
resetTimer = true;

if (pMusicScan && pMusicScan->IsScanning()) // music scanning?
if (m_musicInfoScanner->IsScanning())
resetTimer = true;

if (pVideoScan && pVideoScan->IsScanning()) // video scanning?
if (m_videoInfoScanner->IsScanning())
resetTimer = true;

if (g_windowManager.IsWindowActive(WINDOW_DIALOG_PROGRESS)) // progress dialog is onscreen
Expand Down Expand Up @@ -5471,18 +5467,108 @@ void CApplication::UpdateLibraries()
if (g_guiSettings.GetBool("videolibrary.updateonstartup"))
{
CLog::Log(LOGNOTICE, "%s - Starting video library startup scan", __FUNCTION__);
CGUIDialogVideoScan *scanner = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
if (scanner && !scanner->IsScanning())
scanner->StartScanning("");
StartVideoScan("");
}

if (g_guiSettings.GetBool("musiclibrary.updateonstartup"))
{
CLog::Log(LOGNOTICE, "%s - Starting music library startup scan", __FUNCTION__);
CGUIDialogMusicScan *scanner = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
if (scanner && !scanner->IsScanning())
scanner->StartScanning("");
StartMusicScan("");
}
}

bool CApplication::IsVideoScanning() const
{
return m_videoInfoScanner->IsScanning();
}

bool CApplication::IsMusicScanning() const
{
return m_musicInfoScanner->IsScanning();
}

void CApplication::StopVideoScan()
{
if (m_videoInfoScanner->IsScanning())
m_videoInfoScanner->Stop();
}

void CApplication::StopMusicScan()
{
if (m_musicInfoScanner->IsScanning())
m_musicInfoScanner->Stop();
}

void CApplication::StartVideoScan(const CStdString &strDirectory, bool scanAll)
{
if (m_videoInfoScanner->IsScanning())
return;

if (!g_guiSettings.GetBool("videolibrary.backgroundupdate"))
{
CGUIDialogVideoScan *videoScan = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
if (videoScan)
{
m_videoInfoScanner->SetObserver(videoScan);
videoScan->ShowScan();
}
}
m_videoInfoScanner->Start(strDirectory,scanAll);
}

void CApplication::StartMusicScan(const CStdString &strDirectory)
{
if (m_musicInfoScanner->IsScanning())
return;

if (!g_guiSettings.GetBool("musiclibrary.backgroundupdate"))
{
CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
if (musicScan)
{
m_musicInfoScanner->SetObserver(musicScan);
musicScan->ShowScan();
}
}
SaveMusicScanSettings();
m_musicInfoScanner->Start(strDirectory);
}

void CApplication::StartMusicAlbumScan(const CStdString& strDirectory)
{
if (m_musicInfoScanner->IsScanning())
return;

if (!g_guiSettings.GetBool("musiclibrary.backgroundupdate"))
{
CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
if (musicScan)
{
m_musicInfoScanner->SetObserver(musicScan);
musicScan->ShowScan();
}
}
SaveMusicScanSettings();
m_musicInfoScanner->FetchAlbumInfo(strDirectory);
}

void CApplication::StartMusicArtistScan(const CStdString& strDirectory)
{
if (m_musicInfoScanner->IsScanning())
return;

if (!g_guiSettings.GetBool("musiclibrary.backgroundupdate"))
{
CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
if (musicScan)
{
m_musicInfoScanner->SetObserver(musicScan);
musicScan->ShowScan();
}
}
SaveMusicScanSettings();
m_musicInfoScanner->FetchArtistInfo(strDirectory);

}

void CApplication::CheckPlayingProgress()
Expand Down
23 changes: 23 additions & 0 deletions xbmc/Application.h
Expand Up @@ -83,6 +83,15 @@ class CHTTPWebinterfaceHandler;
class CHTTPWebinterfaceAddonsHandler;
#endif
#endif
namespace VIDEO
{
class CVideoInfoScanner;
}

namespace MUSIC_INFO
{
class CMusicInfoScanner;
}

class CBackgroundPlayer : public CThread
{
Expand Down Expand Up @@ -208,6 +217,17 @@ class CApplication : public CXBApplicationEx, public IPlayerCallback, public IMs

void SaveMusicScanSettings();
void RestoreMusicScanSettings();

void StopVideoScan();
void StopMusicScan();
bool IsMusicScanning() const;
bool IsVideoScanning() const;

void StartVideoScan(const CStdString &path, bool scanAll = false);
void StartMusicScan(const CStdString &path);
void StartMusicAlbumScan(const CStdString& strDirectory);
void StartMusicArtistScan(const CStdString& strDirectory);

void UpdateLibraries();
void CheckMusicPlaylist();

Expand Down Expand Up @@ -373,6 +393,9 @@ class CApplication : public CXBApplicationEx, public IPlayerCallback, public IMs
CCriticalSection m_frameMutex;
XbmcThreads::ConditionVariable m_frameCond;

VIDEO::CVideoInfoScanner *m_videoInfoScanner;
MUSIC_INFO::CMusicInfoScanner *m_musicInfoScanner;

void Mute();
void UnMute();

Expand Down
12 changes: 3 additions & 9 deletions xbmc/GUIInfoManager.cpp
Expand Up @@ -46,8 +46,6 @@
#include "music/LastFmManager.h"
#include "pictures/PictureInfoTag.h"
#include "music/tags/MusicInfoTag.h"
#include "music/dialogs/GUIDialogMusicScan.h"
#include "video/dialogs/GUIDialogVideoScan.h"
#include "guilib/GUIWindowManager.h"
#include "filesystem/File.h"
#include "playlists/PlayList.h"
Expand Down Expand Up @@ -1866,22 +1864,18 @@ bool CGUIInfoManager::GetBool(int condition1, int contextWindow, const CGUIListI
bReturn = GetLibraryBool(condition);
else if (condition == LIBRARY_IS_SCANNING)
{
CGUIDialogMusicScan *musicScanner = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
CGUIDialogVideoScan *videoScanner = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
if (musicScanner->IsScanning() || videoScanner->IsScanning())
if (g_application.IsMusicScanning() || g_application.IsVideoScanning())
bReturn = true;
else
bReturn = false;
}
else if (condition == LIBRARY_IS_SCANNING_VIDEO)
{
CGUIDialogVideoScan *videoScanner = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
bReturn = (videoScanner && videoScanner->IsScanning());
bReturn = g_application.IsVideoScanning();
}
else if (condition == LIBRARY_IS_SCANNING_MUSIC)
{
CGUIDialogMusicScan *musicScanner = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
bReturn = (musicScanner && musicScanner->IsScanning());
bReturn = g_application.IsMusicScanning();
}
else if (condition == SYSTEM_PLATFORM_LINUX)
#if defined(_LINUX) && !defined(__APPLE__)
Expand Down
80 changes: 34 additions & 46 deletions xbmc/interfaces/Builtins.cpp
Expand Up @@ -1172,18 +1172,22 @@ int CBuiltins::Execute(const CStdString& execString)
return -1;

g_application.StopPlaying();
CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
if (musicScan && musicScan->IsScanning())
if (g_application.IsMusicScanning())
{
musicScan->StopScanning();
musicScan->Close(true);
g_application.StopMusicScan();
CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
if (musicScan)
musicScan->Close(true);
}

CGUIDialogVideoScan *videoScan = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
if (videoScan && videoScan->IsScanning())
if (g_application.IsVideoScanning())
{
videoScan->StopScanning();
videoScan->Close(true);
g_application.StopVideoScan();
CGUIDialogVideoScan *videoScan = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
if (videoScan)
{
videoScan->Close(true);
}
}

ADDON::CAddonMgr::Get().StopServices(true);
Expand Down Expand Up @@ -1211,61 +1215,45 @@ int CBuiltins::Execute(const CStdString& execString)
{
if (params[0].Equals("music"))
{
CGUIDialogMusicScan *scanner = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
if (scanner)
{
if (scanner->IsScanning())
scanner->StopScanning();
else
scanner->StartScanning(params.size() > 1 ? params[1] : "");
}
if (g_application.IsMusicScanning())
g_application.StopMusicScan();
else
g_application.StartMusicScan(params.size() > 1 ? params[1] : "");
}
if (params[0].Equals("video"))
{
CGUIDialogVideoScan *scanner = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
if (scanner)
{
if (scanner->IsScanning())
scanner->StopScanning();
else
scanner->StartScanning(params.size() > 1 ? params[1] : "");
}
if (g_application.IsVideoScanning())
g_application.StopVideoScan();
else
g_application.StartVideoScan(params.size() > 1 ? params[1] : "");
}
}
else if (execute.Equals("cleanlibrary"))
{
if (!params.size() || params[0].Equals("video"))
{
CGUIDialogVideoScan *scanner = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN);
if (scanner)
if (!g_application.IsVideoScanning())
{
if (!scanner->IsScanning())
{
CVideoDatabase videodatabase;
videodatabase.Open();
videodatabase.CleanDatabase();
videodatabase.Close();
}
else
CLog::Log(LOGERROR, "XBMC.CleanLibrary is not possible while scanning for media info");
CVideoDatabase videodatabase;
videodatabase.Open();
videodatabase.CleanDatabase();
videodatabase.Close();
}
else
CLog::Log(LOGERROR, "XBMC.CleanLibrary is not possible while scanning for media info");
}
else if (params[0].Equals("music"))
{
CGUIDialogMusicScan *scanner = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
if (scanner)
if (!g_application.IsMusicScanning())
{
if (!scanner->IsScanning())
{
CMusicDatabase musicdatabase;
CMusicDatabase musicdatabase;

musicdatabase.Open();
musicdatabase.Cleanup();
musicdatabase.Close();
}
else
CLog::Log(LOGERROR, "XBMC.CleanLibrary is not possible while scanning for media info");
musicdatabase.Open();
musicdatabase.Cleanup();
musicdatabase.Close();
}
else
CLog::Log(LOGERROR, "XBMC.CleanLibrary is not possible while scanning for media info");
}
}
else if (execute.Equals("exportlibrary"))
Expand Down
7 changes: 2 additions & 5 deletions xbmc/music/MusicDatabase.cpp
Expand Up @@ -28,7 +28,6 @@
#include "filesystem/MusicDatabaseDirectory/QueryParams.h"
#include "filesystem/MusicDatabaseDirectory.h"
#include "filesystem/SpecialProtocol.h"
#include "music/dialogs/GUIDialogMusicScan.h"
#include "GUIInfoManager.h"
#include "music/tags/MusicInfoTag.h"
#include "addons/AddonManager.h"
Expand Down Expand Up @@ -2326,8 +2325,7 @@ void CMusicDatabase::DeleteAlbumInfo()

// If we are scanning for music info in the background,
// other writing access to the database is prohibited.
CGUIDialogMusicScan* dlgMusicScan = (CGUIDialogMusicScan*)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
if (dlgMusicScan->IsDialogRunning())
if (g_application.IsMusicScanning())
{
CGUIDialogOK::ShowAndGetInput(189, 14057, 0, 0);
return;
Expand Down Expand Up @@ -2577,8 +2575,7 @@ void CMusicDatabase::Clean()
{
// If we are scanning for music info in the background,
// other writing access to the database is prohibited.
CGUIDialogMusicScan* dlgMusicScan = (CGUIDialogMusicScan*)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN);
if (dlgMusicScan->IsDialogRunning())
if (g_application.IsMusicScanning())
{
CGUIDialogOK::ShowAndGetInput(189, 14057, 0, 0);
return;
Expand Down