Skip to content
This repository has been archived by the owner on Dec 20, 2023. It is now read-only.

强化首页固定功能 #1098

Merged
merged 1 commit into from
Apr 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 8 additions & 43 deletions src/App/Controls/App/RootNavigationView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -181,71 +181,36 @@
<!-- 用于展示固定的内容 -->
<muxc:NavigationView.PaneCustomContent>
<StackPanel Spacing="4">
<StackPanel Spacing="4" Visibility="{x:Bind _accountViewModel.IsShowFixedPgc, Mode=OneWay}">
<muxc:NavigationViewItemHeader Content="{loc:LocaleLocator Name=FixedPgcs}" />
<muxc:ItemsRepeater ItemsSource="{x:Bind _accountViewModel.FixedPgcCollection}">
<StackPanel Spacing="4" Visibility="{x:Bind _accountViewModel.IsShowFixedItem, Mode=OneWay}">
<muxc:NavigationViewItemHeader Content="{loc:LocaleLocator Name=FixedContent}" />
<muxc:ItemsRepeater ItemsSource="{x:Bind _accountViewModel.FixedItemCollection}">
<muxc:ItemsRepeater.Layout>
<muxc:StackLayout />
</muxc:ItemsRepeater.Layout>
<muxc:ItemsRepeater.ItemTemplate>
<DataTemplate x:DataType="app:FixedPgc">
<DataTemplate x:DataType="app:FixedItem">
<Button
Margin="4,0"
Padding="12,8"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left"
Background="Transparent"
BorderThickness="0"
Click="OnFixedPgcClickAsync"
Click="OnFixedItemClickAsync"
DataContext="{x:Bind}"
ToolTipService.ToolTip="{x:Bind Name}">
ToolTipService.ToolTip="{x:Bind Title}">
<StackPanel Orientation="Horizontal" Spacing="12">
<local:CommonImageEx
Width="20"
Height="20"
Margin="-2,0,0,0"
VerticalAlignment="Center"
CornerRadius="10"
ImageUrl="{x:Bind CoverUrl}" />
ImageUrl="{x:Bind Cover}" />
<TextBlock
MaxWidth="180"
VerticalAlignment="Center"
Text="{x:Bind Name}"
TextTrimming="CharacterEllipsis" />
</StackPanel>
</Button>
</DataTemplate>
</muxc:ItemsRepeater.ItemTemplate>
</muxc:ItemsRepeater>
</StackPanel>
<StackPanel Spacing="4" Visibility="{x:Bind _accountViewModel.IsShowFixedPublisher, Mode=OneWay}">
<muxc:NavigationViewItemHeader Content="{loc:LocaleLocator Name=FixedPublishers}" />
<muxc:ItemsRepeater ItemsSource="{x:Bind _accountViewModel.FixedPublisherCollection}">
<muxc:ItemsRepeater.Layout>
<muxc:StackLayout />
</muxc:ItemsRepeater.Layout>
<muxc:ItemsRepeater.ItemTemplate>
<DataTemplate x:DataType="app:FixedPublisher">
<Button
Margin="4,0"
Padding="12,8"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left"
Background="Transparent"
BorderThickness="0"
Click="OnFixedPublisherClickAsync"
DataContext="{x:Bind}"
ToolTipService.ToolTip="{x:Bind UserName}">
<StackPanel Orientation="Horizontal" Spacing="12">
<muxc:PersonPicture
Width="20"
Height="20"
VerticalAlignment="Center"
DisplayName="{x:Bind UserName}"
ProfilePicture="{x:Bind AvatarPath}" />
<TextBlock
VerticalAlignment="Center"
Text="{x:Bind UserName}"
Text="{x:Bind Title}"
TextTrimming="CharacterEllipsis" />
</StackPanel>
</Button>
Expand Down
50 changes: 35 additions & 15 deletions src/App/Controls/App/RootNavigationView.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -276,25 +276,45 @@ private void OnMainFrameNavigated(object sender, Windows.UI.Xaml.Navigation.Navi
}
}

private async void OnFixedPublisherClickAsync(object sender, RoutedEventArgs e)
{
var context = (sender as FrameworkElement).DataContext as FixedPublisher;
await UserView.Instance.ShowAsync(Convert.ToInt32(context.UserId));
}
private void OnDynamicNavViewItemInvoked(Microsoft.UI.Xaml.Controls.NavigationView sender, Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs args)
=> DynamicModuleViewModel.Instance.IsVideo = args.InvokedItemContainer.Equals(VideoDynamicItem);

private void OnFixedPgcClickAsync(object sender, RoutedEventArgs e)
private async void OnFixedItemClickAsync(object sender, RoutedEventArgs e)
{
var context = (sender as FrameworkElement).DataContext as FixedPgc;
var record = new CurrentPlayingRecord("0", context.SeasonId, VideoType.Pgc)
var context = (sender as FrameworkElement).DataContext as FixedItem;
switch (context.Type)
{
Title = context.Name,
};
AppViewModel.Instance.OpenPlayer(record);
}
case Models.Enums.App.FixedType.Publisher:
await UserView.Instance.ShowAsync(Convert.ToInt32(context.Id));
break;
case Models.Enums.App.FixedType.Pgc:
{
var record = new CurrentPlayingRecord("0", Convert.ToInt32(context.Id), VideoType.Pgc)
{
Title = context.Title,
};
AppViewModel.Instance.OpenPlayer(record);
}

