1 Commits

Author SHA1 Message Date
31252cea0e New button style 2022-12-08 14:34:45 +01:00
29 changed files with 193 additions and 266 deletions

View File

@ -23,7 +23,7 @@
<value>False</value>
</setting>
<setting name="snapcast_path" serializeAs="String">
<value>snapcast_0.31</value>
<value>snapclient_0.26.0-1_win64</value>
</setting>
<setting name="snapcast_port" serializeAs="String">
<value>1704</value>

View File

@ -11,6 +11,43 @@
<ResourceDictionary Source="Resources/Resources.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style TargetType="Button" x:Key="ButtonStyle">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Margin" Value="1" />
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="BorderBrush" Value="{x:Null}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="{TemplateBinding Border.CornerRadius}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="BorderBrush" Value="{x:Null}" />
<Setter Property="Foreground" Value="#FFABABAB" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="LightGray" />
<Setter Property="BorderBrush" Value="SlateGray" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Border.CornerRadius" Value="2" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="RepeatButtonTransparent" TargetType="{x:Type RepeatButton}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="Background" Value="Transparent"/>

View File

@ -1,19 +1,5 @@
# Changelog
## v1.4
*Released: 09/12/2022*
* New feature: shuffle system
* New feature: (un)installer script
* New feature: update system
* New feature: update MPD database button
* Restore window position when relaunching the app
* New settings organisation
* Update Emoji.WPF from 0.3.3 to 0.3.4
* Fix: cover images are displaying in all cases
* Fix: querying a large list of radios could hang the app
## v1.3.1
*Released: 03/11/2022*

View File

@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
@ -35,9 +34,8 @@ namespace unison
SongList.Clear();
int songTotal = _mpd.GetStats().Songs;
IEnumerable<IMpdFile> response = await _mpd.SafelySendCommandAsync(new SearchCommand(filter, 0, songTotal + 1));
int song = _mpd.GetStats().Songs;
IEnumerable<IMpdFile> response = await _mpd.SafelySendCommandAsync(new SearchCommand(filter, 0, song + 1));
foreach (IMpdFile file in response)
SongList.Add(file.Path);
}
@ -47,7 +45,7 @@ namespace unison
if (token.IsCancellationRequested)
return;
int addedSongs = 0;
int AddedSongs = 0;
var commandList = new CommandList();
int songTotal = _mpd.GetStats().Songs;
@ -56,12 +54,12 @@ namespace unison
{
int song = new Random().Next(0, songTotal - 1);
commandList.Add(new SearchAddCommand(new FilterTag(MpdTags.Title, "", FilterOperator.Contains), song, song + 1));
addedSongs++;
}
AddedSongs++;
// play if stopped or unknown state (no queue managing at the moment, so mandatory)
if ((_mpd.GetStatus().State != MpdState.Play && _mpd.GetStatus().State != MpdState.Pause))
if (i == 0 && (_mpd.GetStatus().State != MpdState.Play && _mpd.GetStatus().State != MpdState.Pause))
commandList.Add(new PlayCommand(0));
}
await _mpd.SafelySendCommandAsync(commandList);
}

View File

@ -1,6 +1,6 @@
#define Name "unison"
#define Version "1.4"
#define Snapcast "snapcast_0.31"
#define Version "1.3.1"
#define Snapcast "snapclient_0.26.0-1_win64"
#define Publisher "Th<54>o Marchal"
#define URL "https://github.com/ZetaKebab/unison"
#define ExeName "unison.exe"

View File

@ -1,4 +1,4 @@
MIT License Copyright (c) 2025 Théo Marchal
MIT License Copyright (c) 2022 Théo Marchal
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

View File

