Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request xbmc#6406 from Montellese/videodb_queuing
video library: queue database write processes
  • Loading branch information
mkortstiege committed Feb 19, 2015
2 parents 6183ef9 + 99f37c4 commit ab42bf1
Show file tree
Hide file tree
Showing 33 changed files with 1,260 additions and 269 deletions.
98 changes: 83 additions & 15 deletions Kodi.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions Makefile.in
Expand Up @@ -92,6 +92,7 @@ DIRECTORY_ARCHIVES=$(DVDPLAYER_ARCHIVES) \
xbmc/storage/storage.a \
xbmc/utils/utils.a \
xbmc/video/dialogs/videodialogs.a \
xbmc/video/jobs/video-jobs.a \
xbmc/video/videosync/videosync.a \
xbmc/video/video.a \
xbmc/video/windows/videowindows.a \
Expand Down
16 changes: 14 additions & 2 deletions project/VS2010Express/XBMC.vcxproj
Expand Up @@ -1001,8 +1001,8 @@
<ClInclude Include="..\..\xbmc\utils\IRssObserver.h" />
<ClInclude Include="..\..\xbmc\utils\IXmlDeserializable.h" />
<ClInclude Include="..\..\xbmc\utils\LegacyPathTranslation.h" />
<ClInclude Include="..\..\xbmc\utils\MarkWatchedJob.h" />
<ClInclude Include="..\..\xbmc\utils\params_check_macros.h" />
<ClInclude Include="..\..\xbmc\utils\ProgressJob.h" />
<ClInclude Include="..\..\xbmc\utils\RssManager.h" />
<ClInclude Include="..\..\xbmc\utils\StringValidation.h" />
<ClInclude Include="..\..\xbmc\utils\Utf8Utils.h" />
Expand Down Expand Up @@ -1145,7 +1145,7 @@
<ClCompile Include="..\..\xbmc\utils\CharsetDetection.cpp" />
<ClCompile Include="..\..\xbmc\utils\HttpRangeUtils.cpp" />
<ClCompile Include="..\..\xbmc\utils\LegacyPathTranslation.cpp" />
<ClCompile Include="..\..\xbmc\utils\MarkWatchedJob.cpp" />
<ClCompile Include="..\..\xbmc\utils\ProgressJob.cpp" />
<ClCompile Include="..\..\xbmc\utils\RssManager.cpp" />
<ClCompile Include="..\..\xbmc\utils\StringValidation.cpp" />
<ClCompile Include="..\..\xbmc\utils\test\TestHttpRangeUtils.cpp">
Expand All @@ -1161,8 +1161,14 @@
<ClCompile Include="..\..\xbmc\utils\win32\Win32InterfaceForCLog.cpp" />
<ClCompile Include="..\..\xbmc\utils\win32\Win32Log.cpp" />
<ClCompile Include="..\..\xbmc\utils\XSLTUtils.cpp" />
<ClCompile Include="..\..\xbmc\video\jobs\VideoLibraryCleaningJob.cpp" />
<ClCompile Include="..\..\xbmc\video\jobs\VideoLibraryJob.cpp" />
<ClCompile Include="..\..\xbmc\video\jobs\VideoLibraryMarkWatchedJob.cpp" />
<ClCompile Include="..\..\xbmc\video\jobs\VideoLibraryProgressJob.cpp" />
<ClCompile Include="..\..\xbmc\video\jobs\VideoLibraryScanningJob.cpp" />
<ClCompile Include="..\..\xbmc\video\PlayerController.cpp" />
<ClCompile Include="..\..\xbmc\video\videosync\VideoSyncD3D.cpp" />
<ClCompile Include="..\..\xbmc\video\VideoLibraryQueue.cpp" />
<ClCompile Include="..\..\xbmc\video\VideoThumbLoader.cpp" />
<ClCompile Include="..\..\xbmc\music\MusicThumbLoader.cpp" />
<ClCompile Include="..\..\xbmc\ThumbnailCache.cpp" />
Expand Down Expand Up @@ -2038,9 +2044,15 @@
<ClInclude Include="..\..\xbmc\TextureDatabase.h" />
<ClInclude Include="..\..\xbmc\DatabaseManager.h" />
<ClInclude Include="..\..\xbmc\ThumbLoader.h" />
<ClInclude Include="..\..\xbmc\video\jobs\VideoLibraryCleaningJob.h" />
<ClInclude Include="..\..\xbmc\video\jobs\VideoLibraryJob.h" />
<ClInclude Include="..\..\xbmc\video\jobs\VideoLibraryMarkWatchedJob.h" />
<ClInclude Include="..\..\xbmc\video\jobs\VideoLibraryProgressJob.h" />
<ClInclude Include="..\..\xbmc\video\jobs\VideoLibraryScanningJob.h" />
<ClInclude Include="..\..\xbmc\video\PlayerController.h" />
<ClInclude Include="..\..\xbmc\video\videosync\VideoSync.h" />
<ClInclude Include="..\..\xbmc\video\videosync\VideoSyncD3D.h" />
<ClInclude Include="..\..\xbmc\video\VideoLibraryQueue.h" />
<ClInclude Include="..\..\xbmc\video\VideoThumbLoader.h" />
<ClInclude Include="..\..\xbmc\music\MusicThumbLoader.h" />
<ClInclude Include="..\..\xbmc\ThumbnailCache.h" />
Expand Down
51 changes: 45 additions & 6 deletions project/VS2010Express/XBMC.vcxproj.filters
Expand Up @@ -325,6 +325,9 @@
<Filter Include="network\test">
<UniqueIdentifier>{1bdb0045-3341-49b7-8d6f-30a53f812350}</UniqueIdentifier>
</Filter>
<Filter Include="video\jobs">
<UniqueIdentifier>{f413004c-1ab9-42ce-bb1a-0636e5286a00}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\xbmc\win32\pch.cpp">
Expand Down Expand Up @@ -3062,9 +3065,6 @@
<ClCompile Include="..\..\xbmc\filesystem\win32\Win32SMBFile.cpp">
<Filter>filesystem\win32</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\MarkWatchedJob.cpp">
<Filter>utils</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\filesystem\BlurayFile.cpp">
<Filter>filesystem</Filter>
</ClCompile>
Expand Down Expand Up @@ -3113,6 +3113,27 @@
<ClCompile Include="..\..\xbmc\dialogs\GUIDialogSimpleMenu.cpp">
<Filter>dialogs</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\video\jobs\VideoLibraryJob.cpp">
<Filter>video\jobs</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\video\VideoLibraryQueue.cpp">
<Filter>video</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\video\jobs\VideoLibraryScanningJob.cpp">
<Filter>video\jobs</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\video\jobs\VideoLibraryMarkWatchedJob.cpp">
<Filter>video\jobs</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\video\jobs\VideoLibraryCleaningJob.cpp">
<Filter>video\jobs</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\ProgressJob.cpp">
<Filter>utils</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\video\jobs\VideoLibraryProgressJob.cpp">
<Filter>video\jobs</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\xbmc\win32\pch.h">
Expand Down Expand Up @@ -6006,9 +6027,6 @@
<ClInclude Include="..\..\xbmc\filesystem\win32\Win32SMBFile.h">
<Filter>filesystem\win32</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\utils\MarkWatchedJob.h">
<Filter>utils</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\settings\DiscSettings.h">
<Filter>settings</Filter>
</ClInclude>
Expand Down Expand Up @@ -6057,6 +6075,27 @@
<ClInclude Include="..\..\xbmc\dialogs\GUIDialogSimpleMenu.h">
<Filter>dialogs</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\video\jobs\VideoLibraryJob.h">
<Filter>video\jobs</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\video\VideoLibraryQueue.h">
<Filter>video</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\video\jobs\VideoLibraryScanningJob.h">
<Filter>video\jobs</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\video\jobs\VideoLibraryMarkWatchedJob.h">
<Filter>video\jobs</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\video\jobs\VideoLibraryCleaningJob.h">
<Filter>video\jobs</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\utils\ProgressJob.h">
<Filter>utils</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\video\jobs\VideoLibraryProgressJob.h">
<Filter>video\jobs</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\xbmc\win32\XBMC_PC.rc">
Expand Down
31 changes: 11 additions & 20 deletions xbmc/Application.cpp
Expand Up @@ -37,6 +37,7 @@
#include "PlayListPlayer.h"
#include "Autorun.h"
#include "video/Bookmark.h"
#include "video/VideoLibraryQueue.h"
#include "network/NetworkServices.h"
#include "guilib/GUIControlProfiler.h"
#include "utils/LangCodeExpander.h"
Expand Down Expand Up @@ -294,7 +295,6 @@ CApplication::CApplication(void)
, m_stackFileItemToUpdate(new CFileItem)
, m_progressTrackingVideoResumeBookmark(*new CBookmark)
, m_progressTrackingItem(new CFileItem)
, m_videoInfoScanner(new CVideoInfoScanner)
, m_musicInfoScanner(new CMusicInfoScanner)
, m_playerController(new CPlayerController)
{
Expand Down Expand Up @@ -352,7 +352,6 @@ CApplication::CApplication(void)
CApplication::~CApplication(void)
{
delete m_musicInfoScanner;
delete m_videoInfoScanner;
delete &m_progressTrackingVideoResumeBookmark;
#ifdef HAS_DVD_DRIVE
delete m_Autorun;
Expand Down Expand Up @@ -2818,8 +2817,8 @@ void CApplication::Stop(int exitCode)
if (m_musicInfoScanner->IsScanning())
m_musicInfoScanner->Stop();

if (m_videoInfoScanner->IsScanning())
m_videoInfoScanner->Stop();
if (CVideoLibraryQueue::Get().IsRunning())
CVideoLibraryQueue::Get().CancelAllJobs();

CApplicationMessenger::Get().Cleanup();

Expand Down Expand Up @@ -4043,7 +4042,7 @@ void CApplication::CheckShutdown()
if (m_bInhibitIdleShutdown
|| m_pPlayer->IsPlaying() || m_pPlayer->IsPausedPlayback() // is something playing?
|| m_musicInfoScanner->IsScanning()
|| m_videoInfoScanner->IsScanning()
|| CVideoLibraryQueue::Get().IsRunning()
|| g_windowManager.IsWindowActive(WINDOW_DIALOG_PROGRESS) // progress dialog is onscreen
|| !g_PVRManager.CanSystemPowerdown(false))
{
Expand Down Expand Up @@ -4956,7 +4955,7 @@ void CApplication::UpdateLibraries()

bool CApplication::IsVideoScanning() const
{
return m_videoInfoScanner->IsScanning();
return CVideoLibraryQueue::Get().IsScanningLibrary();
}

bool CApplication::IsMusicScanning() const
Expand All @@ -4966,8 +4965,7 @@ bool CApplication::IsMusicScanning() const

void CApplication::StopVideoScan()
{
if (m_videoInfoScanner->IsScanning())
m_videoInfoScanner->Stop();
CVideoLibraryQueue::Get().StopLibraryScanning();
}

void CApplication::StopMusicScan()
Expand All @@ -4978,26 +4976,19 @@ void CApplication::StopMusicScan()

void CApplication::StartVideoCleanup(bool userInitiated /* = true */)
{
if (m_videoInfoScanner->IsScanning())
if (userInitiated && CVideoLibraryQueue::Get().IsRunning())
return;

std::set<int> paths;
if (userInitiated)
m_videoInfoScanner->CleanDatabase(NULL, NULL, true);
CVideoLibraryQueue::Get().CleanLibraryModal(paths);
else
{
m_videoInfoScanner->ShowDialog(false);
m_videoInfoScanner->StartCleanDatabase();
}
CVideoLibraryQueue::Get().CleanLibrary(paths, false);
}

void CApplication::StartVideoScan(const std::string &strDirectory, bool userInitiated /* = true */, bool scanAll /* = false */)
{
if (m_videoInfoScanner->IsScanning())
return;

m_videoInfoScanner->ShowDialog(userInitiated);

m_videoInfoScanner->Start(strDirectory,scanAll);
CVideoLibraryQueue::Get().ScanLibrary(strDirectory, scanAll, userInitiated);
}

void CApplication::StartMusicCleanup(bool userInitiated /* = true */)
Expand Down
1 change: 0 additions & 1 deletion xbmc/Application.h
Expand Up @@ -471,7 +471,6 @@ class CApplication : public CXBApplicationEx, public IPlayerCallback, public IMs
bool m_bTestMode;
bool m_bSystemScreenSaverEnable;

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

bool m_muted;
Expand Down
5 changes: 3 additions & 2 deletions xbmc/interfaces/Builtins.cpp
Expand Up @@ -61,6 +61,7 @@
#include "settings/SkinSettings.h"
#include "utils/StringUtils.h"
#include "utils/URIUtils.h"
#include "video/VideoLibraryQueue.h"
#include "Util.h"
#include "URL.h"
#include "music/MusicDatabase.h"
Expand Down Expand Up @@ -1458,8 +1459,8 @@ int CBuiltins::Execute(const std::string& execString)
if (g_application.IsMusicScanning())
g_application.StopMusicScan();

if (g_application.IsVideoScanning())
g_application.StopVideoScan();
if (CVideoLibraryQueue::Get().IsRunning())
CVideoLibraryQueue::Get().CancelAllJobs();

ADDON::CAddonMgr::Get().StopServices(true);

Expand Down
10 changes: 8 additions & 2 deletions xbmc/utils/JobManager.cpp
Expand Up @@ -120,22 +120,24 @@ void CJobQueue::CancelJob(const CJob *job)
}
}

void CJobQueue::AddJob(CJob *job)
bool CJobQueue::AddJob(CJob *job)
{
CSingleLock lock(m_section);
// check if we have this job already. If so, we're done.
if (find(m_jobQueue.begin(), m_jobQueue.end(), job) != m_jobQueue.end() ||
find(m_processing.begin(), m_processing.end(), job) != m_processing.end())
{
delete job;
return;
return false;
}

if (m_lifo)
m_jobQueue.push_back(CJobPointer(job));
else
m_jobQueue.push_front(CJobPointer(job));
QueueNextJob();

return true;
}

void CJobQueue::QueueNextJob()
Expand All @@ -159,6 +161,10 @@ void CJobQueue::CancelJobs()
m_processing.clear();
}

