Fix RadioBrowser crashes if no internet connection

This commit is contained in:
Théo Marchal 2022-04-05 00:23:55 +02:00
parent 7fdf349c28
commit 67315f90b0
3 changed files with 60 additions and 28 deletions

View File

@ -117,7 +117,7 @@
<TextBlock x:Name="SnapcastText" Text="{x:Static properties:Resources.StartSnapcast}" Margin="5, 0, 0, 0"/> <TextBlock x:Name="SnapcastText" Text="{x:Static properties:Resources.StartSnapcast}" Margin="5, 0, 0, 0"/>
</StackPanel> </StackPanel>
</Button> </Button>
<Button x:Name="Radio" Padding="5, 2" HorizontalAlignment="Left" Click="Radios_Clicked" Margin="5,0,10,0" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" FocusVisualStyle="{x:Null}"> <Button x:Name="Radio" Padding="5, 2" HorizontalAlignment="Left" Click="Radios_Clicked" Margin="5,0,10,0" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" FocusVisualStyle="{x:Null}" IsEnabled="False">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<emoji:TextBlock Text="📻" Padding="0,0,0,2"/> <emoji:TextBlock Text="📻" Padding="0,0,0,2"/>
<TextBlock Text="{x:Static properties:Resources.Radios}" Margin="5, 0, 0, 0"/> <TextBlock Text="{x:Static properties:Resources.Radios}" Margin="5, 0, 0, 0"/>

View File

@ -188,6 +188,11 @@ namespace unison
SnapcastText.Text = unison.Resources.Resources.StartSnapcast; SnapcastText.Text = unison.Resources.Resources.StartSnapcast;
} }
public void OnRadioBrowserConnected()
{
Radio.IsEnabled = true;
}
public void UpdateButton(ref Border border, bool b) public void UpdateButton(ref Border border, bool b)
{ {
border.Style = b ? (Style)Resources["SelectedButton"] : (Style)Resources["UnselectedButton"]; border.Style = b ? (Style)Resources["SelectedButton"] : (Style)Resources["UnselectedButton"];

View File

@ -59,8 +59,21 @@ namespace unison
{ {
InitializeComponent(); InitializeComponent();
_radioBrowser = new RadioBrowserClient(); try
Initialize(); {
_radioBrowser = new RadioBrowserClient();
Initialize();
}
catch (Exception e)
{
Debug.WriteLine("Exception while connecting to RadioBrowser: " + e.Message);
return;
}
Application.Current.Dispatcher.Invoke(() =>
{
MainWindow MainWin = (MainWindow)Application.Current.MainWindow;
MainWin.OnRadioBrowserConnected();
});
} }
public async void Initialize() public async void Initialize()
@ -85,35 +98,42 @@ namespace unison
public async Task SearchAdvanced(string name, string country, string tags) public async Task SearchAdvanced(string name, string country, string tags)
{ {
SearchStatus.Text = unison.Resources.Resources.Radio_Loading; try
List<StationInfo> advancedSearch = await _radioBrowser.Search.AdvancedAsync(new AdvancedSearchOptions
{ {
Name = name, SearchStatus.Text = unison.Resources.Resources.Radio_Loading;
Country = country,
TagList = tags
});
RadioListGrid.Items.Clear(); List<StationInfo> advancedSearch = await _radioBrowser.Search.AdvancedAsync(new AdvancedSearchOptions
if (advancedSearch.Count > 0)
{
SearchStatus.Text = "";
foreach (StationInfo station in advancedSearch)
{ {
RadioListGrid.Items.Add(new StationListItem Name = name,
Country = country,
TagList = tags
});
RadioListGrid.Items.Clear();
if (advancedSearch.Count > 0)
{
SearchStatus.Text = "";
foreach (StationInfo station in advancedSearch)
{ {
Name = CleanString(station.Name), RadioListGrid.Items.Add(new StationListItem
Country = station.CountryCode, {
Codec = station.Codec, Name = CleanString(station.Name),
Bitrate = station.Bitrate, Country = station.CountryCode,
Url = station.Url, Codec = station.Codec,
Tags = string.Join(", ", station.Tags) Bitrate = station.Bitrate,
}); Url = station.Url,
Tags = string.Join(", ", station.Tags)
});
}
FitToContent();
} }
FitToContent(); else
SearchStatus.Text = unison.Resources.Resources.Radio_NotFound;
}
catch (Exception except)
{
Debug.WriteLine("Error on RadioBrowser search advanced: " + except.Message);
} }
else
SearchStatus.Text = unison.Resources.Resources.Radio_NotFound;
} }
private void FitToContent() private void FitToContent()
@ -148,8 +168,15 @@ namespace unison
private async void Search_Clicked(object sender, RoutedEventArgs e) private async void Search_Clicked(object sender, RoutedEventArgs e)
{ {
CountryListItem a = (CountryListItem)CountryList.SelectedItem; try
await SearchAdvanced(NameSearch.Text, a?.Name, TagSearch.Text); {
CountryListItem a = (CountryListItem)CountryList.SelectedItem;
await SearchAdvanced(NameSearch.Text, a?.Name, TagSearch.Text);
}
catch (Exception except)
{
Debug.WriteLine("Error on RadioBrowser search: " + except.Message);
}
} }
private void Reset_Clicked(object sender, RoutedEventArgs e) private void Reset_Clicked(object sender, RoutedEventArgs e)