Пример #1
0
        /// <summary>
        /// Erstellt eine neue Beschreibung aus dem Aufzeichnungsplan.
        /// </summary>
        /// <param name="plan">Die Planung der Aufzeichnung.</param>
        /// <param name="context">Die aktuelle Analyseumgebung.</param>
        /// <param name="server">Der zugehörige Dienst.</param>
        /// <returns>Die gewünschte Beschreibung.</returns>
        public static PlanCurrent Create(IScheduleInformation plan, PlanContext context, VCRServer server)
        {
            // Attach to the definition
            var definition = (IScheduleDefinition <VCRSchedule>)plan.Definition;
            var job        = context.TryFindJob(definition.UniqueIdentifier);
            var schedule   = (job == null) ? null : job[definition.UniqueIdentifier];
            var source     = (schedule == null) ? null : (schedule.Source ?? job.Source);

            // Create
            var planned =
                new PlanCurrent
            {
                Identifier  = (schedule == null) ? null : ServerRuntime.GetUniqueWebId(job, schedule),
                ProfileName = plan.Resource.Name,
                Duration    = plan.Time.Duration,
                StartTime   = plan.Time.Start,
                IsLate      = plan.StartsLate,
                SizeHint    = string.Empty,
                Name        = definition.Name,
                m_source    = source,
                Files       = _NoFiles,
                Index       = -1,
            };

            // Finish
            planned.Complete(server);

            // Report
            return(planned);
        }
Пример #2
0
        /// <summary>
        /// Erstellt eine Beschreibung zu einer einzelnen Aufzeichnung auf einem Gerät.
        /// </summary>
        /// <param name="active">Beschreibt die gesamte Aufzeichnung.</param>
        /// <param name="stream">Die zu verwendende Teilaufzeichnung.</param>
        /// <param name="streamIndex">Die laufende Nummer dieses Datenstroms.</param>
        /// <param name="server">Der zugehörige Dienst.</param>
        /// <returns>Die gewünschte Beschreibung.</returns>
        private static IEnumerable <PlanCurrent> Create(FullInfo active, StreamInfo stream, int streamIndex, VCRServer server)
        {
            // Static data
            var recording   = active.Recording;
            var profileName = recording.Source.ProfileName;
            var sizeHint    = GetSizeHint(recording.TotalSize) + " (Gerät)";

            // Process all - beginning with VCR.NET 4.1 there is only one schedule per stream
            foreach (var scheduleInfo in stream.Schedules)
            {
                // Try to locate the context
                var job      = string.IsNullOrEmpty(scheduleInfo.JobUniqueID) ? null : server.JobManager[new Guid(scheduleInfo.JobUniqueID)];
                var schedule = ((job == null) || string.IsNullOrEmpty(scheduleInfo.ScheduleUniqueID)) ? null : job[new Guid(scheduleInfo.ScheduleUniqueID)];

                // Create
                var start   = RoundToSecond(scheduleInfo.StartsAt);
                var end     = RoundToSecond(scheduleInfo.EndsAt);
                var current =
                    new PlanCurrent
                {
                    Identifier     = (schedule == null) ? null : ServerRuntime.GetUniqueWebId(job, schedule),
                    PlanIdentifier = scheduleInfo.ScheduleUniqueID,
                    Files          = scheduleInfo.Files ?? _NoFiles,
                    StreamTarget   = stream.StreamsTo,
                    m_source       = scheduleInfo.Source,
                    ProfileName    = profileName,
                    Name           = scheduleInfo.Name,
                    Duration       = end - start,
                    Index          = streamIndex,
                    SizeHint       = sizeHint,
                    StartTime      = start,
                };

                // Finish
                current.Complete(server);

                // Report
                yield return(current);
            }
        }
