summaryrefslogtreecommitdiffstats
path: root/xbmc/music/MusicLibraryQueue.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--xbmc/music/MusicLibraryQueue.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/xbmc/music/MusicLibraryQueue.h b/xbmc/music/MusicLibraryQueue.h
new file mode 100644
index 0000000..f7948f7
--- /dev/null
+++ b/xbmc/music/MusicLibraryQueue.h
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2017-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include "settings/LibExportSettings.h"
+#include "threads/CriticalSection.h"
+#include "utils/JobManager.h"
+
+#include <map>
+#include <set>
+
+class CGUIDialogProgressBarHandle;
+class CMusicLibraryJob;
+class CGUIDialogProgress;
+
+/*!
+ \brief Queue for music library jobs.
+
+ The queue can only process a single job at any time and every job will be
+ executed at the lowest priority.
+ */
+class CMusicLibraryQueue : protected CJobQueue
+{
+public:
+ ~CMusicLibraryQueue() override;
+
+ /*!
+ \brief Gets the singleton instance of the music library queue.
+ */
+ static CMusicLibraryQueue& GetInstance();
+
+ /*!
+ \brief Enqueue a music library export job.
+ \param[in] settings Library export settings
+ \param[in] showDialog Show a progress dialog while (asynchronously) exporting, otherwise export in synchronous
+ */
+ void ExportLibrary(const CLibExportSettings& settings, bool showDialog = false);
+
+ /*!
+ \brief Enqueue a music library import job.
+ \param[in] xmlFile xml file to import
+ \param[in] showDialog Show a progress dialog while (asynchronously) exporting, otherwise export in synchronous
+ */
+ void ImportLibrary(const std::string& xmlFile, bool showDialog = false);
+
+ /*!
+ \brief Enqueue a music library update job, scanning tags embedded in music files and optionally scraping additional data.
+ \param[in] strDirectory Directory to scan or "" (empty string) for a global scan.
+ \param[in] flags Flags for controlling the scanning process. See xbmc/music/infoscanner/MusicInfoScanner.h for possible values.
+ \param[in] showProgress Whether or not to show a progress dialog. Defaults to true
+ */
+ void ScanLibrary(const std::string& strDirectory, int flags = 0, bool showProgress = true);
+
+ /*!
+ \brief Enqueue an album scraping job fetching additional album data.
+ \param[in] strDirectory Virtual path that identifies which albums to process or "" (empty string) for all albums
+ \param[in] refresh Whether or not to refresh data for albums that have previously been scraped
+ */
+ void StartAlbumScan(const std::string& strDirectory, bool refresh = false);
+
+ /*!
+ \brief Enqueue an artist scraping job fetching additional artist data.
+ \param[in] strDirectory Virtual path that identifies which artists to process or "" (empty string) for all artists
+ \param[in] refresh Whether or not to refresh data for artists that have previously been scraped
+ */
+ void StartArtistScan(const std::string& strDirectory, bool refresh = false);
+
+ /*!
+ \brief Check if a library scan or cleaning is in progress.
+ \return True if a scan or clean is in progress, false otherwise
+ */
+ bool IsScanningLibrary() const;
+
+ /*!
+ \brief Stop and dequeue all scanning jobs.
+ */
+ void StopLibraryScanning();
+
+ /*!
+ \brief Enqueue an asynchronous library cleaning job.
+ \param[in] showDialog Show a model progress dialog while cleaning. Default is false.
+ */
+ void CleanLibrary(bool showDialog = false);
+
+ /*!
+ \brief Adds the given job to the queue.
+ \param[in] job Music library job to be queued.
+ */
+ void AddJob(CMusicLibraryJob *job);
+
+ /*!
+ \brief Cancels the given job and removes it from the queue.
+ \param[in] job Music library job to be canceled and removed from the queue.
+ */
+ void CancelJob(CMusicLibraryJob *job);
+
+ /*!
+ \brief Cancels all running and queued jobs.
+ */
+ void CancelAllJobs();
+
+ /*!
+ \brief Whether any jobs are running or not.
+ */
+ bool IsRunning() const;
+
+protected:
+ // implementation of IJobCallback
+ void OnJobComplete(unsigned int jobID, bool success, CJob *job) override;
+
+ /*!
+ \brief Notifies all to refresh the current listings.
+ */
+ void Refresh();
+
+private:
+ CMusicLibraryQueue();
+ CMusicLibraryQueue(const CMusicLibraryQueue&);
+ CMusicLibraryQueue const& operator=(CMusicLibraryQueue const&);
+
+ typedef std::set<CMusicLibraryJob*> MusicLibraryJobs;
+ typedef std::map<std::string, MusicLibraryJobs> MusicLibraryJobMap;
+ MusicLibraryJobMap m_jobs;
+ CCriticalSection m_critical;
+
+ bool m_modal = false;
+ bool m_exporting = false;
+ bool m_cleaning = false;
+};