| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567 | using MediaBrowser.Controller.Entities;using MediaBrowser.Controller.Entities.Audio;using MediaBrowser.Controller.Entities.TV;using MediaBrowser.Controller.Providers;using MediaBrowser.Controller.Resolvers;using MediaBrowser.Controller.Sorting;using MediaBrowser.Model.Entities;using MediaBrowser.Model.Querying;using System;using System.Collections.Generic;using System.Threading;using System.Threading.Tasks;using CommonIO;using MediaBrowser.Model.Dto;namespace MediaBrowser.Controller.Library{    /// <summary>    /// Interface ILibraryManager    /// </summary>    public interface ILibraryManager    {        /// <summary>        /// Resolves the path.        /// </summary>        /// <param name="fileInfo">The file information.</param>        /// <param name="parent">The parent.</param>        /// <returns>BaseItem.</returns>        BaseItem ResolvePath(FileSystemMetadata fileInfo,            Folder parent = null);        /// <summary>        /// Resolves a set of files into a list of BaseItem        /// </summary>        /// <param name="files">The files.</param>        /// <param name="directoryService">The directory service.</param>        /// <param name="parent">The parent.</param>        /// <param name="collectionType">Type of the collection.</param>        /// <returns>List{``0}.</returns>        IEnumerable<BaseItem> ResolvePaths(IEnumerable<FileSystemMetadata> files,            IDirectoryService directoryService,            Folder parent, string            collectionType = null);        /// <summary>        /// Gets the root folder.        /// </summary>        /// <value>The root folder.</value>        AggregateFolder RootFolder { get; }        /// <summary>        /// Gets a Person        /// </summary>        /// <param name="name">The name.</param>        /// <returns>Task{Person}.</returns>        Person GetPerson(string name);        /// <summary>        /// Finds the by path.        /// </summary>        /// <param name="path">The path.</param>        /// <returns>BaseItem.</returns>        BaseItem FindByPath(string path, bool? isFolder);        /// <summary>        /// Gets the artist.        /// </summary>        /// <param name="name">The name.</param>        /// <returns>Task{Artist}.</returns>        MusicArtist GetArtist(string name);        /// <summary>        /// Gets the album artists.        /// </summary>        /// <param name="items">The items.</param>        /// <returns>IEnumerable<MusicArtist>.</returns>        IEnumerable<MusicArtist> GetAlbumArtists(IEnumerable<IHasAlbumArtist> items);        /// <summary>        /// Gets the artists.        /// </summary>        /// <param name="items">The items.</param>        /// <returns>IEnumerable<MusicArtist>.</returns>        IEnumerable<MusicArtist> GetArtists(IEnumerable<IHasArtist> items);        /// <summary>        /// Gets a Studio        /// </summary>        /// <param name="name">The name.</param>        /// <returns>Task{Studio}.</returns>        Studio GetStudio(string name);        /// <summary>        /// Gets a Genre        /// </summary>        /// <param name="name">The name.</param>        /// <returns>Task{Genre}.</returns>        Genre GetGenre(string name);        /// <summary>        /// Gets the genre.        /// </summary>        /// <param name="name">The name.</param>        /// <returns>Task{MusicGenre}.</returns>        MusicGenre GetMusicGenre(string name);        /// <summary>        /// Gets the game genre.        /// </summary>        /// <param name="name">The name.</param>        /// <returns>Task{GameGenre}.</returns>        GameGenre GetGameGenre(string name);        /// <summary>        /// Gets a Year        /// </summary>        /// <param name="value">The value.</param>        /// <returns>Task{Year}.</returns>        /// <exception cref="System.ArgumentOutOfRangeException"></exception>        Year GetYear(int value);        /// <summary>        /// Validate and refresh the People sub-set of the IBN.        /// The items are stored in the db but not loaded into memory until actually requested by an operation.        /// </summary>        /// <param name="cancellationToken">The cancellation token.</param>        /// <param name="progress">The progress.</param>        /// <returns>Task.</returns>        Task ValidatePeople(CancellationToken cancellationToken, IProgress<double> progress);        /// <summary>        /// Reloads the root media folder        /// </summary>        /// <param name="progress">The progress.</param>        /// <param name="cancellationToken">The cancellation token.</param>        /// <returns>Task.</returns>        Task ValidateMediaLibrary(IProgress<double> progress, CancellationToken cancellationToken);        /// <summary>        /// Queues the library scan.        /// </summary>        void QueueLibraryScan();        /// <summary>        /// Gets the default view.        /// </summary>        /// <returns>IEnumerable{VirtualFolderInfo}.</returns>        IEnumerable<VirtualFolderInfo> GetVirtualFolders();        /// <summary>        /// Gets the item by id.        /// </summary>        /// <param name="id">The id.</param>        /// <returns>BaseItem.</returns>        BaseItem GetItemById(Guid id);        /// <summary>        /// Gets the intros.        /// </summary>        /// <param name="item">The item.</param>        /// <param name="user">The user.</param>        /// <returns>IEnumerable{System.String}.</returns>        Task<IEnumerable<Video>> GetIntros(BaseItem item, User user);        /// <summary>        /// Gets all intro files.        /// </summary>        /// <returns>IEnumerable{System.String}.</returns>        IEnumerable<string> GetAllIntroFiles();        /// <summary>        /// Adds the parts.        /// </summary>        /// <param name="rules">The rules.</param>        /// <param name="pluginFolders">The plugin folders.</param>        /// <param name="resolvers">The resolvers.</param>        /// <param name="introProviders">The intro providers.</param>        /// <param name="itemComparers">The item comparers.</param>        /// <param name="postscanTasks">The postscan tasks.</param>        void AddParts(IEnumerable<IResolverIgnoreRule> rules,            IEnumerable<IVirtualFolderCreator> pluginFolders,            IEnumerable<IItemResolver> resolvers,            IEnumerable<IIntroProvider> introProviders,            IEnumerable<IBaseItemComparer> itemComparers,            IEnumerable<ILibraryPostScanTask> postscanTasks);        /// <summary>        /// Sorts the specified items.        /// </summary>        /// <param name="items">The items.</param>        /// <param name="user">The user.</param>        /// <param name="sortBy">The sort by.</param>        /// <param name="sortOrder">The sort order.</param>        /// <returns>IEnumerable{BaseItem}.</returns>        IEnumerable<BaseItem> Sort(IEnumerable<BaseItem> items, User user, IEnumerable<string> sortBy,                                   SortOrder sortOrder);        /// <summary>        /// Ensure supplied item has only one instance throughout        /// </summary>        /// <param name="item">The item.</param>        /// <returns>The proper instance to the item</returns>        BaseItem GetOrAddByReferenceItem(BaseItem item);        /// <summary>        /// Gets the user root folder.        /// </summary>        /// <returns>UserRootFolder.</returns>        Folder GetUserRootFolder();        /// <summary>        /// Creates the item.        /// </summary>        /// <param name="item">The item.</param>        /// <param name="cancellationToken">The cancellation token.</param>        /// <returns>Task.</returns>        Task CreateItem(BaseItem item, CancellationToken cancellationToken);        /// <summary>        /// Creates the items.        /// </summary>        /// <param name="items">The items.</param>        /// <param name="cancellationToken">The cancellation token.</param>        /// <returns>Task.</returns>        Task CreateItems(IEnumerable<BaseItem> items, CancellationToken cancellationToken);        /// <summary>        /// Updates the item.        /// </summary>        /// <param name="item">The item.</param>        /// <param name="updateReason">The update reason.</param>        /// <param name="cancellationToken">The cancellation token.</param>        /// <returns>Task.</returns>        Task UpdateItem(BaseItem item, ItemUpdateType updateReason, CancellationToken cancellationToken);        /// <summary>        /// Retrieves the item.        /// </summary>        /// <param name="id">The id.</param>        /// <returns>BaseItem.</returns>        BaseItem RetrieveItem(Guid id);        bool IsScanRunning { get; }        /// <summary>        /// Occurs when [item added].        /// </summary>        event EventHandler<ItemChangeEventArgs> ItemAdded;        /// <summary>        /// Occurs when [item updated].        /// </summary>        event EventHandler<ItemChangeEventArgs> ItemUpdated;        /// <summary>        /// Occurs when [item removed].        /// </summary>        event EventHandler<ItemChangeEventArgs> ItemRemoved;        /// <summary>        /// Reports the item removed.        /// </summary>        /// <param name="item">The item.</param>        void ReportItemRemoved(BaseItem item);        /// <summary>        /// Finds the type of the collection.        /// </summary>        /// <param name="item">The item.</param>        /// <returns>System.String.</returns>        string GetContentType(BaseItem item);        /// <summary>        /// Gets the type of the inherited content.        /// </summary>        /// <param name="item">The item.</param>        /// <returns>System.String.</returns>        string GetInheritedContentType(BaseItem item);        /// <summary>        /// Gets the type of the configured content.        /// </summary>        /// <param name="item">The item.</param>        /// <returns>System.String.</returns>        string GetConfiguredContentType(BaseItem item);        /// <summary>        /// Gets the type of the configured content.        /// </summary>        /// <param name="path">The path.</param>        /// <returns>System.String.</returns>        string GetConfiguredContentType(string path);        /// <summary>        /// Normalizes the root path list.        /// </summary>        /// <param name="paths">The paths.</param>        /// <returns>IEnumerable{System.String}.</returns>        IEnumerable<FileSystemMetadata> NormalizeRootPathList(IEnumerable<FileSystemMetadata> paths);        /// <summary>        /// Registers the item.        /// </summary>        /// <param name="item">The item.</param>        void RegisterItem(BaseItem item);        /// <summary>        /// Deletes the item.        /// </summary>        /// <param name="item">The item.</param>        /// <param name="options">The options.</param>        /// <returns>Task.</returns>        Task DeleteItem(BaseItem item, DeleteOptions options);        /// <summary>        /// Gets the named view.        /// </summary>        /// <param name="user">The user.</param>        /// <param name="name">The name.</param>        /// <param name="parentId">The parent identifier.</param>        /// <param name="viewType">Type of the view.</param>        /// <param name="sortName">Name of the sort.</param>        /// <param name="cancellationToken">The cancellation token.</param>        /// <returns>Task<UserView>.</returns>        Task<UserView> GetNamedView(User user,            string name,            string parentId,            string viewType,            string sortName,            CancellationToken cancellationToken);        /// <summary>        /// Gets the named view.        /// </summary>        /// <param name="user">The user.</param>        /// <param name="name">The name.</param>        /// <param name="viewType">Type of the view.</param>        /// <param name="sortName">Name of the sort.</param>        /// <param name="cancellationToken">The cancellation token.</param>        /// <returns>Task<UserView>.</returns>        Task<UserView> GetNamedView(User user,            string name,            string viewType,            string sortName,            CancellationToken cancellationToken);        /// <summary>        /// Gets the named view.        /// </summary>        /// <param name="name">The name.</param>        /// <param name="viewType">Type of the view.</param>        /// <param name="sortName">Name of the sort.</param>        /// <param name="cancellationToken">The cancellation token.</param>        /// <returns>Task<UserView>.</returns>        Task<UserView> GetNamedView(string name,            string viewType,            string sortName,            CancellationToken cancellationToken);        /// <summary>        /// Gets the named view.        /// </summary>        /// <param name="name">The name.</param>        /// <param name="parentId">The parent identifier.</param>        /// <param name="viewType">Type of the view.</param>        /// <param name="sortName">Name of the sort.</param>        /// <param name="uniqueId">The unique identifier.</param>        /// <param name="cancellationToken">The cancellation token.</param>        /// <returns>Task<UserView>.</returns>        Task<UserView> GetNamedView(string name,            string parentId,            string viewType,            string sortName,            string uniqueId,            CancellationToken cancellationToken);        /// <summary>        /// Gets the shadow view.        /// </summary>        /// <param name="parent">The parent.</param>        /// <param name="viewType">Type of the view.</param>        /// <param name="sortName">Name of the sort.</param>        /// <param name="cancellationToken">The cancellation token.</param>        /// <returns>Task<UserView>.</returns>        Task<UserView> GetShadowView(BaseItem parent,          string viewType,          string sortName,          CancellationToken cancellationToken);        /// <summary>        /// Determines whether [is video file] [the specified path].        /// </summary>        /// <param name="path">The path.</param>        /// <returns><c>true</c> if [is video file] [the specified path]; otherwise, <c>false</c>.</returns>        bool IsVideoFile(string path);        /// <summary>        /// Determines whether [is audio file] [the specified path].        /// </summary>        /// <param name="path">The path.</param>        /// <returns><c>true</c> if [is audio file] [the specified path]; otherwise, <c>false</c>.</returns>        bool IsAudioFile(string path);        /// <summary>        /// Gets the season number from path.        /// </summary>        /// <param name="path">The path.</param>        /// <returns>System.Nullable<System.Int32>.</returns>        int? GetSeasonNumberFromPath(string path);        /// <summary>        /// Fills the missing episode numbers from path.        /// </summary>        /// <param name="episode">The episode.</param>        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>        bool FillMissingEpisodeNumbersFromPath(Episode episode);        /// <summary>        /// Parses the name.        /// </summary>        /// <param name="name">The name.</param>        /// <returns>ItemInfo.</returns>        ItemLookupInfo ParseName(string name);        /// <summary>        /// Gets the new item identifier.        /// </summary>        /// <param name="key">The key.</param>        /// <param name="type">The type.</param>        /// <returns>Guid.</returns>        Guid GetNewItemId(string key, Type type);        /// <summary>        /// Finds the trailers.        /// </summary>        /// <param name="owner">The owner.</param>        /// <param name="fileSystemChildren">The file system children.</param>        /// <param name="directoryService">The directory service.</param>        /// <returns>IEnumerable<Trailer>.</returns>        IEnumerable<Video> FindTrailers(BaseItem owner, List<FileSystemMetadata> fileSystemChildren,            IDirectoryService directoryService);        /// <summary>        /// Finds the extras.        /// </summary>        /// <param name="owner">The owner.</param>        /// <param name="fileSystemChildren">The file system children.</param>        /// <param name="directoryService">The directory service.</param>        /// <returns>IEnumerable<Video>.</returns>        IEnumerable<Video> FindExtras(BaseItem owner, List<FileSystemMetadata> fileSystemChildren,            IDirectoryService directoryService);        /// <summary>        /// Gets the collection folders.        /// </summary>        /// <param name="item">The item.</param>        /// <returns>IEnumerable<Folder>.</returns>        IEnumerable<Folder> GetCollectionFolders(BaseItem item);        /// <summary>        /// Gets the people.        /// </summary>        /// <param name="item">The item.</param>        /// <returns>List<PersonInfo>.</returns>        List<PersonInfo> GetPeople(BaseItem item);        /// <summary>        /// Gets the people.        /// </summary>        /// <param name="query">The query.</param>        /// <returns>List<PersonInfo>.</returns>        List<PersonInfo> GetPeople(InternalPeopleQuery query);        /// <summary>        /// Gets the people items.        /// </summary>        /// <param name="query">The query.</param>        /// <returns>List<Person>.</returns>        List<Person> GetPeopleItems(InternalPeopleQuery query);        /// <summary>        /// Updates the people.        /// </summary>        /// <param name="item">The item.</param>        /// <param name="people">The people.</param>        /// <returns>Task.</returns>        Task UpdatePeople(BaseItem item, List<PersonInfo> people);        /// <summary>        /// Gets the item ids.        /// </summary>        /// <param name="query">The query.</param>        /// <returns>List<Guid>.</returns>        List<Guid> GetItemIds(InternalItemsQuery query);        /// <summary>        /// Gets the people names.        /// </summary>        /// <param name="query">The query.</param>        /// <returns>List<System.String>.</returns>        List<string> GetPeopleNames(InternalPeopleQuery query);        /// <summary>        /// Queries the items.        /// </summary>        /// <param name="query">The query.</param>        /// <returns>QueryResult<BaseItem>.</returns>        QueryResult<BaseItem> QueryItems(InternalItemsQuery query);        /// <summary>        /// Substitutes the path.        /// </summary>        /// <param name="path">The path.</param>        /// <param name="from">From.</param>        /// <param name="to">To.</param>        /// <returns>System.String.</returns>        string SubstitutePath(string path, string from, string to);        /// <summary>        /// Converts the image to local.        /// </summary>        /// <param name="item">The item.</param>        /// <param name="image">The image.</param>        /// <param name="imageIndex">Index of the image.</param>        /// <returns>Task.</returns>        Task<ItemImageInfo> ConvertImageToLocal(IHasImages item, ItemImageInfo image, int imageIndex);        /// <summary>        /// Gets the items.        /// </summary>        /// <param name="query">The query.</param>        /// <returns>QueryResult<BaseItem>.</returns>        IEnumerable<BaseItem> GetItemList(InternalItemsQuery query);        /// <summary>        /// Gets the items.        /// </summary>        /// <param name="query">The query.</param>        /// <param name="parentIds">The parent ids.</param>        /// <returns>List<BaseItem>.</returns>        IEnumerable<BaseItem> GetItemList(InternalItemsQuery query, IEnumerable<string> parentIds);        /// <summary>        /// Gets the items result.        /// </summary>        /// <param name="query">The query.</param>        /// <returns>QueryResult<BaseItem>.</returns>        QueryResult<BaseItem> GetItemsResult(InternalItemsQuery query);        /// <summary>        /// Ignores the file.        /// </summary>        /// <param name="file">The file.</param>        /// <param name="parent">The parent.</param>        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>        bool IgnoreFile(FileSystemMetadata file, BaseItem parent);        void AddVirtualFolder(string name, string collectionType, string[] mediaPaths, bool refreshLibrary);        void RemoveVirtualFolder(string name, bool refreshLibrary);        void AddMediaPath(string virtualFolderName, string path);        void RemoveMediaPath(string virtualFolderName, string path);        QueryResult<Tuple<BaseItem, ItemCounts>> GetGenres(InternalItemsQuery query);        QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query);        QueryResult<Tuple<BaseItem, ItemCounts>> GetGameGenres(InternalItemsQuery query);        QueryResult<Tuple<BaseItem, ItemCounts>> GetStudios(InternalItemsQuery query);        QueryResult<Tuple<BaseItem, ItemCounts>> GetArtists(InternalItemsQuery query);        QueryResult<Tuple<BaseItem, ItemCounts>> GetAlbumArtists(InternalItemsQuery query);        QueryResult<Tuple<BaseItem, ItemCounts>> GetAllArtists(InternalItemsQuery query);    }}
 |