Пример #3
0
        /// <summary>
        /// Erstellt eine neue Liste von Beschreibungen für eine aktive Aufzeichnung.
        /// </summary>
        /// <param name="active">Die Daten zur aktiven Aufzeichnung.</param>
        /// <param name="server">Der zugehörige Dienst.</param>
        /// <returns>Die gewünschten Beschreibungen.</returns>
        public static PlanCurrent[] Create(FullInfo active, VCRServer server)
        {
            // Validate
            if (active == null)
            {
                throw new ArgumentNullException(nameof(active));
            }

            // Validate
            var recording = active.Recording;

            if (recording == null)
            {
                throw new ArgumentNullException("recording");
            }

            // Multiple recordings
            var streams = active.Streams;

            if (streams != null)
            {
                if (streams.Count > 0)
                {
                    return(streams.SelectMany((stream, index) => Create(active, stream, index, server)).ToArray());
                }
            }

            // Single recording - typically a task
            var start      = RoundToSecond(active.Recording.PhysicalStart.GetValueOrDefault(DateTime.UtcNow));
            var end        = RoundToSecond(recording.EndsAt);
            var source     = recording.Source;
            var sourceName = source.DisplayName;

            // Create
            var current =
                new PlanCurrent
            {
                PlanIdentifier = recording.ScheduleUniqueID.Value.ToString("N"),
                ProfileName    = source.ProfileName,
                Duration       = end - start,
                Name           = recording.Name,
                m_source       = source,
                StartTime      = start,
                Files          = _NoFiles,
                IsLate         = false,
                Index          = -1,
            };

            // Finish
            if (VCRJob.ProgramGuideName.Equals(sourceName))
            {
                current.SizeHint = $"{recording.TotalSize:N0} Einträge";
            }
            else if (VCRJob.SourceScanName.Equals(sourceName))
            {
                current.SizeHint = $"{recording.TotalSize:N0} Quellen";
            }
            else if (VCRJob.ZappingName.Equals(sourceName))
            {
                current.SizeHint = GetSizeHint(recording.TotalSize);
            }
            else
            {
                current.Complete(server);
            }

            // Report
            return(new[] { current });
        }
Пример #4
0
        /// <summary>
        /// Erstellt eine neue Beschreibung aus dem Aufzeichnungsplan.
        /// </summary>
        /// <param name="plan">Die Planung der Aufzeichnung.</param>
        /// <param name="context">Die aktuelle Analyseumgebung.</param>
        /// <param name="server">Der zugehörige Dienst.</param>
        /// <returns>Die gewünschte Beschreibung.</returns>
        public static PlanCurrent Create( IScheduleInformation plan, PlanContext context, VCRServer server )
        {
            // Attach to the definition
            var definition = (IScheduleDefinition<VCRSchedule>) plan.Definition;
            var job = context.TryFindJob( definition.UniqueIdentifier );
            var schedule = (job == null) ? null : job[definition.UniqueIdentifier];
            var source = (schedule == null) ? null : (schedule.Source ?? job.Source);

            // Create
            var planned =
                new PlanCurrent
                {
                    Identifier = (schedule == null) ? null : ServerRuntime.GetUniqueWebId( job, schedule ),
                    ProfileName = plan.Resource.Name,
                    Duration = plan.Time.Duration,
                    StartTime = plan.Time.Start,
                    IsLate = plan.StartsLate,
                    SizeHint = string.Empty,
                    Name = definition.Name,
                    m_source = source,
                    Files = _NoFiles,
                    Index = -1,
                };

            // Finish
            planned.Complete( server );

            // Report
            return planned;
        }
