feat: add checker log widget
This commit is contained in:
@ -96,6 +96,9 @@
|
||||
<Compile Include="Util\ColorTrans.cs" />
|
||||
<Compile Include="Util\WeekNames.cs" />
|
||||
<Compile Include="Util\Win32Dialog.cs" />
|
||||
<Compile Include="Widget\LogChecker.xaml.cs">
|
||||
<DependentUpon>LogChecker.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Page Include="Dialog\EditCourse.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
@ -120,6 +123,10 @@
|
||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Page Include="Widget\LogChecker.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs">
|
||||
@ -148,8 +155,6 @@
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Widget\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
@ -87,7 +87,7 @@ namespace HFUTCourseSimulation.Kernel {
|
||||
/// <returns>如果检查无误则返回检查好的结构,否则返回null</returns>
|
||||
private static Data.Built.Semester CheckSemester(Data.Storage.Semester semester, Reporter reporter) {
|
||||
// 检查Semester
|
||||
reporter.Info($"正在检查学期");
|
||||
reporter.Info($"正在检查学期设置...");
|
||||
if (semester.StartDate.DayOfWeek != DayOfWeek.Monday) {
|
||||
reporter.Error($"起始日期{semester.StartDate:yyyy-MM-dd}不是星期一");
|
||||
return null;
|
||||
@ -108,10 +108,11 @@ namespace HFUTCourseSimulation.Kernel {
|
||||
if (rv is null) return null;
|
||||
int dinnerAt = rv.Value;
|
||||
|
||||
reporter.Info($"正在检查课程设置...");
|
||||
var courses = new List<Data.Built.Course>();
|
||||
foreach (var course in semester.Courses) {
|
||||
// 检查课程(实际上只有安排需要检查)
|
||||
reporter.Info($"正在检查课程:{course.Name}");
|
||||
reporter.Info($"正在检查课程:{course.Name}...");
|
||||
|
||||
var schedules = new List<Data.Built.Schedule>();
|
||||
|
||||
|
@ -248,26 +248,39 @@ namespace HFUTCourseSimulation {
|
||||
private void uiMenuCheck_Click(object sender, RoutedEventArgs e) {
|
||||
var semester = _context.Semester.ToStorage();
|
||||
var reporter = new Kernel.Reporter();
|
||||
var rv = Kernel.Arranger.Arrange(semester, reporter);
|
||||
Kernel.Arranger.Arrange(semester, reporter);
|
||||
|
||||
var widget = new Widget.LogChecker();
|
||||
widget.CurrentReporter = reporter;
|
||||
widget.ShowDialog();
|
||||
}
|
||||
|
||||
private void uiMenuSimulator_Click(object sender, RoutedEventArgs e) {
|
||||
var semester = _context.Semester.ToStorage();
|
||||
var reporter = new Kernel.Reporter();
|
||||
var rv = Kernel.Arranger.Arrange(semester, reporter);
|
||||
if (rv is null) return;
|
||||
|
||||
if (rv is null || reporter.HasError()) {
|
||||
var widget = new Widget.LogChecker();
|
||||
widget.CurrentReporter = reporter;
|
||||
widget.ShowDialog();
|
||||
} else {
|
||||
var dialog = new Dialog.Simulator();
|
||||
dialog.CurrentSemester = rv;
|
||||
dialog.ShowDialog();
|
||||
}
|
||||
}
|
||||
|
||||
private void uiMenuRender_Click(object sender, RoutedEventArgs e) {
|
||||
var semester = _context.Semester.ToStorage();
|
||||
var reporter = new Kernel.Reporter();
|
||||
var rv = Kernel.Arranger.Arrange(semester, reporter);
|
||||
if (rv is null) return;
|
||||
|
||||
if (rv is null || reporter.HasError()) {
|
||||
var widget = new Widget.LogChecker();
|
||||
widget.CurrentReporter = reporter;
|
||||
widget.ShowDialog();
|
||||
} else {
|
||||
// Fetch file path.
|
||||
var filepath = Util.Win32Dialog.SaveRender();
|
||||
if (filepath is null) return;
|
||||
@ -275,7 +288,8 @@ namespace HFUTCourseSimulation {
|
||||
if (Kernel.Render.Rending(rv, filepath)) {
|
||||
ReportStatus($"已导出图片:{filepath}");
|
||||
} else {
|
||||
Win32Dialog.Error("导出失败。请检查文件是否被占用,或检查GDI是否能正常使用。", "导出结果");
|
||||
Win32Dialog.Error("导出失败。请检查文件是否被占用,或检查GDI是否能正常使用。", "导出渲染结果");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
37
HFUTCourseSimulation/Widget/LogChecker.xaml
Normal file
37
HFUTCourseSimulation/Widget/LogChecker.xaml
Normal file
@ -0,0 +1,37 @@
|
||||
<Window x:Class="HFUTCourseSimulation.Widget.LogChecker"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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:HFUTCourseSimulation.Widget"
|
||||
xmlns:uidata="clr-namespace:HFUTCourseSimulation.Kernel"
|
||||
mc:Ignorable="d"
|
||||
x:Name="uiMainWindow"
|
||||
Title="检查器日志" Height="500" Width="400" Closed="uiMainWindow_Closed" Loaded="uiMainWindow_Loaded">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Border x:Name="uiErrorBanner" Grid.Row="0" Background="#F44336" BorderThickness="0">
|
||||
<TextBlock Text="检查器发现了错误,请查看列表并处理!" Margin="5" Padding="5" Foreground="#FFFFFF" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center"/>
|
||||
</Border>
|
||||
<Border x:Name="uiOkBanner" Grid.Row="0" Background="#4CAF50" BorderThickness="0">
|
||||
<TextBlock Text="检查器没有发现错误,请继续!" Margin="5" Padding="5" Foreground="#FFFFFF" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center"/>
|
||||
</Border>
|
||||
|
||||
<ListBox x:Name="uiMessageList" Grid.Row="1" Margin="5">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Grid d:DataContext="{d:DesignInstance uidata:ReporterEntry}">
|
||||
<TextBlock Text="{Binding Message, Mode=OneTime}"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
|
||||
<Button x:Name="uiBtnOk" Content="确认" Grid.Row="2" Width="100" Padding="5" Margin="5" HorizontalAlignment="Right" Click="uiBtnOk_Click"/>
|
||||
</Grid>
|
||||
</Window>
|
41
HFUTCourseSimulation/Widget/LogChecker.xaml.cs
Normal file
41
HFUTCourseSimulation/Widget/LogChecker.xaml.cs
Normal file
@ -0,0 +1,41 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Shapes;
|
||||
|
||||
namespace HFUTCourseSimulation.Widget {
|
||||
/// <summary>
|
||||
/// Interaction logic for LogChecker.xaml
|
||||
/// </summary>
|
||||
public partial class LogChecker : Window {
|
||||
public LogChecker() {
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void uiMainWindow_Loaded(object sender, RoutedEventArgs e) {
|
||||
var hasError = CurrentReporter.HasError();
|
||||
uiErrorBanner.Visibility = hasError ? Visibility.Visible : Visibility.Collapsed;
|
||||
uiOkBanner.Visibility = hasError ? Visibility.Collapsed : Visibility.Visible;
|
||||
uiMessageList.ItemsSource = CurrentReporter;
|
||||
}
|
||||
|
||||
private void uiMainWindow_Closed(object sender, EventArgs e) {
|
||||
uiMessageList.ItemsSource = null;
|
||||
}
|
||||
|
||||
public Kernel.Reporter CurrentReporter { get; set; }
|
||||
|
||||
private void uiBtnOk_Click(object sender, RoutedEventArgs e) {
|
||||
this.Close();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,9 +1,11 @@
|
||||
# HFUT Course Simulation
|
||||
|
||||
这是一个个人目的很强的工程,这意味着这个工程的一切都是以我用的爽为前提的。
|
||||
|
||||
这是一个2018年制作的项目,也是我考入HFUT的时间。当时HFUT查看课表有诸多不便之处:例如学校官方提供的移动端课表(可以分周次看课程,以及考试成绩等)经常无缘无故禁止外网访问,只能连接学校内网查看;而我又不想使用诸如超级课程表等软件。而且,除了查看课表之外,我还有一些其他需求:例如我希望在选择公选课时能让我有一个可视化概览,让我判断我选的课程之间是否冲突,是否在合适的日子;以及希望存储一张包含当前学期全部课程的大图到我的手机中,供我离线查看。
|
||||
|
||||
于是我创建了这个项目,并根据我的需求,给予了它这个名字。以最快的速度完成了原型开发,并经过一些小修小补之后服务于我整个本科生涯。
|
||||
|
||||
后来我升入了另一所高校。这个高校虽然渊源上和HFUT本是一家,但它的课程和每日节次安排均与HFUT不同(然而还是继承了HFUT那坑爹的晚课时间,我最讨厌这个了)。尽管第一版可以做一些妥协,勉强凑合使用,但我还是决定对第一版进行重构,使其能够在我目前这个高校中使用(通过增加其泛用性来实现)。
|
||||
后来我升入了另一所高校。这个高校虽然从源头上来说和HFUT本是一家,但它的课程和每日节次安排均与HFUT不同(然而还是继承了HFUT那坑爹的晚课时间,我最讨厌这个了)。尽管第一版可以在做一些妥协的情况下,勉强凑合使用,但我还是决定对第一版进行重构,使其能够在我目前这个高校中使用(通过增加其泛用性来实现)。
|
||||
|
||||
在浏览了7年前写的代码后,发现原本的代码是真的一坨屎山,不仅没有充分利用Newtonsoft.Json的自定义序列化优势,也没有利用WPF的便捷的绑定功能,且UI设计,文件结构稀烂。所以针对以上问题,配合期望的功能,对程序开展了完全的重构。但程序的名称改起来太麻烦,索性就不改了,就依然保持原样,毕竟我也看不起我后来升入的这个学校。
|
||||
|
Reference in New Issue
Block a user