diff options
author | bptato <nincsnevem662@gmail.com> | 2023-09-24 15:25:39 +0200 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2023-09-24 15:25:39 +0200 |
commit | 088202c92f86b94262c173d210885c0ae579f148 (patch) | |
tree | c11a7fdf640e7320f29e14df1ed77132f2fd6920 /src | |
parent | e0745a3e88d737833c520ae363eaad9d43f1786d (diff) | |
download | chawan-088202c92f86b94262c173d210885c0ae579f148.tar.gz |
client, timeout: simplify
We don't use the generic feature of selectors, so just unify the client & buffer timeout types.
Diffstat (limited to 'src')
-rw-r--r-- | src/html/dom.nim | 2 | ||||
-rw-r--r-- | src/js/timeout.nim | 18 | ||||
-rw-r--r-- | src/local/client.nim | 16 |
3 files changed, 18 insertions, 18 deletions
diff --git a/src/html/dom.nim b/src/html/dom.nim index b7b23356..0fac35e7 100644 --- a/src/html/dom.nim +++ b/src/html/dom.nim @@ -99,7 +99,7 @@ type jsrt*: JSRuntime jsctx*: JSContext document* {.jsufget.}: Document - timeouts*: TimeoutState[int] + timeouts*: TimeoutState navigate*: proc(url: URL) # Navigator stuff diff --git a/src/js/timeout.nim b/src/js/timeout.nim index 0e31d8a3..4657ac35 100644 --- a/src/js/timeout.nim +++ b/src/js/timeout.nim @@ -4,20 +4,20 @@ import tables import js/javascript -type TimeoutState*[T] = object +type TimeoutState* = object timeoutid: int32 timeouts: Table[int32, tuple[handler: (proc()), fdi: int]] intervals: Table[int32, tuple[handler: (proc()), fdi: int, tofree: JSValue]] timeout_fdis: Table[int, int32] interval_fdis: Table[int, int32] - selector: Selector[T] #TODO would be better with void... + selector: Selector[int] #TODO would be better with void... jsctx: JSContext err: Stream #TODO shouldn't be needed evalJSFree: proc(src, file: string) #TODO ew -func newTimeoutState*[T](selector: Selector[T], jsctx: JSContext, - err: Stream, evalJSFree: proc(src, file: string)): TimeoutState[T] = - return TimeoutState[T]( +func newTimeoutState*(selector: Selector[int], jsctx: JSContext, err: Stream, + evalJSFree: proc(src, file: string)): TimeoutState = + return TimeoutState( selector: selector, jsctx: jsctx, err: err, @@ -28,11 +28,11 @@ func empty*(state: TimeoutState): bool = return state.timeouts.len == 0 and state.intervals.len == 0 #TODO varargs -proc setTimeout*[T: JSValue|string, S](state: var TimeoutState[S], handler: T, +proc setTimeout*[T: JSValue|string](state: var TimeoutState, handler: T, timeout = 0i32): int32 = let id = state.timeoutid inc state.timeoutid - let fdi = state.selector.registerTimer(max(timeout, 1), true, default(S)) + let fdi = state.selector.registerTimer(max(timeout, 1), true, 0) state.timeout_fdis[fdi] = id when T is string: let evalJSFree = state.evalJSFree @@ -68,11 +68,11 @@ proc clearInterval*(state: var TimeoutState, id: int32) = state.intervals.del(id) #TODO varargs -proc setInterval*[T: JSValue|string, S](state: var TimeoutState[S], handler: T, +proc setInterval*[T: JSValue|string](state: var TimeoutState, handler: T, interval = 0i32): int32 = let id = state.timeoutid inc state.timeoutid - let fdi = state.selector.registerTimer(max(interval, 1), false, default(S)) + let fdi = state.selector.registerTimer(max(interval, 1), false, 0) state.interval_fdis[fdi] = id when T is string: let evalJSFree = state.evalJSFree diff --git a/src/local/client.nim b/src/local/client.nim index 591e07c7..b7e8d329 100644 --- a/src/local/client.nim +++ b/src/local/client.nim @@ -71,9 +71,9 @@ type pager {.jsget.}: Pager precnum: int32 # current number prefix (when vi-numeric-prefix is true) s: string # current input buffer - selector: Selector[Container] + selector: Selector[int] store {.jsget, jsset.}: Document - timeouts: TimeoutState[Container] + timeouts: TimeoutState userstyle: CSSStylesheet Console = ref object @@ -317,7 +317,7 @@ proc acceptBuffers(client: Client) = container.setStream(stream) let fd = stream.source.getFd() client.fdmap[int(fd)] = container - client.selector.registerHandle(fd, {Read}, nil) + client.selector.registerHandle(fd, {Read}, 0) client.pager.handleEvents(container) client.pager.procmap.clear() @@ -393,8 +393,8 @@ proc handleError(client: Client, fd: int) = proc inputLoop(client: Client) = let selector = client.selector discard c_setvbuf(client.console.tty, nil, IONBF, 0) - selector.registerHandle(int(client.console.tty.getFileHandle()), {Read}, nil) - let sigwinch = selector.registerSignal(int(SIGWINCH), nil) + selector.registerHandle(int(client.console.tty.getFileHandle()), {Read}, 0) + let sigwinch = selector.registerSignal(int(SIGWINCH), 0) while true: let events = client.selector.select(-1) for event in events: @@ -532,11 +532,11 @@ proc launchClient*(client: Client, pages: seq[string], dump = not open(tty, "/dev/tty", fmRead) else: dump = true - let selector = newSelector[Container]() + let selector = newSelector[int]() let efd = int(client.forkserver.estream.fd) - selector.registerHandle(efd, {Read}, nil) + selector.registerHandle(efd, {Read}, 0) client.loader.registerFun = proc(fd: int) = - selector.registerHandle(fd, {Read}, nil) + selector.registerHandle(fd, {Read}, 0) client.loader.unregisterFun = proc(fd: int) = selector.unregister(fd) client.selector = selector |