跳到主要内容

github/tai

公开

Tai · Windows 软件与网站使用时长统计。上游 Planshit/Tai 的源码镜像,非灵栈原创;MIT 许可。来源:https://github.com/Planshit/Tai 。本次为手动同步,暂不提供安装包。

提交记录
修改UI/App.xaml.cs+1 −0看文件
@@ -108,6 +108,7 @@ namespace UI
108108 services.AddSingleton<IWebFilter, WebFilter>();
109109
110110 // UI服务
111新增: services.AddSingleton<IUIServicer, UIServicer>();
111112 services.AddSingleton<IAppContextMenuServicer, AppContextMenuServicer>();
112113 services.AddSingleton<IThemeServicer, ThemeServicer>();
113114 services.AddSingleton<IMainServicer, MainServicer>();
修改UI/Controls/Window/DefaultWindow.cs+123 −2看文件
@@ -5,6 +5,7 @@ using System.Drawing;
55using System.Linq;
66using System.Runtime.InteropServices;
77using System.Text;
8新增:using System.Threading;
89using System.Threading.Tasks;
910using System.Windows;
1011using System.Windows.Controls;
@@ -14,12 +15,34 @@ using System.Windows.Media;
1415using System.Windows.Media.Animation;
1516using System.Windows.Media.Imaging;
1617using System.Windows.Threading;
18新增:using UI.Controls.Button;
1719
1820namespace UI.Controls.Window
1921{
2022 public class DefaultWindow : System.Windows.Window
2123 {
2224 #region 1.依赖属性
25新增: #region Dialog
26新增: public static readonly DependencyProperty DialogTitleProperty = DependencyProperty.Register("DialogTitle", typeof(string), typeof(DefaultWindow));
27新增: /// <summary>
28新增: /// Dialog title
29新增: /// </summary>
30新增: public string DialogTitle
31新增: {
32新增: get { return (string)GetValue(DialogTitleProperty); }
33新增: set { SetValue(DialogTitleProperty, value); }
34新增: }
35新增:
36新增: public static readonly DependencyProperty DialogMessageProperty = DependencyProperty.Register("DialogMessage", typeof(string), typeof(DefaultWindow));
37新增: /// <summary>
38新增: /// Dialog message
39新增: /// </summary>
40新增: public string DialogMessage
41新增: {
42新增: get { return (string)GetValue(DialogMessageProperty); }
43新增: set { SetValue(DialogMessageProperty, value); }
44新增: }
45新增: #endregion
2346 public static readonly DependencyProperty IsShowToastDeproperty = DependencyProperty.Register("IsShowToast", typeof(bool), typeof(DefaultWindow), new PropertyMetadata(false, new PropertyChangedCallback(OnIsShowToastChanged)));
2447 public bool IsShowToast { get { return (bool)GetValue(IsShowToastDeproperty); } set { SetValue(IsShowToastDeproperty, value); } }
2548 private static void OnIsShowToastChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
@@ -186,9 +209,12 @@ namespace UI.Controls.Window
186209 /// </summary>
187210 public bool IsWindowClosed { get { return IsWindowClosed_; } }
188211
189删除: private Border ToastBorder, Masklayer;
212新增: private Border ToastBorder, Masklayer, DialogBorder;
190213 private Grid ToastGrid;
191214 private DispatcherTimer toastTimer;
215新增: private bool IsDialogConfirm;
216新增: private bool IsShowConfirmDialog;
217新增: private Button.Button CancelBtn, ConfirmBtn;
192218 #region 3.初始化
193219 public DefaultWindow()
194220 {
@@ -277,6 +303,9 @@ namespace UI.Controls.Window
277303 ToastBorder = GetTemplateChild("ToastBorder") as Border;
278304 Masklayer = GetTemplateChild("Masklayer") as Border;
279305 ToastGrid = GetTemplateChild("ToastGrid") as Grid;
306新增: DialogBorder = GetTemplateChild("DialogBorder") as Border;
307新增: CancelBtn = GetTemplateChild("CancelBtn") as Button.Button;
308新增: ConfirmBtn = GetTemplateChild("ConfirmBtn") as Button.Button;
280309
281310 if (PageContainer != null)
282311 {
@@ -290,6 +319,24 @@ namespace UI.Controls.Window
290319 VisualStateManager.GoToState(this, "Normal", true);
291320 }
292321 }
322新增:
323新增: if (CancelBtn != null)
324新增: {
325新增: CancelBtn.Click += (e, c) =>
326新增: {
327新增: IsDialogConfirm = false;
328新增: HideDialog();
329新增: };
330新增: }
331新增:
332新增: if (ConfirmBtn != null)
333新增: {
334新增: ConfirmBtn.Click += (e, c) =>
335新增: {
336新增: IsDialogConfirm = true;
337新增: HideDialog();
338新增: };
339新增: }
293340 }
294341
295342
@@ -352,7 +399,8 @@ namespace UI.Controls.Window
352399 private void ShowToast()
353400 {
354401 ToastGrid.Visibility = Visibility.Visible;
355删除:
402新增: DialogBorder.Visibility = Visibility.Collapsed;
403新增: ToastBorder.Visibility = Visibility.Visible;
356404 Storyboard storyboard = new Storyboard();
357405
358406 DoubleAnimation scrollAnimation = new DoubleAnimation();
@@ -415,6 +463,79 @@ namespace UI.Controls.Window
415463 storyboard.Begin();
416464 }
417465
466新增: #region Dialog
467新增: public Task<bool> ShowConfirmDialogAsync(string title_, string message_)
468新增: {
469新增: IsShowConfirmDialog = true;
470新增: ToastGrid.Visibility = Visibility.Visible;
471新增: ToastBorder.Visibility = Visibility.Collapsed;
472新增: DialogBorder.Visibility = Visibility.Visible;
473新增:
474新增: DialogMessage = message_;
475新增: DialogTitle = title_;
476新增:
477新增: Storyboard storyboard = new Storyboard();
478新增:
479新增: DoubleAnimation scrollAnimation = new DoubleAnimation();
480新增: scrollAnimation.From = -150;
481新增: scrollAnimation.To = 10;
482新增:
483新增: scrollAnimation.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseIn };
484新增: Storyboard.SetTarget(scrollAnimation, DialogBorder);
485新增: Storyboard.SetTargetProperty(scrollAnimation, new PropertyPath("RenderTransform.Children[0].Y"));
486新增: scrollAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.15));
487新增:
488新增: DoubleAnimation opacityAnimation = new DoubleAnimation();
489新增: opacityAnimation.To = 0.6;
490新增: opacityAnimation.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseIn };
491新增: Storyboard.SetTarget(opacityAnimation, Masklayer);
492新增: Storyboard.SetTargetProperty(opacityAnimation, new PropertyPath("Opacity"));
493新增: opacityAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.15));
494新增: storyboard.Children.Add(scrollAnimation);
495新增: storyboard.Children.Add(opacityAnimation);
496新增: storyboard.Begin();
497新增:
498新增: return Task.Run(() =>
499新增: {
500新增:
501新增: while (IsShowConfirmDialog)
502新增: {
503新增: Thread.Sleep(10);
504新增: }
505新增:
506新增: return IsDialogConfirm;
507新增: });
508新增: }
509新增: private void HideDialog()
510新增: {
511新增: Storyboard storyboard = new Storyboard();
512新增:
513新增: DoubleAnimation scrollAnimation = new DoubleAnimation();
514新增: scrollAnimation.To = -150;
515新增:
516新增: scrollAnimation.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseIn };
517新增: Storyboard.SetTarget(scrollAnimation, DialogBorder);
518新增: Storyboard.SetTargetProperty(scrollAnimation, new PropertyPath("RenderTransform.Children[0].Y"));
519新增: scrollAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.12));
520新增:
521新增: DoubleAnimation opacityAnimation = new DoubleAnimation();
522新增: opacityAnimation.To = 0;
523新增: opacityAnimation.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseIn };
524新增: Storyboard.SetTarget(opacityAnimation, Masklayer);
525新增: Storyboard.SetTargetProperty(opacityAnimation, new PropertyPath("Opacity"));
526新增: opacityAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.15));
527新增:
528新增: storyboard.Children.Add(scrollAnimation);
529新增: storyboard.Children.Add(opacityAnimation);
530新增: storyboard.Completed += (e, c) =>
531新增: {
532新增: ToastGrid.Visibility = Visibility.Collapsed;
533新增: IsShowConfirmDialog = false;
534新增: };
535新增: storyboard.Begin();
536新增: }
537新增: #endregion
538新增:
418539 #region 6.事件
419540
420541 protected override void OnSourceInitialized(EventArgs e)
新增UI/Servicers/IUIServicer.cs+15 −0看文件
@@ -0,0 +1,15 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Linq;
4新增:using System.Text;
5新增:using System.Threading.Tasks;
6新增:using UI.Controls.Window;
7新增:
8新增:namespace UI.Servicers
9新增:{
10新增: public interface IUIServicer
11新增: {
12新增: Task<bool> ShowConfirmDialogAsync(string title_, string message_);
13新增: void InitWindow(DefaultWindow window_);
14新增: }
15新增:}
修改UI/Servicers/StatusBarIconServicer.cs+7 −2看文件
@@ -41,18 +41,21 @@ namespace UI.Servicers
4141 private readonly IThemeServicer _themeServicer;
4242 private readonly MainViewModel _mainVM;
4343 private readonly IAppConfig _appConfig;
44新增: private readonly IUIServicer _uIServicer;
4445 private MainWindow _mainWindow;
4546 public StatusBarIconServicer(
4647 IAppObserver appObserver_,
4748 IThemeServicer themeServicer_,
4849 IAppConfig appConfig_,
49删除: MainViewModel mainVM_
50新增: MainViewModel mainVM_,
51新增: IUIServicer uIServicer_
5052 )
5153 {
5254 _appObserver = appObserver_;
5355 _themeServicer = themeServicer_;
5456 _appConfig = appConfig_;
5557 _mainVM = mainVM_;
58新增: _uIServicer = uIServicer_;
5659 }
5760 public void Init()
5861 {
@@ -72,7 +75,7 @@ namespace UI.Servicers
7275 Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
7376 }
7477
75删除:
78新增:
7679 private void Current_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
7780 {
7881 _statusBarIcon.Visible = false;
@@ -182,6 +185,8 @@ namespace UI.Servicers
182185 _mainWindow.WindowState = WindowState.Normal;
183186 _mainWindow.Show();
184187 _mainWindow.Activate();
188新增:
189新增: _uIServicer.InitWindow(_mainWindow);
185190 }
186191
187192 private void _mainWindow_Loaded(object sender, RoutedEventArgs e)
新增UI/Servicers/UIServicer.cs+28 −0看文件
@@ -0,0 +1,28 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Linq;
4新增:using System.Text;
5新增:using System.Threading.Tasks;
6新增:using UI.Controls.Window;
7新增:
8新增:namespace UI.Servicers
9新增:{
10新增: public class UIServicer : IUIServicer
11新增: {
12新增: private DefaultWindow _window;
13新增: public UIServicer()
14新增: {
15新增:
16新增: }
17新增:
18新增: public void InitWindow(DefaultWindow window_)
19新增: {
20新增: _window = window_;
21新增: }
22新增:
23新增: public Task<bool> ShowConfirmDialogAsync(string title_, string message_)
24新增: {
25新增: return _window.ShowConfirmDialogAsync(title_, message_);
26新增: }
27新增: }
28新增:}
修改UI/Themes/Window/DefaultWindow.xaml+29 −1看文件
@@ -112,7 +112,7 @@
112112 <Image Source="{TemplateBinding Icon}" VerticalAlignment="Center" Stretch="Uniform" Width="18"/>
113113 <TextBlock VerticalAlignment="Center" Text="{TemplateBinding Title}" IsEnabled="{TemplateBinding IsActive}" Foreground="{DynamicResource DefaultTextBrush}" Margin="15,0,0,0"/>
114114 </StackPanel>
115删除:
115新增:
116116
117117 </Grid>
118118 <Grid Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Top"
@@ -197,6 +197,34 @@
197197 <TextBlock x:Name="ToastText" Grid.Column="1" Text="{TemplateBinding ToastContent}" VerticalAlignment="Top" TextWrapping="WrapWithOverflow"/>
198198 </Grid>
199199 </Border>
200新增: <!--Dialog-->
201新增: <Border
202新增: Padding="15,15"
203新增: CornerRadius="10"
204新增: Width="300"
205新增: x:Name="DialogBorder" Background="White" HorizontalAlignment="Center" VerticalAlignment="Top" Panel.ZIndex="1000">
206新增: <Border.RenderTransform>
207新增: <TransformGroup>
208新增: <TranslateTransform Y="-150"/>
209新增: </TransformGroup>
210新增: </Border.RenderTransform>
211新增: <Border.Effect>
212新增: <DropShadowEffect BlurRadius="10" Color="Black" Opacity=".1"/>
213新增: </Border.Effect>
214新增: <Grid >
215新增: <Grid.RowDefinitions>
216新增: <RowDefinition Height="40"/>
217新增: <RowDefinition Height="auto"/>
218新增: <RowDefinition Height="auto"/>
219新增: </Grid.RowDefinitions>
220新增: <TextBlock Text="{TemplateBinding DialogTitle}" FontSize="16" FontWeight="Bold"/>
221新增: <TextBlock Grid.Row="1" Text="{TemplateBinding DialogMessage}" VerticalAlignment="Top" TextWrapping="WrapWithOverflow"/>
222新增: <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,20,0,0">
223新增: <button:Button x:Name="CancelBtn" Width="100">取消</button:Button>
224新增: <button:Button x:Name="ConfirmBtn" Background="{DynamicResource ThemeBrush}" Foreground="White" Width="100" Margin="10,0,0,0">确定</button:Button>
225新增: </StackPanel>
226新增: </Grid>
227新增: </Border>
200228 <!--遮罩层-->
201229 <Border x:Name="Masklayer" Background="Black" Opacity="0"></Border>
202230 </Grid>
修改UI/UI.csproj+2 −0看文件
@@ -204,7 +204,9 @@
204204 <Compile Include="Models\UINotifyPropertyChanged.cs" />
205205 <Compile Include="Models\WebSiteDetailPageModel.cs" />
206206 <Compile Include="Servicers\IStatusBarIconServicer.cs" />
207新增: <Compile Include="Servicers\IUIServicer.cs" />
207208 <Compile Include="Servicers\StatusBarIconServicer.cs" />
209新增: <Compile Include="Servicers\UIServicer.cs" />
208210 <Compile Include="Servicers\WebSiteContextMenuServicer.cs" />
209211 <Compile Include="Servicers\AppContextMenuServicer.cs" />
210212 <Compile Include="Servicers\IWebSiteContextMenuServicer.cs" />
修改UI/ViewModels/SettingPageVM.cs+12 −6看文件
@@ -13,6 +13,7 @@ using System.Threading.Tasks;
1313using System.Windows.Forms;
1414using UI.Controls;
1515using UI.Models;
16新增:using UI.Servicers;
1617
1718namespace UI.ViewModels
1819{
@@ -23,17 +24,19 @@ namespace UI.ViewModels
2324 private readonly MainViewModel mainVM;
2425 private readonly IData data;
2526 private readonly IWebData _webData;
27新增: private readonly IUIServicer _uiServicer;
2628 public Command OpenURL { get; set; }
2729 public Command CheckUpdate { get; set; }
2830 public Command DelDataCommand { get; set; }
2931 public Command ExportDataCommand { get; set; }
3032
31删除: public SettingPageVM(IAppConfig appConfig, MainViewModel mainVM, IData data, IWebData webData)
33新增: public SettingPageVM(IAppConfig appConfig, MainViewModel mainVM, IData data, IWebData webData, IUIServicer uiServicer_)
3234 {
3335 this.appConfig = appConfig;
3436 this.mainVM = mainVM;
3537 this.data = data;
3638 _webData = webData;
39新增: _uiServicer = uiServicer_;
3740
3841 OpenURL = new Command(new Action<object>(OnOpenURL));
3942 CheckUpdate = new Command(new Action<object>(OnCheckUpdate));
@@ -164,7 +167,7 @@ namespace UI.ViewModels
164167 }
165168 }
166169
167删除: private void OnDelData(object obj)
170新增: private async void OnDelData(object obj)
168171 {
169172 if (DelDataStartMonthDate > DelDataEndMonthDate)
170173 {
@@ -172,10 +175,13 @@ namespace UI.ViewModels
172175 return;
173176 }
174177
175删除: data.ClearRange(DelDataStartMonthDate, DelDataEndMonthDate);
176删除: _webData.Clear(DelDataStartMonthDate, DelDataEndMonthDate);
177删除:
178删除: mainVM.Toast("操作已完成", Controls.Window.ToastType.Success);
178新增: bool isConfirm = await _uiServicer.ShowConfirmDialogAsync("删除确认", "是否执行此操作?");
179新增: if (isConfirm)
180新增: {
181新增: data.ClearRange(DelDataStartMonthDate, DelDataEndMonthDate);
182新增: _webData.Clear(DelDataStartMonthDate, DelDataEndMonthDate);
183新增: mainVM.Toast("操作已完成", Controls.Window.ToastType.Success);
184新增: }
179185 }
180186
181187 private void OnExportData(object obj)