本文整理汇总了C#中MediaBrowser.Controller.LiveTv.TimerInfo类的典型用法代码示例。如果您正苦于以下问题:C# TimerInfo类的具体用法?C# TimerInfo怎么用?C# TimerInfo使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
TimerInfo类属于MediaBrowser.Controller.LiveTv命名空间,在下文中一共展示了TimerInfo类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: GetRecordingName
public static string GetRecordingName(TimerInfo timer, ProgramInfo info)
{
if (info == null)
{
return (timer.ProgramId + ".ts");
}
var fancyName = info.Name;
if (info.ProductionYear != null)
{
fancyName += "_(" + info.ProductionYear + ")";
}
if (info.IsSeries)
{
fancyName += "_" + info.EpisodeTitle.Replace("Season: ", "S").Replace(" Episode: ", "E");
}
if (info.IsHD ?? false)
{
fancyName += "_HD";
}
if (info.OriginalAirDate != null)
{
fancyName += "_" + info.OriginalAirDate.Value.ToString("yyyy-MM-dd");
}
return StringHelper.RemoveSpecialCharacters(fancyName) + ".ts";
}
开发者ID:Inspirony,项目名称:Emby.Plugins,代码行数:25,代码来源:RecordingHelper.cs
示例2: GetTimerInfoDto
public TimerInfoDto GetTimerInfoDto(TimerInfo info, ILiveTvService service)
{
var dto = new TimerInfoDto
{
Id = GetInternalTimerId(service.Name, info.Id).ToString("N"),
ChannelName = info.ChannelName,
Overview = info.Overview,
EndDate = info.EndDate,
Name = info.Name,
StartDate = info.StartDate,
ExternalId = info.Id,
ChannelId = GetInternalChannelId(service.Name, info.ChannelId, info.ChannelName).ToString("N"),
Status = info.Status,
SeriesTimerId = string.IsNullOrEmpty(info.SeriesTimerId) ? null : GetInternalSeriesTimerId(service.Name, info.SeriesTimerId).ToString("N"),
PrePaddingSeconds = info.PrePaddingSeconds,
PostPaddingSeconds = info.PostPaddingSeconds,
IsPostPaddingRequired = info.IsPostPaddingRequired,
IsPrePaddingRequired = info.IsPrePaddingRequired,
ExternalChannelId = info.ChannelId,
ExternalSeriesTimerId = info.SeriesTimerId,
ServiceName = service.Name,
ExternalProgramId = info.ProgramId,
Priority = info.Priority
};
var duration = info.EndDate - info.StartDate;
dto.DurationMs = Convert.ToInt32(duration.TotalMilliseconds);
if (!string.IsNullOrEmpty(info.ProgramId))
{
dto.ProgramId = GetInternalProgramId(service.Name, info.ProgramId).ToString("N");
}
return dto;
}
开发者ID:RomanDengin,项目名称:MediaBrowser,代码行数:35,代码来源:LiveTvDtoService.cs
示例3: GetTimers
public static List<TimerInfo> GetTimers(Stream stream, IJsonSerializer json, ILogger logger)
{
List<TimerInfo> ret = new List<TimerInfo>();
var root = ParseRecRules(stream, json);
foreach (var item in root.RecRuleList.RecRules)
{
if (!item.Inactive && string.Compare(item.Type, "Not Recording", true) != 0)
{
TimerInfo val = new TimerInfo()
{
Name = item.Title,
Overview = item.Description,
ChannelId = item.ChanId.ToString(),
EndDate = (DateTime)item.EndTime,
StartDate = (DateTime)item.StartTime,
Id = item.Id,
PrePaddingSeconds = item.StartOffset * 60,
PostPaddingSeconds = item.EndOffset * 60,
IsPostPaddingRequired = item.EndOffset != 0,
IsPrePaddingRequired = item.StartOffset != 0,
ProgramId = item.ProgramId
};
ret.Add(val);
}
}
return ret;
}
开发者ID:babgvant,项目名称:Emby.MythTv,代码行数:30,代码来源:DvrResponse.cs
示例4: CopyTimer
public void CopyTimer(TimerInfo parent)
{
foreach (PropertyInfo prop in parent.GetType().GetProperties())
{
GetType().GetProperty(prop.Name).SetValue(this, prop.GetValue(parent, null), null);
}
this.Id = parent.ProgramId;
}
开发者ID:ryu4000,项目名称:MediaBrowser.Plugins,代码行数:8,代码来源:RecordingHelper.cs
示例5: GetStartTime
public static DateTime GetStartTime(TimerInfo timer)
{
if (timer.StartDate.AddSeconds(-timer.PrePaddingSeconds + 1) < DateTime.UtcNow)
{
return DateTime.UtcNow.AddSeconds(1);
}
return timer.StartDate.AddSeconds(-timer.PrePaddingSeconds);
}
开发者ID:Inspirony,项目名称:Emby.Plugins,代码行数:8,代码来源:RecordingHelper.cs
示例6: CreateTimer
public async Task CreateTimer(TimerInfo info, CancellationToken cancellationToken)
{
try
{
}
catch (Exception exception)
{
Logger.ErrorException("HTSP create timer failed", exception);
}
}
开发者ID:FabioDeMiranda,项目名称:tvheadend-api-emby,代码行数:11,代码来源:Dvr.cs
示例7: GetTimerInfoDto
public TimerInfoDto GetTimerInfoDto(TimerInfo info, ILiveTvService service, LiveTvProgram program, LiveTvChannel channel)
{
var dto = new TimerInfoDto
{
Id = GetInternalTimerId(service.Name, info.Id).ToString("N"),
Overview = info.Overview,
EndDate = info.EndDate,
Name = info.Name,
StartDate = info.StartDate,
ExternalId = info.Id,
ChannelId = GetInternalChannelId(service.Name, info.ChannelId).ToString("N"),
Status = info.Status,
SeriesTimerId = string.IsNullOrEmpty(info.SeriesTimerId) ? null : GetInternalSeriesTimerId(service.Name, info.SeriesTimerId).ToString("N"),
PrePaddingSeconds = info.PrePaddingSeconds,
PostPaddingSeconds = info.PostPaddingSeconds,
IsPostPaddingRequired = info.IsPostPaddingRequired,
IsPrePaddingRequired = info.IsPrePaddingRequired,
KeepUntil = info.KeepUntil,
ExternalChannelId = info.ChannelId,
ExternalSeriesTimerId = info.SeriesTimerId,
ServiceName = service.Name,
ExternalProgramId = info.ProgramId,
Priority = info.Priority,
RunTimeTicks = (info.EndDate - info.StartDate).Ticks,
ServerId = _appHost.SystemId
};
if (!string.IsNullOrEmpty(info.ProgramId))
{
dto.ProgramId = GetInternalProgramId(service.Name, info.ProgramId).ToString("N");
}
if (program != null)
{
dto.ProgramInfo = _dtoService.GetBaseItemDto(program, new DtoOptions());
if (info.Status != RecordingStatus.Cancelled && info.Status != RecordingStatus.Error)
{
dto.ProgramInfo.TimerId = dto.Id;
dto.ProgramInfo.Status = info.Status.ToString();
}
dto.ProgramInfo.SeriesTimerId = dto.SeriesTimerId;
}
if (channel != null)
{
dto.ChannelName = channel.Name;
}
return dto;
}
开发者ID:t-andre,项目名称:Emby,代码行数:52,代码来源:LiveTvDtoService.cs
示例8: GetRecordingName
public static string GetRecordingName(TimerInfo timer, ProgramInfo info)
{
if (info == null)
{
return timer.ProgramId;
}
var name = info.Name;
if (info.IsSeries)
{
var addHyphen = true;
if (info.SeasonNumber.HasValue && info.EpisodeNumber.HasValue)
{
name += string.Format(" S{0}E{1}", info.SeasonNumber.Value.ToString("00", CultureInfo.InvariantCulture), info.EpisodeNumber.Value.ToString("00", CultureInfo.InvariantCulture));
addHyphen = false;
}
else if (info.OriginalAirDate.HasValue)
{
name += " " + info.OriginalAirDate.Value.ToString("yyyy-MM-dd");
}
else
{
name += " " + DateTime.Now.ToString("yyyy-MM-dd");
}
if (!string.IsNullOrWhiteSpace(info.EpisodeTitle))
{
if (addHyphen)
{
name += " -";
}
name += " " + info.EpisodeTitle;
}
}
else if (info.IsMovie && info.ProductionYear != null)
{
name += " (" + info.ProductionYear + ")";
}
else
{
name += " " + info.StartDate.ToString("yyyy-MM-dd") + " " + info.Id;
}
return name;
}
开发者ID:7illusions,项目名称:Emby,代码行数:49,代码来源:RecordingHelper.cs
示例9: GetTimerInfoDto
public TimerInfoDto GetTimerInfoDto(TimerInfo info, ILiveTvService service, LiveTvProgram program, LiveTvChannel channel)
{
var dto = new TimerInfoDto
{
Id = GetInternalTimerId(service.Name, info.Id).ToString("N"),
Overview = info.Overview,
EndDate = info.EndDate,
Name = info.Name,
StartDate = info.StartDate,
ExternalId = info.Id,
ChannelId = GetInternalChannelId(service.Name, info.ChannelId).ToString("N"),
Status = info.Status,
SeriesTimerId = string.IsNullOrEmpty(info.SeriesTimerId) ? null : GetInternalSeriesTimerId(service.Name, info.SeriesTimerId).ToString("N"),
PrePaddingSeconds = info.PrePaddingSeconds,
PostPaddingSeconds = info.PostPaddingSeconds,
IsPostPaddingRequired = info.IsPostPaddingRequired,
IsPrePaddingRequired = info.IsPrePaddingRequired,
ExternalChannelId = info.ChannelId,
ExternalSeriesTimerId = info.SeriesTimerId,
ServiceName = service.Name,
ExternalProgramId = info.ProgramId,
Priority = info.Priority,
RunTimeTicks = (info.EndDate - info.StartDate).Ticks
};
if (!string.IsNullOrEmpty(info.ProgramId))
{
dto.ProgramId = GetInternalProgramId(service.Name, info.ProgramId).ToString("N");
}
if (program != null)
{
dto.ProgramInfo = GetProgramInfoDto(program, channel);
dto.ProgramInfo.TimerId = dto.Id;
dto.ProgramInfo.SeriesTimerId = dto.SeriesTimerId;
}
if (channel != null)
{
dto.ChannelName = channel.Name;
}
return dto;
}
开发者ID:bigjohn322,项目名称:MediaBrowser,代码行数:45,代码来源:LiveTvDtoService.cs
示例10: CopyProgramInfoToTimerInfo
public static void CopyProgramInfoToTimerInfo(ProgramInfo programInfo, TimerInfo timerInfo)
{
timerInfo.SeasonNumber = programInfo.SeasonNumber;
timerInfo.EpisodeNumber = programInfo.EpisodeNumber;
timerInfo.IsMovie = programInfo.IsMovie;
timerInfo.IsKids = programInfo.IsKids;
timerInfo.IsNews = programInfo.IsNews;
timerInfo.IsSports = programInfo.IsSports;
timerInfo.ProductionYear = programInfo.ProductionYear;
timerInfo.EpisodeTitle = programInfo.EpisodeTitle;
timerInfo.OriginalAirDate = programInfo.OriginalAirDate;
timerInfo.IsProgramSeries = programInfo.IsSeries;
timerInfo.HomePageUrl = programInfo.HomePageUrl;
timerInfo.CommunityRating = programInfo.CommunityRating;
timerInfo.ShortOverview = programInfo.ShortOverview;
timerInfo.OfficialRating = programInfo.OfficialRating;
timerInfo.IsRepeat = programInfo.IsRepeat;
}
开发者ID:t-andre,项目名称:Emby,代码行数:19,代码来源:RecordingHelper.cs
示例11: CreateTimer
public static TimerInfo CreateTimer(ProgramInfo parent, SeriesTimerInfo series)
{
var timer = new TimerInfo();
timer.ChannelId = parent.ChannelId;
timer.Id = (series.Id + parent.Id).GetMD5().ToString("N");
timer.StartDate = parent.StartDate;
timer.EndDate = parent.EndDate;
timer.ProgramId = parent.Id;
timer.PrePaddingSeconds = series.PrePaddingSeconds;
timer.PostPaddingSeconds = series.PostPaddingSeconds;
timer.IsPostPaddingRequired = series.IsPostPaddingRequired;
timer.IsPrePaddingRequired = series.IsPrePaddingRequired;
timer.Priority = series.Priority;
timer.Name = parent.Name;
timer.Overview = parent.Overview;
timer.SeriesTimerId = series.Id;
return timer;
}
开发者ID:7illusions,项目名称:Emby,代码行数:20,代码来源:RecordingHelper.cs
示例12: CreateSchedule
public void CreateSchedule(CancellationToken cancellationToken, TimerInfo timer)
{
var programData = GetProgram(cancellationToken, timer.ProgramId);
if (programData == null)
{
throw ExceptionHelper.CreateArgumentException("timer.ProgramId", "The program id {0} could not be found", timer.ProgramId);
}
var builder = new StringBuilder("AddScheduleDetailed?");
builder.AppendFormat("channelid={0}&", programData.ChannelId);
builder.AppendFormat("title={0}&", programData.Title);
builder.AppendFormat("starttime={0}&", programData.StartTime.ToLocalTime().ToUrlDate());
builder.AppendFormat("endtime={0}&", programData.EndTime.ToLocalTime().ToUrlDate());
builder.AppendFormat("scheduletype={0}&", (Int32)WebScheduleType.Once);
if (timer.IsPrePaddingRequired & timer.PrePaddingSeconds > 0)
{
builder.AppendFormat("preRecordInterval={0}&", timer.PrePaddingSeconds / 60);
}
if (timer.IsPostPaddingRequired & timer.PostPaddingSeconds > 0)
{
builder.AppendFormat("postRecordInterval={0}&", timer.PostPaddingSeconds / 60);
}
builder.Remove(builder.Length - 1, 1);
Plugin.Logger.Info("Creating scheule with StartTime: {0}, EndTime: {1}, ProgramData from MP: {2}",
timer.StartDate, timer.EndDate, builder.ToString());
var response = GetFromService<WebBoolResult>(cancellationToken, builder.ToString());
if (!response.Result)
{
throw new LiveTvConflictException();
}
}
开发者ID:tonycapoccitti,项目名称:MediaPortalTVPlugin,代码行数:36,代码来源:TVServiceProxy.cs
示例13: CreateTimerAsync
public Task CreateTimerAsync(TimerInfo info, CancellationToken cancellationToken)
{
info.Id = Guid.NewGuid().ToString("N");
_timerProvider.Add(info);
return Task.FromResult(0);
}
开发者ID:heksesang,项目名称:Emby.Plugins,代码行数:6,代码来源:LiveTVService.cs
示例14: RecordStream
private async Task RecordStream(TimerInfo timer, CancellationToken cancellationToken)
{
var mediaStreamInfo = await GetChannelStream(timer.ChannelId, "none", CancellationToken.None);
var duration = (timer.EndDate - RecordingHelper.GetStartTime(timer)).TotalSeconds + timer.PrePaddingSeconds;
HttpRequestOptions httpRequestOptions = new HttpRequestOptionsMod()
{
Url = mediaStreamInfo.Path + "?duration=" + duration
};
var info = GetProgramInfoFromCache(timer.ChannelId, timer.ProgramId);
var recordPath = RecordingPath;
if (info.IsMovie)
{
recordPath = Path.Combine(recordPath, "Movies", StringHelper.RemoveSpecialCharacters(info.Name));
}
else
{
recordPath = Path.Combine(recordPath, "TV", StringHelper.RemoveSpecialCharacters(info.Name));
}
recordPath = Path.Combine(recordPath, RecordingHelper.GetRecordingName(timer, info));
Directory.CreateDirectory(Path.GetDirectoryName(recordPath));
var recording = _recordingProvider.GetAll().FirstOrDefault(x => string.Equals(x.Id, info.Id, StringComparison.OrdinalIgnoreCase));
if (recording == null)
{
recording = new RecordingInfo()
{
ChannelId = info.ChannelId,
Id = info.Id,
StartDate = info.StartDate,
EndDate = info.EndDate,
Genres = info.Genres ?? null,
IsKids = info.IsKids,
IsLive = info.IsLive,
IsMovie = info.IsMovie,
IsHD = info.IsHD,
IsNews = info.IsNews,
IsPremiere = info.IsPremiere,
IsSeries = info.IsSeries,
IsSports = info.IsSports,
IsRepeat = !info.IsPremiere,
Name = info.Name,
EpisodeTitle = info.EpisodeTitle ?? "",
ProgramId = info.Id,
HasImage = info.HasImage ?? false,
ImagePath = info.ImagePath ?? null,
ImageUrl = info.ImageUrl,
OriginalAirDate = info.OriginalAirDate,
Status = RecordingStatus.Scheduled,
Overview = info.Overview,
SeriesTimerId = info.Id.Substring(0, 10)
};
_recordingProvider.Add(recording);
}
recording.Path = recordPath;
recording.Status = RecordingStatus.InProgress;
_recordingProvider.Update(recording);
try
{
httpRequestOptions.BufferContent = false;
httpRequestOptions.CancellationToken = cancellationToken;
_logger.Info("Writing file to path: " + recordPath);
using (var response = await _httpClient.SendAsync(httpRequestOptions, "GET"))
{
using (var output = File.Open(recordPath, FileMode.Create, FileAccess.Write, FileShare.Read))
{
await response.Content.CopyToAsync(output, 4096, cancellationToken);
}
}
recording.Status = RecordingStatus.Completed;
}
catch (OperationCanceledException)
{
recording.Status = RecordingStatus.Cancelled;
}
catch
{
recording.Status = RecordingStatus.Error;
}
_recordingProvider.Update(recording);
_timerProvider.Delete(timer);
_logger.Info("Recording was a success");
}
开发者ID:heksesang,项目名称:Emby.Plugins,代码行数:90,代码来源:LiveTVService.cs
示例15: GetTimerInfo
public async Task<TimerInfo> GetTimerInfo(TimerInfoDto dto, bool isNew, LiveTvManager liveTv, CancellationToken cancellationToken)
{
var info = new TimerInfo
{
Overview = dto.Overview,
EndDate = dto.EndDate,
Name = dto.Name,
StartDate = dto.StartDate,
Status = dto.Status,
PrePaddingSeconds = dto.PrePaddingSeconds,
PostPaddingSeconds = dto.PostPaddingSeconds,
IsPostPaddingRequired = dto.IsPostPaddingRequired,
IsPrePaddingRequired = dto.IsPrePaddingRequired,
Priority = dto.Priority,
SeriesTimerId = dto.ExternalSeriesTimerId,
ProgramId = dto.ExternalProgramId,
ChannelId = dto.ExternalChannelId,
Id = dto.ExternalId
};
// Convert internal server id's to external tv provider id's
if (!isNew && !string.IsNullOrEmpty(dto.Id) && string.IsNullOrEmpty(info.Id))
{
var timer = await liveTv.GetSeriesTimer(dto.Id, cancellationToken).ConfigureAwait(false);
info.Id = timer.ExternalId;
}
if (!string.IsNullOrEmpty(dto.ChannelId) && string.IsNullOrEmpty(info.ChannelId))
{
var channel = liveTv.GetInternalChannel(dto.ChannelId);
if (channel != null)
{
info.ChannelId = channel.ExternalId;
}
}
if (!string.IsNullOrEmpty(dto.ProgramId) && string.IsNullOrEmpty(info.ProgramId))
{
var program = liveTv.GetInternalProgram(dto.ProgramId);
if (program != null)
{
info.ProgramId = program.ExternalId;
}
}
if (!string.IsNullOrEmpty(dto.SeriesTimerId) && string.IsNullOrEmpty(info.SeriesTimerId))
{
var timer = await liveTv.GetSeriesTimer(dto.SeriesTimerId, cancellationToken).ConfigureAwait(false);
if (timer != null)
{
info.SeriesTimerId = timer.ExternalId;
}
}
return info;
}
开发者ID:paul-777,项目名称:Emby,代码行数:60,代码来源:LiveTvDtoService.cs
示例16: GetTimerInfo
private TimerInfo GetTimerInfo(EpgEventJSONObject i)
{
var info = new TimerInfo();
var recurr = i.recurr;
if (recurr != null)
{
if (recurr.OID != 0)
{
info.SeriesTimerId = recurr.OID.ToString(_usCulture);
}
info.Name = recurr.RecurringName;
}
var schd = i.schd;
if (schd != null)
{
info.ChannelId = schd.ChannelOid.ToString(_usCulture);
info.Id = schd.OID.ToString(_usCulture);
info.Status = ParseStatus(schd.Status);
info.StartDate = DateTime.Parse(schd.StartTime).ToUniversalTime();
info.EndDate = DateTime.Parse(schd.EndTime).ToUniversalTime();
info.PrePaddingSeconds = int.Parse(schd.PrePadding, _usCulture) * 60;
info.PostPaddingSeconds = int.Parse(schd.PostPadding, _usCulture) * 60;
info.Name = schd.Name;
}
var epg = i.epgEvent;
if (epg != null)
{
//info.Audio = ListingsResponse.ParseAudio(epg.Audio);
info.ProgramId = epg.OID.ToString(_usCulture);
//info.OfficialRating = epg.Rating;
//info.EpisodeTitle = epg.Subtitle;
info.Name = epg.Title;
info.Overview = epg.Desc;
//info.Genres = epg.Genres;
//info.IsRepeat = !epg.FirstRun;
//info.CommunityRating = ListingsResponse.ParseCommunityRating(epg.StarRating);
//info.IsHD = string.Equals(epg.Quality, "hdtv", StringComparison.OrdinalIgnoreCase);
}
return info;
}
开发者ID:SvenVandenbrande,项目名称:Emby.Plugins,代码行数:49,代码来源:RecordingResponse.cs
示例17: UpdateTimerAsync
/// <summary>
/// Update a single Timer
/// </summary>
/// <param name="info">The program info</param>
/// <param name="cancellationToken">The CancellationToken</param>
/// <returns></returns>
public async Task UpdateTimerAsync(TimerInfo info, CancellationToken cancellationToken)
{
_logger.Info(string.Format("[NextPvr] Start UpdateTimer Async for ChannelId: {0} & Name: {1}", info.ChannelId, info.Name));
await EnsureConnectionAsync(cancellationToken).ConfigureAwait(false);
var baseUrl = Plugin.Instance.Configuration.WebServiceUrl;
var options = new HttpRequestOptions
{
CancellationToken = cancellationToken,
Url = string.Format("{0}/public/ScheduleService/UpdateRec?sid={1}", baseUrl, Sid)
};
var timerSettings = await GetDefaultScheduleSettings(cancellationToken).ConfigureAwait(false);
timerSettings.scheduleOID = int.Parse(info.Id);
timerSettings.post_padding_min = info.PostPaddingSeconds / 60;
timerSettings.pre_padding_min = info.PrePaddingSeconds / 60;
var postContent = _jsonSerializer.SerializeToString(timerSettings);
UtilsHelper.DebugInformation(_logger, string.Format("[NextPvr] TimerSettings UpdateTimer: {0} for ChannelId: {1} & Name: {2}", postContent, info.ChannelId, info.Name));
options.RequestContent = postContent;
options.RequestContentType = "application/json";
try
{
await _httpClient.Post(options).ConfigureAwait((false));
}
catch (HttpException ex)
{
_logger.Error(string.Format("[NextPvr] UpdateTimer Async with exception: {0}", ex.Message));
throw new LiveTvConflictException();
}
}
开发者ID:SvenVandenbrande,项目名称:Emby.Plugins,代码行数:41,代码来源:LiveTvService.cs
示例18: UpdateTimerAsync
public async Task UpdateTimerAsync(TimerInfo info, CancellationToken cancellationToken)
{
Logger.Debug("LiveTvService.UpdateTimerAsync");
await Task.Run(() => true, cancellationToken);
}
开发者ID:FabioDeMiranda,项目名称:tvheadend-api-emby,代码行数:6,代码来源:LiveTvService.cs
示例19: RecordStream
private async Task RecordStream(TimerInfo timer, DateTime recordingEndDate, ActiveRecordingInfo activeRecordingInfo, CancellationToken cancellationToken)
{
if (timer == null)
{
throw new ArgumentNullException("timer");
}
ProgramInfo info = null;
if (string.IsNullOrWhiteSpace(timer.ProgramId))
{
_logger.Info("Timer {0} has null programId", timer.Id);
}
else
{
info = GetProgramInfoFromCache(timer.ChannelId, timer.ProgramId);
}
if (info == null)
{
_logger.Info("Unable to find program with Id {0}. Will search using start date", timer.ProgramId);
info = GetProgramInfoFromCache(timer.ChannelId, timer.StartDate);
}
if (info == null)
{
throw new InvalidOperationException(string.Format("Program with Id {0} not found", timer.ProgramId));
}
var recordPath = GetRecordingPath(timer, info);
var recordingStatus = RecordingStatus.New;
var isResourceOpen = false;
SemaphoreSlim semaphore = null;
try
{
var result = await GetChannelStreamInternal(timer.ChannelId, null, CancellationToken.None).ConfigureAwait(false);
isResourceOpen = true;
semaphore = result.Item3;
var mediaStreamInfo = result.Item1;
// HDHR doesn't seem to release the tuner right away after first probing with ffmpeg
//await Task.Delay(3000, cancellationToken).ConfigureAwait(false);
var recorder = await GetRecorder().ConfigureAwait(false);
recordPath = recorder.GetOutputPath(mediaStreamInfo, recordPath);
recordPath = EnsureFileUnique(recordPath, timer.Id);
_libraryMonitor.ReportFileSystemChangeBeginning(recordPath);
_fileSystem.CreateDirectory(Path.GetDirectoryName(recordPath));
activeRecordingInfo.Path = recordPath;
var duration = recordingEndDate - DateTime.UtcNow;
_logger.Info("Beginning recording. Will record for {0} minutes.", duration.TotalMinutes.ToString(CultureInfo.InvariantCulture));
_logger.Info("Writing file to path: " + recordPath);
_logger.Info("Opening recording stream from tuner provider");
Action onStarted = () =>
{
timer.Status = RecordingStatus.InProgress;
_timerProvider.AddOrUpdate(timer, false);
result.Item3.Release();
isResourceOpen = false;
};
var pathWithDuration = result.Item2.ApplyDuration(mediaStreamInfo.Path, duration);
// If it supports supplying duration via url
if (!string.Equals(pathWithDuration, mediaStreamInfo.Path, StringComparison.OrdinalIgnoreCase))
{
mediaStreamInfo.Path = pathWithDuration;
mediaStreamInfo.RunTimeTicks = duration.Ticks;
}
await recorder.Record(mediaStreamInfo, recordPath, duration, onStarted, cancellationToken).ConfigureAwait(false);
recordingStatus = RecordingStatus.Completed;
_logger.Info("Recording completed: {0}", recordPath);
}
catch (OperationCanceledException)
{
_logger.Info("Recording stopped: {0}", recordPath);
recordingStatus = RecordingStatus.Completed;
}
catch (Exception ex)
{
_logger.ErrorException("Error recording to {0}", ex, recordPath);
recordingStatus = RecordingStatus.Error;
}
finally
{
if (isResourceOpen && semaphore != null)
{
semaphore.Release();
}
//.........这里部分代码省略.........
开发者ID:softworkz,项目名称:Emby,代码行数:101,代码来源:EmbyTV.cs
示例20: GetRecordingPath
private string GetRecordingPath(TimerInfo timer, ProgramInfo info)
{
var recordPath = RecordingPath;
var config = GetConfiguration();
if (info.IsMovie)
{
var customRecordingPath = config.MovieRecordingPath;
var allowSubfolder = true;
if (!string.IsNullOrWhiteSpace(customRecordingPath))
{
allowSubfolder = string.Equals(customRecordingPath, recordPath, StringComparison.OrdinalIgnoreCase);
recordPath = customRecordingPath;
}
if (allowSubfolder && config.EnableRecordingSubfolders)
{
recordPath = Path.Combine(recordPath, "Movies");
}
var folderName = _fileSystem.GetValidFilename(info.Name).Trim();
if (info.ProductionYear.HasValue)
{
folderName += " (" + info.ProductionYear.Value.ToString(CultureInfo.InvariantCulture) + ")";
}
recordPath = Path.Combine(recordPath, folderName);
}
else if (info.IsSeries)
{
var customRecordingPath = config.SeriesRecordingPath;
var allowSubfolder = true;
if (!string.IsNullOrWhiteSpace(customRecordingPath))
{
allowSubfolder = string.Equals(customRecordingPath, recordPath, StringComparison.OrdinalIgnoreCase);
recordPath = customRecordingPath;
}
if (allowSubfolder && config.EnableRecordingSubfolders)
{
recordPath = Path.Combine(recordPath, "Series");
}
var folderName = _fileSystem.GetValidFilename(info.Name).Trim();
var folderNameWithYear = folderName;
if (info.ProductionYear.HasValue)
{
folderNameWithYear += " (" + info.ProductionYear.Value.ToString(CultureInfo.InvariantCulture) + ")";
}
if (Directory.Exists(Path.Combine(recordPath, folderName)))
{
recordPath = Path.Combine(recordPath, folderName);
}
else
{
recordPath = Path.Combine(recordPath, folderNameWithYear);
}
if (info.SeasonNumber.HasValue)
{
folderName = string.Format("Season {0}", info.SeasonNumber.Value.ToString(CultureInfo.InvariantCulture));
recordPath = Path.Combine(recordPath, folderName);
}
}
else if (info.IsKids)
{
if (config.EnableRecordingSubfolders)
{
recordPath = Path.Combine(recordPath, "Kids");
}
var folderName = _fileSystem.GetValidFilename(info.Name).Trim();
if (info.ProductionYear.HasValue)
{
folderName += " (" + info.ProductionYear.Value.ToString(CultureInfo.InvariantCulture) + ")";
}
recordPath = Path.Combine(recordPath, folderName);
}
else if (info.IsSports)
{
if (config.EnableRecordingSubfolders)
{
recordPath = Path.Combine(recordPath, "Sports");
}
recordPath = Path.Combine(recordPath, _fileSystem.GetValidFilename(info.Name).Trim());
}
else
{
if (config.EnableRecordingSubfolders)
{
recordPath = Path.Combine(recordPath, "Other");
}
recordPath = Path.Combine(recordPath, _fileSystem.GetValidFilename(info.Name).Trim());
}
var recordingFileName = _fileSystem.GetValidFilename(RecordingHelper.GetRecordingName(timer, info)).Trim() + ".ts";
return Path.Combine(recordPath, recordingFileName);
}
开发者ID:softworkz,项目名称:Emby,代码行数:99,代码来源:EmbyTV.cs
注:本文中的MediaBrowser.Controller.LiveTv.TimerInfo类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论