infobar errors

This commit is contained in:
2024-03-09 21:53:30 +01:00
Unverified
parent 760079f26e
commit cd74725561
4 changed files with 158 additions and 148 deletions

View File

@@ -117,6 +117,9 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="ErrorInfoBar.Title" xml:space="preserve">
<value>Error</value>
</data>
<data name="OptionBarDownloadAll.Label" xml:space="preserve"> <data name="OptionBarDownloadAll.Label" xml:space="preserve">
<value>Download all</value> <value>Download all</value>
</data> </data>

View File

@@ -23,13 +23,6 @@ namespace VDownload.Core.ViewModels.Home
{ {
#region ENUMS #region ENUMS
public enum OptionBarMessageIconType
{
None,
ProgressRing,
Error
}
public enum OptionBarContentType public enum OptionBarContentType
{ {
None, None,
@@ -80,6 +73,11 @@ namespace VDownload.Core.ViewModels.Home
[ObservableProperty] [ObservableProperty]
private Type _mainContent; private Type _mainContent;
[ObservableProperty]
private string _optionBarError;
[ObservableProperty]
private bool _optionBarIsErrorOpened;
[ObservableProperty] [ObservableProperty]
private OptionBarContentType _optionBarContent; private OptionBarContentType _optionBarContent;
@@ -88,7 +86,7 @@ namespace VDownload.Core.ViewModels.Home
private string _optionBarMessage; private string _optionBarMessage;
[ObservableProperty] [ObservableProperty]
private OptionBarMessageIconType _optionBarMessageIcon; private bool _optionBarLoading;
[ObservableProperty] [ObservableProperty]
private bool _optionBarLoadSubscriptionButtonChecked; private bool _optionBarLoadSubscriptionButtonChecked;
@@ -149,8 +147,10 @@ namespace VDownload.Core.ViewModels.Home
MainContent = _downloadsView; MainContent = _downloadsView;
OptionBarContent = OptionBarContentType.None; OptionBarContent = OptionBarContentType.None;
OptionBarMessageIcon = OptionBarMessageIconType.None; OptionBarLoading = false;
OptionBarMessage = null; OptionBarMessage = null;
OptionBarError = null;
OptionBarIsErrorOpened = true;
OptionBarLoadSubscriptionButtonChecked = false; OptionBarLoadSubscriptionButtonChecked = false;
OptionBarVideoSearchButtonChecked = false; OptionBarVideoSearchButtonChecked = false;
OptionBarPlaylistSearchButtonChecked = false; OptionBarPlaylistSearchButtonChecked = false;
@@ -164,7 +164,7 @@ namespace VDownload.Core.ViewModels.Home
public async Task LoadFromSubscription() public async Task LoadFromSubscription()
{ {
MainContent = _downloadsView; MainContent = _downloadsView;
OptionBarMessageIcon = OptionBarMessageIconType.None; OptionBarLoading = false;
OptionBarMessage = null; OptionBarMessage = null;
if (OptionBarLoadSubscriptionButtonChecked) if (OptionBarLoadSubscriptionButtonChecked)
@@ -174,7 +174,7 @@ namespace VDownload.Core.ViewModels.Home
OptionBarPlaylistSearchButtonChecked = false; OptionBarPlaylistSearchButtonChecked = false;
OptionBarSearchNotPending = false; OptionBarSearchNotPending = false;
OptionBarMessageIcon = OptionBarMessageIconType.ProgressRing; OptionBarLoading = true;
OptionBarMessage = _stringResourcesService.HomeViewResources.Get("OptionBarMessageLoading"); OptionBarMessage = _stringResourcesService.HomeViewResources.Get("OptionBarMessageLoading");
SubscriptionsVideoList subList = new SubscriptionsVideoList { Name = _stringResourcesService.CommonResources.Get("SubscriptionVideoListName") }; SubscriptionsVideoList subList = new SubscriptionsVideoList { Name = _stringResourcesService.CommonResources.Get("SubscriptionVideoListName") };
@@ -217,7 +217,7 @@ namespace VDownload.Core.ViewModels.Home
} }
OptionBarSearchNotPending = true; OptionBarSearchNotPending = true;
OptionBarMessageIcon = OptionBarMessageIconType.None; OptionBarLoading = false;
} }
} }
@@ -225,7 +225,7 @@ namespace VDownload.Core.ViewModels.Home
public void VideoSearchShow() public void VideoSearchShow()
{ {
OptionBarSearchNotPending = true; OptionBarSearchNotPending = true;
OptionBarMessageIcon = OptionBarMessageIconType.None; OptionBarLoading = false;
OptionBarMessage = null; OptionBarMessage = null;
MainContent = _downloadsView; MainContent = _downloadsView;
@@ -245,7 +245,7 @@ namespace VDownload.Core.ViewModels.Home
public void PlaylistSearchShow() public void PlaylistSearchShow()
{ {
OptionBarSearchNotPending = true; OptionBarSearchNotPending = true;
OptionBarMessageIcon = OptionBarMessageIconType.None; OptionBarLoading = false;
OptionBarMessage = null; OptionBarMessage = null;
MainContent = _downloadsView; MainContent = _downloadsView;
@@ -265,7 +265,7 @@ namespace VDownload.Core.ViewModels.Home
public async Task VideoSearchStart() public async Task VideoSearchStart()
{ {
OptionBarSearchNotPending = false; OptionBarSearchNotPending = false;
OptionBarMessageIcon = OptionBarMessageIconType.ProgressRing; OptionBarLoading = true;
OptionBarMessage = _stringResourcesService.HomeViewResources.Get("OptionBarMessageLoading"); OptionBarMessage = _stringResourcesService.HomeViewResources.Get("OptionBarMessageLoading");
Video video; Video video;
@@ -275,9 +275,10 @@ namespace VDownload.Core.ViewModels.Home
} }
catch (MediaSearchException ex) catch (MediaSearchException ex)
{ {
OptionBarMessageIcon = OptionBarMessageIconType.Error; OptionBarError = _stringResourcesService.SearchResources.Get(ex.StringCode);
OptionBarMessage = _stringResourcesService.SearchResources.Get(ex.StringCode);
OptionBarSearchNotPending = true; OptionBarSearchNotPending = true;
OptionBarLoading = false;
OptionBarMessage = null;
return; return;
} }
@@ -286,7 +287,7 @@ namespace VDownload.Core.ViewModels.Home
MainContent = _videoView; MainContent = _videoView;
OptionBarSearchNotPending = true; OptionBarSearchNotPending = true;
OptionBarMessageIcon = OptionBarMessageIconType.None; OptionBarLoading = false;
OptionBarMessage = null; OptionBarMessage = null;
} }
@@ -294,7 +295,7 @@ namespace VDownload.Core.ViewModels.Home
public async Task PlaylistSearchStart() public async Task PlaylistSearchStart()
{ {
OptionBarSearchNotPending = false; OptionBarSearchNotPending = false;
OptionBarMessageIcon = OptionBarMessageIconType.ProgressRing; OptionBarLoading = true;
OptionBarMessage = _stringResourcesService.HomeViewResources.Get("OptionBarMessageLoading"); OptionBarMessage = _stringResourcesService.HomeViewResources.Get("OptionBarMessageLoading");
Playlist playlist; Playlist playlist;
@@ -304,9 +305,10 @@ namespace VDownload.Core.ViewModels.Home
} }
catch (MediaSearchException ex) catch (MediaSearchException ex)
{ {
OptionBarMessageIcon = OptionBarMessageIconType.Error; OptionBarError = _stringResourcesService.SearchResources.Get(ex.StringCode);
OptionBarMessage = _stringResourcesService.SearchResources.Get(ex.StringCode);
OptionBarSearchNotPending = true; OptionBarSearchNotPending = true;
OptionBarLoading = false;
OptionBarMessage = null;
return; return;
} }
@@ -315,7 +317,7 @@ namespace VDownload.Core.ViewModels.Home
MainContent = _videoCollectionView; MainContent = _videoCollectionView;
OptionBarSearchNotPending = true; OptionBarSearchNotPending = true;
OptionBarMessageIcon = OptionBarMessageIconType.None; OptionBarLoading = false;
OptionBarMessage = null; OptionBarMessage = null;
} }
@@ -339,6 +341,13 @@ namespace VDownload.Core.ViewModels.Home
} }
} }
[RelayCommand]
public void CloseError()
{
OptionBarError = null;
OptionBarIsErrorOpened = true;
}
#endregion #endregion

