using System.Security.Cryptography; using ImageBoardServerApp.Data; using ImageBoardServerApp.Data.Repository; namespace ImageBoardServerApp.Util; public class TheManager { private static long getDiff(PostData post) { return (DateTimeOffset.Now.ToUnixTimeMilliseconds() - post.CreatedAt); } /// /// Returns the value without a minus, if it exists /// /// /// private static long getValue(long num) { return num < 0 ? num * -1 : num; } public static long getBumpValue(PostData post) { return (post.IsSticky ? 999999999999999999 + getDiff(post) : 10 * 60000 - getDiff(post) + (60000 * (post.Comments.Count + 1))); } public static async Task> getPostList(string boardTag) { List threads = await PostsRepository.getPostsByBoardAsync(boardTag); return threads.OrderBy(getBumpValue).Reverse().ToList(); } public static async Task bumpThreads(BoardData board) { List sortedThreads = await getPostList(board.Tag); if (sortedThreads.Count > board.maxThreads + 1) { for (int i = board.maxThreads + 1; i >= sortedThreads.Count; ++i) { if (sortedThreads[i].IsSticky) continue; await deleteThread(sortedThreads[i]); } } } public static async Task deleteThread(PostData post) { foreach (var c in post.Comments) { if (c.Image != null) { await deleteImage(c.Image); } } await deleteImage(post.Image); await PostsRepository.deletePostAsync(post.PostID); } public static async Task deleteComment(CommentData comment) { if (comment.Image != null) { await deleteImage(comment.Image); } await CommentsRepository.deleteCommentAsync(comment.CommentID); } public static async Task deleteImage(ImageData imageData) { string path = $"./wwwroot{imageData.ImageLocation}"; Console.WriteLine(path); try { File.Delete(path); } catch (FileNotFoundException) { Console.WriteLine("The file was not found."); } catch (Exception e) { Console.WriteLine("An error occurred: " + e.Message); } } public static async Task isGETComment(string board, int GET) { return await CommentsRepository.getCommentByGETAsync(board, GET) != null; } public static string getmd5Hash() { var bytes = new byte[16]; using (var rng = new RNGCryptoServiceProvider()) { rng.GetBytes(bytes); } return BitConverter.ToString(bytes).Replace("-", "").ToLower(); } }