Skip to content

Commit 9e365f8

Browse files
Adding Brotli-Compression
1 parent 5d1175b commit 9e365f8

5 files changed

Lines changed: 156 additions & 1 deletion

File tree

CompressedFileViewer/CompressedFileViewer.plugin.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@
5555
</ItemGroup>
5656

5757
<ItemGroup>
58+
<Compile Update="Windows\BrotliSettings.xaml.cs">
59+
<SubType>Code</SubType>
60+
</Compile>
5861
<Compile Update="Windows\BZip2SettingsDialog.xaml.cs">
5962
<SubType>Code</SubType>
6063
</Compile>

CompressedFileViewer/Preferences.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace CompressedFileViewer;
1717
/// </summary>
1818
public class Preferences
1919
{
20-
public const int VERSION = 2;
20+
public const int VERSION = 4;
2121

2222
#region Properties
2323
/// <summary>
@@ -129,6 +129,10 @@ public static Preferences Deserialize(Stream from)
129129
{
130130
pref.XZSettings = Default.XZSettings;
131131
}
132+
if(pref.Version < 4)
133+
{
134+
pref.BrotliSettings = Default.BrotliSettings;
135+
}
132136

133137
return pref;
134138
}
@@ -168,6 +172,8 @@ public static Preferences Deserialize(Stream from)
168172
public GZipSettings GZipSettings { get; set; } = new();
169173
public ZstdSettings ZstdSettings { get; set; } = new();
170174
public XZSettings XZSettings { get; set; } = new();
175+
176+
public BrotliSettings BrotliSettings { get; set; } = new();
171177
#endregion
172178

