Previev Sorting Algorytm
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
ecc3a4d321
commit
e16d6258c3
@ -5,36 +5,77 @@ namespace NeDvachAPI.BufferControllers
|
|||||||
{
|
{
|
||||||
public class APIThreadBuffer
|
public class APIThreadBuffer
|
||||||
{
|
{
|
||||||
private static List<Post> ThreadsPrewievs;
|
private static List<Post>[] ThreadsPrewievs = new List<Post>[0];
|
||||||
private static List<Post>[] Threads = new List<Post>[0];
|
private static List<Post>[] Threads = new List<Post>[0];
|
||||||
public static void WriteThreadPreviewsBuffer(List<Post> OPPostsToWrite) //add list of OP-posts and last post to buffer
|
public static void WriteThreadPreviewsBuffer(List<Post> OPPostsToWrite) //add list of OP-posts and last post to buffer
|
||||||
{
|
{
|
||||||
ThreadsPrewievs = OPPostsToWrite;
|
for(int pos = 0; pos < OPPostsToWrite.Count; pos ++)
|
||||||
|
{
|
||||||
|
var deb = new List<Post>();
|
||||||
|
deb.Add(OPPostsToWrite[pos]);
|
||||||
|
ThreadsPrewievs = ThreadsPrewievs.Append(deb).ToArray();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Post> GetThreadPreviews()
|
public static void AppendToThreadPreviews(int index,Post toAppend)
|
||||||
|
{
|
||||||
|
ThreadsPrewievs[index].Add(toAppend);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Post>[] GetThreadPreviews()
|
||||||
{
|
{
|
||||||
return ThreadsPrewievs;
|
return ThreadsPrewievs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void WriteThreadsBuffer(List<Post> ThreadToAdd) //add thread's posts from DB to buffer
|
public static void UpdateThreadsPreviews(int threadId)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Пытаюсь обновить превью треда " + threadId);
|
||||||
|
|
||||||
|
var newPreview = new List<Post>();
|
||||||
|
newPreview.Add(ThreadsPrewievs[threadId -1][0]);
|
||||||
|
int targetLength = APIThreadBuffer.GetThreadLength(threadId - 1);
|
||||||
|
for (int lastofthree = targetLength- 2; lastofthree <= targetLength; lastofthree ++)
|
||||||
|
{
|
||||||
|
newPreview.Add(GetSinglePost(threadId - 1,lastofthree));
|
||||||
|
}
|
||||||
|
ThreadsPrewievs[threadId -1] = newPreview;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void AppendThreadsBuffer(List<Post> ThreadToAdd) //add thread's posts from DB to buffer
|
||||||
{
|
{
|
||||||
Threads = Threads.Append(ThreadToAdd).ToArray();
|
Threads = Threads.Append(ThreadToAdd).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int GetThreadLength(int threadId)
|
||||||
|
{
|
||||||
|
return Threads[threadId].Count;
|
||||||
|
}
|
||||||
|
|
||||||
public static List<Post> GetThread(int threadId)
|
public static List<Post> GetThread(int threadId)
|
||||||
{
|
{
|
||||||
if (threadId < Threads.Length + 1 & threadId != 0)
|
if (threadId < Threads.Length + 1 & threadId != 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
return Threads[threadId - 1];
|
return Threads[threadId - 1];
|
||||||
|
|
||||||
}
|
}
|
||||||
else return null;
|
else return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Post GetSinglePost(int thread, int postPosition)
|
||||||
|
{
|
||||||
|
List<Post> postsList = Threads[thread];
|
||||||
|
return postsList[postPosition-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void UpdateThreadPosts(int threadId)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Пытаюсь обновить тред " + threadId);
|
||||||
|
Threads[threadId - 1] = DBchat.PostsList("b", threadId);
|
||||||
|
}
|
||||||
|
|
||||||
public static void RefreshThread(int threadId)
|
public static void RefreshThread(int threadId)
|
||||||
{
|
{
|
||||||
Threads[threadId - 1] = DBchat.PostsList("b", threadId);
|
UpdateThreadPosts(threadId);
|
||||||
|
UpdateThreadsPreviews(threadId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,15 +8,25 @@ namespace NeDvachAPI.BufferControllers
|
|||||||
|
|
||||||
public static bool FillBuffer(string board) //method to get buffer of information, which is being ran while API is started
|
public static bool FillBuffer(string board) //method to get buffer of information, which is being ran while API is started
|
||||||
{
|
{
|
||||||
List<Post> posts = DBchat.ThreadsList(board);
|
List<Post> Previews = DBchat.ThreadsList(board);
|
||||||
APIThreadBuffer.WriteThreadPreviewsBuffer(posts);
|
APIThreadBuffer.WriteThreadPreviewsBuffer(Previews);
|
||||||
Console.WriteLine("Заполняю буфер оп-постами");
|
Console.WriteLine("Заполняю буфер оп-постами");
|
||||||
|
|
||||||
for (int threadId = 1; threadId <= posts.Count; threadId++)
|
for (int threadId = 1; threadId <= Previews.Count; threadId++)
|
||||||
{
|
{
|
||||||
APIThreadBuffer.WriteThreadsBuffer(DBchat.PostsList(board, threadId));
|
APIThreadBuffer.AppendThreadsBuffer(DBchat.PostsList(board, threadId));
|
||||||
}
|
}
|
||||||
Console.WriteLine($@"Буферизую треды с {1} по {posts.Count}.");
|
Console.WriteLine($@"Буферизую треды с {1} по {Previews.Count}.");
|
||||||
|
|
||||||
|
for (int preview = 0; preview < Previews.Count; preview++)
|
||||||
|
{
|
||||||
|
int targetLength = APIThreadBuffer.GetThreadLength(preview);
|
||||||
|
for (int lastofthree = targetLength- 2; lastofthree <= targetLength; lastofthree ++)
|
||||||
|
{
|
||||||
|
APIThreadBuffer.AppendToThreadPreviews(preview,APIThreadBuffer.GetSinglePost(preview,lastofthree));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,9 +77,9 @@ namespace NeDvachAPI.DBControllers
|
|||||||
FROM posts
|
FROM posts
|
||||||
WHERE
|
WHERE
|
||||||
is_op = {true}
|
is_op = {true}
|
||||||
ORDER BY post_id DESC
|
ORDER BY thread_id DESC
|
||||||
) subquery
|
) subquery
|
||||||
ORDER BY post_id ASC", conn))
|
ORDER BY thread_id ASC", conn))
|
||||||
{
|
{
|
||||||
|
|
||||||
var reader = command.ExecuteReader();
|
var reader = command.ExecuteReader();
|
||||||
|
Reference in New Issue
Block a user