aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/CollectionFolderImageProvider.cs
blob: e4ea36dd126b5e5f12be790373171804a096cb0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace MediaBrowser.Providers
{
    public class CollectionFolderImageProvider : ImageFromMediaLocationProvider
    {
        public CollectionFolderImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IFileSystem fileSystem)
            : base(logManager, configurationManager, fileSystem)
        {
        }

        public override bool Supports(BaseItem item)
        {
            return item is CollectionFolder && item.LocationType == LocationType.FileSystem;
        }

        public override MetadataProviderPriority Priority
        {
            get { return MetadataProviderPriority.Second; }
        }

        protected override FileSystemInfo GetImage(BaseItem item, ItemResolveArgs args, string filenameWithoutExtension)
        {
            return item.PhysicalLocations
                .Select(i => GetImageFromLocation(i, filenameWithoutExtension))
                .FirstOrDefault(i => i != null);
        }

        protected override Guid GetFileSystemStamp(IEnumerable<BaseItem> items)
        {
            var files = items.SelectMany(i => i.PhysicalLocations)
                .Select(i => new DirectoryInfo(i))
                .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly))
                .Where(i =>
                {
                    var ext = i.Extension;

                    return !string.IsNullOrEmpty(ext) &&
                        BaseItem.SupportedImageExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase);
                })
                .ToList();

            return GetFileSystemStamp(files);
        }
    }
}