/// <summary> /// Ermittelt das Geräteprofile mit der Senderliste für eine Quellinformation. /// </summary> /// <param name="selection">Die betroffene Quellinformation.</param> /// <returns>Das zugehörige Profil mit der Senderliste, das durchaus von <see cref="GetProfile"/> /// abweichen kann.</returns> /// <exception cref="ArgumentNullException">Es wurde keine Quellinformation angegeben.</exception> public static Profile GetLeafProfile(this SourceSelection selection) { // Forward Profile profile = selection.GetProfile(); // Check result if (null == profile) { return(null); } else { return(profile.LeafProfile); } }
/// <summary> /// Beginnt mit dem Auslesen der Quelldaten. /// </summary> /// <param name="source">Alle Informationen zur Quelle.</param> /// <returns>Die Hintergrundaufgabe zum Auslesen der Quelldaten.</returns> public static CancellableTask <SourceInformation> GetSourceInformationAsync(this SourceSelection source) { return(source.GetHardware().GetSourceInformationAsync(source.Source, source.GetProfile())); }
/// <summary> /// Füllt die Informationen über die aktiven Quellen. /// </summary> /// <param name="streams">Die Liste der aktiven Quellen.</param> /// <param name="selection">Die aktive Quellgruppe.</param> private void LoadStreams( IEnumerable<StreamInformation> streams, SourceSelection selection ) { // Reset lstStreams.Items.Clear(); // Find the profile Profile profile = (null == selection) ? null : selection.GetProfile(); // Process all foreach (StreamInformation stream in streams) { // Create the item ListViewItem item = lstStreams.Items.Add( stream.Source.ToString() ); // No profile if (null != profile) foreach (SourceSelection match in profile.FindSource( stream.Source )) { // Check for location match if (null != selection.Location) if (!Equals( selection.Location, match.Location )) continue; // Check for group match if (null != selection.Group) if (!Equals( selection.Group, match.Group )) continue; // Update name item.Text = match.DisplayName; // Skip the rest break; } // Add additional data item.SubItems.Add( (null == stream.Streams) ? null : string.Join( ", ", stream.Streams.MP2Tracks.Languages.ToArray() ) ); item.SubItems.Add( (null == stream.Streams) ? null : string.Join( ", ", stream.Streams.AC3Tracks.Languages.ToArray() ) ); item.SubItems.Add( (null == stream.Streams) ? null : string.Join( ", ", stream.Streams.SubTitles.Languages.ToArray() ) ); item.SubItems.Add( (null == stream.Streams) ? null : (stream.Streams.Videotext ? "x" : null) ); item.SubItems.Add( (null == stream.Streams) ? null : (stream.Streams.ProgramGuide ? "x" : null) ); item.SubItems.Add( string.Format( "{0} ({1})", stream.BytesReceived, stream.CurrentAudioVideoBytes ) ); item.SubItems.Add( stream.IsDecrypting ? "x" : null ); item.SubItems.Add( stream.StreamTarget ); item.SubItems.Add( stream.TargetPath ); item.SubItems.Add( stream.ConsumerCount.ToString() ); item.SubItems.Add( string.Join( ", ", stream.AllFiles.Select( f => string.Format( "{0} ({1})", f.FilePath, f.VideoType ) ).ToArray() ) ); } // Set columns foreach (ColumnHeader column in lstStreams.Columns) { // First column.AutoResize( ColumnHeaderAutoResizeStyle.ColumnContent ); // Remember int w = column.Width; // Second column.AutoResize( ColumnHeaderAutoResizeStyle.HeaderSize ); // Both column.Width = Math.Max( column.Width, w ); } }