@ -12,7 +12,7 @@ namespace unison.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.8.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@ -85,7 +85,7 @@ namespace unison.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("snapcast_0.31")]
[global::System.Configuration.DefaultSettingValueAttribute("snapclient_0.26.0-1_win64")]
public string snapcast_path {
get {
return ((string)(this["snapcast_path"]));

View File

@ -18,7 +18,7 @@
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="snapcast_path" Type="System.String" Scope="User">
<Value Profile="(Default)">snapcast_0.31</Value>
<Value Profile="(Default)">snapclient_0.26.0-1_win64</Value>
</Setting>
<Setting Name="snapcast_port" Type="System.Int32" Scope="User">
<Value Profile="(Default)">1704</Value>

View File

@ -60,15 +60,6 @@ namespace unison.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Clear queue.
/// </summary>
public static string Clear_Queue {
get {
return ResourceManager.GetString("Clear_Queue", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Database.
/// </summary>
@ -222,24 +213,6 @@ namespace unison.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Play queue.
/// </summary>
public static string Play_Queue {
get {
return ResourceManager.GetString("Play_Queue", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Queue management.
/// </summary>
public static string Queue_Management {
get {
return ResourceManager.GetString("Queue_Management", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Country.
/// </summary>

View File

@ -117,9 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Clear_Queue" xml:space="preserve">
<value>Borrar cola</value>
</data>
<data name="Database" xml:space="preserve">
<value>Base de datos</value>
</data>
@ -171,12 +168,6 @@
<data name="Operator_IsNot" xml:space="preserve">
<value>no es</value>
</data>
<data name="Play_Queue" xml:space="preserve">
<value>Reproducir cola</value>
</data>
<data name="Queue_Management" xml:space="preserve">
<value>Gestión de cola</value>
</data>
<data name="Radios" xml:space="preserve">
<value>Radios</value>
</data>

View File

@ -117,9 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Clear_Queue" xml:space="preserve">
<value>Effacer la file</value>
</data>
<data name="Database" xml:space="preserve">
<value>Base de donnée</value>
</data>
@ -171,12 +168,6 @@
<data name="Operator_IsNot" xml:space="preserve">
<value>n'est pas</value>
</data>
<data name="Play_Queue" xml:space="preserve">
<value>Jouer la file</value>
</data>
<data name="Queue_Management" xml:space="preserve">
<value>Gestion de file</value>
</data>
<data name="Radios" xml:space="preserve">
<value>Radios</value>
</data>

View File

@ -117,9 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Clear_Queue" xml:space="preserve">
<value>Clear queue</value>
</data>
<data name="Database" xml:space="preserve">
<value>Database</value>
</data>
@ -171,12 +168,6 @@
<data name="Operator_IsNot" xml:space="preserve">
<value>is not</value>
</data>
<data name="Play_Queue" xml:space="preserve">
<value>Play queue</value>
</data>
<data name="Queue_Management" xml:space="preserve">
<value>Queue management</value>
</data>
<data name="Radios" xml:space="preserve">
<value>Radios</value>
</data>

View File

@ -2,7 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib" xmlns:sys="clr-namespace:System;assembly=System.Runtime">
<system:String x:Key="snapcastPath">snapcast_0.31</system:String>
<system:String x:Key="snapcastPath">snapclient_0.26.0-1_win64</system:String>
<system:String x:Key="snapcastPort">1704</system:String>
<system:String x:Key="playButton">&#xedb4;</system:String>

View File

@ -50,43 +50,43 @@
</Grid>
<!-- https://docs.microsoft.com/en-us/windows/apps/design/style/segoe-ui-symbol-font -->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,8,0,0">
<Button x:Name="PreviousTrack" Click="Previous_Clicked" Background="{x:Null}" BorderBrush="{x:Null}" HorizontalAlignment="Left" FocusVisualStyle="{x:Null}">
<TextBlock FontSize="25" FontFamily="Segoe MDL2 Assets" Text="&#xeb9e;"/>
<Button x:Name="PreviousTrack" Click="Previous_Clicked" Style="{StaticResource ButtonStyle}" HorizontalAlignment="Left">
<TextBlock FontSize="25" FontFamily="Segoe MDL2 Assets" Text="&#xeb9e;" Padding="2" />
</Button>
<Button x:Name="PauseButton" Click="Pause_Clicked" Background="{x:Null}" BorderBrush="{x:Null}" Margin="10,0,10,0" FocusVisualStyle="{x:Null}">
<TextBlock x:Name="PlayPause" FontSize="25" FontFamily="Segoe MDL2 Assets" Text="&#xedb5;"/>
<Button x:Name="PauseButton" Click="Pause_Clicked" Style="{StaticResource ButtonStyle}" HorizontalAlignment="Center" Margin="10,0,10,0">
<TextBlock x:Name="PlayPause" FontSize="25" FontFamily="Segoe MDL2 Assets" Text="&#xedb5;" Padding="2"/>
</Button>
<Button x:Name="NextTrack" Click="Next_Clicked" FontSize="18" Background="{x:Null}" BorderBrush="{x:Null}" HorizontalAlignment="Right" FocusVisualStyle="{x:Null}">
<TextBlock FontSize="25" FontFamily="Segoe MDL2 Assets" Text="&#xeb9d;"/>
<Button x:Name="NextTrack" Click="Next_Clicked" Style="{StaticResource ButtonStyle}" HorizontalAlignment="Right">
<TextBlock FontSize="25" FontFamily="Segoe MDL2 Assets" Text="&#xeb9d;" Padding="2"/>
</Button>
</StackPanel>
<Grid VerticalAlignment="Stretch" Margin="0,18,0,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="10,2,10,0">
<Grid VerticalAlignment="Stretch" Margin="0,14,0,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="10,4,10,0">
<TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xe992;" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="16"/>
<Slider x:Name="VolumeSlider" Maximum="100" Value="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" MinWidth="180" FlowDirection="LeftToRight" PreviewMouseUp="VolumeSlider_DragCompleted" FocusVisualStyle="{x:Null}"/>
<TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xe995;" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="7.5,0,0,0" FontSize="16"/>
</StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" VerticalAlignment="Bottom" MinHeight="27">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" VerticalAlignment="Bottom" MinHeight="30">
<Border x:Name="BorderRandom" Style="{StaticResource UnselectedButton}" BorderBrush="Black" HorizontalAlignment="Stretch" VerticalAlignment="Top" SnapsToDevicePixels="True">
<Button x:Name="Random" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="{x:Null}" BorderBrush="{x:Null}" Click="Random_Clicked" FocusVisualStyle="{x:Null}">
<TextBlock FontSize="18" FontFamily="Segoe MDL2 Assets" Text="&#xe8b1;" Margin="0" Padding="0, 0, 0, 2"/>
<Button x:Name="Random" Click="Random_Clicked" Style="{StaticResource ButtonStyle}" VerticalContentAlignment="Center" HorizontalContentAlignment="Center">
<TextBlock FontSize="18" FontFamily="Segoe MDL2 Assets" Text="&#xe8b1;" Margin="0" Padding="3, 3, 3, 3"/>
</Button>
</Border>
<Border x:Name="BorderRepeat" Style="{StaticResource UnselectedButton}" BorderBrush="Black" VerticalAlignment="Top" Margin="10,0,0,0">
<Button x:Name="Repeat" Background="{x:Null}" FontSize="18" BorderBrush="{x:Null}" Click="Repeat_Clicked" FocusVisualStyle="{x:Null}">
<TextBlock FontSize="18" FontFamily="Segoe MDL2 Assets" Text="&#xe8ee;" Padding="0, 0, 0, 2"/>
<Button x:Name="Repeat" Click="Repeat_Clicked" Style="{StaticResource ButtonStyle}" VerticalContentAlignment="Center" HorizontalContentAlignment="Center">
<TextBlock FontSize="18" FontFamily="Segoe MDL2 Assets" Text="&#xe8ee;" Padding="3, 3, 3, 3"/>
</Button>
</Border>
</StackPanel>
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal" VerticalAlignment="Bottom" MinHeight="27">
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal" VerticalAlignment="Bottom" MinHeight="30">
<Border x:Name="BorderSingle" Style="{StaticResource UnselectedButton}" BorderBrush="Black" HorizontalAlignment="Stretch" VerticalAlignment="Top" SnapsToDevicePixels="True" Margin="0,0,10,0">
<Button x:Name="Single" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="{x:Null}" Background="{x:Null}" Click="Single_Clicked" FocusVisualStyle="{x:Null}">
<TextBlock FontSize="18" FontFamily="Segoe MDL2 Assets" Text="&#xe8ed;" Margin="0" Padding="0, 0, 0, 2"/>
<Button x:Name="Single" Click="Single_Clicked" Style="{StaticResource ButtonStyle}" VerticalContentAlignment="Center" HorizontalContentAlignment="Center">
<TextBlock FontSize="18" FontFamily="Segoe MDL2 Assets" Text="&#xe8ed;" Margin="0" Padding="3, 3, 3, 3"/>
</Button>
</Border>
<Border x:Name="BorderConsume" Style="{StaticResource UnselectedButton}" BorderBrush="Black" HorizontalAlignment="Stretch" VerticalAlignment="Top" SnapsToDevicePixels="True">
<Button x:Name="Consume" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderBrush="{x:Null}" Background="{x:Null}" Click="Consume_Clicked" FocusVisualStyle="{x:Null}">
<TextBlock FontSize="18" FontFamily="Segoe MDL2 Assets" Text="&#xe75c;" Margin="0" Padding="0, 0, 0, 2"/>
<Button x:Name="Consume" Click="Consume_Clicked" Style="{StaticResource ButtonStyle}" VerticalContentAlignment="Center" HorizontalContentAlignment="Center">
<TextBlock FontSize="18" FontFamily="Segoe MDL2 Assets" Text="&#xe75c;" Margin="0" Padding="3, 3, 3, 3"/>
</Button>
</Border>
</StackPanel>

View File

@ -257,19 +257,8 @@ namespace unison
snapcast.LaunchOrExit();
}
private bool _radiosVisible = false;
private bool _shuffleVisible = false;
private bool _settingsVisible = false;
public void Radios_Clicked(object sender, RoutedEventArgs e)
{
if (_radiosVisible)
{
_radiosVisible = false;
_radiosWin.Hide();
return;
}
_radiosVisible = true;
_radiosWin.Show();
_radiosWin.Activate();
@ -279,13 +268,6 @@ namespace unison
public void Shuffle_Clicked(object sender, RoutedEventArgs e)
{
if (_shuffleVisible)
{
_shuffleVisible = false;
_shuffleWin.Hide();
return;
}
_shuffleVisible = true;
_shuffleWin.Show();
_shuffleWin.Activate();
@ -295,13 +277,6 @@ namespace unison
public void Settings_Clicked(object sender, RoutedEventArgs e)
{
if (_settingsVisible)
{
_settingsVisible = false;
_settingsWin.Hide();
return;
}
_settingsVisible = true;
_settingsWin.Show();
_settingsWin.Activate();

View File

@ -81,7 +81,7 @@
<GroupBox.Header>
<TextBlock>
<emoji:EmojiInline Text=""/>
<Run Text="{x:Static properties:Resources.Queue_Management}"/>
<Run Text="{x:Static properties:Resources.Shuffle_Queue}"/>
</TextBlock>
</GroupBox.Header>
<StackPanel Orientation="Vertical" Margin="5,5,5,0">
@ -96,11 +96,6 @@
</TextBlock>
<TextBlock x:Name="SearchStatus2" Text="{x:Static properties:Resources.Shuffle_ButtonMessage3}" Margin="3,3,0,0" FontStyle="Italic" Visibility="Collapsed"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,15,0,0">
<Button Content="{x:Static properties:Resources.Clear_Queue}" Click="ClearQueue_Clicked" Padding="5, 2" HorizontalAlignment="Left" FocusVisualStyle="{x:Null}"/>
<Button Content="{x:Static properties:Resources.Play_Queue}" Click="StartQueue_Clicked" Padding="5, 2" Margin="5, 0" HorizontalAlignment="Left" FocusVisualStyle="{x:Null}"/>
</StackPanel>
</StackPanel>
</GroupBox>

View File

@ -55,7 +55,7 @@ namespace unison
if (token.IsCancellationRequested)
return;
List<string> Response = await _mpd.SafelySendCommandAsync(new ListCommand(MpdTags.Genre, null, null, null));
List<string> Response = await _mpd.SafelySendCommandAsync(new ListCommand(MpdTags.Genre, null, null));
if (Response == null)
return;
@ -375,16 +375,6 @@ namespace unison
AddToQueue();
}
public void ClearQueue_Clicked(object sender, RoutedEventArgs e)
{
_mpd.ClearQueue();
}
public void StartQueue_Clicked(object sender, RoutedEventArgs e)
{
_mpd.PlayCommand();
}
public bool GetContinuous()
{
return _continuous;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -2,12 +2,12 @@
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<TargetFramework>net6.0-windows</TargetFramework>
<UseWPF>true</UseWPF>
<ApplicationIcon>Resources\icon-full.ico</ApplicationIcon>
<Win32Resource></Win32Resource>
<StartupObject>unison.App</StartupObject>
<Version>1.4-dev</Version>
<Version>1.3.1</Version>
<Company />
<Authors>Théo Marchal</Authors>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
@ -52,11 +52,11 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Autoupdater.NET.Official" Version="1.9.2" />
<PackageReference Include="Autoupdater.NET.Official" Version="1.7.6" />
<PackageReference Include="Emoji.Wpf" Version="0.3.4" />
<PackageReference Include="Hardcodet.NotifyIcon.Wpf" Version="2.0.1" />
<PackageReference Include="RadioBrowser" Version="0.7.0" />
<PackageReference Include="MpcNET" Version="1.6.6" />
<PackageReference Include="Hardcodet.NotifyIcon.Wpf" Version="1.1.0" />
<PackageReference Include="RadioBrowser" Version="0.6.1" />
<PackageReference Include="MpcNET" Version="1.4.0" />
</ItemGroup>
<ItemGroup>
@ -90,25 +90,25 @@
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<None Update="snapcast_0.31\FLAC.dll">
<None Update="snapclient_0.26.0-1_win64\FLAC.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="snapcast_0.31\ogg.dll">
<None Update="snapclient_0.26.0-1_win64\ogg.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="snapcast_0.31\opus.dll">
<None Update="snapclient_0.26.0-1_win64\opus.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="snapcast_0.31\README.txt">
<None Update="snapclient_0.26.0-1_win64\README.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="snapcast_0.31\snapclient.exe">
<None Update="snapclient_0.26.0-1_win64\snapclient.exe">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="snapcast_0.31\soxr.dll">
<None Update="snapclient_0.26.0-1_win64\soxr.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="snapcast_0.31\vorbis.dll">
<None Update="snapclient_0.26.0-1_win64\vorbis.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>