mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-07-21 13:10:45 +02:00
Merge pull request #4219 from Spacetech/music_scan_speed_2
Increase initial scan speed for music libraries
This commit is contained in:
commit
53515483b8
|
@ -1,5 +1,8 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
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,52 +116,48 @@ 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 foundAudioFile = list.Any(fileSystemInfo => !fileSystemInfo.IsDirectory && libraryManager.IsAudioFile(fileSystemInfo.FullName));
|
||||||
|
if (foundAudioFile)
|
||||||
|
{
|
||||||
|
// 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 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);
|
||||||
{
|
Interlocked.Increment(ref 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);
|
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))
|
if (!result.IsCompleted)
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notMultiDisc)
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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