Пример #5
0
        /// <summary>
        /// Erstellt eine Beschreibung zu einer einzelnen Aufzeichnung auf einem Gerät.
        /// </summary>
        /// <param name="active">Beschreibt die gesamte Aufzeichnung.</param>
        /// <param name="stream">Die zu verwendende Teilaufzeichnung.</param>
        /// <param name="streamIndex">Die laufende Nummer dieses Datenstroms.</param>
        /// <param name="server">Der zugehörige Dienst.</param>
        /// <returns>Die gewünschte Beschreibung.</returns>
        private static IEnumerable<PlanCurrent> Create( FullInfo active, StreamInfo stream, int streamIndex, VCRServer server )
        {
            // Static data
            var recording = active.Recording;
            var profileName = recording.Source.ProfileName;
            var sizeHint = GetSizeHint( recording.TotalSize ) + " (Gerät)";

            // Process all - beginning with VCR.NET 4.1 there is only one schedule per stream
            foreach (var scheduleInfo in stream.Schedules)
            {
                // Try to locate the context
                var job = string.IsNullOrEmpty( scheduleInfo.JobUniqueID ) ? null : server.JobManager[new Guid( scheduleInfo.JobUniqueID )];
                var schedule = ((job == null) || string.IsNullOrEmpty( scheduleInfo.ScheduleUniqueID )) ? null : job[new Guid( scheduleInfo.ScheduleUniqueID )];

                // Create
                var start = RoundToSecond( scheduleInfo.StartsAt );
                var end = RoundToSecond( scheduleInfo.EndsAt );
                var current =
                    new PlanCurrent
                    {
                        Identifier = (schedule == null) ? null : ServerRuntime.GetUniqueWebId( job, schedule ),
                        PlanIdentifier = scheduleInfo.ScheduleUniqueID,
                        Files = scheduleInfo.Files ?? _NoFiles,
                        StreamTarget = stream.StreamsTo,
                        m_source = scheduleInfo.Source,
                        ProfileName = profileName,
                        Name = scheduleInfo.Name,
                        Duration = end - start,
                        Index = streamIndex,
                        SizeHint = sizeHint,
                        StartTime = start,
                    };

                // Finish
                current.Complete( server );

                // Report
                yield return current;
            }
        }
Пример #6
0
        /// <summary>
        /// Erstellt eine neue Liste von Beschreibungen für eine aktive Aufzeichnung.
        /// </summary>
        /// <param name="active">Die Daten zur aktiven Aufzeichnung.</param>
        /// <param name="server">Der zugehörige Dienst.</param>
        /// <returns>Die gewünschten Beschreibungen.</returns>
        public static PlanCurrent[] Create( FullInfo active, VCRServer server )
        {
            // Validate
            if (active == null)
                throw new ArgumentNullException( "active" );

            // Validate
            var recording = active.Recording;
            if (recording == null)
                throw new ArgumentNullException( "recording" );

            // Multiple recordings
            var streams = active.Streams;
            if (streams != null)
                if (streams.Count > 0)
                    return streams.SelectMany( ( stream, index ) => Create( active, stream, index, server ) ).ToArray();

            // Single recording - typically a task
            var start = RoundToSecond( active.Recording.PhysicalStart.GetValueOrDefault( DateTime.UtcNow ) );
            var end = RoundToSecond( recording.EndsAt );
            var source = recording.Source;
            var sourceName = source.DisplayName;

            // Create
            var current =
                new PlanCurrent
                {
                    PlanIdentifier = recording.ScheduleUniqueID.Value.ToString( "N" ),
                    ProfileName = source.ProfileName,
                    Duration = end - start,
                    Name = recording.Name,
                    m_source = source,
                    StartTime = start,
                    Files = _NoFiles,
                    IsLate = false,
                    Index = -1,
                };

            // Finish            
            if (VCRJob.ProgramGuideName.Equals( sourceName ))
                current.SizeHint = $"{recording.TotalSize:N0} Einträge";
            else if (VCRJob.SourceScanName.Equals( sourceName ))
                current.SizeHint = $"{recording.TotalSize:N0} Quellen";
            else if (VCRJob.ZappingName.Equals( sourceName ))
                current.SizeHint = GetSizeHint( recording.TotalSize );
            else
                current.Complete( server );

            // Report
            return new[] { current };
        }