diff --git a/src/Discord Media Loader.Application/Classes/Job.cs b/src/Discord Media Loader.Application/Classes/Job.cs index 4ea1cfc..e69fce4 100644 --- a/src/Discord Media Loader.Application/Classes/Job.cs +++ b/src/Discord Media Loader.Application/Classes/Job.cs @@ -16,7 +16,6 @@ using Discord; using Discord.WebSocket; using DML.Application.Classes; -using DML.Application.Core; using DML.Client; using SweetLib.Utils.Extensions; using System; @@ -39,7 +38,7 @@ namespace DML.AppCore.Classes public int Id { get; set; } public ulong GuildId { get; set; } public ulong ChannelId { get; set; } - public ulong LastMessageId { get; set; } + public ulong LastMessageId { get; set; } = 0; private bool IsValid { get; set; } = true; internal JobState State { get; set; } = JobState.Idle; @@ -90,13 +89,10 @@ namespace DML.AppCore.Classes /// Returns true if the newest messages have been scanned. internal async Task Scan() { - /* Debug($"Starting scan of guild {GuildId} channel {ChannelId}..."); var result = new List(); + const ushort limit = 100; - var limit = 100; - var lastId = ulong.MaxValue; - var isFirst = true; var finished = false; var scanStartTimeStamp = DateTime.UtcNow; @@ -110,35 +106,17 @@ namespace DML.AppCore.Classes return true; } - if (Math.Abs(StopTimestamp) < 0.4) - { - StopTimestamp = KnownTimestamp; - } - Trace("Initialized scanning parameters."); - while (!finished) { Trace("Entering scanning loop..."); var messages = new List(); Trace($"Downloading next {limit} messages..."); - if (isFirst) - { - var realMessages = await channel.GetMessagesAsync(limit).ToArray(); - - messages.AddRange(realMessages.SelectMany(realMessageArray => realMessageArray)); - } - else - { - var realMessages = await channel.GetMessagesAsync(lastId, Direction.Before, limit).ToArray(); - - messages.AddRange(realMessages.SelectMany(realMessageArray => realMessageArray)); - } - - Trace($"Downloaded {messages.Count} messages."); - isFirst = false; + messages.AddRange((await channel.GetMessagesAsync(LastMessageId, Direction.After, limit).ToArray()).SelectMany(collection => collection)); + Debug($"Downloaded {messages.Count} messages."); + Trace("Iterating messages..."); foreach (var m in messages) { if (!IsValid) @@ -149,17 +127,10 @@ namespace DML.AppCore.Classes Application.Core.Core.Scheduler.MessagesScanned++; Debug($"Processing message {m.Id}"); - if (m.Id < lastId) + if (m.Id > LastMessageId) { - Trace($"Updating lastId ({lastId}) to {m.Id}"); - lastId = m.Id; - } - - if (m.CreatedAt.UtcDateTime.ToUnixTimeStamp() <= StopTimestamp) - { - Debug("Found a message with a known timestamp...Stopping scan."); - finished = true; - continue; + Trace($"Updating lastId ({LastMessageId}) to {m.Id}"); + LastMessageId = m.Id; } Trace($"Message {m.Id} has {m.Attachments.Count} attachments."); @@ -172,7 +143,7 @@ namespace DML.AppCore.Classes Debug($"Finished message {m.Id}"); } - finished = finished || messages.Count < limit; + finished = messages.Count < limit; } Trace($"Downloaded all messages for guild {GuildId} channel {ChannelId}."); @@ -180,48 +151,27 @@ namespace DML.AppCore.Classes Trace("Sorting messages..."); result.Sort((a, b) => DateTime.Compare(a.CreatedAt.UtcDateTime, b.CreatedAt.UtcDateTime)); - foreach (var r in result) + foreach (var message in result) { - foreach (var a in r.Attachments) + foreach (var attachment in message.Attachments) { var mediaData = new MediaData { - Id = a.Id, - GuildId = (r.Channel as SocketTextChannel)?.Guild?.Id ?? 0, - ChannelId = r.Channel.Id, - DownloadSource = a.Url, - Filename = a.Filename, - TimeStamp = r.CreatedAt.UtcDateTime.ToUnixTimeStamp(), - FileSize = a.Size + Id = attachment.Id, + GuildId = (message.Channel as SocketTextChannel)?.Guild?.Id ?? 0, + ChannelId = message.Channel.Id, + DownloadSource = attachment.Url, + Filename = attachment.Filename, + TimeStamp = message.CreatedAt.UtcDateTime.ToUnixTimeStamp(), + FileSize = attachment.Size }; mediaData.Store(); } } - - if (result.Count > 0) - { - Trace("Updating StopTimestamp for next scan..."); - StopTimestamp = result[result.Count - 1].CreatedAt.UtcDateTime.ToUnixTimeStamp(); - KnownTimestamp = StopTimestamp; - Store(); - return false; - } - else - { - // if we found any messages we remember the timestamp of starting so we donĀ“t have to scan all past messages.... - StopTimestamp = scanStartTimeStamp.ToUnixTimeStamp(); - KnownTimestamp = StopTimestamp; - Store(); - - var realLastMessage = await channel.GetMessagesAsync(1).ToArray(); - return scanStartTimeStamp > (realLastMessage.SelectMany(realLastMessageArray => realLastMessageArray) - .FirstOrDefault()?.CreatedAt.UtcDateTime ?? - scanStartTimeStamp); - } + Debug($"Fisnished scan of guild {GuildId} channel {ChannelId}."); - */ - return false; + return true; } public void Stop()