xbmc
MusicLibraryQueue.h
1 /*
2  * Copyright (C) 2017-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "settings/LibExportSettings.h"
12 #include "threads/CriticalSection.h"
13 #include "utils/JobManager.h"
14 
15 #include <map>
16 #include <set>
17 
19 class CMusicLibraryJob;
20 class CGUIDialogProgress;
21 
28 class CMusicLibraryQueue : protected CJobQueue
29 {
30 public:
31  ~CMusicLibraryQueue() override;
32 
37 
43  void ExportLibrary(const CLibExportSettings& settings, bool showDialog = false);
44 
50  void ImportLibrary(const std::string& xmlFile, bool showDialog = false);
51 
58  void ScanLibrary(const std::string& strDirectory, int flags = 0, bool showProgress = true);
59 
65  void StartAlbumScan(const std::string& strDirectory, bool refresh = false);
66 
72  void StartArtistScan(const std::string& strDirectory, bool refresh = false);
73 
78  bool IsScanningLibrary() const;
79 
83  void StopLibraryScanning();
84 
89  void CleanLibrary(bool showDialog = false);
90 
95  void AddJob(CMusicLibraryJob *job);
96 
101  void CancelJob(CMusicLibraryJob *job);
102 
106  void CancelAllJobs();
107 
111  bool IsRunning() const;
112 
113 protected:
114  // implementation of IJobCallback
115  void OnJobComplete(unsigned int jobID, bool success, CJob *job) override;
116 
120  void Refresh();
121 
122 private:
125  CMusicLibraryQueue const& operator=(CMusicLibraryQueue const&);
126 
127  typedef std::set<CMusicLibraryJob*> MusicLibraryJobs;
128  typedef std::map<std::string, MusicLibraryJobs> MusicLibraryJobMap;
129  MusicLibraryJobMap m_jobs;
130  CCriticalSection m_critical;
131 
132  bool m_modal = false;
133  bool m_cleaning = false;
134 };
void AddJob(CMusicLibraryJob *job)
Adds the given job to the queue.
Definition: MusicLibraryQueue.cpp:216
void StopLibraryScanning()
Stop and dequeue all scanning jobs.
Definition: MusicLibraryQueue.cpp:176
Base class for jobs that are executed asynchronously.
Definition: Job.h:109
void ImportLibrary(const std::string &xmlFile, bool showDialog=false)
Enqueue a music library import job.
Definition: MusicLibraryQueue.cpp:84
Basic implementation/interface of a CJob which interacts with the music database. ...
Definition: MusicLibraryJob.h:19
Queue for music library jobs.
Definition: MusicLibraryQueue.h:28
void StartAlbumScan(const std::string &strDirectory, bool refresh=false)
Enqueue an album scraping job fetching additional album data.
Definition: MusicLibraryQueue.cpp:141
void CancelJob(CMusicLibraryJob *job)
Cancels the given job and removes it from the queue.
Definition: MusicLibraryQueue.cpp:238
void ScanLibrary(const std::string &strDirectory, int flags=0, bool showProgress=true)
Enqueue a music library update job, scanning tags embedded in music files and optionally scraping add...
Definition: MusicLibraryQueue.cpp:123
void CleanLibrary(bool showDialog=false)
Enqueue an asynchronous library cleaning job.
Definition: MusicLibraryQueue.cpp:192
Definition: LibExportSettings.h:38
void OnJobComplete(unsigned int jobID, bool success, CJob *job) override
The callback used when a job completes.
Definition: MusicLibraryQueue.cpp:284
void Refresh()
Notifies all to refresh the current listings.
Definition: MusicLibraryQueue.cpp:277
Definition: settings.py:1
Definition: GUIDialogExtendedProgressBar.h:16
Definition: GUIDialogProgress.h:16
bool IsRunning() const
Whether any jobs are running or not.
Definition: MusicLibraryQueue.cpp:272
void CancelAllJobs()
Cancels all running and queued jobs.
Definition: MusicLibraryQueue.cpp:263
bool IsScanningLibrary() const
Check if a library scan or cleaning is in progress.
Definition: MusicLibraryQueue.cpp:157
static CMusicLibraryQueue & GetInstance()
Gets the singleton instance of the music library queue.
Definition: MusicLibraryQueue.cpp:41
void StartArtistScan(const std::string &strDirectory, bool refresh=false)
Enqueue an artist scraping job fetching additional artist data.
Definition: MusicLibraryQueue.cpp:149
void ExportLibrary(const CLibExportSettings &settings, bool showDialog=false)
Enqueue a music library export job.
Definition: MusicLibraryQueue.cpp:47
Job Queue class to handle a queue of unique jobs to be processed sequentially.
Definition: JobManager.h:63