1 // Copyright (C) 2018 Kazuhiro Fujieda <fujieda@users.osdn.me>
\r
3 // Licensed under the Apache License, Version 2.0 (the "License");
\r
4 // you may not use this file except in compliance with the License.
\r
5 // You may obtain a copy of the License at
\r
7 // http://www.apache.org/licenses/LICENSE-2.0
\r
9 // Unless required by applicable law or agreed to in writing, software
\r
10 // distributed under the License is distributed on an "AS IS" BASIS,
\r
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
12 // See the License for the specific language governing permissions and
\r
13 // limitations under the License.
\r
16 using System.Globalization;
\r
18 namespace KancolleSniffer
\r
20 public class NameAndTimer
\r
22 public string Name { get; set; }
\r
23 public AlarmTimer Timer { get; set; }
\r
25 public NameAndTimer()
\r
27 Timer = new AlarmTimer();
\r
31 public class AlarmTimer
\r
33 private readonly TimeSpan _spare;
\r
34 private bool _finished;
\r
36 public bool IsFinished(DateTime now) => EndTime != DateTime.MinValue && EndTime - now < _spare || _finished;
\r
38 public DateTime EndTime { get; private set; }
\r
40 public AlarmTimer(int spare = 60)
\r
42 _spare = TimeSpan.FromSeconds(spare);
\r
45 public void SetEndTime(double time)
\r
47 SetEndTime((int)time == 0
\r
49 : new DateTime(1970, 1, 1).ToLocalTime().AddSeconds(time / 1000));
\r
52 public void SetEndTime(DateTime time)
\r
58 public void Finish()
\r
63 public bool CheckAlarm(DateTime prev, DateTime now)
\r
65 return EndTime != DateTime.MinValue && prev < EndTime - _spare && EndTime - _spare <= now;
\r
68 public string ToString(DateTime now, bool endTime = false)
\r
70 if (EndTime == DateTime.MinValue && !_finished)
\r
73 return EndTime.ToString(@"dd\ HH\:mm", CultureInfo.InvariantCulture);
\r
74 var rest = _finished || EndTime - now < TimeSpan.Zero ? TimeSpan.Zero : EndTime - now;
\r
75 return $"{(int)rest.TotalHours:d2}:" + rest.ToString(@"mm\:ss", CultureInfo.InvariantCulture);
\r