more tests for scrolling
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user