Archived
1
0

Added support of livestreams. Chat messages avatars added. Formatting live chat messages added. Few player fixes

Related Work Items: #183, #184
This commit is contained in:
Michael Gordeev
2019-01-01 15:01:27 +03:00
parent df6d74da5c
commit cb5c3c7c7f
5 changed files with 37 additions and 36 deletions
+2 -1
View File
@@ -36,6 +36,7 @@
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" Margin="5,0">
<PersonPicture Height="20" ProfilePicture="{Binding Path=Avatar}"/>
<FontIcon Glyph="&#xEC61;" ToolTipService.ToolTip="Verified" Margin="2,0" Visibility="{Binding Path=IsVerified}"/>
<FontIcon Glyph="&#xEC1B;" ToolTipService.ToolTip="Moderator" Margin="2,0" Visibility="{Binding Path=IsModerator}"/>
<FontIcon Glyph="&#xECA7;" ToolTipService.ToolTip="Chat owner" Margin="2,0" Visibility="{Binding Path=IsOwner}"/>
@@ -45,7 +46,7 @@
<HyperlinkButton Content="{Binding Path=Author}" Tag="{Binding Path=ChannelId}" Grid.Column="1" Margin="0,-6,0,0" FontWeight="Bold" Click="HyperlinkButton_Click"/>
<TextBlock Text=":"/>
</StackPanel>
<TextBlock Grid.Column="2" IsTextSelectionEnabled="True" VerticalAlignment="Top" TextWrapping="WrapWholeWords" Text="{Binding Path=Message}"/>
<GroupItem Content="{Binding Path=Message}" Grid.Column="2"/>
</Grid>
</Border>
</DataTemplate>
+19 -26
View File
@@ -10,35 +10,28 @@ namespace FoxTube.Controls
{
public class ChatMessage
{
public string Author
public string Author => message.AuthorDetails.DisplayName;
public TextBlock Message
{
get { return message.AuthorDetails.DisplayName; }
}
public string Message
{
get { return message.Snippet.DisplayMessage; }
}
public string ChannelId
{
get { return message.AuthorDetails.ChannelId; }
get
{
TextBlock block = new TextBlock()
{
IsTextSelectionEnabled = true,
VerticalAlignment = VerticalAlignment.Top,
TextWrapping = TextWrapping.WrapWholeWords
};
Methods.FormatText(ref block, message.Snippet.DisplayMessage);
return block;
}
}
public string ChannelId => message.AuthorDetails.ChannelId;
public string Avatar => message.AuthorDetails.ProfileImageUrl;
public Visibility IsVerified
{
get { return message.AuthorDetails.IsVerified.Value? Visibility.Visible : Visibility.Collapsed; }
}
public Visibility IsOwner
{
get { return message.AuthorDetails.IsChatOwner.Value ? Visibility.Visible : Visibility.Collapsed; }
}
public Visibility IsSponsor
{
get { return message.AuthorDetails.IsChatSponsor.Value ? Visibility.Visible : Visibility.Collapsed; }
}
public Visibility IsModerator
{
get { return message.AuthorDetails.IsChatModerator.Value ? Visibility.Visible : Visibility.Collapsed; }
}
public Visibility IsVerified => message.AuthorDetails.IsVerified.Value ? Visibility.Visible : Visibility.Collapsed;
public Visibility IsOwner => message.AuthorDetails.IsChatOwner.Value ? Visibility.Visible : Visibility.Collapsed;
public Visibility IsSponsor => message.AuthorDetails.IsChatSponsor.Value ? Visibility.Visible : Visibility.Collapsed;
public Visibility IsModerator => message.AuthorDetails.IsChatModerator.Value ? Visibility.Visible : Visibility.Collapsed;
public Brush Background
{
+3 -3
View File
@@ -99,7 +99,7 @@
<Button Name="gotoLive" Visibility="Collapsed" Click="GotoLive_Click" Background="Transparent" Foreground="White" Height="50" FontSize="25" ToolTipService.ToolTip="Go to live broadcast">
<StackPanel Orientation="Horizontal">
<FontIcon Glyph="&#xE91F;" Foreground="Red"/>
<TextBlock Text="Live" Margin="5,0,0,5"/>
<TextBlock Text="Live" Margin="5,0,0,0" FontSize="15" VerticalAlignment="Center"/>
</StackPanel>
</Button>
</StackPanel>
@@ -114,7 +114,7 @@
</Grid>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<TextBlock Text="1:12:32" Name="liveElapsed" Visibility="Collapsed" FontSize="20" VerticalAlignment="Center" ToolTipService.ToolTip="Elapsed time since stream start"/>
<TextBlock Text="1:12:32" Name="liveElapsed" Visibility="Collapsed" Margin="10,0" FontSize="20" VerticalAlignment="Center" ToolTipService.ToolTip="Elapsed time since stream start"/>
<StackPanel Orientation="Horizontal" Name="rewindPanel">
<Button Click="back10_Click" Name="back10" Background="Transparent" FontFamily="Segoe MDL2 Assets" Content="&#xED3C;" Foreground="White" Width="50" Height="50" FontSize="25" ToolTipService.ToolTip="Skip back for 10 seconds"/>
<Button Click="fwd30_Click" Name="fwd30" Background="Transparent" FontFamily="Segoe MDL2 Assets" Content="&#xED3D;" Foreground="White" Width="50" Height="50" FontSize="25" ToolTipService.ToolTip="Skip forward for 30 seconds"/>
@@ -132,7 +132,7 @@
</Flyout>
</Button.Flyout>
</Button>
<Button Background="Transparent" FontFamily="Segoe MDL2 Assets" Content="&#xE713;" Foreground="White" Width="50" Height="50" FontSize="25" ToolTipService.ToolTip="Video quality">
<Button Name="qualityBtn" Background="Transparent" FontFamily="Segoe MDL2 Assets" Content="&#xE713;" Foreground="White" Width="50" Height="50" FontSize="25" ToolTipService.ToolTip="Video quality">
<Button.Flyout>
<Flyout>
<ComboBox Width="225" Header="Quality" Name="quality" SelectionChanged="quality_SelectionChanged"/>
+12 -6
View File
@@ -217,18 +217,21 @@ namespace FoxTube
}
}
public void LoadStream()
public async void LoadStream()
{
InitializeContols();
seekPanel.Visibility = Visibility.Collapsed;
rewindPanel.Visibility = Visibility.Collapsed;
captions.Visibility = Visibility.Collapsed;
captionsBtn.Visibility = Visibility.Collapsed;
qualityBtn.Visibility = Visibility.Collapsed;
gotoLive.Visibility = Visibility.Visible;
liveElapsed.Visibility = Visibility.Visible;
timer.Tick += UpdateLive;
//TODO: Set up a stream
timer.Start();
streamInfo = await new YoutubeClient().GetVideoMediaStreamInfosAsync(videoId);
videoPlayer.Source = MediaSource.CreateFromUri(streamInfo.HlsLiveStreamUrl.ToUri());
}
public async void LoadVideo()
@@ -284,7 +287,7 @@ namespace FoxTube
public void UpdateLive(object sender, object e)
{
liveElapsed.Text = $"{DateTime.Now - item.LiveStreamingDetails.ActualStartTime:hh\\:mm\\:ss}";
}
public async void UpdateSeek(MediaTimelineController sender, object e)
@@ -699,6 +702,9 @@ namespace FoxTube
systemControls.IsEnabled = false;
pointerCaptured = false;
Elapsed(this, null);
controller.Pause();
videoPlayer.Dispose();
audioPlayer?.Dispose();
Methods.MainPage.CloseVideo();
}
@@ -796,7 +802,7 @@ namespace FoxTube
private void GotoLive_Click(object sender, RoutedEventArgs e)
{
controller.Position = controller.Duration.Value.Subtract(TimeSpan.FromMilliseconds(100));
}
}
}
+1
View File
@@ -273,6 +273,7 @@ namespace FoxTube.Pages
{
commentsPlaceholder.Header = "Chat";
commentsPlaceholder.Content = new Chat(item.LiveStreamingDetails.ActiveLiveChatId);
pivot.SelectedItem = commentsPlaceholder;
}
download.Visibility = Visibility.Collapsed;
}