diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp index db6c21bc262f7..04b296869a78f 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -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; @@ -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(); @@ -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(); @@ -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 @@ -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() diff --git a/xbmc/Application.h b/xbmc/Application.h index 623d7bd0f40e1..9c3539f9a0283 100644 --- a/xbmc/Application.h +++ b/xbmc/Application.h @@ -83,6 +83,15 @@ class CHTTPWebinterfaceHandler; class CHTTPWebinterfaceAddonsHandler; #endif #endif +namespace VIDEO +{ + class CVideoInfoScanner; +} + +namespace MUSIC_INFO +{ + class CMusicInfoScanner; +} class CBackgroundPlayer : public CThread { @@ -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(); @@ -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(); diff --git a/xbmc/GUIInfoManager.cpp b/xbmc/GUIInfoManager.cpp index bb9e72d869e90..4a1b4b2c32329 100644 --- a/xbmc/GUIInfoManager.cpp +++ b/xbmc/GUIInfoManager.cpp @@ -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" @@ -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__) diff --git a/xbmc/interfaces/Builtins.cpp b/xbmc/interfaces/Builtins.cpp index b776dab2da7f9..409fdf585fc8a 100644 --- a/xbmc/interfaces/Builtins.cpp +++ b/xbmc/interfaces/Builtins.cpp @@ -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); @@ -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")) diff --git a/xbmc/music/MusicDatabase.cpp b/xbmc/music/MusicDatabase.cpp index ea90f280a70ba..4ab6ccdcd6984 100644 --- a/xbmc/music/MusicDatabase.cpp +++ b/xbmc/music/MusicDatabase.cpp @@ -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" @@ -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; @@ -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; diff --git a/xbmc/music/dialogs/GUIDialogMusicScan.cpp b/xbmc/music/dialogs/GUIDialogMusicScan.cpp index 51533131c8dbd..096b94f2667c6 100644 --- a/xbmc/music/dialogs/GUIDialogMusicScan.cpp +++ b/xbmc/music/dialogs/GUIDialogMusicScan.cpp @@ -39,7 +39,6 @@ using namespace MUSIC_INFO; CGUIDialogMusicScan::CGUIDialogMusicScan(void) : CGUIDialog(WINDOW_DIALOG_MUSIC_SCAN, "DialogMusicScan.xml") { - m_musicInfoScanner.SetObserver(this); } CGUIDialogMusicScan::~CGUIDialogMusicScan(void) @@ -97,60 +96,10 @@ void CGUIDialogMusicScan::OnSetProgress(int currentItem, int itemCount) if (m_fPercentDone>100.0F) m_fPercentDone=100.0F; } -void CGUIDialogMusicScan::StartScanning(const CStdString& strDirectory) +void CGUIDialogMusicScan::ShowScan() { m_ScanState = PREPARING; - - if (!g_guiSettings.GetBool("musiclibrary.backgroundupdate")) - { - Show(); - } - - // save settings - g_application.SaveMusicScanSettings(); - - m_musicInfoScanner.Start(strDirectory); -} - -void CGUIDialogMusicScan::StartAlbumScan(const CStdString& strDirectory) -{ - m_ScanState = PREPARING; - - if (!g_guiSettings.GetBool("musiclibrary.backgroundupdate")) - { - Show(); - } - - // save settings - g_application.SaveMusicScanSettings(); - - m_musicInfoScanner.FetchAlbumInfo(strDirectory); -} - -void CGUIDialogMusicScan::StartArtistScan(const CStdString& strDirectory) -{ - m_ScanState = PREPARING; - - if (!g_guiSettings.GetBool("musiclibrary.backgroundupdate")) - { - Show(); - } - - // save settings - g_application.SaveMusicScanSettings(); - - m_musicInfoScanner.FetchArtistInfo(strDirectory); -} - -void CGUIDialogMusicScan::StopScanning() -{ - if (m_musicInfoScanner.IsScanning()) - m_musicInfoScanner.Stop(); -} - -bool CGUIDialogMusicScan::IsScanning() -{ - return m_musicInfoScanner.IsScanning(); + Show(); } void CGUIDialogMusicScan::OnDirectoryScanned(const CStdString& strDirectory) diff --git a/xbmc/music/dialogs/GUIDialogMusicScan.h b/xbmc/music/dialogs/GUIDialogMusicScan.h index c4c14187e64aa..4c56b0be9c030 100644 --- a/xbmc/music/dialogs/GUIDialogMusicScan.h +++ b/xbmc/music/dialogs/GUIDialogMusicScan.h @@ -33,11 +33,7 @@ class CGUIDialogMusicScan: public CGUIDialog, public MUSIC_INFO::IMusicInfoScann virtual bool OnMessage(CGUIMessage& message); virtual void FrameMove(); - void StartScanning(const CStdString& strDirectory); - void StartAlbumScan(const CStdString& strDirectory); - void StartArtistScan(const CStdString& strDirectory); - bool IsScanning(); - void StopScanning(); + void ShowScan(); void UpdateState(); protected: @@ -48,7 +44,6 @@ class CGUIDialogMusicScan: public CGUIDialog, public MUSIC_INFO::IMusicInfoScann virtual void OnStateChanged(MUSIC_INFO::SCAN_STATE state); virtual void OnSetProgress(int currentItem, int itemCount); - MUSIC_INFO::CMusicInfoScanner m_musicInfoScanner; MUSIC_INFO::SCAN_STATE m_ScanState; CStdString m_strCurrentDir; diff --git a/xbmc/music/windows/GUIWindowMusicBase.cpp b/xbmc/music/windows/GUIWindowMusicBase.cpp index 5b9bfa357d50c..acdcba4ec7804 100644 --- a/xbmc/music/windows/GUIWindowMusicBase.cpp +++ b/xbmc/music/windows/GUIWindowMusicBase.cpp @@ -89,8 +89,7 @@ CGUIWindowMusicBase::~CGUIWindowMusicBase () bool CGUIWindowMusicBase::OnBack(int actionID) { - CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN); - if (musicScan && !musicScan->IsDialogRunning()) + if (!g_application.IsMusicScanning()) { CUtil::ThumbCacheClear(); CUtil::RemoveTempFiles(); @@ -240,16 +239,15 @@ bool CGUIWindowMusicBase::OnMessage(CGUIMessage& message) void CGUIWindowMusicBase::OnInfoAll(int iItem, bool bCurrent) { - CGUIDialogMusicScan* musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN); CMusicDatabaseDirectory dir; CStdString strPath = m_vecItems->GetPath(); if (bCurrent) strPath = m_vecItems->Get(iItem)->GetPath(); if (dir.HasAlbumInfo(m_vecItems->Get(iItem)->GetPath())) - musicScan->StartAlbumScan(strPath); + g_application.StartMusicAlbumScan(strPath); else - musicScan->StartArtistScan(strPath); + g_application.StartMusicArtistScan(strPath); } /// \brief Retrieves music info for albums from allmusic.com and displays them in CGUIDialogMusicInfo @@ -419,8 +417,7 @@ void CGUIWindowMusicBase::ShowArtistInfo(const CArtist& artist, const CStdString // 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; @@ -512,8 +509,7 @@ void CGUIWindowMusicBase::ShowAlbumInfo(const CAlbum& album, const CStdString& p // 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; @@ -981,9 +977,7 @@ bool CGUIWindowMusicBase::OnContextButton(int itemNumber, CONTEXT_BUTTON button) case CONTEXT_BUTTON_STOP_SCANNING: { - CGUIDialogMusicScan *scanner = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN); - if (scanner) - scanner->StopScanning(); + g_application.StopMusicScan(); return true; } diff --git a/xbmc/music/windows/GUIWindowMusicNav.cpp b/xbmc/music/windows/GUIWindowMusicNav.cpp index dee4d1711be24..3653d8ab53f80 100644 --- a/xbmc/music/windows/GUIWindowMusicNav.cpp +++ b/xbmc/music/windows/GUIWindowMusicNav.cpp @@ -31,7 +31,6 @@ #include "PartyModeManager.h" #include "playlists/PlayList.h" #include "playlists/PlayListFactory.h" -#include "music/dialogs/GUIDialogMusicScan.h" #include "video/VideoDatabase.h" #include "video/windows/GUIWindowVideoNav.h" #include "music/tags/MusicInfoTag.h" @@ -408,7 +407,6 @@ void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &butt { CGUIWindowMusicBase::GetContextButtons(itemNumber, buttons); - CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN); CFileItemPtr item; if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) item = m_vecItems->Get(itemNumber); @@ -532,9 +530,9 @@ void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &butt } // noncontextual buttons - if (musicScan && musicScan->IsScanning()) + if (g_application.IsMusicScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning - else if (musicScan) + else buttons.Add(CONTEXT_BUTTON_UPDATE_LIBRARY, 653); CGUIWindowMusicBase::GetNonContextButtons(buttons); @@ -606,9 +604,7 @@ bool CGUIWindowMusicNav::OnContextButton(int itemNumber, CONTEXT_BUTTON button) case CONTEXT_BUTTON_UPDATE_LIBRARY: { - CGUIDialogMusicScan *scanner = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN); - if (scanner) - scanner->StartScanning(""); + g_application.StartMusicScan(""); return true; } diff --git a/xbmc/music/windows/GUIWindowMusicSongs.cpp b/xbmc/music/windows/GUIWindowMusicSongs.cpp index e5e3b7e9a2f58..fc02602fd2f10 100644 --- a/xbmc/music/windows/GUIWindowMusicSongs.cpp +++ b/xbmc/music/windows/GUIWindowMusicSongs.cpp @@ -26,7 +26,6 @@ #include "Application.h" #include "CueDocument.h" #include "GUIPassword.h" -#include "music/dialogs/GUIDialogMusicScan.h" #include "dialogs/GUIDialogYesNo.h" #include "GUIUserMessages.h" #include "guilib/GUIWindowManager.h" @@ -177,16 +176,15 @@ void CGUIWindowMusicSongs::OnScan(int iItem) void CGUIWindowMusicSongs::DoScan(const CStdString &strPath) { - CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN); - if (musicScan && musicScan->IsScanning()) + if (g_application.IsMusicScanning()) { - musicScan->StopScanning(); + g_application.StopMusicScan(); return; } // Start background loader int iControl=GetFocusedControlID(); - if (musicScan) musicScan->StartScanning(strPath); + g_application.StartMusicScan(strPath); SET_CONTROL_FOCUS(iControl, 0); UpdateButtons(); @@ -269,8 +267,7 @@ void CGUIWindowMusicSongs::UpdateButtons() CONTROL_ENABLE(CONTROL_BTNSCAN); } - CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN); - if (musicScan && musicScan->IsScanning()) + if (g_application.IsMusicScanning()) { SET_CONTROL_LABEL(CONTROL_BTNSCAN, 14056); // Stop Scan } @@ -362,19 +359,15 @@ void CGUIWindowMusicSongs::GetContextButtons(int itemNumber, CContextButtons &bu } // Add the scan button(s) - CGUIDialogMusicScan *pScanDlg = (CGUIDialogMusicScan *)g_windowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN); - if (pScanDlg) + if (g_application.IsMusicScanning()) + buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning + else if (!inPlaylists && !m_vecItems->IsInternetStream() && + !item->IsLastFM() && + !item->GetPath().Equals("add") && !item->IsParentFolder() && + !item->IsPlugin() && + (g_settings.GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)) { - if (pScanDlg->IsScanning()) - buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning - else if (!inPlaylists && !m_vecItems->IsInternetStream() && - !item->IsLastFM() && - !item->GetPath().Equals("add") && !item->IsParentFolder() && - !item->IsPlugin() && - (g_settings.GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)) - { - buttons.Add(CONTEXT_BUTTON_SCAN, 13352); - } + buttons.Add(CONTEXT_BUTTON_SCAN, 13352); } if (item->IsPlugin() || item->IsScript() || m_vecItems->IsPlugin()) buttons.Add(CONTEXT_BUTTON_PLUGIN_SETTINGS, 1045); diff --git a/xbmc/video/dialogs/GUIDialogVideoScan.cpp b/xbmc/video/dialogs/GUIDialogVideoScan.cpp index 5fca864dd945a..989da9a38657a 100644 --- a/xbmc/video/dialogs/GUIDialogVideoScan.cpp +++ b/xbmc/video/dialogs/GUIDialogVideoScan.cpp @@ -40,7 +40,6 @@ using namespace VIDEO; CGUIDialogVideoScan::CGUIDialogVideoScan(void) : CGUIDialog(WINDOW_DIALOG_VIDEO_SCAN, "DialogVideoScan.xml") { - m_videoInfoScanner.SetObserver(this); } CGUIDialogVideoScan::~CGUIDialogVideoScan(void) @@ -115,27 +114,10 @@ void CGUIDialogVideoScan::OnSetTitle(const CStdString& strTitle) m_strTitle = strTitle; } -void CGUIDialogVideoScan::StartScanning(const CStdString& strDirectory, bool scanAll) +void CGUIDialogVideoScan::ShowScan() { m_ScanState = PREPARING; - - if (!g_guiSettings.GetBool("videolibrary.backgroundupdate")) - { - Show(); - } - - m_videoInfoScanner.Start(strDirectory,scanAll); -} - -void CGUIDialogVideoScan::StopScanning() -{ - if (m_videoInfoScanner.IsScanning()) - m_videoInfoScanner.Stop(); -} - -bool CGUIDialogVideoScan::IsScanning() -{ - return m_videoInfoScanner.IsScanning(); + Show(); } void CGUIDialogVideoScan::OnDirectoryScanned(const CStdString& strDirectory) diff --git a/xbmc/video/dialogs/GUIDialogVideoScan.h b/xbmc/video/dialogs/GUIDialogVideoScan.h index 53a18d0641ded..fd29ecc1c1b0a 100644 --- a/xbmc/video/dialogs/GUIDialogVideoScan.h +++ b/xbmc/video/dialogs/GUIDialogVideoScan.h @@ -33,9 +33,7 @@ class CGUIDialogVideoScan: public CGUIDialog, public VIDEO::IVideoInfoScannerObs virtual bool OnMessage(CGUIMessage& message); virtual void FrameMove(); - void StartScanning(const CStdString& strDirectory, bool scanAll = false); - bool IsScanning(); - void StopScanning(); + void ShowScan(); void UpdateState(); protected: @@ -48,7 +46,6 @@ class CGUIDialogVideoScan: public CGUIDialog, public VIDEO::IVideoInfoScannerObs virtual void OnSetCurrentProgress(int currentItem, int itemCount); virtual void OnSetTitle(const CStdString& strTitle); - VIDEO::CVideoInfoScanner m_videoInfoScanner; VIDEO::SCAN_STATE m_ScanState; CStdString m_strCurrentDir; CStdString m_strTitle; diff --git a/xbmc/video/windows/GUIWindowVideoBase.cpp b/xbmc/video/windows/GUIWindowVideoBase.cpp index 100003d5152a5..b22355888fa34 100644 --- a/xbmc/video/windows/GUIWindowVideoBase.cpp +++ b/xbmc/video/windows/GUIWindowVideoBase.cpp @@ -444,8 +444,7 @@ bool CGUIWindowVideoBase::ShowIMDB(CFileItem *item, const ScraperPtr &info2) if(!info) return false; - CGUIDialogVideoScan* pDialog = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pDialog && pDialog->IsScanning()) + if (g_application.IsVideoScanning()) { CGUIDialogOK::ShowAndGetInput(13346,14057,-1,-1); return false; @@ -1296,9 +1295,7 @@ bool CGUIWindowVideoBase::OnContextButton(int itemNumber, CONTEXT_BUTTON button) case CONTEXT_BUTTON_STOP_SCANNING: { - CGUIDialogVideoScan *pScanDlg = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pScanDlg && pScanDlg->IsScanning()) - pScanDlg->StopScanning(); + g_application.StopVideoScan(); return true; } case CONTEXT_BUTTON_SCAN: @@ -1468,8 +1465,7 @@ void CGUIWindowVideoBase::MarkWatched(const CFileItemPtr &item, bool bMark) if (!g_settings.GetCurrentProfile().canWriteDatabases()) return; // dont allow update while scanning - CGUIDialogVideoScan* pDialogScan = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pDialogScan && pDialogScan->IsScanning()) + if (g_application.IsVideoScanning()) { CGUIDialogOK::ShowAndGetInput(257, 0, 14057, 0); return; @@ -1516,8 +1512,7 @@ void CGUIWindowVideoBase::MarkWatched(const CFileItemPtr &item, bool bMark) void CGUIWindowVideoBase::UpdateVideoTitle(const CFileItem* pItem) { // dont allow update while scanning - CGUIDialogVideoScan* pDialogScan = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pDialogScan && pDialogScan->IsScanning()) + if (g_application.IsVideoScanning()) { CGUIDialogOK::ShowAndGetInput(257, 0, 14057, 0); return; @@ -1909,9 +1904,7 @@ int CGUIWindowVideoBase::GetScraperForItem(CFileItem *item, ADDON::ScraperPtr &i void CGUIWindowVideoBase::OnScan(const CStdString& strPath, bool scanAll) { - CGUIDialogVideoScan* pDialog = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pDialog) - pDialog->StartScanning(strPath, scanAll); + g_application.StartVideoScan(strPath, scanAll); } CStdString CGUIWindowVideoBase::GetStartFolder(const CStdString &dir) @@ -1991,8 +1984,6 @@ void CGUIWindowVideoBase::OnAssignContent(const CStdString &path) if (bScan) { - CGUIDialogVideoScan* pDialog = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pDialog) - pDialog->StartScanning(path, true); + g_application.StartVideoScan(path, true); } } diff --git a/xbmc/video/windows/GUIWindowVideoNav.cpp b/xbmc/video/windows/GUIWindowVideoNav.cpp index 728d77045afb6..457144b807273 100644 --- a/xbmc/video/windows/GUIWindowVideoNav.cpp +++ b/xbmc/video/windows/GUIWindowVideoNav.cpp @@ -747,8 +747,7 @@ bool CGUIWindowVideoNav::DeleteItem(CFileItem* pItem, bool bUnavailable /* = fal iType = VIDEODB_CONTENT_MUSICVIDEOS; // dont allow update while scanning - CGUIDialogVideoScan* pDialogScan = (CGUIDialogVideoScan*)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pDialogScan && pDialogScan->IsScanning()) + if (g_application.IsVideoScanning()) { CGUIDialogOK::ShowAndGetInput(257, 0, 14057, 0); return false; @@ -887,8 +886,7 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt if (!item) { - CGUIDialogVideoScan *pScanDlg = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pScanDlg && pScanDlg->IsScanning()) + if (g_application.IsVideoScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); else buttons.Add(CONTEXT_BUTTON_UPDATE_LIBRARY, 653); @@ -898,8 +896,7 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt // get the usual shares CGUIDialogContextMenu::GetContextButtons("video", item, buttons); // add scan button somewhere here - CGUIDialogVideoScan *pScanDlg = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pScanDlg && pScanDlg->IsScanning()) + if (g_application.IsVideoScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning if (!item->IsDVD() && item->GetPath() != "add" && !item->IsParentFolder() && (g_settings.GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)) @@ -908,7 +905,7 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt database.Open(); ADDON::ScraperPtr info = database.GetScraperForPath(item->GetPath()); - if (!pScanDlg || (pScanDlg && !pScanDlg->IsScanning())) + if (!g_application.IsVideoScanning()) { if (!item->IsLiveTV() && !item->IsPlugin() && !item->IsAddonsPath()) { @@ -919,7 +916,7 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt } } - if (info && (!pScanDlg || (pScanDlg && !pScanDlg->IsScanning()))) + if (info && !g_application.IsVideoScanning()) buttons.Add(CONTEXT_BUTTON_SCAN, 13349); } } @@ -974,8 +971,7 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt { if (node == NODE_TYPE_TITLE_TVSHOWS) { - CGUIDialogVideoScan *pScanDlg = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pScanDlg && pScanDlg->IsScanning()) + if (g_application.IsVideoScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); else buttons.Add(CONTEXT_BUTTON_UPDATE_TVSHOW, 13349); @@ -1044,8 +1040,7 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt } // this should ideally be non-contextual (though we need some context for non-tv show node I guess) - CGUIDialogVideoScan *pScanDlg = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (pScanDlg && pScanDlg->IsScanning()) + if (g_application.IsVideoScanning()) { if (node != NODE_TYPE_TITLE_TVSHOWS) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); @@ -1067,13 +1062,12 @@ void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &butt // add "Set/Change content" to folders if (item->m_bIsFolder && !item->IsPlayList() && !item->IsSmartPlayList() && !item->IsLiveTV() && !item->IsPlugin() && !item->IsAddonsPath()) { - CGUIDialogVideoScan *pScanDlg = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); - if (!pScanDlg || (pScanDlg && !pScanDlg->IsScanning())) + if (!g_application.IsVideoScanning()) { if (info && info->Content() != CONTENT_NONE) { buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20442); - if (info && (!pScanDlg || (pScanDlg && !pScanDlg->IsScanning()))) + if (info && g_application.IsVideoScanning()) buttons.Add(CONTEXT_BUTTON_SCAN, 13349); } else