mirror of
https://github.com/owntone/owntone-server.git
synced 2025-04-19 02:15:18 -04:00
[scan] Early skip if file should be ignored
Avoids needless logging, e.g. from failed lstat(). Closes #1078.
This commit is contained in:
parent
c5df688caf
commit
bb9536ef44
@ -640,12 +640,12 @@ process_regular_file(const char *file, struct stat *sb, int type, int flags, int
|
|||||||
|
|
||||||
/* Thread: scan */
|
/* Thread: scan */
|
||||||
static void
|
static void
|
||||||
process_file(char *file, struct stat *sb, int type, int flags, int dir_id)
|
process_file(char *file, struct stat *sb, enum file_type file_type, int scan_type, int flags, int dir_id)
|
||||||
{
|
{
|
||||||
switch (file_type_get(file))
|
switch (file_type)
|
||||||
{
|
{
|
||||||
case FILE_REGULAR:
|
case FILE_REGULAR:
|
||||||
process_regular_file(file, sb, type, flags, dir_id);
|
process_regular_file(file, sb, scan_type, flags, dir_id);
|
||||||
|
|
||||||
counter++;
|
counter++;
|
||||||
|
|
||||||
@ -826,7 +826,8 @@ process_directory(char *path, int parent_id, int flags)
|
|||||||
int is_link;
|
int is_link;
|
||||||
int follow_symlinks;
|
int follow_symlinks;
|
||||||
struct watch_info wi;
|
struct watch_info wi;
|
||||||
int type;
|
int scan_type;
|
||||||
|
enum file_type file_type;
|
||||||
char virtual_path[PATH_MAX];
|
char virtual_path[PATH_MAX];
|
||||||
int dir_id;
|
int dir_id;
|
||||||
int ret;
|
int ret;
|
||||||
@ -854,13 +855,13 @@ process_directory(char *path, int parent_id, int flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check if compilation and/or podcast directory */
|
/* Check if compilation and/or podcast directory */
|
||||||
type = 0;
|
scan_type = 0;
|
||||||
if (check_speciallib(path, "compilations"))
|
if (check_speciallib(path, "compilations"))
|
||||||
type |= F_SCAN_TYPE_COMPILATION;
|
scan_type |= F_SCAN_TYPE_COMPILATION;
|
||||||
if (check_speciallib(path, "podcasts"))
|
if (check_speciallib(path, "podcasts"))
|
||||||
type |= F_SCAN_TYPE_PODCAST;
|
scan_type |= F_SCAN_TYPE_PODCAST;
|
||||||
if (check_speciallib(path, "audiobooks"))
|
if (check_speciallib(path, "audiobooks"))
|
||||||
type |= F_SCAN_TYPE_AUDIOBOOK;
|
scan_type |= F_SCAN_TYPE_AUDIOBOOK;
|
||||||
|
|
||||||
follow_symlinks = cfg_getbool(cfg_getsec(cfg, "library"), "follow_symlinks");
|
follow_symlinks = cfg_getbool(cfg_getsec(cfg, "library"), "follow_symlinks");
|
||||||
|
|
||||||
@ -892,6 +893,10 @@ process_directory(char *path, int parent_id, int flags)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
file_type = file_type_get(entry);
|
||||||
|
if (file_type == FILE_IGNORE)
|
||||||
|
continue;
|
||||||
|
|
||||||
ret = read_attributes(resolved_path, entry, &sb, &is_link);
|
ret = read_attributes(resolved_path, entry, &sb, &is_link);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
@ -913,7 +918,7 @@ process_directory(char *path, int parent_id, int flags)
|
|||||||
else if (!(flags & F_SCAN_FAST))
|
else if (!(flags & F_SCAN_FAST))
|
||||||
{
|
{
|
||||||
if (S_ISREG(sb.st_mode) || S_ISFIFO(sb.st_mode))
|
if (S_ISREG(sb.st_mode) || S_ISFIFO(sb.st_mode))
|
||||||
process_file(resolved_path, &sb, type, flags, dir_id);
|
process_file(resolved_path, &sb, file_type, scan_type, flags, dir_id);
|
||||||
else
|
else
|
||||||
DPRINTF(E_LOG, L_SCAN, "Skipping %s, not a directory, symlink, pipe nor regular file\n", entry);
|
DPRINTF(E_LOG, L_SCAN, "Skipping %s, not a directory, symlink, pipe nor regular file\n", entry);
|
||||||
}
|
}
|
||||||
@ -1245,7 +1250,7 @@ process_inotify_dir(struct watch_info *wi, char *path, struct inotify_event *ie)
|
|||||||
}
|
}
|
||||||
else if (ret < 0)
|
else if (ret < 0)
|
||||||
{
|
{
|
||||||
DPRINTF(E_LOG, L_SCAN, "Directory access to '%s' achieved\n", path);
|
DPRINTF(E_INFO, L_SCAN, "Directory access to '%s' achieved\n", path);
|
||||||
|
|
||||||
ie->mask |= IN_CREATE;
|
ie->mask |= IN_CREATE;
|
||||||
}
|
}
|
||||||
@ -1278,7 +1283,8 @@ process_inotify_file(struct watch_info *wi, char *path, struct inotify_event *ie
|
|||||||
char *file = path;
|
char *file = path;
|
||||||
char resolved_path[PATH_MAX];
|
char resolved_path[PATH_MAX];
|
||||||
char dir_vpath[PATH_MAX];
|
char dir_vpath[PATH_MAX];
|
||||||
int type;
|
enum file_type file_type;
|
||||||
|
int scan_type;
|
||||||
int i;
|
int i;
|
||||||
int dir_id;
|
int dir_id;
|
||||||
int fd;
|
int fd;
|
||||||
@ -1287,6 +1293,10 @@ process_inotify_file(struct watch_info *wi, char *path, struct inotify_event *ie
|
|||||||
|
|
||||||
DPRINTF(E_DBG, L_SCAN, "File event: 0x%x, cookie 0x%x, wd %d\n", ie->mask, ie->cookie, wi->wd);
|
DPRINTF(E_DBG, L_SCAN, "File event: 0x%x, cookie 0x%x, wd %d\n", ie->mask, ie->cookie, wi->wd);
|
||||||
|
|
||||||
|
file_type = file_type_get(path);
|
||||||
|
if (file_type == FILE_IGNORE)
|
||||||
|
return;
|
||||||
|
|
||||||
path_hash = djb_hash(path, strlen(path));
|
path_hash = djb_hash(path, strlen(path));
|
||||||
|
|
||||||
if (ie->mask & IN_DELETE)
|
if (ie->mask & IN_DELETE)
|
||||||
@ -1423,13 +1433,13 @@ process_inotify_file(struct watch_info *wi, char *path, struct inotify_event *ie
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
type = 0;
|
scan_type = 0;
|
||||||
if (check_speciallib(path, "compilations"))
|
if (check_speciallib(path, "compilations"))
|
||||||
type |= F_SCAN_TYPE_COMPILATION;
|
scan_type |= F_SCAN_TYPE_COMPILATION;
|
||||||
if (check_speciallib(path, "podcasts"))
|
if (check_speciallib(path, "podcasts"))
|
||||||
type |= F_SCAN_TYPE_PODCAST;
|
scan_type |= F_SCAN_TYPE_PODCAST;
|
||||||
if (check_speciallib(path, "audiobooks"))
|
if (check_speciallib(path, "audiobooks"))
|
||||||
type |= F_SCAN_TYPE_AUDIOBOOK;
|
scan_type |= F_SCAN_TYPE_AUDIOBOOK;
|
||||||
|
|
||||||
dir_id = get_parent_dir_id(file);
|
dir_id = get_parent_dir_id(file);
|
||||||
|
|
||||||
@ -1441,7 +1451,7 @@ process_inotify_file(struct watch_info *wi, char *path, struct inotify_event *ie
|
|||||||
}
|
}
|
||||||
else if (S_ISREG(sb.st_mode) || S_ISFIFO(sb.st_mode))
|
else if (S_ISREG(sb.st_mode) || S_ISFIFO(sb.st_mode))
|
||||||
{
|
{
|
||||||
process_file(resolved_path, &sb, type, 0, dir_id);
|
process_file(resolved_path, &sb, file_type, scan_type, 0, dir_id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
DPRINTF(E_LOG, L_SCAN, "Skipping %s, not a directory, symlink, pipe nor regular file\n", resolved_path);
|
DPRINTF(E_LOG, L_SCAN, "Skipping %s, not a directory, symlink, pipe nor regular file\n", resolved_path);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user