more tests for scrolling

This commit is contained in:
2021-10-25 16:20:30 +02:00
parent 3662b47651
commit 603b748180
5 changed files with 173 additions and 18 deletions

View File

@@ -1,8 +1,8 @@
import math
import threading
from typing import List
import os
from line import Line
import os
from settings import Settings
@@ -13,11 +13,12 @@ class LogFileModel:
self._file = file
def data(self, byte_offset, scroll_lines, lines) -> List[Line]:
#print("data(%s, %s, %s)" % (byte_offset, scroll_lines, lines))
print("data(%s, %s, %s)" % (byte_offset, scroll_lines, lines))
lines_before_offset: List[Line] = []
lines_after_offset: List[Line] = []
result: List[Line] = []
lines_to_find = lines + abs(scroll_lines)
lines_to_return = math.ceil(lines)
with self._lock:
# TODO handle lines longer than 4096 bytes
@@ -42,18 +43,12 @@ class LogFileModel:
eof_reached = False
break
if scroll_lines > 0:
result = result + lines_before_offset[-scroll_lines:]
result = result + lines_after_offset
elif eof_reached:
# we always return the number of requested lines even if we reach the end of the file
lines_to_return_from_before_offset = int(lines_to_find - len(lines_after_offset));
#print(lines_to_return_from_before_offset)
if lines_to_return_from_before_offset > 0:
result = result + lines_before_offset[-lines_to_return_from_before_offset:]
result = result + lines_after_offset
all_lines = lines_before_offset + lines_after_offset
start = max(0, len(lines_before_offset) + scroll_lines)
if start + lines_to_return-1 < len(all_lines):
result = all_lines[start:start+lines_to_return]
else:
result = result + lines_after_offset[-scroll_lines:]
result = all_lines[-lines_to_return+1:]
#print("returning %s lines" % (len(result)))
return result