diff --git a/ExtraIsland/Components/BetterCountdown/BetterCountdown.axaml.cs b/ExtraIsland/Components/BetterCountdown/BetterCountdown.axaml.cs
index 52ba596..3fd5e04 100644
--- a/ExtraIsland/Components/BetterCountdown/BetterCountdown.axaml.cs
+++ b/ExtraIsland/Components/BetterCountdown/BetterCountdown.axaml.cs
@@ -39,6 +39,7 @@ void OnLoad() {
SilentUpdater();
OnTimeChanged += DetectEvent;
OnTimeChanged += DetectTimeUp;
+ OnTimeChanged += DetectTimeNode;
Settings.OnAccuracyChanged += UpdateAccuracy;
Settings.OnNoGapDisplayChanged += UpdateGap;
LessonsService.PostMainTimerTicked += UpdateTime;
@@ -115,7 +116,7 @@ void DetectEvent() {
_dyAnimator.Update(_days,Settings.IsAnimationEnabled);
}
}
- if ((_hours != span.Hours.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 1)) {
+ if ((_hours != span.Hours.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 1 | Settings.LatestNode is not null)) {
int hourI = span.Hours;
int hourCi = (int)Settings.Accuracy == 1 & Settings.IsCorrectorEnabled ? hourI + 1 : hourI;
_hours = hourCi.ToString();
@@ -132,7 +133,7 @@ void DetectEvent() {
_hrAnimator.Update(_hours,Settings.IsAnimationEnabled);
}
}
- if ((_minutes != span.Minutes.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 2)) {
+ if ((_minutes != span.Minutes.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 2 | Settings.LatestNode is not null)) {
int minuteI = span.Minutes;
int minuteCi = (int)Settings.Accuracy == 2 & Settings.IsCorrectorEnabled ? minuteI + 1 : minuteI;
_minutes = minuteCi.ToString();
@@ -156,7 +157,7 @@ void DetectEvent() {
}
}
// ReSharper disable once InvertIf
- if ((_seconds != span.Seconds.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 3)) {
+ if ((_seconds != span.Seconds.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 3 | Settings.LatestNode is not null)) {
_seconds = span.Seconds.ToString();
string s = _seconds;
if (s.Length == 1) {
@@ -175,12 +176,12 @@ void SilentUpdater() {
_days = (int)Settings.Accuracy == 0 ? (dayI + 1).ToString() : dayI.ToString();
_dyAnimator.SilentUpdate(_days);
}
- if ((_hours != span.Hours.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 1)) {
+ if ((_hours != span.Hours.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 1 | Settings.LatestNode is not null)) {
int hourI = span.Hours;
_hours = (int)Settings.Accuracy == 1 ? (hourI + 1).ToString() : hourI.ToString();
_hrAnimator.SilentUpdate(_hours);
}
- if ((_minutes != span.Minutes.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 2)) {
+ if ((_minutes != span.Minutes.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 2 | Settings.LatestNode is not null)) {
int minuteI = span.Minutes;
_minutes = (int)Settings.Accuracy == 2 ? (minuteI + 1).ToString() : minuteI.ToString();
string m = _minutes;
@@ -190,7 +191,7 @@ void SilentUpdater() {
_mnAnimator.SilentUpdate(m);
}
// ReSharper disable once InvertIf
- if ((_seconds != span.Seconds.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 3)) {
+ if ((_seconds != span.Seconds.ToString() | _isAccurateChanged) & (Settings.IsNotify | (int)Settings.Accuracy >= 3 | Settings.LatestNode is not null)) {
_seconds = span.Seconds.ToString();
string s = _seconds;
if (s.Length == 1) {
@@ -200,36 +201,58 @@ void SilentUpdater() {
}
}
- void Notify() {
- TimeUpNotification.Notify(string.Format(Settings.Message, Settings.Prefix, Settings.Suffix),
+ void TimeUpNotify() {
+ BetterCountdownNotification.Notify(Settings.Name, Settings.Message, 0,
Settings.LeftIcon, Settings.RightIcon);
Settings.IsNotified = true;
}
+ void TimeNodeNotify(TimeNode tn) {
+ BetterCountdownNotification.Notify(Settings.Name, tn.NotifyText, 1,
+ Settings.LeftIcon, Settings.RightIcon, tn.ToString());
+ _isTimeNodeDetected = true;
+ }
void DetectTimeUp() {
if (!Settings.IsNotify || Settings.IsNotified) return;
if (Settings.IsCorrectorEnabled) {
if ((int)Settings.Accuracy == 1 & _days == "0" & _hours == "1" & _minutes == "0" & _seconds == "-1") {
- Notify();
+ TimeUpNotify();
}
if ((int)Settings.Accuracy == 2 & _days == "0" & _hours == "0" & _minutes == "1" & _seconds == "-1") {
- Notify();
+ TimeUpNotify();
}
if ((int)Settings.Accuracy == 3 & _days == "0" & _hours == "0" & _minutes == "0" & _seconds == "0") {
- Notify();
+ TimeUpNotify();
}
} else {
if (_days == "0" & _hours == "0" & _minutes == "0" & _seconds == "0") {
- Notify();
+ TimeUpNotify();
}
}
}
+ bool _isTimeNodeDetected = false;
+ void DetectTimeNode() {
+ if (Settings.LatestNode is null || _isTimeNodeDetected) return;
+ TimeSpan span = EiUtils.GetDateTimeSpan(Now,Settings.TargetDateTime);
+ if (span.Days==Settings.LatestNode.CountdownTime.Days
+ && span.Hours==Settings.LatestNode.CountdownTime.Hours
+ && span.Minutes==Settings.LatestNode.CountdownTime.Minutes
+ && span.Seconds==Settings.LatestNode.CountdownTime.Seconds) {
+ TimeNodeNotify(Settings.LatestNode);
+ Settings.LatestNode = Settings.Times[Settings.Times.IndexOf(Settings.LatestNode) + 1];
+ Console.WriteLine(Settings.LatestNode);
+ }
+ _isTimeNodeDetected = false;
+ }
void OnAttachedToVisualTree(object? sender, VisualTreeAttachmentEventArgs visualTreeAttachmentEventArgs) {
Dispatcher.UIThread.InvokeAsync(OnLoad);
+ Settings.Times.Config = Settings;
+ Settings.Times.GetLatest();
}
void OnDetachedFromVisualTree(object? sender,VisualTreeAttachmentEventArgs visualTreeAttachmentEventArgs) {
OnTimeChanged -= DetectEvent;
OnTimeChanged -= DetectTimeUp;
+ OnTimeChanged -= DetectTimeNode;
Settings.OnAccuracyChanged -= UpdateAccuracy;
Settings.OnNoGapDisplayChanged -= UpdateGap;
LessonsService.PostMainTimerTicked -= UpdateTime;
diff --git a/ExtraIsland/Components/BetterCountdown/BetterCountdownConfig.cs b/ExtraIsland/Components/BetterCountdown/BetterCountdownConfig.cs
index 6c1dd6e..12b9fdb 100644
--- a/ExtraIsland/Components/BetterCountdown/BetterCountdownConfig.cs
+++ b/ExtraIsland/Components/BetterCountdown/BetterCountdownConfig.cs
@@ -1,5 +1,6 @@
using System.ComponentModel;
using CommunityToolkit.Mvvm.ComponentModel;
+using ExtraIsland.Shared;
namespace ExtraIsland.Components;
@@ -7,6 +8,9 @@ namespace ExtraIsland.Components;
public class BetterCountdownConfig : ObservableObject {
public BetterCountdownConfig() {
Separators.PropertyChanged += (_,_) => OnPropertyChanged();
+ Console.WriteLine("Bcd Consturct!");
+ Times = [];
+ Times.Config = this;
TargetDateTime = DateTime.Now.AddMinutes(1);
}
@@ -17,6 +21,8 @@ public DateTime TargetDateTime {
if (_targetDateTime == value) return;
_targetDateTime = value;
IsNotified = false;
+
+ Times.GetLatest();
}
}
@@ -81,11 +87,22 @@ public CountdownAccuracy Accuracy {
public bool IsFocusedModeEnabled { get; set; }
public bool IsNotify {get; set;}
- public string Message { get; set; } = "{0} 已结束";
+ public string Name {get; set;} = "倒计时名称";
+ public string Message { get; set; } = "";
public string LeftIcon { get; set; } = "\uE352";
public string RightIcon { get; set; } = "";
+
+ //TimeNodeObservableCollection _times;
+
+ public TimeNodeObservableCollection Times {
+ get;
+ set;
+ }
+
+ public TimeNode? LatestNode { get; set; }
+
}
public class CountdownSeparatorConfigs : ObservableObject {
@@ -136,4 +153,15 @@ public enum CountdownAccuracy {
Minute,
[Description("秒")]
Second
+}
+
+public partial class TimeNode: ObservableObject {
+
+ [ObservableProperty]
+ TimeSpan _countdownTime = new TimeSpan(1, 1 ,1 ,1 );
+ public bool IsNotify { get; set; }
+ public String NotifyText { get; set; } = "距离{n}仅剩{t}";
+ public override string ToString() {
+ return CountdownTime.Days + "天" + CountdownTime.Hours + "小时" + CountdownTime.Minutes+"分"+CountdownTime.Seconds+"秒";
+ }
}
\ No newline at end of file
diff --git a/ExtraIsland/Components/BetterCountdown/BetterCountdownSettings.axaml b/ExtraIsland/Components/BetterCountdown/BetterCountdownSettings.axaml
index de2ec27..f9bd34c 100644
--- a/ExtraIsland/Components/BetterCountdown/BetterCountdownSettings.axaml
+++ b/ExtraIsland/Components/BetterCountdown/BetterCountdownSettings.axaml
@@ -82,6 +82,13 @@
+
+
+
+
+
@@ -100,6 +107,13 @@
+
+
+
+
+
@@ -163,18 +177,18 @@
+ Description="启用后,倒计时到后将进行提醒,">
-
-
-
-
-
+
+
+
+
+