summaryrefslogtreecommitdiffstats
path: root/xbmc/music/jobs/MusicLibraryScanningJob.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/music/jobs/MusicLibraryScanningJob.cpp')
-rw-r--r--xbmc/music/jobs/MusicLibraryScanningJob.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/xbmc/music/jobs/MusicLibraryScanningJob.cpp b/xbmc/music/jobs/MusicLibraryScanningJob.cpp
new file mode 100644
index 0000000..d2626a1
--- /dev/null
+++ b/xbmc/music/jobs/MusicLibraryScanningJob.cpp
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ */
+
+#include "MusicLibraryScanningJob.h"
+
+#include "music/MusicDatabase.h"
+
+CMusicLibraryScanningJob::CMusicLibraryScanningJob(const std::string& directory, int flags, bool showProgress /* = true */)
+ : m_scanner(),
+ m_directory(directory),
+ m_showProgress(showProgress),
+ m_flags(flags)
+{ }
+
+CMusicLibraryScanningJob::~CMusicLibraryScanningJob() = default;
+
+bool CMusicLibraryScanningJob::Cancel()
+{
+ if (!m_scanner.IsScanning())
+ return true;
+
+ m_scanner.Stop();
+ return true;
+}
+
+bool CMusicLibraryScanningJob::operator==(const CJob* job) const
+{
+ if (strcmp(job->GetType(), GetType()) != 0)
+ return false;
+
+ const CMusicLibraryScanningJob* scanningJob = dynamic_cast<const CMusicLibraryScanningJob*>(job);
+ if (scanningJob == nullptr)
+ return false;
+
+ return m_directory == scanningJob->m_directory &&
+ m_flags == scanningJob->m_flags;
+}
+
+bool CMusicLibraryScanningJob::Work(CMusicDatabase &db)
+{
+ m_scanner.ShowDialog(m_showProgress);
+ if (m_flags & MUSIC_INFO::CMusicInfoScanner::SCAN_ALBUMS)
+ // Scrape additional album information
+ m_scanner.FetchAlbumInfo(m_directory, m_flags & MUSIC_INFO::CMusicInfoScanner::SCAN_RESCAN);
+ else if (m_flags & MUSIC_INFO::CMusicInfoScanner::SCAN_ARTISTS)
+ // Scrape additional artist information
+ m_scanner.FetchArtistInfo(m_directory, m_flags & MUSIC_INFO::CMusicInfoScanner::SCAN_RESCAN);
+ else
+ // Scan tags from music files, and optionally scrape artist and album info
+ m_scanner.Start(m_directory, m_flags);
+
+ return true;
+}