Added Raid Reminders
This commit is contained in:
parent
d0ff8251a2
commit
5a5c3df1a9
7 changed files with 232 additions and 12 deletions
|
@ -1,4 +1,5 @@
|
|||
using System.ComponentModel.DataAnnotations;
|
||||
using System;
|
||||
|
||||
namespace Lieb.Models.GuildWars2.Raid
|
||||
{
|
||||
|
@ -10,12 +11,22 @@ namespace Lieb.Models.GuildWars2.Raid
|
|||
Channel = 2
|
||||
}
|
||||
|
||||
public enum ReminderTimeType
|
||||
{
|
||||
Static = 1,
|
||||
Dynamic = 2
|
||||
}
|
||||
|
||||
public int RaidReminderId { get; set; }
|
||||
|
||||
[Required]
|
||||
[Range(1, 2, ErrorMessage = "Please select a reminder type")]
|
||||
public ReminderType Type { get; set; }
|
||||
|
||||
[Required]
|
||||
[Range(1, 2, ErrorMessage = "Please select a reminder type")]
|
||||
public ReminderTimeType TimeType { get; set; }
|
||||
|
||||
[Required]
|
||||
[StringLength(1000, ErrorMessage = "Message too long (1000 character limit).")]
|
||||
public string Message { get; set; } = string.Empty;
|
||||
|
@ -33,4 +44,66 @@ namespace Lieb.Models.GuildWars2.Raid
|
|||
|
||||
public Raid Raid { get; set; }
|
||||
}
|
||||
|
||||
public class StaticRaidReminder : RaidReminder
|
||||
{
|
||||
public DateTimeOffset ReminderDate {get; set; } = DateTime.Now.Date;
|
||||
public DateTimeOffset ReminderTime {get; set; }
|
||||
|
||||
|
||||
public StaticRaidReminder()
|
||||
{
|
||||
TimeType = ReminderTimeType.Static;
|
||||
}
|
||||
|
||||
public StaticRaidReminder(RaidReminder reminder, DateTimeOffset reminderDate, DateTimeOffset remindertime)
|
||||
{
|
||||
var properties = reminder.GetType().GetProperties();
|
||||
properties.ToList().ForEach(property =>
|
||||
{
|
||||
var value = reminder.GetType().GetProperty(property.Name).GetValue(reminder, null);
|
||||
this.GetType().GetProperty(property.Name).SetValue(this, value, null);
|
||||
});
|
||||
ReminderDate = reminderDate;
|
||||
ReminderTime = remindertime;
|
||||
}
|
||||
}
|
||||
|
||||
public class DynamicRaidReminder : RaidReminder
|
||||
{
|
||||
public int DaysBeforeRaid {get; set; }
|
||||
public int HoursBeforeRaid {get; set; }
|
||||
public int MinutesBeforeRaid {get; set; }
|
||||
|
||||
public DynamicRaidReminder()
|
||||
{
|
||||
TimeType = ReminderTimeType.Dynamic;
|
||||
}
|
||||
|
||||
public DynamicRaidReminder(RaidReminder reminder, DateTimeOffset raidStartTimeUTC)
|
||||
{
|
||||
var properties = reminder.GetType().GetProperties();
|
||||
properties.ToList().ForEach(property =>
|
||||
{
|
||||
var value = reminder.GetType().GetProperty(property.Name).GetValue(reminder, null);
|
||||
this.GetType().GetProperty(property.Name).SetValue(this, value, null);
|
||||
});
|
||||
TimeSpan reminderOffset = raidStartTimeUTC - reminder.ReminderTimeUTC;
|
||||
DaysBeforeRaid = (int)reminderOffset.TotalDays;
|
||||
HoursBeforeRaid = (int)(reminderOffset.TotalHours % 24);
|
||||
MinutesBeforeRaid = (int)(reminderOffset.TotalMinutes % 60);
|
||||
}
|
||||
|
||||
public static DynamicRaidReminder Create30MinReminder()
|
||||
{
|
||||
return new DynamicRaidReminder(){
|
||||
DaysBeforeRaid = 0,
|
||||
HoursBeforeRaid = 0,
|
||||
MinutesBeforeRaid = 30,
|
||||
Message = "The raid starts in 30 minutes.",
|
||||
TimeType = ReminderTimeType.Dynamic,
|
||||
Type = ReminderType.User
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue