Skip to content

Commit

Permalink
Update Scheduler, Add config for GetTimeFormat Config, Add Logger
Browse files Browse the repository at this point in the history
  • Loading branch information
TheXorog committed May 30, 2023
1 parent d810b82 commit 96040d2
Show file tree
Hide file tree
Showing 5 changed files with 168 additions and 98 deletions.
4 changes: 3 additions & 1 deletion Global.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
global using System.Text;
global using System.Threading.Tasks;
global using System.Drawing;
global using Microsoft.Extensions.Logging;

global using static Xorog.UniversalExtensions.UniversalExtensionsEnums;
global using static Xorog.UniversalExtensions.Internal;
global using static Xorog.UniversalExtensions.InternalSheduler;
global using static Xorog.UniversalExtensions.InternalSheduler;
global using static Xorog.UniversalExtensions.Log;
125 changes: 86 additions & 39 deletions Internal/Internal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,71 +6,64 @@ internal static string GetShortTimeFormat(this TimeSpan _timespan, TimeFormat ti
{
switch (timeFormat)
{
case TimeFormat.HOURS:
case TimeFormat.DAYS:
if (_timespan.TotalDays >= 1)
return $"{(Math.Floor(_timespan.TotalHours).ToString().Length == 1 ? $"0{Math.Floor(_timespan.TotalHours)}" : Math.Floor(_timespan.TotalHours))}:" +
$"{(_timespan.Minutes.ToString().Length == 1 ? $"0{_timespan.Minutes}" : _timespan.Minutes)}:" +
$"{(_timespan.Seconds.ToString().Length == 1 ? $"0{_timespan.Seconds}" : _timespan.Seconds)}";
return $"{Math.Floor(_timespan.TotalDays).ToString().PadLeft(2, '0')}:{_timespan.Hours.ToString().PadLeft(2, '0')}:{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}";

if (_timespan.TotalHours >= 1)
return $"{(_timespan.Hours.ToString().Length == 1 ? $"0{_timespan.Hours}" : _timespan.Hours)}:" +
$"{(_timespan.Minutes.ToString().Length == 1 ? $"0{_timespan.Minutes}" : _timespan.Minutes)}:" +
$"{(_timespan.Seconds.ToString().Length == 1 ? $"0{_timespan.Seconds}" : _timespan.Seconds)}";
return $"{Math.Floor(_timespan.TotalHours).ToString().PadLeft(2, '0')}:{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}";

return $"{(_timespan.Minutes.ToString().Length == 1 ? $"0{_timespan.Minutes}" : _timespan.Minutes)}:" +
$"{(_timespan.Seconds.ToString().Length == 1 ? $"0{_timespan.Seconds}" : _timespan.Seconds)}";
case TimeFormat.DAYS:
return $"{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}";

case TimeFormat.HOURS:
if (_timespan.TotalDays >= 1)
return $"{(Math.Floor(_timespan.TotalDays).ToString().Length == 1 ? $"0{Math.Floor(_timespan.TotalDays)}" : Math.Floor(_timespan.TotalDays))}" +
$"{(_timespan.Hours.ToString().Length == 1 ? $"0{_timespan.Hours}" : _timespan.Hours)}:" +
$"{(_timespan.Minutes.ToString().Length == 1 ? $"0{_timespan.Minutes}" : _timespan.Minutes)}:" +
$"{(_timespan.Seconds.ToString().Length == 1 ? $"0{_timespan.Seconds}" : _timespan.Seconds)}";
return $"{Math.Floor(_timespan.TotalHours).ToString().PadLeft(2, '0')}:" +
$"{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}";

if (_timespan.TotalHours >= 1)
return $"{(Math.Floor(_timespan.TotalHours).ToString().Length == 1 ? $"0{Math.Floor(_timespan.TotalHours)}" : Math.Floor(_timespan.TotalHours))}:" +
$"{(_timespan.Minutes.ToString().Length == 1 ? $"0{_timespan.Minutes}" : _timespan.Minutes)}:" +
$"{(_timespan.Seconds.ToString().Length == 1 ? $"0{_timespan.Seconds}" : _timespan.Seconds)}";
return $"{_timespan.Hours.ToString().PadLeft(2, '0')}:" +
$"{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}";

return $"{(_timespan.Minutes.ToString().Length == 1 ? $"0{_timespan.Minutes}" : _timespan.Minutes)}:" +
$"{(_timespan.Seconds.ToString().Length == 1 ? $"0{_timespan.Seconds}" : _timespan.Seconds)}";
return $"{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}";

case TimeFormat.MINUTES:
if (_timespan.TotalHours >= 1)
return $"{(Math.Floor(_timespan.TotalMinutes).ToString().Length == 1 ? $"0{Math.Floor(_timespan.TotalMinutes)}" : Math.Floor(_timespan.TotalMinutes))}:" +
$"{(_timespan.Seconds.ToString().Length == 1 ? $"0{_timespan.Seconds}" : _timespan.Seconds)}";
return $"{Math.Floor(_timespan.TotalMinutes).ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}";

return $"{(_timespan.Minutes.ToString().Length == 1 ? $"0{_timespan.Minutes}" : _timespan.Minutes)}:" +
$"{(_timespan.Seconds.ToString().Length == 1 ? $"0{_timespan.Seconds}" : _timespan.Seconds)}";
return $"{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}";

default:
return _timespan.ToString();
}
}
internal static string GetTimeFormat(this TimeSpan _timespan, TimeFormat timeFormat)
internal static string GetTimeFormat(this TimeSpan _timespan, TimeFormat timeFormat, HumanReadableTimeFormatConfig? config = null)
{
config ??= new();

switch (timeFormat)
{
case TimeFormat.HOURS:
case TimeFormat.DAYS:
if (_timespan.TotalDays >= 1)
return $"{Math.Floor(_timespan.TotalHours)} hours, {_timespan.Minutes} minutes";
return $"{Math.Floor(_timespan.TotalDays)} {config.DaysString}, {_timespan.Hours} {config.HoursString}";

if (_timespan.TotalHours >= 1)
return $"{_timespan.Hours} hours, {_timespan.Minutes} minutes";
return $"{_timespan.Hours} {config.HoursString}, {_timespan.Minutes} {config.MinutesString}";

return $"{_timespan.Minutes} minutes, {_timespan.Seconds} seconds";
case TimeFormat.DAYS:
return $"{_timespan.Minutes} {config.MinutesString}, {_timespan.Seconds} {config.SecondsString}";

case TimeFormat.HOURS:
if (_timespan.TotalDays >= 1)
return $"{Math.Floor(_timespan.TotalDays)} days, {_timespan.Hours} hours";
return $"{Math.Floor(_timespan.TotalHours)} {config.HoursString}, {_timespan.Minutes} {config.MinutesString}";

if (_timespan.TotalHours >= 1)
return $"{_timespan.Hours} hours, {_timespan.Minutes} minutes";
return $"{_timespan.Hours} {config.HoursString}, {_timespan.Minutes} {config.MinutesString}";

return $"{_timespan.Minutes} minutes, {_timespan.Seconds} seconds";
return $"{_timespan.Minutes} {config.MinutesString}, {_timespan.Seconds} {config.SecondsString}";

case TimeFormat.MINUTES:
if (_timespan.TotalHours >= 1)
return $"{Math.Floor(_timespan.TotalMinutes)} minutes, {_timespan.Seconds} seconds";
return $"{_timespan.Minutes} minutes, {_timespan.Seconds} seconds";
return $"{Math.Floor(_timespan.TotalMinutes)} {config.MinutesString}, {_timespan.Seconds} {config.SecondsString}";
return $"{_timespan.Minutes} {config.MinutesString}, {_timespan.Seconds} {config.MinutesString}";

default:
return _timespan.ToString();
Expand All @@ -88,12 +81,66 @@ internal static int GetDiff(Color color, Color baseColor)

public class InternalSheduler
{
public static Dictionary<string, taskInfo> registeredScheduledTasks { get; internal set; } = new Dictionary<string, taskInfo>();
public static Dictionary<string, ScheduledTask> RegisteredScheduledTasks { get; internal set; } = new Dictionary<string, ScheduledTask>();

public class taskInfo
public class ScheduledTask
{
public string customId { get; internal set; } = "";
internal CancellationTokenSource? tokenSource { get; set; }
public DateTime? runTime { get; internal set; }
public ScheduledTask()
{
this.Uid = Guid.NewGuid().ToString();
}

/// <summary>
/// The unique identifier of this task.
/// </summary>
public string Uid { get; internal set; }

/// <summary>
/// The custom data asscociated with this task.
/// </summary>
public object CustomData { get; internal set; }

/// <summary>
/// The time this task will run.
/// </summary>
public DateTime? RunTime { get; internal set; }

/// <summary>
/// The <see cref="CancellationTokenSource"/> to prematurely dequeue this task.
/// </summary>
internal CancellationTokenSource? TokenSource { get; set; } = new();

/// <summary>
/// Delete this task.
/// </summary>
public void Delete() =>
UniversalExtensions.DeleteScheduledTask(Uid);
}
}

public class HumanReadableTimeFormatConfig
{
/// <summary>
/// The string used for days.
/// Defaults to: "days".
/// </summary>
public string DaysString { get; set; } = "days";

/// <summary>
/// The string used for hours.
/// Defaults to: "hours".
/// </summary>
public string HoursString { get; set; } = "hours";

/// <summary>
/// The string used for minutes.
/// Defaults to: "minutes".
/// </summary>
public string MinutesString { get; set; } = "minutes";

/// <summary>
/// The string used for seconds.
/// Defaults to: "seconds".
/// </summary>
public string SecondsString { get; set; } = "seconds";
}
15 changes: 15 additions & 0 deletions Log.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Project Makoto
// Copyright (C) 2023 Fortunevale
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY

namespace Xorog.UniversalExtensions;

internal class Log
{
internal static ILogger? _logger { get; set; }
}
Loading

0 comments on commit 96040d2

Please sign in to comment.