private void OnDynamicNavViewItemInvoked(Microsoft.UI.Xaml.Controls.NavigationView sender, Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs args)
{
DynamicModuleViewModel.Instance.IsVideo = args.InvokedItemContainer.Equals(VideoDynamicItem);
break;
case Models.Enums.App.FixedType.Video:
{
var record = new CurrentPlayingRecord(context.Id, 0, VideoType.Video);
AppViewModel.Instance.OpenPlayer(record);
}

break;

case Models.Enums.App.FixedType.Live:
{
var record = new CurrentPlayingRecord(context.Id, 0, VideoType.Live);
AppViewModel.Instance.OpenPlayer(record);
}

break;
default:
break;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -455,41 +455,41 @@ private async void CheckCurrentPlayerModeAsync()
|| _compactOverlayPlayModeButton == null
|| !_compactOverlayPlayModeButton.IsLoaded)
{
ViewModel.PlayerDisplayMode = PlayerDisplayMode.Default;
return;
}

switch (ViewModel.PlayerDisplayMode)
else
{
case PlayerDisplayMode.Default:
_fullWindowPlayModeButton.IsChecked = false;
_fullScreenPlayModeButton.IsChecked = false;
_compactOverlayPlayModeButton.IsChecked = false;
_backButton.Visibility = Visibility.Collapsed;
break;
case PlayerDisplayMode.FullWindow:
_fullWindowPlayModeButton.IsChecked = true;
_fullScreenPlayModeButton.IsChecked = false;
_compactOverlayPlayModeButton.IsChecked = false;
_backButton.Visibility = Visibility.Visible;
break;
case PlayerDisplayMode.FullScreen:
_fullWindowPlayModeButton.IsChecked = false;
_fullScreenPlayModeButton.IsChecked = true;
_compactOverlayPlayModeButton.IsChecked = false;
_backButton.Visibility = Visibility.Visible;
break;
case PlayerDisplayMode.CompactOverlay:
_fullWindowPlayModeButton.IsChecked = false;
_fullScreenPlayModeButton.IsChecked = false;
_compactOverlayPlayModeButton.IsChecked = true;
_backButton.Visibility = Visibility.Collapsed;
break;
default:
break;
switch (ViewModel.PlayerDisplayMode)
{
case PlayerDisplayMode.Default:
_fullWindowPlayModeButton.IsChecked = false;
_fullScreenPlayModeButton.IsChecked = false;
_compactOverlayPlayModeButton.IsChecked = false;
_backButton.Visibility = Visibility.Collapsed;
break;
case PlayerDisplayMode.FullWindow:
_fullWindowPlayModeButton.IsChecked = true;
_fullScreenPlayModeButton.IsChecked = false;
_compactOverlayPlayModeButton.IsChecked = false;
_backButton.Visibility = Visibility.Visible;
break;
case PlayerDisplayMode.FullScreen:
_fullWindowPlayModeButton.IsChecked = false;
_fullScreenPlayModeButton.IsChecked = true;
_compactOverlayPlayModeButton.IsChecked = false;
_backButton.Visibility = Visibility.Visible;
break;
case PlayerDisplayMode.CompactOverlay:
_fullWindowPlayModeButton.IsChecked = false;
_fullScreenPlayModeButton.IsChecked = false;
_compactOverlayPlayModeButton.IsChecked = true;
_backButton.Visibility = Visibility.Collapsed;
break;
default:
break;
}
}

_playPauseButton.Focus(FocusState.Programmatic);
_playPauseButton?.Focus(FocusState.Programmatic);
_backToDefaultButton.Visibility = ViewModel.PlayerDisplayMode != PlayerDisplayMode.Default
? Visibility.Visible
: Visibility.Collapsed;
Expand Down
60 changes: 30 additions & 30 deletions src/App/Controls/Player/PlayerDashboard.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -175,16 +175,12 @@
Grid.Row="1"
HorizontalAlignment="Stretch"
Spacing="4">

<Grid
x:Name="PgcControlContainer"
Margin="0,0,0,4"
HorizontalAlignment="Stretch"
ColumnSpacing="8"
Visibility="{x:Bind ViewModel.IsPgc, Mode=OneWay}">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button
x:Name="PgcDetailButton"
Style="{StaticResource AccentButtonStyle}"
Expand All @@ -195,20 +191,6 @@
Symbol="TextBulletListTree16"
Text="{loc:LocaleLocator Name=Detail}" />
</Button>
<Button
Grid.Column="1"
Padding="8"
HorizontalAlignment="Stretch"
Click="OnFixButtonClickAsync"
Content="{loc:LocaleLocator Name=FixPgc}"
Visibility="{x:Bind ViewModel.IsPgcFixed, Mode=OneWay, Converter={StaticResource BoolToVisibilityReverseConverter}}" />
<Button
Grid.Column="1"
Padding="8"
HorizontalAlignment="Stretch"
Click="OnFixButtonClickAsync"
Content="{loc:LocaleLocator Name=UnfixPgc}"
Visibility="{x:Bind ViewModel.IsPgcFixed, Mode=OneWay}" />
</Grid>