173179
/// <summary>
@@ -210,6 +216,7 @@ public static Preferences Default
210216
preferences.BZip2Settings.Extensions.AddRange([".bz2", ".bzip2"]);
211217
preferences.ZstdSettings.Extensions.Add(".zst");
212218
preferences.XZSettings.Extensions.Add(".xz");
219+
preferences.BrotliSettings.Extensions.Add(".br");
213220
return preferences;
214221
}
215222
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.IO.Compression;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace CompressedFileViewer.Settings;
10+
11+
[Serializable]
12+
public class BrotliSettings : CompressionSettings
13+
{
14+
public static readonly string ALGORITHM_NAME = "brotli";
15+
16+
17+
public override string AlgorithmName => ALGORITHM_NAME;
18+
19+
public override bool IsSupported => true;
20+
21+
public CompressionLevel CompressionLevel { get; set; } = CompressionLevel.Optimal;
22+
23+
24+
public override Stream GetCompressionStream(Stream outStream)
25+
{
26+
BrotliStream brotliStream = new(outStream,CompressionLevel,true);
27+
return brotliStream;
28+
}
29+
30+
public override Stream GetDecompressionStream(Stream inStream)
31+
{
32+
BrotliStream brotliStream= new(inStream,CompressionMode.Decompress,true);
33+
return brotliStream;
34+
}
35+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<Window x:Class="CompressedFileViewer.Windows.BrotliSettingsDialog"
2+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6+
xmlns:local="clr-namespace:CompressedFileViewer.Windows"
7+
mc:Ignorable="d"
8+
Title="BrotliSettingsDialog" Height="450" Width="523">
9+
<Grid>
10+
<TextBlock Text="Compression Level:" Margin="10,10,149,0" Height="21" FontSize="14" VerticalAlignment="Top" />
11+
<ComboBox FontSize="14" Margin="0,8,10,0" Height="24" VerticalAlignment="Top" HorizontalAlignment="Right" Width="134" Name="txtComprLevel" />
12+
<ListBox Margin="10,36,10,73" Name="lstSuffix" SelectionMode="Single"/>
13+
<TextBox Name="txtSuffix" Margin="10,0,226,47" Height="21" VerticalAlignment="Bottom" />
14+
<Button Margin="0,0,121,47" Height="21" VerticalAlignment="Bottom" Content="Add Suffix" HorizontalAlignment="Right" Width="100" Click="AddSuffix"/>
15+
<Button Margin="0,0,10,47" Height="21" VerticalAlignment="Bottom" Content="Delete" HorizontalAlignment="Right" Width="100" Click="DeleteSuffix"/>
16+
<Button Margin="10,0,0,10" Height="21" VerticalAlignment="Bottom" Content="OK" HorizontalAlignment="Left" Width="100" Click="Button_Click"/>
17+
<Button Margin="129,0,0,10" Height="21" VerticalAlignment="Bottom" Content="Default" HorizontalAlignment="Left" Width="100" Click="Default"/>
18+
<Button Margin="0,0,10,10" Height="21" VerticalAlignment="Bottom" Content="Cancel" HorizontalAlignment="Right" Width="100" Click="Cancel"/>
19+
</Grid>
20+
</Window>
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
using CompressedFileViewer.Settings;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using System.Windows;
8+
using System.Windows.Controls;
9+
using System.Windows.Data;
10+
using System.Windows.Documents;
11+
using System.Windows.Input;
12+
using System.Windows.Media;
13+
using System.Windows.Media.Imaging;
14+
using System.Windows.Shapes;
15+
16+
namespace CompressedFileViewer.Windows;
17+
/// <summary>
18+
/// Interaktionslogik für GZipSettingsDialog.xaml
19+
/// </summary>
20+
public partial class BrotliSettingsDialog : Window, ISettingsDialog
21+
{
22+
static BrotliSettingsDialog()
23+
{
24+
SettingsDialog.RegistSettingsDialog(Settings.BrotliSettings.ALGORITHM_NAME, typeof(BrotliSettingsDialog));
25+
}
26+
27+
public BrotliSettingsDialog()
28+
{
29+
InitializeComponent();
30+
txtComprLevel.ItemsSource = Enum.GetValues<System.IO.Compression.CompressionLevel>();
31+
}
32+
33+
Settings.BrotliSettings? settings;
34+
35+
public CompressionSettings? CompressionSettings
36+
{
37+
get => settings;
38+
set
39+
{
40+
settings = (Settings.BrotliSettings?)value;
41+
txtComprLevel.SelectedItem = settings!.CompressionLevel;
42+
lstSuffix.Items.Clear();
43+
foreach (var suffix in settings.Extensions)
44+
_ = lstSuffix.Items.Add(suffix);
45+
}
46+
}
47+
48+
private void AddSuffix(object sender, RoutedEventArgs e)
49+
{
50+
string suffix = txtSuffix.Text.Trim();
51+
if (string.IsNullOrWhiteSpace(suffix)) return;
52+
if (!suffix.StartsWith('.'))
53+
suffix = '.' + suffix;
54+
foreach (string items in lstSuffix.Items)
55+
if (items.Equals(suffix, StringComparison.OrdinalIgnoreCase))
56+
return;
57+
_ = lstSuffix.Items.Add(suffix);
58+
}
59+
60+
private void DeleteSuffix(object sender, RoutedEventArgs e)
61+
{
62+
if(lstSuffix.SelectedIndex != -1)
63+
lstSuffix.Items.RemoveAt(lstSuffix.SelectedIndex);
64+
}
65+
66+
private void Button_Click(object sender, RoutedEventArgs e)
67+
{
68+
settings!.Extensions.Clear();
69+
settings.Extensions.AddRange(lstSuffix.Items.Cast<string>());
70+
settings.CompressionLevel = (System.IO.Compression.CompressionLevel)txtComprLevel.SelectedItem;
71+
this.DialogResult = true;
72+
Close();
73+
}
74+
75+
private void Cancel(object sender, RoutedEventArgs e)
76+
{
77+
this.DialogResult = false;
78+
Close();
79+
}
80+
81+
private void Default(object sender, RoutedEventArgs e)
82+
{
83+
var settings = Preferences.Default.BrotliSettings;
84+
txtComprLevel.Text = settings.CompressionLevel.ToString();
85+
lstSuffix.Items.Clear();
86+
foreach (var suffix in settings.Extensions)
87+
_ = lstSuffix.Items.Add(suffix);
88+
89+
}
90+
}

0 commit comments

Comments
 (0)