bool CJobQueue::IsProcessing() const
{
return !m_processing.empty() || !m_jobQueue.empty();
}

bool CJobQueue::QueueEmpty() const
{
Expand Down
7 changes: 6 additions & 1 deletion xbmc/utils/JobManager.h
Expand Up @@ -100,7 +100,7 @@ class CJobQueue: public IJobCallback
\param job a pointer to the job to add. The job should be subclassed from CJob.
\sa CJob
*/
void AddJob(CJob *job);
bool AddJob(CJob *job);

/*!
\brief Cancel a job in the queue
Expand All @@ -120,6 +120,11 @@ class CJobQueue: public IJobCallback
*/
void CancelJobs();

/*!
\brief Check whether the queue is processing a job
*/
bool IsProcessing() const;

/*!
\brief The callback used when a job completes.
Expand Down
2 changes: 1 addition & 1 deletion xbmc/utils/Makefile.in
Expand Up @@ -41,13 +41,13 @@ SRCS += LangCodeExpander.cpp
SRCS += LegacyPathTranslation.cpp
SRCS += log.cpp
SRCS += md5.cpp
SRCS += MarkWatchedJob.cpp
SRCS += Mime.cpp
SRCS += Observer.cpp
SRCS += PerformanceSample.cpp
SRCS += PerformanceStats.cpp
SRCS += posix/PosixInterfaceForCLog.cpp
SRCS += POUtils.cpp
SRCS += ProgressJob.cpp
SRCS += RecentlyAddedJob.cpp
SRCS += RegExp.cpp
SRCS += RingBuffer.cpp
Expand Down

0 comments on commit ab42bf1

Please sign in to comment.