using System;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Channels;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Querying;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Channels
{
public interface IChannelManager
{
///
/// Adds the parts.
///
/// The channels.
/// The factories.
void AddParts(IEnumerable channels, IEnumerable factories);
///
/// Gets the channel download path.
///
/// The channel download path.
string ChannelDownloadPath { get; }
///
/// Gets the channel features.
///
/// The identifier.
/// ChannelFeatures.
ChannelFeatures GetChannelFeatures(string id);
///
/// Gets all channel features.
///
/// IEnumerable{ChannelFeatures}.
IEnumerable GetAllChannelFeatures();
///
/// Gets the channel.
///
/// The identifier.
/// Channel.
Channel GetChannel(string id);
///
/// Gets the channels internal.
///
/// The query.
/// The cancellation token.
/// Task<QueryResult<Channel>>.
Task> GetChannelsInternal(ChannelQuery query, CancellationToken cancellationToken);
///
/// Gets the channels.
///
/// The query.
/// The cancellation token.
/// Task{QueryResult{BaseItemDto}}.
Task> GetChannels(ChannelQuery query, CancellationToken cancellationToken);
///
/// Gets all media internal.
///
/// The query.
/// The cancellation token.
/// Task<QueryResult<BaseItem>>.
Task> GetAllMediaInternal(AllChannelMediaQuery query, CancellationToken cancellationToken);
///
/// Gets all media.
///
/// The query.
/// The cancellation token.
/// Task{QueryResult{BaseItemDto}}.
Task> GetAllMedia(AllChannelMediaQuery query, CancellationToken cancellationToken);
///
/// Gets the latest media.
///
/// The query.
/// The cancellation token.
/// Task{QueryResult{BaseItemDto}}.
Task> GetLatestChannelItems(AllChannelMediaQuery query, CancellationToken cancellationToken);
///
/// Gets the latest channel items internal.
///
/// The query.
/// The cancellation token.
/// Task<QueryResult<BaseItem>>.
Task> GetLatestChannelItemsInternal(AllChannelMediaQuery query, CancellationToken cancellationToken);
///
/// Gets the channel items.
///
/// The query.
/// The cancellation token.
/// Task{QueryResult{BaseItemDto}}.
Task> GetChannelItems(ChannelItemQuery query, CancellationToken cancellationToken);
///
/// Gets the channel items internal.
///
/// The query.
/// The progress.
/// The cancellation token.
/// Task<QueryResult<BaseItem>>.
Task> GetChannelItemsInternal(ChannelItemQuery query, IProgress progress, CancellationToken cancellationToken);
///
/// Gets the channel item media sources.
///
/// The identifier.
/// if set to true [include dynamic sources].
/// The cancellation token.
/// Task{IEnumerable{MediaSourceInfo}}.
Task> GetChannelItemMediaSources(string id, bool includeDynamicSources, CancellationToken cancellationToken);
///
/// Gets the channel folder.
///
/// The user identifier.
/// The cancellation token.
/// BaseItemDto.
Task GetInternalChannelFolder(string userId, CancellationToken cancellationToken);
///
/// Gets the channel folder.
///
/// The user identifier.
/// The cancellation token.
/// BaseItemDto.
Task GetChannelFolder(string userId, CancellationToken cancellationToken);
///
/// Downloads the channel item.
///
/// The item.
/// The destination path.
/// The progress.
/// The cancellation token.
/// Task.
Task DownloadChannelItem(IChannelMediaItem item, string destinationPath, IProgress progress, CancellationToken cancellationToken);
}
}