Browse Source

FIX Double Buffer issue, improved FileBuffer indexing

pull/7/head
Eugenio Parodi 5 years ago
parent
commit
4e3c0826bf
  1. 12
      TermTk/TTkCore/canvas.py
  2. 35
      TermTk/TTkCore/filebuffer.py

12
TermTk/TTkCore/canvas.py

@ -85,10 +85,14 @@ class TTkCanvas:
for i in range(0,h): for i in range(0,h):
self._data[i] = [' ']*w self._data[i] = [' ']*w
self._colors[i] = [TTkColor.RST]*w self._colors[i] = [TTkColor.RST]*w
self._width = w
self._height = h
if self._doubleBuffer: if self._doubleBuffer:
self._bufferedData, self._bufferedColors = self.copy() self._bufferedData = [[]]*h
self._bufferedColors = [[]]*h
for i in range(0,h):
self._bufferedData[i] = ['']*w
self._bufferedColors[i] = [TTkColor.RST]*w
self._height = h
self._width = w
def resize(self, w, h): def resize(self, w, h):
self._newWidth = w self._newWidth = w
@ -550,7 +554,7 @@ class TTkCanvas:
color = self._colors[y][x] color = self._colors[y][x]
if empty: if empty:
ansi = color+lbt.Mv.t(y+1,x+1) ansi = color+lbt.Mv.t(y+1,x+1)
lastcolor = color #lastcolor = color
empty = False empty = False
if color != lastcolor: if color != lastcolor:
ansi += color-lastcolor ansi += color-lastcolor

35
TermTk/TTkCore/filebuffer.py

@ -69,7 +69,7 @@ class TTkFileBuffer():
self._window = window self._window = window
self._numW = numWindows self._numW = numWindows
self._filename = filename self._filename = filename
self._indexes = [] self._indexes = [0]
self._indexesMutex = threading.Lock() self._indexesMutex = threading.Lock()
self._width=0 self._width=0
self._buffer = [None]*self._numW self._buffer = [None]*self._numW
@ -132,27 +132,24 @@ class TTkFileBuffer():
lines = 0 lines = 0
offset = 0 offset = 0
fileSize = os.stat(self._filename).st_size fileSize = os.stat(self._filename).st_size
linesToRead = 100000 chunkSize = 0x1000000 # ~16M
with open(self._filename,'r') as infile: with open(self._filename,'r') as infile:
for line in infile: while (chunk:=infile.read(chunkSize)):
lines += 1 start = 0
indexes.append(offset) while (index:=chunk.find('\n',start))!=-1:
offset += len(line) indexes.append(index+offset+1)
if len(indexes) == linesToRead: start = index+1
self._indexesMutex.acquire() self._indexesMutex.acquire()
self._indexes += indexes self._indexes += indexes
self._pages += [None]*(1+(self.getLen()//self._window)-(len(self._pages))) self._pages += [None]*(1+(self.getLen()//self._window)-(len(self._pages)))
self._indexesMutex.release() self._indexesMutex.release()
indexes = [] indexes = []
# TTkLog.debug(f"{self._filename}: Indexed {int(100*offset/fileSize)}% {len(self._indexes)} ...") offset+=len(chunk)
self.indexUpdated.emit(offset/fileSize) self.indexUpdated.emit(offset/fileSize)
self._indexesMutex.acquire() # TTkLog.debug(f"{self._filename} {offset/fileSize} ...")
self._indexes += indexes
self._pages += [None]*(1+(self.getLen()//self._window)-(len(self._pages)))
self._indexesMutex.release()
# TTkLog.debug(f"{self._filename}: Indexed {len(self._indexes)} END")
self.indexUpdated.emit(1.0) self.indexUpdated.emit(1.0)
self.indexed.emit() self.indexed.emit()
# TTkLog.debug(f"{self._filename} {offset/fileSize} END")
def searchRe(self, regex): def searchRe(self, regex):
indexes = [] indexes = []

Loading…
Cancel
Save