This commit is contained in:
2022-08-28 14:13:29 +02:00
parent 95e5b944de
commit 44a1c77d3c

View File

@@ -21,7 +21,6 @@ class LogFileModel:
def __init__(self, file: str, settings: Settings): def __init__(self, file: str, settings: Settings):
self.settings = settings self.settings = settings
self._file = os.path.realpath(file) self._file = os.path.realpath(file)
# self._lock = threading.RLock()
def highlighters(self): def highlighters(self):
return Highlighting.read_config(self.settings) return Highlighting.read_config(self.settings)
@@ -63,7 +62,6 @@ class LogFileModel:
def write_range(self, start_byte: int, end_byte: int, file: str): def write_range(self, start_byte: int, end_byte: int, file: str):
# print("write range: %d - %d -> %s" % (start_byte, end_byte, file)) # print("write range: %d - %d -> %s" % (start_byte, end_byte, file))
# with self._lock, open(self._file, 'rb') as source, open(file, "w+b") as target:
with open(self._file, 'rb') as source, open(file, "w+b") as target: with open(self._file, 'rb') as source, open(file, "w+b") as target:
offset = start_byte offset = start_byte
source.seek(offset) source.seek(offset)
@@ -108,8 +106,6 @@ class LogFileModel:
lines_to_find = lines + abs(scroll_lines) lines_to_find = lines + abs(scroll_lines)
lines_to_return = math.ceil(lines) lines_to_return = math.ceil(lines)
# with self._lock:
if True:
# TODO handle lines longer than 4096 bytes # TODO handle lines longer than 4096 bytes
# TODO abort file open after a few secons: https://docs.python.org/3/library/signal.html#example # TODO abort file open after a few secons: https://docs.python.org/3/library/signal.html#example
with open(self._file, 'rb') as f: with open(self._file, 'rb') as f:
@@ -117,21 +113,17 @@ class LogFileModel:
# print("offset: %s byte_count: %d" % (offset, self.byte_count())) # print("offset: %s byte_count: %d" % (offset, self.byte_count()))
offset = max(0, offset - self.settings.max_line_length()) offset = max(0, offset - self.settings.max_line_length())
eof_reached = True
f.seek(offset) f.seek(offset)
while l := f.readline(): while l := f.readline():
new_offset = f.tell() new_offset = f.tell()
line = Line(offset, new_offset, line = Line(offset, new_offset, l.decode("utf8", errors="ignore"))
l.decode("utf8", errors="ignore") # .replace("\r", "").replace("\n", "")
)
# print("%s %s %s" %(line.byte_offset(), line.line(), line.byte_end()))
if line.byte_end() <= byte_offset: # line.byte_end() returns the end byte +1 if line.byte_end() <= byte_offset: # line.byte_end() returns the end byte +1
lines_before_offset.append(line) lines_before_offset.append(line)
else: else:
lines_after_offset.append(line) lines_after_offset.append(line)
offset = f.tell() offset = f.tell()
if len(lines_after_offset) >= lines_to_find: if len(lines_after_offset) >= lines_to_find:
eof_reached = False
break break
all_lines = lines_before_offset + lines_after_offset all_lines = lines_before_offset + lines_after_offset