mirror of
https://github.com/clementine-player/Clementine
synced 2025-01-03 13:30:26 +01:00
library: Fix rescan in case where library directory was recreated
If a root library directory is deleted and recreated, it is not detected since inotify would need to watch the parent directory. On rescan, if the subdirectory list for a directory is empty, re-add the library's root directory. This is an edge case on Linux systems. The issue may not exist on other operating systems.
This commit is contained in:
parent
fd3a2a2f12
commit
f4e70face1
@ -230,6 +230,7 @@ void LibraryWatcher::WatchList::Add(const Directory& dir) {
|
|||||||
|
|
||||||
void LibraryWatcher::AddDirectory(const Directory& dir,
|
void LibraryWatcher::AddDirectory(const Directory& dir,
|
||||||
const SubdirectoryList& subdirs) {
|
const SubdirectoryList& subdirs) {
|
||||||
|
qLog(Debug) << "Add directory" << dir.GetPath();
|
||||||
watched_dirs_.Add(dir);
|
watched_dirs_.Add(dir);
|
||||||
const WatchedDir& new_dir = watched_dirs_.list_[dir.id];
|
const WatchedDir& new_dir = watched_dirs_.list_[dir.id];
|
||||||
|
|
||||||
@ -878,8 +879,21 @@ void LibraryWatcher::FullScanNow() { PerformScan(false, true); }
|
|||||||
|
|
||||||
void LibraryWatcher::PerformScan(bool incremental, bool ignore_mtimes) {
|
void LibraryWatcher::PerformScan(bool incremental, bool ignore_mtimes) {
|
||||||
for (const WatchedDir& dir : watched_dirs_.list_.values()) {
|
for (const WatchedDir& dir : watched_dirs_.list_.values()) {
|
||||||
|
qLog(Debug) << "Scanning library directory" << dir.GetPath();
|
||||||
ScanTransaction transaction(this, dir, incremental, ignore_mtimes);
|
ScanTransaction transaction(this, dir, incremental, ignore_mtimes);
|
||||||
SubdirectoryList subdirs(transaction.GetAllSubdirs());
|
SubdirectoryList subdirs(transaction.GetAllSubdirs());
|
||||||
|
|
||||||
|
// On Linux systems, if the library directory is deleted then re-created,
|
||||||
|
// inotify won't find it. This could be corrected by watching parent
|
||||||
|
// directories, but not worth the complexity for an edge case.
|
||||||
|
if (subdirs.isEmpty()) {
|
||||||
|
qLog(Debug) << "Library directory wasn't in subdir list.";
|
||||||
|
Subdirectory subdir;
|
||||||
|
subdir.path = dir.GetPath();
|
||||||
|
subdir.directory_id = dir.GetId();
|
||||||
|
subdirs << subdir;
|
||||||
|
}
|
||||||
|
|
||||||
transaction.AddToProgressMax(subdirs.count());
|
transaction.AddToProgressMax(subdirs.count());
|
||||||
|
|
||||||
for (const Subdirectory& subdir : subdirs) {
|
for (const Subdirectory& subdir : subdirs) {
|
||||||
|
Loading…
Reference in New Issue
Block a user