mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-07-22 21:50:36 +02:00
Increase scan speed for music libraries
This commit is contained in:
parent
800c039612
commit
05fa95f149
|
@ -1,5 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Emby.Naming.Audio;
|
using Emby.Naming.Audio;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
@ -113,50 +115,50 @@ namespace Emby.Server.Implementations.Library.Resolvers.Audio
|
||||||
IFileSystem fileSystem,
|
IFileSystem fileSystem,
|
||||||
ILibraryManager libraryManager)
|
ILibraryManager libraryManager)
|
||||||
{
|
{
|
||||||
|
// check for audio files before digging down into directories
|
||||||
|
var firstAudioFile = list
|
||||||
|
.Where(fileSystemInfo => !fileSystemInfo.IsDirectory)
|
||||||
|
.FirstOrDefault(fileSystemInfo => libraryManager.IsAudioFile(fileSystemInfo.FullName));
|
||||||
|
if (firstAudioFile != null)
|
||||||
|
{
|
||||||
|
// at least one audio file exists
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!allowSubfolders)
|
||||||
|
{
|
||||||
|
// not music since no audio file exists and we're not looking into subfolders
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
var discSubfolderCount = 0;
|
var discSubfolderCount = 0;
|
||||||
var notMultiDisc = false;
|
var notMultiDisc = false;
|
||||||
|
|
||||||
var namingOptions = ((LibraryManager)_libraryManager).GetNamingOptions();
|
var namingOptions = ((LibraryManager)_libraryManager).GetNamingOptions();
|
||||||
var parser = new AlbumParser(namingOptions);
|
var parser = new AlbumParser(namingOptions);
|
||||||
foreach (var fileSystemInfo in list)
|
|
||||||
|
var directories = list.Where(fileSystemInfo => fileSystemInfo.IsDirectory);
|
||||||
|
|
||||||
|
var result = Parallel.ForEach(directories, (fileSystemInfo, state) =>
|
||||||
{
|
{
|
||||||
if (fileSystemInfo.IsDirectory)
|
var path = fileSystemInfo.FullName;
|
||||||
|
var hasMusic = ContainsMusic(directoryService.GetFileSystemEntries(path), false, directoryService, logger, fileSystem, libraryManager);
|
||||||
|
|
||||||
|
if (hasMusic)
|
||||||
{
|
{
|
||||||
if (allowSubfolders)
|
if (parser.IsMultiPart(path))
|
||||||
{
|
{
|
||||||
if (notMultiDisc)
|
logger.LogDebug("Found multi-disc folder: " + path);
|
||||||
{
|
discSubfolderCount++;
|
||||||
continue;
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
var path = fileSystemInfo.FullName;
|
// If there are folders underneath with music that are not multidisc, then this can't be a multi-disc album
|
||||||
var hasMusic = ContainsMusic(directoryService.GetFileSystemEntries(path), false, directoryService, logger, fileSystem, libraryManager);
|
notMultiDisc = true;
|
||||||
|
state.Stop();
|
||||||
if (hasMusic)
|
|
||||||
{
|
|
||||||
if (parser.IsMultiPart(path))
|
|
||||||
{
|
|
||||||
logger.LogDebug("Found multi-disc folder: " + path);
|
|
||||||
discSubfolderCount++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// If there are folders underneath with music that are not multidisc, then this can't be a multi-disc album
|
|
||||||
notMultiDisc = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
});
|
||||||
{
|
|
||||||
var fullName = fileSystemInfo.FullName;
|
|
||||||
|
|
||||||
if (libraryManager.IsAudioFile(fullName))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notMultiDisc)
|
if (notMultiDisc)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
@ -94,7 +95,18 @@ namespace Emby.Server.Implementations.Library.Resolvers.Audio
|
||||||
var albumResolver = new MusicAlbumResolver(_logger, _fileSystem, _libraryManager);
|
var albumResolver = new MusicAlbumResolver(_logger, _fileSystem, _libraryManager);
|
||||||
|
|
||||||
// If we contain an album assume we are an artist folder
|
// If we contain an album assume we are an artist folder
|
||||||
return args.FileSystemChildren.Where(i => i.IsDirectory).Any(i => albumResolver.IsMusicAlbum(i.FullName, directoryService)) ? new MusicArtist() : null;
|
var directories = args.FileSystemChildren.Where(i => i.IsDirectory);
|
||||||
|
|
||||||
|
var result = Parallel.ForEach(directories, (fileSystemInfo, state) =>
|
||||||
|
{
|
||||||
|
if (albumResolver.IsMusicAlbum(fileSystemInfo.FullName, directoryService))
|
||||||
|
{
|
||||||
|
// stop once we see a music album
|
||||||
|
state.Stop();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return !result.IsCompleted ? new MusicArtist() : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue