using MediaBrowser.Model.Channels;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Devices;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Events;
using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.LiveTv;
using MediaBrowser.Model.MediaInfo;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Notifications;
using MediaBrowser.Model.Playlists;
using MediaBrowser.Model.Plugins;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Search;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Session;
using MediaBrowser.Model.Sync;
using MediaBrowser.Model.System;
using MediaBrowser.Model.Tasks;
using MediaBrowser.Model.Users;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Model.ApiClient
{
    /// 
    /// Interface IApiClient
    /// 
    public interface IApiClient : IServerEvents, IDisposable
    {
        /// 
        /// Occurs when [remote logged out].
        /// 
        event EventHandler> RemoteLoggedOut;
        /// 
        /// Gets the API URL.
        /// 
        /// The handler.
        /// System.String.
        string GetApiUrl(string handler);
        /// 
        /// Gets the game system summaries async.
        /// 
        /// The cancellation token.
        /// Task{List{GameSystemSummary}}.
        Task> GetGameSystemSummariesAsync(CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the async.
        /// 
        /// 
        /// The URL.
        /// The cancellation token.
        /// Task{``0}.
        Task GetAsync(string url, CancellationToken cancellationToken = default(CancellationToken))
            where T : class;
        /// 
        /// Reports the capabilities.
        /// 
        /// The capabilities.
        /// The cancellation token.
        /// Task.
        Task ReportCapabilities(ClientCapabilities capabilities, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Logouts this instance.
        /// 
        /// Task.
        Task Logout();
        /// 
        /// Gets the index of the game players.
        /// 
        /// The user id.
        /// The cancellation token.
        /// Task{List{ItemIndex}}.
        Task> GetGamePlayerIndex(string userId, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the index of the year.
        /// 
        /// The user id.
        /// The include item types.
        /// The cancellation token.
        /// Task{List{ItemIndex}}.
        Task> GetYearIndex(string userId, string[] includeItemTypes, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the critic reviews.
        /// 
        /// The item id.
        /// The cancellation token.
        /// The start index.
        /// The limit.
        /// Task{ItemReviewsResult}.
        Task> GetCriticReviews(string itemId, CancellationToken cancellationToken = default(CancellationToken), int? startIndex = null, int? limit = null);
        /// 
        /// Gets the theme songs async.
        /// 
        /// The user id.
        /// The item id.
        /// if set to true [inherit from parents].
        /// The cancellation token.
        /// Task{ThemeMediaResult}.
        Task GetThemeSongsAsync(string userId, string itemId, bool inheritFromParents, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the search hints async.
        /// 
        /// The query.
        /// Task{SearchHintResult}.
        Task GetSearchHintsAsync(SearchQuery query);
        /// 
        /// Gets the filters.
        /// 
        /// The user identifier.
        /// The parent identifier.
        /// The media types.
        /// The item types.
        /// Task<QueryFilters>.
        Task GetFilters(string userId, string parentId, string[] mediaTypes, string[] itemTypes);
        /// 
        /// Gets the theme videos async.
        /// 
        /// The user id.
        /// The item id.
        /// if set to true [inherit from parents].
        /// The cancellation token.
        /// Task{ThemeMediaResult}.
        Task GetThemeVideosAsync(string userId, string itemId, bool inheritFromParents, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets all theme media async.
        /// 
        /// The user id.
        /// The item id.
        /// if set to true [inherit from parents].
        /// The cancellation token.
        /// Task{AllThemeMediaResult}.
        Task GetAllThemeMediaAsync(string userId, string itemId, bool inheritFromParents, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Marks the notifications read.
        /// 
        /// The user id.
        /// The notification id list.
        /// if set to true [is read].
        /// Task.
        Task MarkNotificationsRead(string userId, IEnumerable notificationIdList, bool isRead);
        /// 
        /// Gets the notifications summary.
        /// 
        /// The user id.
        /// Task{NotificationsSummary}.
        Task GetNotificationsSummary(string userId);
        /// 
        /// Gets the notifications async.
        /// 
        /// The query.
        /// Task{NotificationResult}.
        Task GetNotificationsAsync(NotificationQuery query);
        /// 
        /// Gets an image stream based on a url
        /// 
        /// The URL.
        /// The cancellation token.
        /// Task{Stream}.
        /// url
        Task GetImageStreamAsync(string url, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the stream.
        /// 
        /// The URL.
        /// The cancellation token.
        /// Task<Stream>.
        Task GetStream(string url, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the response.
        /// 
        /// The URL.
        /// The cancellation token.
        /// Task<HttpResponse>.
        Task GetResponse(string url, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Updates the user configuration.
        /// 
        /// The user identifier.
        /// The configuration.
        /// Task.
        Task UpdateUserConfiguration(string userId, UserConfiguration configuration);
        /// 
        /// Gets a BaseItem
        /// 
        /// The id.
        /// The user id.
        /// Task{BaseItemDto}.
        /// id
        Task GetItemAsync(string id, string userId);
        /// 
        /// Gets the latest items.
        /// 
        /// The query.
        /// Task<QueryResult<BaseItemDto>>.
        Task GetLatestItems(LatestItemsQuery query);
        /// 
        /// Gets the intros async.
        /// 
        /// The item id.
        /// The user id.
        /// Task{ItemsResult}.
        Task GetIntrosAsync(string itemId, string userId);
        /// 
        /// Gets a BaseItem
        /// 
        /// The user id.
        /// Task{BaseItemDto}.
        /// userId
        Task GetRootFolderAsync(string userId);
        /// 
        /// Gets the additional parts.
        /// 
        /// The item identifier.
        /// The user identifier.
        /// Task{BaseItemDto[]}.
        Task GetAdditionalParts(string itemId, string userId);
        /// 
        /// Gets the playback information.
        /// 
        /// The request.
        /// Task<LiveMediaInfoResult>.
        Task GetPlaybackInfo(PlaybackInfoRequest request);
        /// 
        /// Gets the users async.
        /// 
        /// The query.
        /// Task{UserDto[]}.
        Task GetUsersAsync(UserQuery query);
        /// 
        /// Gets the public users async.
        /// 
        /// The cancellation token.
        /// Task{UserDto[]}.
        Task GetPublicUsersAsync(CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets active client sessions.
        /// 
        /// The query.
        /// Task{SessionInfoDto[]}.
        Task GetClientSessionsAsync(SessionQuery query);
        /// 
        /// Gets the client session asynchronous.
        /// 
        /// Task{SessionInfoDto}.
        Task GetCurrentSessionAsync(CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the item counts async.
        /// 
        /// The query.
        /// Task{ItemCounts}.
        Task GetItemCountsAsync(ItemCountsQuery query);
        /// 
        /// Gets the episodes asynchronous.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{ItemsResult}.
        Task GetEpisodesAsync(EpisodeQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the seasons asynchronous.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{ItemsResult}.
        Task GetSeasonsAsync(SeasonQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Queries for items
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{ItemsResult}.
        /// query
        Task GetItemsAsync(ItemQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the user views.
        /// 
        /// The user identifier.
        /// The cancellation token.
        /// Task<ItemsResult>.
        Task GetUserViews(string userId, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the instant mix from item asynchronous.
        /// 
        /// The query.
        /// Task<ItemsResult>.
        Task GetInstantMixFromItemAsync(SimilarItemsQuery query);
        /// 
        /// Gets the similar movies async.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{ItemsResult}.
        Task GetSimilarItemsAsync(SimilarItemsQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the people async.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{ItemsResult}.
        /// userId
        Task GetPeopleAsync(PersonsQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the artists.
        /// 
        /// The query.
        /// Task{ItemsResult}.
        /// userId
        Task GetArtistsAsync(ArtistsQuery query);
        /// 
        /// Gets the album artists asynchronous.
        /// 
        /// The query.
        /// Task{ItemsResult}.
        Task GetAlbumArtistsAsync(ArtistsQuery query);
        /// 
        /// Gets the next up async.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{ItemsResult}.
        Task GetNextUpEpisodesAsync(NextUpQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the upcoming episodes asynchronous.
        /// 
        /// The query.
        /// Task{ItemsResult}.
        Task GetUpcomingEpisodesAsync(UpcomingEpisodesQuery query);
        /// 
        /// Gets a genre
        /// 
        /// The name.
        /// The user id.
        /// Task{BaseItemDto}.
        /// userId
        Task GetGenreAsync(string name, string userId);
        /// 
        /// Gets the genres async.
        /// 
        /// The query.
        /// Task{ItemsResult}.
        Task GetGenresAsync(ItemsByNameQuery query);
        /// 
        /// Gets the studios async.
        /// 
        /// The query.
        /// Task{ItemsResult}.
        Task GetStudiosAsync(ItemsByNameQuery query);
        /// 
        /// Gets the music genre async.
        /// 
        /// The name.
        /// The user id.
        /// Task{BaseItemDto}.
        Task GetMusicGenreAsync(string name, string userId);
        /// 
        /// Gets the game genre async.
        /// 
        /// The name.
        /// The user id.
        /// Task{BaseItemDto}.
        Task GetGameGenreAsync(string name, string userId);
        /// 
        /// Restarts the server.
        /// 
        /// Task.
        Task RestartServerAsync();
        /// 
        /// Gets the system status async.
        /// 
        /// The cancellation token.
        /// Task{SystemInfo}.
        Task GetSystemInfoAsync(CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the public system information asynchronous.
        /// 
        /// The cancellation token.
        /// Task<PublicSystemInfo>.
        Task GetPublicSystemInfoAsync(CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets a list of plugins installed on the server
        /// 
        /// Task{PluginInfo[]}.
        Task GetInstalledPluginsAsync();
        /// 
        /// Gets the current server configuration
        /// 
        /// Task{ServerConfiguration}.
        Task GetServerConfigurationAsync();
        /// 
        /// Gets the scheduled tasks.
        /// 
        /// Task{TaskInfo[]}.
        Task GetScheduledTasksAsync();
        /// 
        /// Gets the scheduled task async.
        /// 
        /// The id.
        /// Task{TaskInfo}.
        /// id
        Task GetScheduledTaskAsync(string id);
        /// 
        /// Gets a user by id
        /// 
        /// The id.
        /// Task{UserDto}.
        /// id
        Task GetUserAsync(string id);
        /// 
        /// Gets the offline user asynchronous.
        /// 
        /// The identifier.
        /// Task<UserDto>.
        Task GetOfflineUserAsync(string id);
        /// 
        /// Gets the parental ratings async.
        /// 
        /// Task{List{ParentalRating}}.
        Task> GetParentalRatingsAsync();
        /// 
        /// Gets local trailers for an item
        /// 
        /// The user id.
        /// The item id.
        /// Task{ItemsResult}.
        /// query
        Task GetLocalTrailersAsync(string userId, string itemId);
        /// 
        /// Gets special features for an item
        /// 
        /// The user id.
        /// The item id.
        /// Task{BaseItemDto[]}.
        /// userId
        Task GetSpecialFeaturesAsync(string userId, string itemId);
        /// 
        /// Gets the cultures async.
        /// 
        /// Task{CultureDto[]}.
        Task GetCulturesAsync();
        /// 
        /// Gets the countries async.
        /// 
        /// Task{CountryInfo[]}.
        Task GetCountriesAsync();
        /// 
        /// Marks the played async.
        /// 
        /// The item id.
        /// The user id.
        /// The date played.
        /// Task{UserItemDataDto}.
        Task MarkPlayedAsync(string itemId, string userId, DateTime? datePlayed);
        /// 
        /// Marks the unplayed async.
        /// 
        /// The item id.
        /// The user id.
        /// Task{UserItemDataDto}.
        Task MarkUnplayedAsync(string itemId, string userId);
        /// 
        /// Updates the favorite status async.
        /// 
        /// The item id.
        /// The user id.
        /// if set to true [is favorite].
        /// Task.
        /// itemId
        Task UpdateFavoriteStatusAsync(string itemId, string userId, bool isFavorite);
        /// 
        /// Reports to the server that the user has begun playing an item
        /// 
        /// The information.
        /// Task{UserItemDataDto}.
        /// itemId
        Task ReportPlaybackStartAsync(PlaybackStartInfo info);
        /// 
        /// Reports playback progress to the server
        /// 
        /// The information.
        /// Task{UserItemDataDto}.
        /// itemId
        Task ReportPlaybackProgressAsync(PlaybackProgressInfo info);
        /// 
        /// Reports to the server that the user has stopped playing an item
        /// 
        /// The information.
        /// Task{UserItemDataDto}.
        /// itemId
        Task ReportPlaybackStoppedAsync(PlaybackStopInfo info);
        /// 
        /// Instructs another client to browse to a library item.
        /// 
        /// The session id.
        /// The id of the item to browse to.
        /// The name of the item to browse to.
        /// The type of the item to browse to.
        /// Task.
        Task SendBrowseCommandAsync(string sessionId, string itemId, string itemName, string itemType);
        /// 
        /// Sends the playstate command async.
        /// 
        /// The session id.
        /// The request.
        /// Task.
        Task SendPlaystateCommandAsync(string sessionId, PlaystateRequest request);
        /// 
        /// Sends the play command async.
        /// 
        /// The session id.
        /// The request.
        /// Task.
        /// sessionId
        /// or
        /// request
        Task SendPlayCommandAsync(string sessionId, PlayRequest request);
        /// 
        /// Sends the command asynchronous.
        /// 
        /// The session identifier.
        /// The command.
        /// Task.
        Task SendCommandAsync(string sessionId, GeneralCommand command);
        /// 
        /// Sends the string.
        /// 
        /// The session identifier.
        /// The text.
        /// Task.
        Task SendString(string sessionId, string text);
        /// 
        /// Sets the volume.
        /// 
        /// The session identifier.
        /// The volume.
        /// Task.
        Task SetVolume(string sessionId, int volume);
        /// 
        /// Stops the transcoding processes.
        /// 
        /// The device identifier.
        /// The stream identifier.
        /// Task.
        Task StopTranscodingProcesses(string deviceId, string streamId);
        /// 
        /// Sets the index of the audio stream.
        /// 
        /// The session identifier.
        /// The index.
        /// Task.
        Task SetAudioStreamIndex(string sessionId, int index);
        /// 
        /// Sets the index of the subtitle stream.
        /// 
        /// The session identifier.
        /// The index.
        /// Task.
        Task SetSubtitleStreamIndex(string sessionId, int? index);
        /// 
        /// Instructs the client to display a message to the user
        /// 
        /// The session id.
        /// The command.
        /// Task.
        Task SendMessageCommandAsync(string sessionId, MessageCommand command);
        /// 
        /// Clears a user's rating for an item
        /// 
        /// The item id.
        /// The user id.
        /// Task{UserItemDataDto}.
        /// itemId
        Task ClearUserItemRatingAsync(string itemId, string userId);
        /// 
        /// Updates a user's rating for an item, based on likes or dislikes
        /// 
        /// The item id.
        /// The user id.
        /// if set to true [likes].
        /// Task.
        /// itemId
        Task UpdateUserItemRatingAsync(string itemId, string userId, bool likes);
        /// 
        /// Authenticates a user and returns the result
        /// 
        /// The username.
        /// The password.
        /// Task.
        /// userId
        Task AuthenticateUserAsync(string username,
            string password);
        /// 
        /// Updates the server configuration async.
        /// 
        /// The configuration.
        /// Task.
        /// configuration
        Task UpdateServerConfigurationAsync(ServerConfiguration configuration);
        /// 
        /// Updates the scheduled task triggers.
        /// 
        /// The id.
        /// The triggers.
        /// Task{RequestResult}.
        /// id
        Task UpdateScheduledTaskTriggersAsync(string id, TaskTriggerInfo[] triggers);
        /// 
        /// Gets the display preferences.
        /// 
        /// The id.
        /// The user id.
        /// The client.
        /// The cancellation token.
        /// Task{BaseItemDto}.
        Task GetDisplayPreferencesAsync(string id, string userId, string client, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Updates display preferences for a user
        /// 
        /// The display preferences.
        /// The user id.
        /// The client.
        /// The cancellation token.
        /// Task{DisplayPreferences}.
        /// userId
        Task UpdateDisplayPreferencesAsync(DisplayPreferences displayPreferences, string userId, string client, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Posts a set of data to a url, and deserializes the return stream into T
        /// 
        /// 
        /// The URL.
        /// The args.
        /// The cancellation token.
        /// Task{``0}.
        Task PostAsync(string url, Dictionary args, CancellationToken cancellationToken = default(CancellationToken))
            where T : class;
        /// 
        /// This is a helper around getting a stream from the server that contains serialized data
        /// 
        /// The URL.
        /// Task{Stream}.
        Task GetSerializedStreamAsync(string url);
        /// 
        /// Gets the json serializer.
        /// 
        /// The json serializer.
        IJsonSerializer JsonSerializer { get; set; }
        /// 
        /// Gets or sets the server address
        /// 
        /// The server address.
        string ServerAddress { get; }
        /// 
        /// Gets or sets the type of the client.
        /// 
        /// The type of the client.
        string ClientName { get; set; }
        /// 
        /// Gets the device.
        /// 
        /// The device.
        IDevice Device { get; }
        /// 
        /// Gets or sets the name of the device.
        /// 
        /// The name of the device.
        string DeviceName { get; }
        /// 
        /// Gets or sets the device id.
        /// 
        /// The device id.
        string DeviceId { get; }
        /// 
        /// Gets or sets the current user id.
        /// 
        /// The current user id.
        string CurrentUserId { get; }
        /// 
        /// Gets the access token.
        /// 
        /// The access token.
        string AccessToken { get; }
        /// 
        /// Sets the authentication information.
        /// 
        /// The access token.
        /// The user identifier.
        void SetAuthenticationInfo(string accessToken, string userId);
        /// 
        /// Sets the authentication information.
        /// 
        /// The access token.
        void SetAuthenticationInfo(string accessToken);
        /// 
        /// Clears the authentication information.
        /// 
        void ClearAuthenticationInfo();
        /// 
        /// Changes the server location.
        /// 
        /// The address.
        /// if set to true [keep existing authentication].
        void ChangeServerLocation(string address, bool keepExistingAuth = false);
        /// 
        /// Starts the receiving synchronize job updates.
        /// 
        /// The interval ms.
        /// The job identifier.
        /// Task.
        Task StartReceivingSyncJobUpdates(int intervalMs, string jobId);
        /// 
        /// Stops the receiving synchronize job updates.
        /// 
        /// Task.
        Task StopReceivingSyncJobUpdates();
        /// 
        /// Starts the receiving synchronize jobs updates.
        /// 
        /// The interval ms.
        /// The user identifier.
        /// The target identifier.
        /// Task.
        Task StartReceivingSyncJobsUpdates(int intervalMs, string userId, string targetId);
        /// 
        /// Stops the receiving synchronize jobs updates.
        /// 
        /// Task.
        Task StopReceivingSyncJobsUpdates();
        /// 
        /// Starts the receiving session updates.
        /// 
        /// The interval ms.
        /// Task.
        Task StartReceivingSessionUpdates(int intervalMs);
        /// 
        /// Stops the receiving session updates.
        /// 
        /// Task.
        Task StopReceivingSessionUpdates();
        /// 
        /// Gets the image URL.
        /// 
        /// The item.
        /// The options.
        /// System.String.
        /// item
        string GetImageUrl(BaseItemDto item, ImageOptions options);
        /// 
        /// Gets the image URL.
        /// 
        /// The item.
        /// The options.
        /// System.String.
        string GetImageUrl(ChannelInfoDto item, ImageOptions options);
        /// 
        /// Gets the subtitle URL.
        /// 
        /// The options.
        /// System.String.
        string GetSubtitleUrl(SubtitleDownloadOptions options);
        /// 
        /// Gets an image url that can be used to download an image from the api
        /// 
        /// The Id of the item
        /// The options.
        /// System.String.
        /// itemId
        string GetImageUrl(string itemId, ImageOptions options);
        /// 
        /// Gets the user image URL.
        /// 
        /// The user.
        /// The options.
        /// System.String.
        /// user
        string GetUserImageUrl(UserDto user, ImageOptions options);
        /// 
        /// Gets an image url that can be used to download an image from the api
        /// 
        /// The Id of the user
        /// The options.
        /// System.String.
        /// userId
        string GetUserImageUrl(string userId, ImageOptions options);
        /// 
        /// Gets the person image URL.
        /// 
        /// The item.
        /// The options.
        /// System.String.
        /// item
        string GetPersonImageUrl(BaseItemPerson item, ImageOptions options);
        /// 
        /// Gets an image url that can be used to download an image from the api
        /// 
        /// The name.
        /// The options.
        /// System.String.
        /// name
        string GetGenreImageUrl(string name, ImageOptions options);
        /// 
        /// Gets the music genre image URL.
        /// 
        /// The name.
        /// The options.
        /// System.String.
        string GetMusicGenreImageUrl(string name, ImageOptions options);
        /// 
        /// Gets the game genre image URL.
        /// 
        /// The name.
        /// The options.
        /// System.String.
        string GetGameGenreImageUrl(string name, ImageOptions options);
        /// 
        /// This is a helper to get a list of backdrop url's from a given ApiBaseItemWrapper. If the actual item does not have any backdrops it will return backdrops from the first parent that does.
        /// 
        /// A given item.
        /// The options.
        /// System.String[][].
        /// item
        string[] GetBackdropImageUrls(BaseItemDto item, ImageOptions options);
        /// 
        /// This is a helper to get the logo image url from a given ApiBaseItemWrapper. If the actual item does not have a logo, it will return the logo from the first parent that does, or null.
        /// 
        /// A given item.
        /// The options.
        /// System.String.
        /// item
        string GetLogoImageUrl(BaseItemDto item, ImageOptions options);
        /// 
        /// Gets the art image URL.
        /// 
        /// The item.
        /// The options.
        /// System.String.
        string GetArtImageUrl(BaseItemDto item, ImageOptions options);
        /// 
        /// Gets the thumb image URL.
        /// 
        /// The item.
        /// The options.
        /// System.String.
        string GetThumbImageUrl(BaseItemDto item, ImageOptions options);
        /// 
        /// Gets the live tv information asynchronous.
        /// 
        /// The cancellation token.
        /// Task{LiveTvInfo}.
        Task GetLiveTvInfoAsync(CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv channels asynchronous.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{LiveTvInfo}.
        Task> GetLiveTvChannelsAsync(LiveTvChannelQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv channel asynchronous.
        /// 
        /// The identifier.
        /// The user identifier.
        /// The cancellation token.
        /// Task{ChannelInfoDto}.
        Task GetLiveTvChannelAsync(string id, string userId, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv recordings asynchronous.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{RecordingInfoDto}}.
        Task> GetLiveTvRecordingsAsync(RecordingQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv recording asynchronous.
        /// 
        /// The identifier.
        /// The user identifier.
        /// The cancellation token.
        /// Task{RecordingInfoDto}.
        Task GetLiveTvRecordingAsync(string id, string userId, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv recording groups asynchronous.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{RecordingGroupDto}}.
        Task> GetLiveTvRecordingGroupsAsync(RecordingGroupQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv recording group asynchronous.
        /// 
        /// The identifier.
        /// The user identifier.
        /// The cancellation token.
        /// Task{RecordingGroupDto}.
        Task GetLiveTvRecordingGroupAsync(string id, string userId, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv timers asynchronous.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{TimerInfoDto}}.
        Task> GetLiveTvTimersAsync(TimerQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv programs asynchronous.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{ProgramInfoDto}}.
        Task> GetLiveTvProgramsAsync(ProgramQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv program asynchronous.
        /// 
        /// The identifier.
        /// The user identifier.
        /// The cancellation token.
        /// Task{ProgramInfoDto}.
        Task GetLiveTvProgramAsync(string id, string userId, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the recommended live tv programs asynchronous.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{ProgramInfoDto}}.
        Task> GetRecommendedLiveTvProgramsAsync(RecommendedProgramQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Creates the live tv timer asynchronous.
        /// 
        /// The timer.
        /// The cancellation token.
        /// Task.
        Task CreateLiveTvTimerAsync(BaseTimerInfoDto timer, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Updates the live tv timer asynchronous.
        /// 
        /// The timer.
        /// The cancellation token.
        /// Task.
        Task UpdateLiveTvTimerAsync(TimerInfoDto timer, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Creates the live tv series timer asynchronous.
        /// 
        /// The timer.
        /// The cancellation token.
        /// Task.
        Task CreateLiveTvSeriesTimerAsync(SeriesTimerInfoDto timer, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Updates the live tv series timer asynchronous.
        /// 
        /// The timer.
        /// The cancellation token.
        /// Task.
        Task UpdateLiveTvSeriesTimerAsync(SeriesTimerInfoDto timer, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv timer asynchronous.
        /// 
        /// The identifier.
        /// The cancellation token.
        /// Task{TimerInfoDto}.
        Task GetLiveTvTimerAsync(string id, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv series timers asynchronous.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{SeriesTimerInfoDto}}.
        Task> GetLiveTvSeriesTimersAsync(SeriesTimerQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv series timer asynchronous.
        /// 
        /// The identifier.
        /// The cancellation token.
        /// Task{SeriesTimerInfoDto}.
        Task GetLiveTvSeriesTimerAsync(string id, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Cancels the live tv timer asynchronous.
        /// 
        /// The identifier.
        /// The cancellation token.
        /// Task.
        Task CancelLiveTvTimerAsync(string id, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Cancels the live tv series timer asynchronous.
        /// 
        /// The identifier.
        /// The cancellation token.
        /// Task.
        Task CancelLiveTvSeriesTimerAsync(string id, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the default timer information.
        /// 
        /// The cancellation token.
        /// Task{SeriesTimerInfoDto}.
        Task GetDefaultLiveTvTimerInfo(CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the live tv guide information.
        /// 
        /// The cancellation token.
        /// Task{GuideInfo}.
        Task GetLiveTvGuideInfo(CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the default timer information.
        /// 
        /// The program identifier.
        /// The cancellation token.
        /// Task{SeriesTimerInfoDto}.
        Task GetDefaultLiveTvTimerInfo(string programId, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the channel features.
        /// 
        /// The channel identifier.
        /// The cancellation token.
        /// Task{ChannelFeatures}.
        Task GetChannelFeatures(string channelId, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the channel items.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{BaseItemDto}}.
        Task> GetChannelItems(ChannelItemQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the channels.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{BaseItemDto}}.
        Task> GetChannels(ChannelQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the latest channel items.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{BaseItemDto}}.
        Task> GetLatestChannelItems(AllChannelMediaQuery query, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Creates the playlist.
        /// 
        /// The request.
        /// Task<PlaylistCreationResult>.
        Task CreatePlaylist(PlaylistCreationRequest request);
        /// 
        /// Adds to playlist.
        /// 
        /// The playlist identifier.
        /// The item ids.
        /// The user identifier.
        /// Task.
        Task AddToPlaylist(string playlistId, IEnumerable itemIds, string userId);
        /// 
        /// Removes from playlist.
        /// 
        /// The playlist identifier.
        /// The entry ids.
        /// Task.
        Task RemoveFromPlaylist(string playlistId, IEnumerable entryIds);
        /// 
        /// Gets the playlist items.
        /// 
        /// The query.
        /// Task<QueryResult<BaseItemDto>>.
        Task> GetPlaylistItems(PlaylistItemQuery query);
        /// 
        /// Sends the context message asynchronous.
        /// 
        /// Type of the item.
        /// The item identifier.
        /// Name of the item.
        /// The context.
        /// The cancellation token.
        /// Task.
        Task SendContextMessageAsync(string itemType, string itemId, string itemName, string context,
            CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the content upload history.
        /// 
        /// The device identifier.
        /// Task<ContentUploadHistory>.
        Task GetContentUploadHistory(string deviceId);
        /// 
        /// Uploads the file.
        /// 
        /// The stream.
        /// The file.
        /// The cancellation token.
        /// Task.
        Task UploadFile(Stream stream,
            LocalFileInfo file,
            CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the devices options options.
        /// 
        /// Task<DevicesOptions>.
        Task GetDevicesOptions();
        /// 
        /// Updates the item.
        /// 
        /// The item.
        /// Task.
        Task UpdateItem(BaseItemDto item);
        /// 
        /// Creates the synchronize job.
        /// 
        /// The request.
        /// Task<SyncJob>.
        Task CreateSyncJob(SyncJobRequest request);
        /// 
        /// Updates the synchronize job.
        /// 
        /// The job.
        /// Task.
        Task UpdateSyncJob(SyncJob job);
        /// 
        /// Gets the synchronize jobs.
        /// 
        /// The query.
        /// Task<QueryResult<SyncJob>>.
        Task> GetSyncJobs(SyncJobQuery query);
        /// 
        /// Gets the synchronize job items.
        /// 
        /// The query.
        /// Task<QueryResult<SyncJobItem>>.
        Task> GetSyncJobItems(SyncJobItemQuery query);
        /// 
        /// Reports the synchronize job item transferred.
        /// 
        /// The identifier.
        /// Task.
        Task ReportSyncJobItemTransferred(string id);
        /// 
        /// Gets the synchronize job item file.
        /// 
        /// The identifier.
        /// The cancellation token.
        /// Task<Stream>.
        Task GetSyncJobItemFile(string id, CancellationToken cancellationToken = default(CancellationToken));
        /// 
        /// Gets the synchronize job item additional file.
        /// 
        /// The identifier.
        /// The name.
        /// The cancellation token.
        /// Task<Stream>.
        Task GetSyncJobItemAdditionalFile(string id, string name, CancellationToken cancellationToken);
        /// 
        /// Opens the web socket.
        /// 
        /// The web socket factory.
        /// The keep alive timer ms.
        void OpenWebSocket(Func webSocketFactory, int keepAliveTimerMs = 60000);
        /// 
        /// Reports the offline actions.
        /// 
        /// The actions.
        /// Task.
        Task ReportOfflineActions(List actions);
        /// 
        /// Gets the ready synchronize items.
        /// 
        /// The target identifier.
        /// List<SyncedItem>.
        Task> GetReadySyncItems(string targetId);
        /// 
        /// Synchronizes the data.
        /// 
        /// The request.
        /// Task<SyncDataResponse>.
        Task SyncData(SyncDataRequest request);
        /// 
        /// Gets the synchronize job item file URL.
        /// 
        /// The identifier.
        /// System.String.
        string GetSyncJobItemFileUrl(string id);
        /// 
        /// Marks the synchronize job item for removal.
        /// 
        /// The identifier.
        /// Task.
        Task MarkSyncJobItemForRemoval(string id);
        /// 
        /// Unmarks the synchronize job item for removal.
        /// 
        /// The identifier.
        /// Task.
        Task UnmarkSyncJobItemForRemoval(string id);
        /// 
        /// Queues the failed synchronize job item for retry.
        /// 
        /// The identifier.
        /// Task.
        Task QueueFailedSyncJobItemForRetry(string id);
        /// 
        /// Cancels the synchronize job.
        /// 
        /// The identifier.
        /// Task.
        Task CancelSyncJob(string id);
        /// 
        /// Cancels the synchronize job item.
        /// 
        /// The identifier.
        /// Task.
        Task CancelSyncJobItem(string id);
        /// 
        /// Enables the cancelled synchronize job item.
        /// 
        /// The identifier.
        /// Task.
        Task EnableCancelledSyncJobItem(string id);
        /// 
        /// Gets the synchronize options.
        /// 
        /// The job information.
        /// Task<SyncOptions>.
        Task GetSyncOptions(SyncJobRequest jobInfo);
        /// 
        /// Gets the synchronize options.
        /// 
        /// The job information.
        /// Task<SyncDialogOptions>.
        Task GetSyncOptions(SyncJob jobInfo);
        /// 
        /// Gets the movie recommendations.
        /// 
        /// The query.
        /// Task<List<RecommendationDto>>.
        Task> GetMovieRecommendations(MovieRecommendationQuery query);
        /// 
        /// Opens the live stream.
        /// 
        /// The request.
        /// The cancellation token.
        /// Task<LiveStreamResponse>.
        Task OpenLiveStream(LiveStreamRequest request, CancellationToken cancellationToken);
        /// 
        /// Cancels the synchronize library items.
        /// 
        /// The target identifier.
        /// The item ids.
        /// Task.
        Task CancelSyncLibraryItems(string targetId, IEnumerable itemIds);
        /// 
        /// Gets the supported bitrate.
        /// 
        /// The cancellation token.
        /// Task<System.Int32>.
        Task DetectMaxBitrate(CancellationToken cancellationToken);
        /// 
        /// Gets the end point information.
        /// 
        /// The cancellation token.
        /// System.Threading.Tasks.Task<MediaBrowser.Model.Net.EndPointInfo>.
        Task GetEndPointInfo(CancellationToken cancellationToken);
    }
}