<StackPanel
Expand Down Expand Up @@ -237,17 +219,35 @@
Text="{x:Bind ViewModel.LivePartition, Mode=OneWay}" />
</StackPanel>

<Button
x:Name="ShareButton"
MinWidth="120"
Margin="0,0,0,8"
HorizontalAlignment="Stretch"
Click="OnShareButtonClick">
<local:IconTextBlock
Foreground="{ThemeResource TextFillColorPrimaryBrush}"
Symbol="Share16"
Text="{loc:LocaleLocator Name=Share}" />
</Button>
<Grid Margin="0,0,0,8" ColumnSpacing="8">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button
x:Name="ShareButton"
HorizontalAlignment="Stretch"
Click="OnShareButtonClick">
<local:IconTextBlock
Foreground="{ThemeResource TextFillColorPrimaryBrush}"
Symbol="Share16"
Text="{loc:LocaleLocator Name=Share}" />
</Button>
<Button
Grid.Column="1"
Padding="8"
HorizontalAlignment="Stretch"
Click="OnFixButtonClickAsync"
Content="{loc:LocaleLocator Name=FixContent}"
Visibility="{x:Bind ViewModel.IsContentFixed, Mode=OneWay, Converter={StaticResource BoolToVisibilityReverseConverter}}" />
<Button
Grid.Column="1"
Padding="8"
HorizontalAlignment="Stretch"
Click="OnFixButtonClickAsync"
Content="{loc:LocaleLocator Name=UnfixContent}"
Visibility="{x:Bind ViewModel.IsContentFixed, Mode=OneWay}" />
</Grid>

<Button
x:Name="CreateDownloadCommandButton"
Expand Down
12 changes: 12 additions & 0 deletions src/App/Resources/Strings/zh-CN/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,12 @@ BV号以 BV 开头,是一串英文数字混合的编号, 如 BV1JL4y1875w</v
<value>点击标签后,您将前往搜索页面搜索标签内容,这会中断当前正在播放的视频,是否确认?
点击确认后,下次点击标签将不会弹出该提示</value>
</data>
<data name="FixContent" xml:space="preserve">
<value>固定内容</value>
</data>
<data name="FixedContent" xml:space="preserve">
<value>固定的内容</value>
</data>
<data name="FixedPgcs" xml:space="preserve">
<value>固定的剧集</value>
</data>
Expand Down Expand Up @@ -1361,6 +1367,9 @@ BV号以 BV 开头,是一串英文数字混合的编号, 如 BV1JL4y1875w</v
<data name="Small" xml:space="preserve">
<value>小号</value>
</data>
<data name="SomeoneLiveRoom" xml:space="preserve">
<value>{0}的直播间</value>
</data>
<data name="SortByDanmaku" xml:space="preserve">
<value>弹幕最多</value>
</data>
Expand Down Expand Up @@ -1496,6 +1505,9 @@ BV号以 BV 开头,是一串英文数字混合的编号, 如 BV1JL4y1875w</v
<data name="UnFavoriteWarning" xml:space="preserve">
<value>是否不再关注该收藏夹?</value>
</data>
<data name="UnfixContent" xml:space="preserve">
<value>取消固定</value>
</data>
<data name="UnfixPgc" xml:space="preserve">
<value>取消固定</value>
</data>
Expand Down
2 changes: 1 addition & 1 deletion src/Models/Models.App/Constants/AppConstants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public static class AppConstants
public const string ViewLaterSection = "ViewLater";

public const string LastOpenVideoFileName = "LastOpenVideo.json";
public const string FixedPublisherFolderName = "Fixed publisher";
public const string FixedFolderName = "Fixed";
public const string FixedPgcFolderName = "Fixed pgc";
public const string FixedContentFileName = "User-{0}.json";

Expand Down
39 changes: 39 additions & 0 deletions src/Models/Models.App/Other/FixedItem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Copyright (c) Richasy. All rights reserved.

using System.Collections.Generic;
using Richasy.Bili.Models.Enums.App;

namespace Richasy.Bili.Models.App
{
/// <summary>
/// 固定在首页的条目.
/// </summary>
public class FixedItem
{
/// <summary>
/// 封面.
/// </summary>
public string Cover { get; set; }

/// <summary>
/// 标题.
/// </summary>
public string Title { get; set; }

/// <summary>
/// 标识符.
/// </summary>
public string Id { get; set; }

/// <summary>
/// 类型.
/// </summary>
public FixedType Type { get; set; }

/// <inheritdoc/>
public override bool Equals(object obj) => obj is FixedItem item && Id == item.Id;

/// <inheritdoc/>
public override int GetHashCode() => 2108858624 + EqualityComparer<string>.Default.GetHashCode(Id);
}
}
Loading