mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-04-24 05:57:20 -04:00
rework tuner setup
This commit is contained in:
parent
2ff7608b7a
commit
a8fc480489
6 changed files with 36 additions and 158 deletions
|
@ -2553,7 +2553,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
|||
|
||||
private async Task ScanForTunerDeviceChanges(ITunerHost host, CancellationToken cancellationToken)
|
||||
{
|
||||
var discoveredDevices = await DiscoverDevices(host, 2000, cancellationToken).ConfigureAwait(false);
|
||||
var discoveredDevices = await DiscoverDevices(host, 3000, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var configuredDevices = GetConfiguration().TunerHosts
|
||||
.Where(i => string.Equals(i.Type, host.Type, StringComparison.OrdinalIgnoreCase))
|
||||
|
|
|
@ -150,6 +150,16 @@ namespace Emby.Server.Implementations.LiveTv
|
|||
get { return _listingProviders; }
|
||||
}
|
||||
|
||||
public List<NameIdPair> GetTunerHostTypes()
|
||||
{
|
||||
return _tunerHosts.OrderBy(i => i.Name).Select(i => new NameIdPair
|
||||
{
|
||||
Name = i.Name,
|
||||
Id = i.Type
|
||||
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
void service_DataSourceChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (!_isDisposed)
|
||||
|
@ -3002,50 +3012,6 @@ namespace Emby.Server.Implementations.LiveTv
|
|||
return _security.GetRegistrationStatus(feature);
|
||||
}
|
||||
|
||||
public List<NameValuePair> GetSatIniMappings()
|
||||
{
|
||||
return new List<NameValuePair>();
|
||||
//var names = GetType().Assembly.GetManifestResourceNames().Where(i => i.IndexOf("SatIp.ini", StringComparison.OrdinalIgnoreCase) != -1).ToList();
|
||||
|
||||
//return names.Select(GetSatIniMappings).Where(i => i != null).DistinctBy(i => i.Value.Split('|')[0]).ToList();
|
||||
}
|
||||
|
||||
public NameValuePair GetSatIniMappings(string resource)
|
||||
{
|
||||
return new NameValuePair();
|
||||
//using (var stream = GetType().Assembly.GetManifestResourceStream(resource))
|
||||
//{
|
||||
// using (var reader = new StreamReader(stream))
|
||||
// {
|
||||
// var parser = new StreamIniDataParser();
|
||||
// IniData data = parser.ReadData(reader);
|
||||
|
||||
// var satType1 = data["SATTYPE"]["1"];
|
||||
// var satType2 = data["SATTYPE"]["2"];
|
||||
|
||||
// if (string.IsNullOrWhiteSpace(satType2))
|
||||
// {
|
||||
// return null;
|
||||
// }
|
||||
|
||||
// var srch = "SatIp.ini.";
|
||||
// var filename = Path.GetFileName(resource);
|
||||
|
||||
// return new NameValuePair
|
||||
// {
|
||||
// Name = satType1 + " " + satType2,
|
||||
// Value = satType2 + "|" + filename.Substring(filename.IndexOf(srch) + srch.Length)
|
||||
// };
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
public Task<List<ChannelInfo>> GetSatChannelScanResult(TunerHostInfo info, CancellationToken cancellationToken)
|
||||
{
|
||||
return Task.FromResult(new List<ChannelInfo>());
|
||||
//return new TunerHosts.SatIp.ChannelScan(_logger).Scan(info, cancellationToken);
|
||||
}
|
||||
|
||||
public Task<List<ChannelInfo>> GetChannelsForListingsProvider(string id, CancellationToken cancellationToken)
|
||||
{
|
||||
var info = GetConfiguration().ListingProviders.First(i => string.Equals(i.Id, id, StringComparison.OrdinalIgnoreCase));
|
||||
|
|
|
@ -582,13 +582,13 @@ namespace MediaBrowser.Api.LiveTv
|
|||
}
|
||||
|
||||
[Route("/LiveTv/ListingProviders/Default", "GET")]
|
||||
[Authenticated(AllowBeforeStartupWizard = true)]
|
||||
[Authenticated]
|
||||
public class GetDefaultListingProvider : ListingsProviderInfo, IReturn<ListingsProviderInfo>
|
||||
{
|
||||
}
|
||||
|
||||
[Route("/LiveTv/ListingProviders", "POST", Summary = "Adds a listing provider")]
|
||||
[Authenticated(AllowBeforeStartupWizard = true)]
|
||||
[Authenticated]
|
||||
public class AddListingProvider : ListingsProviderInfo, IReturn<ListingsProviderInfo>
|
||||
{
|
||||
public bool ValidateLogin { get; set; }
|
||||
|
@ -596,7 +596,7 @@ namespace MediaBrowser.Api.LiveTv
|
|||
}
|
||||
|
||||
[Route("/LiveTv/ListingProviders", "DELETE", Summary = "Deletes a listing provider")]
|
||||
[Authenticated(AllowBeforeStartupWizard = true)]
|
||||
[Authenticated]
|
||||
public class DeleteListingProvider : IReturnVoid
|
||||
{
|
||||
[ApiMember(Name = "Id", Description = "Provider id", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "DELETE")]
|
||||
|
@ -604,7 +604,7 @@ namespace MediaBrowser.Api.LiveTv
|
|||
}
|
||||
|
||||
[Route("/LiveTv/ListingProviders/Lineups", "GET", Summary = "Gets available lineups")]
|
||||
[Authenticated(AllowBeforeStartupWizard = true)]
|
||||
[Authenticated]
|
||||
public class GetLineups : IReturn<List<NameIdPair>>
|
||||
{
|
||||
[ApiMember(Name = "Id", Description = "Provider id", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||
|
@ -621,13 +621,13 @@ namespace MediaBrowser.Api.LiveTv
|
|||
}
|
||||
|
||||
[Route("/LiveTv/ListingProviders/SchedulesDirect/Countries", "GET", Summary = "Gets available lineups")]
|
||||
[Authenticated(AllowBeforeStartupWizard = true)]
|
||||
[Authenticated]
|
||||
public class GetSchedulesDirectCountries
|
||||
{
|
||||
}
|
||||
|
||||
[Route("/LiveTv/ChannelMappingOptions")]
|
||||
[Authenticated(AllowBeforeStartupWizard = true)]
|
||||
[Authenticated]
|
||||
public class GetChannelMappingOptions
|
||||
{
|
||||
[ApiMember(Name = "Id", Description = "Provider id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||
|
@ -635,7 +635,7 @@ namespace MediaBrowser.Api.LiveTv
|
|||
}
|
||||
|
||||
[Route("/LiveTv/ChannelMappings")]
|
||||
[Authenticated(AllowBeforeStartupWizard = true)]
|
||||
[Authenticated]
|
||||
public class SetChannelMapping
|
||||
{
|
||||
[ApiMember(Name = "Id", Description = "Provider id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||
|
@ -660,20 +660,6 @@ namespace MediaBrowser.Api.LiveTv
|
|||
public string Feature { get; set; }
|
||||
}
|
||||
|
||||
[Route("/LiveTv/TunerHosts/Satip/IniMappings", "GET", Summary = "Gets available mappings")]
|
||||
[Authenticated(AllowBeforeStartupWizard = true)]
|
||||
public class GetSatIniMappings : IReturn<List<NameValuePair>>
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[Route("/LiveTv/TunerHosts/Satip/ChannelScan", "GET", Summary = "Scans for available channels")]
|
||||
[Authenticated(AllowBeforeStartupWizard = true)]
|
||||
public class GetSatChannnelScanResult : TunerHostInfo
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[Route("/LiveTv/LiveStreamFiles/{Id}/stream.{Container}", "GET", Summary = "Gets a live tv channel")]
|
||||
public class GetLiveStreamFile
|
||||
{
|
||||
|
@ -687,6 +673,13 @@ namespace MediaBrowser.Api.LiveTv
|
|||
public string Id { get; set; }
|
||||
}
|
||||
|
||||
[Route("/LiveTv/TunerHosts/Types", "GET")]
|
||||
[Authenticated]
|
||||
public class GetTunerHostTypes : IReturn<List<NameIdPair>>
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class LiveTvService : BaseApiService
|
||||
{
|
||||
private readonly ILiveTvManager _liveTvManager;
|
||||
|
@ -712,6 +705,12 @@ namespace MediaBrowser.Api.LiveTv
|
|||
_sessionContext = sessionContext;
|
||||
}
|
||||
|
||||
public object Get(GetTunerHostTypes request)
|
||||
{
|
||||
var list = _liveTvManager.GetTunerHostTypes();
|
||||
return ToOptimizedResult(list);
|
||||
}
|
||||
|
||||
public object Get(GetLiveRecordingFile request)
|
||||
{
|
||||
var path = _liveTvManager.GetEmbyTvActiveRecordingPath(request.Id);
|
||||
|
@ -749,13 +748,6 @@ namespace MediaBrowser.Api.LiveTv
|
|||
return ToOptimizedResult(new ListingsProviderInfo());
|
||||
}
|
||||
|
||||
public async Task<object> Get(GetSatChannnelScanResult request)
|
||||
{
|
||||
var result = await _liveTvManager.GetSatChannelScanResult(request, CancellationToken.None).ConfigureAwait(false);
|
||||
|
||||
return ToOptimizedResult(result);
|
||||
}
|
||||
|
||||
public async Task<object> Get(GetLiveTvRegistrationInfo request)
|
||||
{
|
||||
var result = await _liveTvManager.GetRegistrationInfo(request.Feature).ConfigureAwait(false);
|
||||
|
@ -803,11 +795,6 @@ namespace MediaBrowser.Api.LiveTv
|
|||
return ToOptimizedResult(result);
|
||||
}
|
||||
|
||||
public object Get(GetSatIniMappings request)
|
||||
{
|
||||
return ToOptimizedResult(_liveTvManager.GetSatIniMappings());
|
||||
}
|
||||
|
||||
public async Task<object> Get(GetSchedulesDirectCountries request)
|
||||
{
|
||||
// https://json.schedulesdirect.org/20141201/available/countries
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Connect;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.LiveTv;
|
||||
using MediaBrowser.Controller.Net;
|
||||
using MediaBrowser.Model.Configuration;
|
||||
using MediaBrowser.Model.LiveTv;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -52,16 +49,14 @@ namespace MediaBrowser.Api
|
|||
private readonly IServerApplicationHost _appHost;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IConnectManager _connectManager;
|
||||
private readonly ILiveTvManager _liveTvManager;
|
||||
private readonly IMediaEncoder _mediaEncoder;
|
||||
|
||||
public StartupWizardService(IServerConfigurationManager config, IServerApplicationHost appHost, IUserManager userManager, IConnectManager connectManager, ILiveTvManager liveTvManager, IMediaEncoder mediaEncoder)
|
||||
public StartupWizardService(IServerConfigurationManager config, IServerApplicationHost appHost, IUserManager userManager, IConnectManager connectManager, IMediaEncoder mediaEncoder)
|
||||
{
|
||||
_config = config;
|
||||
_appHost = appHost;
|
||||
_userManager = userManager;
|
||||
_connectManager = connectManager;
|
||||
_liveTvManager = liveTvManager;
|
||||
_mediaEncoder = mediaEncoder;
|
||||
}
|
||||
|
||||
|
@ -92,20 +87,6 @@ namespace MediaBrowser.Api
|
|||
PreferredMetadataLanguage = _config.Configuration.PreferredMetadataLanguage
|
||||
};
|
||||
|
||||
var tvConfig = GetLiveTVConfiguration();
|
||||
|
||||
if (tvConfig.TunerHosts.Count > 0)
|
||||
{
|
||||
result.LiveTvTunerPath = tvConfig.TunerHosts[0].Url;
|
||||
result.LiveTvTunerType = tvConfig.TunerHosts[0].Type;
|
||||
}
|
||||
|
||||
if (tvConfig.ListingProviders.Count > 0)
|
||||
{
|
||||
result.LiveTvGuideProviderId = tvConfig.ListingProviders[0].Id;
|
||||
result.LiveTvGuideProviderType = tvConfig.ListingProviders[0].Type;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -129,9 +110,6 @@ namespace MediaBrowser.Api
|
|||
_config.Configuration.MetadataCountryCode = request.MetadataCountryCode;
|
||||
_config.Configuration.PreferredMetadataLanguage = request.PreferredMetadataLanguage;
|
||||
_config.SaveConfiguration();
|
||||
|
||||
var task = UpdateTuners(request);
|
||||
Task.WaitAll(task);
|
||||
}
|
||||
|
||||
public object Get(GetStartupUser request)
|
||||
|
@ -166,50 +144,6 @@ namespace MediaBrowser.Api
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
private async Task UpdateTuners(UpdateStartupConfiguration request)
|
||||
{
|
||||
var config = GetLiveTVConfiguration();
|
||||
var save = false;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(request.LiveTvTunerPath) ||
|
||||
string.IsNullOrWhiteSpace(request.LiveTvTunerType))
|
||||
{
|
||||
if (config.TunerHosts.Count > 0)
|
||||
{
|
||||
config.TunerHosts.Clear();
|
||||
save = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!config.TunerHosts.Any(i => string.Equals(i.Type, request.LiveTvTunerType, StringComparison.OrdinalIgnoreCase) && string.Equals(i.Url, request.LiveTvTunerPath, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
// Add tuner
|
||||
await _liveTvManager.SaveTunerHost(new TunerHostInfo
|
||||
{
|
||||
Type = request.LiveTvTunerType,
|
||||
Url = request.LiveTvTunerPath
|
||||
|
||||
}).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (save)
|
||||
{
|
||||
SaveLiveTVConfiguration(config);
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveLiveTVConfiguration(LiveTvOptions config)
|
||||
{
|
||||
_config.SaveConfiguration("livetv", config);
|
||||
}
|
||||
|
||||
private LiveTvOptions GetLiveTVConfiguration()
|
||||
{
|
||||
return _config.GetConfiguration<LiveTvOptions>("livetv");
|
||||
}
|
||||
}
|
||||
|
||||
public class StartupConfiguration
|
||||
|
@ -217,10 +151,6 @@ namespace MediaBrowser.Api
|
|||
public string UICulture { get; set; }
|
||||
public string MetadataCountryCode { get; set; }
|
||||
public string PreferredMetadataLanguage { get; set; }
|
||||
public string LiveTvTunerType { get; set; }
|
||||
public string LiveTvTunerPath { get; set; }
|
||||
public string LiveTvGuideProviderId { get; set; }
|
||||
public string LiveTvGuideProviderType { get; set; }
|
||||
}
|
||||
|
||||
public class StartupInfo
|
||||
|
|
|
@ -376,19 +376,13 @@ namespace MediaBrowser.Controller.LiveTv
|
|||
/// <returns>Task.</returns>
|
||||
Task OnRecordingFileDeleted(BaseItem recording);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the sat ini mappings.
|
||||
/// </summary>
|
||||
/// <returns>List<NameValuePair>.</returns>
|
||||
List<NameValuePair> GetSatIniMappings();
|
||||
|
||||
Task<List<ChannelInfo>> GetSatChannelScanResult(TunerHostInfo info, CancellationToken cancellationToken);
|
||||
|
||||
Task<List<ChannelInfo>> GetChannelsForListingsProvider(string id, CancellationToken cancellationToken);
|
||||
Task<List<ChannelInfo>> GetChannelsFromListingsProviderData(string id, CancellationToken cancellationToken);
|
||||
|
||||
List<IListingsProvider> ListingProviders { get; }
|
||||
|
||||
List<NameIdPair> GetTunerHostTypes();
|
||||
|
||||
event EventHandler<GenericEventArgs<TimerEventInfo>> SeriesTimerCancelled;
|
||||
event EventHandler<GenericEventArgs<TimerEventInfo>> TimerCancelled;
|
||||
event EventHandler<GenericEventArgs<TimerEventInfo>> TimerCreated;
|
||||
|
|
|
@ -46,6 +46,7 @@ namespace MediaBrowser.Model.LiveTv
|
|||
public string Url { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string DeviceId { get; set; }
|
||||
public string FriendlyName { get; set; }
|
||||
public bool ImportFavoritesOnly { get; set; }
|
||||
public bool AllowHWTranscoding { get; set; }
|
||||
public bool EnableTvgId { get; set; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue