You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 line
3.8KB

  1. using MailKit;
  2. using System.Text.Json.Serialization;
  3. namespace Services
  4. {
  5. public class ThreadItemMini
  6. {
  7. public string Id { get; set; } = "";
  8. public string? FollowUpDraft { get; set; }
  9. }
  10. public class ThreadStore
  11. {
  12. public List<ThreadItem> Threads { get; set; } = new();
  13. }
  14. public class ThreadItem
  15. {
  16. #region Constructeurs
  17. //Necessaire pour la déserialisation en json
  18. public ThreadItem()
  19. {
  20. OverdueDays = 7;
  21. }
  22. //Necessaire pour passer le paramètre lors de la création d'objets
  23. public ThreadItem(int overdueDays=7)
  24. {
  25. OverdueDays = overdueDays;
  26. }
  27. #endregion
  28. #region Méthode privée
  29. private bool IsOverDueThread()
  30. {
  31. var t = this;
  32. if (t.LastFollowUpForMessageId == null || t.FollowUpDraft == null)
  33. {
  34. return false;
  35. }
  36. var m = t.Messages.Where(m => m.Id == LastFollowUpForMessageId).FirstOrDefault();
  37. if (m == null)
  38. {
  39. return false;
  40. }
  41. if (m.Date < DateTimeOffset.UtcNow.AddDays(-1 * OverdueDays))
  42. return true;
  43. else
  44. return false;
  45. }
  46. #endregion
  47. #region Variable
  48. [JsonIgnore]
  49. public int OverdueDays { get; set; } = 7;
  50. #endregion
  51. #region Propriétés
  52. public string Id { get; set; } = Guid.NewGuid().ToString();
  53. public string Subject { get; set; } = "";
  54. public List<MailMessageItem> Messages { get; set; } = new();
  55. public string? FollowUpDraft { get; set; }
  56. public string? LastFollowUpForMessageId { get; set; }
  57. public bool SubjectClosed { get; set; } = false;
  58. public DateTimeOffset DateMessage { get; set; }
  59. public DateTimeOffset DateLastMessage { get; set; }
  60. [JsonIgnore]
  61. public string DateMessageSTR { get => DateMessage.ToString("dd/MM/yyyy HH:mm"); }
  62. [JsonIgnore]
  63. public string DateLastMessageSTR { get => DateLastMessage.ToString("dd/MM/yyyy HH:mm"); }
  64. [JsonIgnore]
  65. public IEnumerable<MailMessageItem> MessagesSorted => Messages.OrderBy(m => m.Date.UtcDateTime);
  66. [JsonIgnore]
  67. public bool IsOverdue
  68. {
  69. get
  70. {
  71. return IsOverDueThread();
  72. }
  73. }
  74. #endregion
  75. }
  76. public class MailMessageItem
  77. {
  78. public string Id { get; set; } = "";
  79. public string InReplyTo { get; set; } = "";
  80. /*[JsonIgnore]
  81. public string UidString
  82. {
  83. get
  84. {
  85. return Uid.ToString();
  86. }
  87. set
  88. {
  89. if (value != "0")
  90. Uid = UniqueId.Parse(value);
  91. }
  92. }*/
  93. public string Folder { get; set; } = "";
  94. public string Subject { get; set; } = "";
  95. public string From { get; set; } = "";
  96. public string To { get; set; } = "";
  97. public string Direction { get; set; } = "out"; // "in" ou "out"
  98. public DateTimeOffset Date { get; set; }
  99. public string Body { get; set; } = "";
  100. public bool RequiresResponse { get; set; }
  101. public bool CoversAllPoints { get; set; }
  102. //[JsonIgnore]
  103. //public UniqueId Uid { get; set; }
  104. [JsonIgnore]
  105. public string DateSTR { get => $"Le : {Date.DateTime.ToString("dd/MM/yyyy HH:mm")}"; }
  106. [JsonIgnore]
  107. public string FromSTR { get => $"De : {From}"; }
  108. [JsonIgnore]
  109. public string ToSTR { get => $"Pour : {To}"; }
  110. [JsonIgnore]
  111. public string FolderSTR { get => $"Dossier : {Folder}"; }
  112. [JsonIgnore]
  113. public string SubjectSTR { get => $"Sujet : {Subject}"; }
  114. }
  115. }