mirror of
https://github.com/BililiveRecorder/BililiveRecorder.git
synced 2024-11-15 19:22:19 +08:00
WPF: Adjust log panel, fix #222
This commit is contained in:
parent
7df5bce368
commit
9a51bf04de
|
@ -1,14 +1,19 @@
|
||||||
<UserControl x:Class="BililiveRecorder.WPF.Controls.LogPanel"
|
<UserControl
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
x:Class="BililiveRecorder.WPF.Controls.LogPanel"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:local="clr-namespace:BililiveRecorder.WPF.Controls"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:models="clr-namespace:BililiveRecorder.WPF.Models"
|
xmlns:l="https://github.com/XAMLMarkupExtensions/WPFLocalizationExtension"
|
||||||
mc:Ignorable="d"
|
l:LocalizeDictionary.DesignCulture=""
|
||||||
d:DesignHeight="450" d:DesignWidth="800">
|
l:ResxLocalizationProvider.DefaultAssembly="BililiveRecorder.WPF"
|
||||||
<ListView ItemsSource="{Binding}" SizeChanged="ListView_SizeChanged"
|
l:ResxLocalizationProvider.DefaultDictionary="Strings"
|
||||||
VirtualizingPanel.VirtualizationMode="Recycling"
|
xmlns:local="clr-namespace:BililiveRecorder.WPF.Controls"
|
||||||
|
xmlns:models="clr-namespace:BililiveRecorder.WPF.Models"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="450" d:DesignWidth="800">
|
||||||
|
<ListView x:Name="logView" ItemsSource="{Binding}" SizeChanged="ListView_SizeChanged"
|
||||||
|
VirtualizingPanel.VirtualizationMode="Recycling"
|
||||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
|
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
|
||||||
<ListView.DataContext>
|
<ListView.DataContext>
|
||||||
<models:LogModel/>
|
<models:LogModel/>
|
||||||
|
@ -22,13 +27,22 @@
|
||||||
</ListView.Resources>
|
</ListView.Resources>
|
||||||
<ListView.View>
|
<ListView.View>
|
||||||
<GridView AllowsColumnReorder="False">
|
<GridView AllowsColumnReorder="False">
|
||||||
<GridViewColumn DisplayMemberBinding="{Binding Timestamp,StringFormat=HH:mm:ss.ffff}"/>
|
<GridViewColumn Header="{l:Loc LogPanel_Header_Timestamp}" DisplayMemberBinding="{Binding Timestamp,StringFormat=HH:mm:ss.ffff}"/>
|
||||||
<GridViewColumn DisplayMemberBinding="{Binding Level}"/>
|
<GridViewColumn Header="{l:Loc LogPanel_Header_Level}">
|
||||||
<GridViewColumn DisplayMemberBinding="{Binding RoomId}"/>
|
|
||||||
<GridViewColumn>
|
|
||||||
<GridViewColumn.CellTemplate>
|
<GridViewColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<TextBlock Text="{Binding Message}" TextWrapping="Wrap"/>
|
<TextBlock l:ResxLocalizationProvider.DefaultDictionary="Strings"
|
||||||
|
Text="{l:Loc {Binding Path=Level, StringFormat=LogPanel_Level_{0}}}"
|
||||||
|
TextWrapping="NoWrap"/>
|
||||||
|
</DataTemplate>
|
||||||
|
</GridViewColumn.CellTemplate>
|
||||||
|
</GridViewColumn>
|
||||||
|
<GridViewColumn Header="{l:Loc LogPanel_Header_RoomId}" DisplayMemberBinding="{Binding RoomId}"/>
|
||||||
|
<GridViewColumn Header="{l:Loc LogPanel_Header_Message}">
|
||||||
|
<GridViewColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<TextBlock l:ResxLocalizationProvider.DefaultDictionary="Strings"
|
||||||
|
Text="{Binding Message}" TextWrapping="Wrap"/>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</GridViewColumn.CellTemplate>
|
</GridViewColumn.CellTemplate>
|
||||||
</GridViewColumn>
|
</GridViewColumn>
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Specialized;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Media;
|
||||||
|
|
||||||
#nullable enable
|
#nullable enable
|
||||||
namespace BililiveRecorder.WPF.Controls
|
namespace BililiveRecorder.WPF.Controls
|
||||||
|
@ -12,6 +15,22 @@ namespace BililiveRecorder.WPF.Controls
|
||||||
public LogPanel()
|
public LogPanel()
|
||||||
{
|
{
|
||||||
this.InitializeComponent();
|
this.InitializeComponent();
|
||||||
|
((INotifyCollectionChanged)this.logView.Items).CollectionChanged += this.LogView_CollectionChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LogView_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!this.logView.IsMouseOver && VisualTreeHelper.GetChildrenCount(this.logView) > 0)
|
||||||
|
{
|
||||||
|
var border = (Border)VisualTreeHelper.GetChild(this.logView, 0);
|
||||||
|
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||||
|
scrollViewer.ScrollToBottom();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{ }
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ListView_SizeChanged(object sender, SizeChangedEventArgs e)
|
private void ListView_SizeChanged(object sender, SizeChangedEventArgs e)
|
||||||
|
|
90
BililiveRecorder.WPF/Properties/Strings.Designer.cs
generated
90
BililiveRecorder.WPF/Properties/Strings.Designer.cs
generated
|
@ -340,6 +340,96 @@ namespace BililiveRecorder.WPF.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to 级别.
|
||||||
|
/// </summary>
|
||||||
|
public static string LogPanel_Header_Level {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LogPanel_Header_Level", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to 消息.
|
||||||
|
/// </summary>
|
||||||
|
public static string LogPanel_Header_Message {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LogPanel_Header_Message", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to 房间号.
|
||||||
|
/// </summary>
|
||||||
|
public static string LogPanel_Header_RoomId {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LogPanel_Header_RoomId", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to 时间.
|
||||||
|
/// </summary>
|
||||||
|
public static string LogPanel_Header_Timestamp {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LogPanel_Header_Timestamp", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to 调试.
|
||||||
|
/// </summary>
|
||||||
|
public static string LogPanel_Level_Debug {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LogPanel_Level_Debug", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to 错误.
|
||||||
|
/// </summary>
|
||||||
|
public static string LogPanel_Level_Error {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LogPanel_Level_Error", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to 致命.
|
||||||
|
/// </summary>
|
||||||
|
public static string LogPanel_Level_Fatal {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LogPanel_Level_Fatal", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to 信息.
|
||||||
|
/// </summary>
|
||||||
|
public static string LogPanel_Level_Information {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LogPanel_Level_Information", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to 详细.
|
||||||
|
/// </summary>
|
||||||
|
public static string LogPanel_Level_Verbose {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LogPanel_Level_Verbose", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to 警告.
|
||||||
|
/// </summary>
|
||||||
|
public static string LogPanel_Level_Warning {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("LogPanel_Level_Warning", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to 回放剪辑(正在处理中的数量).
|
/// Looks up a localized string similar to 回放剪辑(正在处理中的数量).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -196,6 +196,36 @@
|
||||||
<data name="LogPage_RightClickCopyToolTip" xml:space="preserve">
|
<data name="LogPage_RightClickCopyToolTip" xml:space="preserve">
|
||||||
<value>右键点击可以复制单行日志</value>
|
<value>右键点击可以复制单行日志</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="LogPanel_Header_Level" xml:space="preserve">
|
||||||
|
<value>级别</value>
|
||||||
|
</data>
|
||||||
|
<data name="LogPanel_Header_Message" xml:space="preserve">
|
||||||
|
<value>消息</value>
|
||||||
|
</data>
|
||||||
|
<data name="LogPanel_Header_RoomId" xml:space="preserve">
|
||||||
|
<value>房间号</value>
|
||||||
|
</data>
|
||||||
|
<data name="LogPanel_Header_Timestamp" xml:space="preserve">
|
||||||
|
<value>时间</value>
|
||||||
|
</data>
|
||||||
|
<data name="LogPanel_Level_Debug" xml:space="preserve">
|
||||||
|
<value>调试</value>
|
||||||
|
</data>
|
||||||
|
<data name="LogPanel_Level_Error" xml:space="preserve">
|
||||||
|
<value>错误</value>
|
||||||
|
</data>
|
||||||
|
<data name="LogPanel_Level_Fatal" xml:space="preserve">
|
||||||
|
<value>致命</value>
|
||||||
|
</data>
|
||||||
|
<data name="LogPanel_Level_Information" xml:space="preserve">
|
||||||
|
<value>信息</value>
|
||||||
|
</data>
|
||||||
|
<data name="LogPanel_Level_Verbose" xml:space="preserve">
|
||||||
|
<value>详细</value>
|
||||||
|
</data>
|
||||||
|
<data name="LogPanel_Level_Warning" xml:space="preserve">
|
||||||
|
<value>警告</value>
|
||||||
|
</data>
|
||||||
<data name="RoomCard_ClipButton_Tooltip" xml:space="preserve">
|
<data name="RoomCard_ClipButton_Tooltip" xml:space="preserve">
|
||||||
<value>回放剪辑(正在处理中的数量)</value>
|
<value>回放剪辑(正在处理中的数量)</value>
|
||||||
<comment>This feature is off by default, and will be removed in the future.</comment>
|
<comment>This feature is off by default, and will be removed in the future.</comment>
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace BililiveRecorder.WPF
|
||||||
{
|
{
|
||||||
internal class WpfLogEventSink : ILogEventSink
|
internal class WpfLogEventSink : ILogEventSink
|
||||||
{
|
{
|
||||||
private const int MAX_LINE = 60;
|
private const int MAX_LINE = 150;
|
||||||
internal static object _lock = new object();
|
internal static object _lock = new object();
|
||||||
internal static ObservableCollection<LogModel> Logs = new ObservableCollection<LogModel>();
|
internal static ObservableCollection<LogModel> Logs = new ObservableCollection<LogModel>();
|
||||||
|
|
||||||
|
@ -26,16 +26,7 @@ namespace BililiveRecorder.WPF
|
||||||
var m = new LogModel
|
var m = new LogModel
|
||||||
{
|
{
|
||||||
Timestamp = logEvent.Timestamp,
|
Timestamp = logEvent.Timestamp,
|
||||||
Level = logEvent.Level switch
|
Level = logEvent.Level,
|
||||||
{
|
|
||||||
LogEventLevel.Verbose => "Verbose",
|
|
||||||
LogEventLevel.Debug => "Debug",
|
|
||||||
LogEventLevel.Information => "Info",
|
|
||||||
LogEventLevel.Warning => "Warn",
|
|
||||||
LogEventLevel.Error => "Error",
|
|
||||||
LogEventLevel.Fatal => "Fatal",
|
|
||||||
_ => string.Empty,
|
|
||||||
},
|
|
||||||
Message = msg,
|
Message = msg,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -69,7 +60,7 @@ namespace BililiveRecorder.WPF
|
||||||
{
|
{
|
||||||
public DateTimeOffset Timestamp { get; set; }
|
public DateTimeOffset Timestamp { get; set; }
|
||||||
|
|
||||||
public string Level { get; set; } = string.Empty;
|
public LogEventLevel Level { get; set; }
|
||||||
|
|
||||||
public string RoomId { get; set; } = string.Empty;
|
public string RoomId { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user