View File

@@ -25,130 +25,128 @@
<Frame Content="{Binding MainContent, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ViewModelToViewConverter}}"> <Frame Content="{Binding MainContent, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ViewModelToViewConverter}}">
</Frame> </Frame>
<Grid Grid.Row="1" <ctuc:SwitchPresenter Grid.Row="1"
Background="{ThemeResource OptionBarBackgroundColor}" Value="{Binding OptionBarError, Converter={StaticResource IsNotNullConverter}}">
CornerRadius="10"> <ctuc:Case Value="False">
<Grid.ColumnDefinitions> <Grid Background="{ThemeResource OptionBarBackgroundColor}"
<ColumnDefinition/> CornerRadius="10">
<ColumnDefinition Width="50"/> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/> <ColumnDefinition/>
</Grid.ColumnDefinitions> <ColumnDefinition Width="50"/>
<ctuc:UniformGrid Grid.Column="0" <ColumnDefinition Width="Auto"/>
Rows="1" </Grid.ColumnDefinitions>
Margin="15,0,0,0"> <ctuc:UniformGrid Grid.Column="0"
<ctuc:UniformGrid.RowDefinitions> Rows="1"
<RowDefinition/> Margin="15,0,0,0">
</ctuc:UniformGrid.RowDefinitions> <ctuc:UniformGrid.RowDefinitions>
<ctuc:UniformGrid.ColumnDefinitions> <RowDefinition/>
<ColumnDefinition/> </ctuc:UniformGrid.RowDefinitions>
<ColumnDefinition Width="Auto"/> <ctuc:UniformGrid.ColumnDefinitions>
</ctuc:UniformGrid.ColumnDefinitions> <ColumnDefinition/>
<ctuc:SwitchPresenter Grid.Row="0" <ColumnDefinition Width="Auto"/>
VerticalAlignment="Stretch" </ctuc:UniformGrid.ColumnDefinitions>
Margin="0,0,15,0" <ctuc:SwitchPresenter Grid.Row="0"
Value="{Binding OptionBarContent, Converter={StaticResource ObjectToStringConverter}}"> VerticalAlignment="Stretch"
<i:Interaction.Behaviors> Margin="0,0,15,0"
<ic:DataTriggerBehavior Binding="{Binding OptionBarContent, Converter={StaticResource ObjectToStringConverter}}" Value="{Binding OptionBarContent, Converter={StaticResource ObjectToStringConverter}}">
ComparisonCondition="Equal" <i:Interaction.Behaviors>
Value="None"> <ic:DataTriggerBehavior Binding="{Binding OptionBarContent, Converter={StaticResource ObjectToStringConverter}}"
<ic:ChangePropertyAction PropertyName="Visibility" ComparisonCondition="Equal"
Value="Collapsed"/> Value="None">
</ic:DataTriggerBehavior> <ic:ChangePropertyAction PropertyName="Visibility"
<ic:DataTriggerBehavior Binding="{Binding OptionBarContent, Converter={StaticResource ObjectToStringConverter}}" Value="Collapsed"/>
ComparisonCondition="NotEqual" </ic:DataTriggerBehavior>
Value="None"> <ic:DataTriggerBehavior Binding="{Binding OptionBarContent, Converter={StaticResource ObjectToStringConverter}}"
<ic:ChangePropertyAction PropertyName="Visibility" ComparisonCondition="NotEqual"
Value="Visible"/> Value="None">
</ic:DataTriggerBehavior> <ic:ChangePropertyAction PropertyName="Visibility"
</i:Interaction.Behaviors> Value="Visible"/>
<ctuc:Case Value="VideoSearch"> </ic:DataTriggerBehavior>
<Grid ColumnSpacing="10" </i:Interaction.Behaviors>
VerticalAlignment="Stretch"> <ctuc:Case Value="VideoSearch">
<Grid.ColumnDefinitions> <Grid ColumnSpacing="10"
<ColumnDefinition/> VerticalAlignment="Stretch">
<ColumnDefinition Width="Auto"/> <Grid.ColumnDefinitions>
</Grid.ColumnDefinitions> <ColumnDefinition/>
<TextBox x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarVideoSearchContentTextBox" <ColumnDefinition Width="Auto"/>
Grid.Column="0" </Grid.ColumnDefinitions>
VerticalAlignment="Center" <TextBox x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarVideoSearchContentTextBox"
Text="{Binding OptionBarVideoSearchTBValue, Mode=TwoWay}"/> Grid.Column="0"
<Button x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarSearchButton" VerticalAlignment="Center"
Grid.Column="1" Text="{Binding OptionBarVideoSearchTBValue, Mode=TwoWay}"/>
IsEnabled="{Binding OptionBarSearchNotPending}" <Button x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarSearchButton"
Command="{Binding VideoSearchStartCommand}"/> Grid.Column="1"
</Grid> IsEnabled="{Binding OptionBarSearchNotPending}"
</ctuc:Case> Command="{Binding VideoSearchStartCommand}"/>
<ctuc:Case Value="PlaylistSearch"> </Grid>
<Grid ColumnSpacing="10"> </ctuc:Case>
<Grid.ColumnDefinitions> <ctuc:Case Value="PlaylistSearch">
<ColumnDefinition/> <Grid ColumnSpacing="10">
<ColumnDefinition Width="Auto"/> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/> <ColumnDefinition/>
</Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/>
<TextBox x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarPlaylistSearchContentTextBox" <ColumnDefinition Width="Auto"/>
Grid.Column="0" </Grid.ColumnDefinitions>
VerticalAlignment="Center" <TextBox x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarPlaylistSearchContentTextBox"
Text="{Binding OptionBarPlaylistSearchTBValue, Mode=TwoWay}"/> Grid.Column="0"
<NumberBox x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarPlaylistSearchContentNumberBox" VerticalAlignment="Center"
Grid.Column="1" Text="{Binding OptionBarPlaylistSearchTBValue, Mode=TwoWay}"/>
VerticalAlignment="Center" <NumberBox x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarPlaylistSearchContentNumberBox"
SpinButtonPlacementMode="Compact" Grid.Column="1"
SmallChange="1" VerticalAlignment="Center"
LargeChange="10" SpinButtonPlacementMode="Compact"
Value="{Binding OptionBarPlaylistSearchNBValue, Mode=TwoWay}" SmallChange="1"
Minimum="0"/> LargeChange="10"
<Button x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarSearchButton" Value="{Binding OptionBarPlaylistSearchNBValue, Mode=TwoWay}"
Grid.Column="2" Minimum="0"/>
IsEnabled="{Binding OptionBarSearchNotPending}" <Button x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarSearchButton"
Command="{Binding PlaylistSearchStartCommand}"/> Grid.Column="2"
</Grid> IsEnabled="{Binding OptionBarSearchNotPending}"
</ctuc:Case> Command="{Binding PlaylistSearchStartCommand}"/>
</ctuc:SwitchPresenter> </Grid>
<StackPanel VerticalAlignment="Center" </ctuc:Case>
Orientation="Horizontal"> </ctuc:SwitchPresenter>
<StackPanel.Resources> <StackPanel VerticalAlignment="Center"
<x:Double x:Key="IconSize">20</x:Double> Orientation="Horizontal">
<Thickness x:Key="IconMargin">0,0,10,0</Thickness> <ProgressRing Width="20"
</StackPanel.Resources> Height="20"
<ctuc:SwitchPresenter Value="{Binding OptionBarMessageIcon, Converter={StaticResource ObjectToStringConverter}}"> Margin="0,0,10,0"
<ctuc:Case Value="None"/> Visibility="{Binding OptionBarLoading, Converter={StaticResource BoolToVisibilityConverter}}"/>
<ctuc:Case Value="ProgressRing"> <TextBlock Text="{Binding OptionBarMessage}"/>
<ProgressRing Width="{StaticResource IconSize}" </StackPanel>
Height="{StaticResource IconSize}" </ctuc:UniformGrid>
Margin="{StaticResource IconMargin}"/> <StackPanel Grid.Column="2"
</ctuc:Case> Orientation="Horizontal">
<ctuc:Case Value="Error"> <AppBarToggleButton x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarLoadSubscription"
<Image Width="{StaticResource IconSize}" Icon="Favorite"
Height="{StaticResource IconSize}" IsEnabled="{Binding OptionBarSearchNotPending}"
Margin="{StaticResource IconMargin}" IsChecked="{Binding OptionBarLoadSubscriptionButtonChecked, Mode=TwoWay}"
Source="{StaticResource ImageHomeViewError}"/> Command="{Binding LoadFromSubscriptionCommand}"/>
</ctuc:Case> <AppBarToggleButton x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarVideoSearch"
</ctuc:SwitchPresenter> Icon="Video"
<TextBlock Text="{Binding OptionBarMessage}"/> IsEnabled="{Binding OptionBarSearchNotPending}"
</StackPanel> IsChecked="{Binding OptionBarVideoSearchButtonChecked, Mode=TwoWay}"
</ctuc:UniformGrid> Command="{Binding VideoSearchShowCommand}"/>
<StackPanel Grid.Column="2" <AppBarToggleButton x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarPlaylistSearch"
Orientation="Horizontal"> Icon="List"
<AppBarToggleButton x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarLoadSubscription" IsEnabled="{Binding OptionBarSearchNotPending}"
Icon="Favorite" IsChecked="{Binding OptionBarPlaylistSearchButtonChecked, Mode=TwoWay}"
IsEnabled="{Binding OptionBarSearchNotPending}" Command="{Binding PlaylistSearchShowCommand}"/>
IsChecked="{Binding OptionBarLoadSubscriptionButtonChecked, Mode=TwoWay}" <AppBarSeparator/>
Command="{Binding LoadFromSubscriptionCommand}"/> <AppBarButton x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarDownloadAll"
<AppBarToggleButton x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarVideoSearch" Icon="Download"
Icon="Video" Command="{Binding DownloadCommand}"/>
IsEnabled="{Binding OptionBarSearchNotPending}" </StackPanel>
IsChecked="{Binding OptionBarVideoSearchButtonChecked, Mode=TwoWay}" </Grid>
Command="{Binding VideoSearchShowCommand}"/> </ctuc:Case>
<AppBarToggleButton x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarPlaylistSearch" <ctuc:Case Value="True">
Icon="List" <InfoBar x:Uid="/VDownload.Core.Strings/HomeViewResources/ErrorInfoBar"
IsEnabled="{Binding OptionBarSearchNotPending}" Severity="Error"
IsChecked="{Binding OptionBarPlaylistSearchButtonChecked, Mode=TwoWay}" IsOpen="{Binding OptionBarIsErrorOpened, Mode=TwoWay}"
Command="{Binding PlaylistSearchShowCommand}"/> Message="{Binding OptionBarError}"
<AppBarSeparator/> CloseButtonCommand="{Binding CloseErrorCommand}"/>
<AppBarButton x:Uid="/VDownload.Core.Strings/HomeViewResources/OptionBarDownloadAll" </ctuc:Case>
Icon="Download" </ctuc:SwitchPresenter>
Command="{Binding DownloadCommand}"/>
</StackPanel>
</Grid>
</Grid> </Grid>
</Page> </Page>

View File

@@ -107,7 +107,7 @@
<ctuc:Case Value="True"> <ctuc:Case Value="True">
<InfoBar x:Uid="/VDownload.Core.Strings/SubscriptionsViewResources/ErrorInfoBar" <InfoBar x:Uid="/VDownload.Core.Strings/SubscriptionsViewResources/ErrorInfoBar"
Severity="Error" Severity="Error"
IsOpen="{Binding IsErrorOpened, Mode=TwoWay}" IsOpen="{Binding OptionBarIsErrorOpened, Mode=TwoWay}"
Message="{Binding Error}" Message="{Binding Error}"
CloseButtonCommand="{Binding CloseErrorCommand}"/> CloseButtonCommand="{Binding CloseErrorCommand}"/>
</ctuc:Case> </ctuc:Case>