wait for the screen is complete

This commit is contained in:
chrys 2017-08-25 20:02:19 +02:00
parent 8660f62e52
commit ad27496e3d
2 changed files with 28 additions and 6 deletions

View File

@ -128,8 +128,8 @@ class driver():
currScreen = str(tty.read()[3:-1]) currScreen = str(tty.read()[3:-1])
oldScreen = currScreen oldScreen = currScreen
watchdog = select.epoll() watchdog = select.epoll()
watchdog.register(vcsa[currScreen], select.EPOLLPRI) watchdog.register(vcsa[currScreen], select.POLLPRI | select.POLLERR)
watchdog.register(tty, select.EPOLLPRI) watchdog.register(tty, select.POLLPRI | select.POLLERR)
lastScreenContent = b'' lastScreenContent = b''
while active.value == 1: while active.value == 1:
changes = watchdog.poll(2) changes = watchdog.poll(2)
@ -146,7 +146,7 @@ class driver():
except: except:
pass pass
try: try:
watchdog.register(vcsa[ currScreen ], select.EPOLLPRI) watchdog.register(vcsa[ currScreen ], select.POLLPRI | select.POLLERR)
except: except:
pass pass
oldScreen = currScreen oldScreen = currScreen
@ -159,8 +159,17 @@ class driver():
else: else:
self.env['runtime']['debug'].writeDebugOut('ScreenUpdate',debug.debugLevel.INFO) self.env['runtime']['debug'].writeDebugOut('ScreenUpdate',debug.debugLevel.INFO)
vcsa[currScreen].seek(0) vcsa[currScreen].seek(0)
screenContent = vcsa[currScreen].read() dirtyContent = vcsa[currScreen].read()
if screenContent != lastScreenContent: screenContent = b''
timeout = time.time()
if dirtyContent != lastScreenContent:
while screenContent != dirtyContent:
screenContent = dirtyContent
if time.time() - timeout > 0.2:
break
vcsa[currScreen].seek(0)
dirtyContent = vcsa[currScreen].read()
time.sleep(0.01)
eventQueue.put({"Type":fenrirEventType.ScreenUpdate,"Data":None}) eventQueue.put({"Type":fenrirEventType.ScreenUpdate,"Data":None})
lastScreenContent = screenContent lastScreenContent = screenContent
except Exception as e: except Exception as e:

View File

@ -7,6 +7,9 @@
from core import debug from core import debug
from collections import Counter from collections import Counter
import string import string
from select import select
from select import epoll
import select
def removeNonprintable(text): def removeNonprintable(text):
# Get the difference of all ASCII characters from the set of printable characters # Get the difference of all ASCII characters from the set of printable characters
@ -20,6 +23,16 @@ def insertNewlines(string, every=64):
def splitEvery(toSplit, every=64): def splitEvery(toSplit, every=64):
return list(toSplit[i:i+every] for i in range(0, len(toSplit), every)) return list(toSplit[i:i+every] for i in range(0, len(toSplit), every))
def hasMoreRead(fd):
r, w, e = select([fd], [], [], 0)
return (fd in r)
def hasMorePollPri(fd):
p = epoll()
p.register(fd, select.POLLPRI | select.POLLERR)
r = p.poll(0)
return (fd in r)
def trackHighlights(oldAttr, newAttr, text, lenght): def trackHighlights(oldAttr, newAttr, text, lenght):
result = '' result = ''
currCursor = None currCursor = None