@@ -4,13 +4,14 @@ local helpers = require('tests.helpers')
44local output_window = require (' opencode.ui.output_window' )
55local config = require (' opencode.config' )
66
7- local M = {}
8-
9- M .events = {}
10- M .current_index = 0
11- M .stop = false
12- M .last_loaded_file = nil
13- M .headless_mode = false
7+ local M = {
8+ events = {},
9+ event_index = 0 , -- which events we have dispatched up to
10+ events_received = 0 , -- how many events we have received, just used for logging
11+ stop = false ,
12+ last_loaded_file = nil ,
13+ headless_mode = false ,
14+ }
1415
1516function M .load_events (file_path )
1617 file_path = file_path or ' tests/data/simple-session.json'
@@ -42,6 +43,7 @@ function M.load_events(file_path)
4243end
4344
4445function M .setup_windows (opts )
46+ require (' opencode.ui.highlight' ).setup ()
4547 helpers .replay_setup ()
4648
4749 vim .schedule (function ()
@@ -64,9 +66,9 @@ function M.replay_next(steps)
6466 steps = tonumber (steps ) or 1
6567
6668 for _ = 1 , steps do
67- if M .current_index < # M .events then
68- M .current_index = M .current_index + 1
69- helpers .replay_event (M .events [M .current_index ])
69+ if M .event_index < # M .events then
70+ M .event_index = M .event_index + 1
71+ helpers .replay_event (M .events [M .event_index ])
7072 else
7173 vim .notify (' No more events to replay' , vim .log .levels .WARN )
7274 return
@@ -100,7 +102,7 @@ function M.replay_all(delay_ms)
100102 -- will call renderer
101103 local function tick ()
102104 M .replay_next ()
103- if M .current_index >= # M .events or M .stop then
105+ if M .event_index >= # M .events or M .stop then
104106 state .job_count = 0
105107
106108 if M .headless_mode then
@@ -121,15 +123,16 @@ function M.replay_stop()
121123end
122124
123125function M .reset ()
124- M .current_index = 0
126+ M .event_index = 0
127+ M .events_received = 0
125128 M .clear ()
126129end
127130
128131function M .show_status ()
129132 local status = string.format (
130133 ' Replay Status:\n Events loaded: %d\n Current index: %d\n Playing: %s' ,
131134 # M .events ,
132- M .current_index ,
135+ M .event_index ,
133136 not M .stop
134137 )
135138 vim .notify (status , vim .log .levels .INFO )
@@ -345,7 +348,8 @@ function M.start(opts)
345348
346349 -- NOTE: the index numbers will be incorrect when event collapsing happens
347350 local log_event = function (type , event )
348- local index = M .current_index
351+ M .events_received = M .events_received + 1
352+ local index = M .events_received
349353 local count = # M .events
350354 local id = event .info and event .info .id
351355 or event .part and event .part .id
@@ -357,33 +361,26 @@ function M.start(opts)
357361 vim .notify (' Event ' .. index .. ' /' .. count .. ' : ' .. type .. ' ' .. id , vim .log .levels .INFO )
358362 end
359363
360- state .event_manager :subscribe (' session.updated' , function (event )
361- log_event (' session.updated' , event )
362- end )
363- state .event_manager :subscribe (' session.compacted' , function (event )
364- log_event (' session.compacted' , event )
365- end )
366- state .event_manager :subscribe (' session.error' , function (event )
367- log_event (' session.error' , event )
368- end )
369- state .event_manager :subscribe (' message.updated' , function (event )
370- log_event (' message.updated' , event )
371- end )
372- state .event_manager :subscribe (' message.removed' , function (event )
373- log_event (' message.removed' , event )
374- end )
375- state .event_manager :subscribe (' message.part.updated' , function (event )
376- log_event (' message.part.updated' , event )
377- end )
378- state .event_manager :subscribe (' message.removed' , function (event )
379- log_event (' message.removed' , event )
380- end )
381- state .event_manager :subscribe (' permission.updated' , function (event )
382- log_event (' permission.updated' , event )
383- end )
384- state .event_manager :subscribe (' permission.replied' , function (event )
385- log_event (' permission.replied' , event )
386- end )
364+ local events = {
365+ ' session.updated' ,
366+ ' session.compacted' ,
367+ ' session.error' ,
368+ ' session.idle' ,
369+ ' message.updated' ,
370+ ' message.removed' ,
371+ ' message.part.updated' ,
372+ ' message.removed' ,
373+ ' permission.updated' ,
374+ ' permission.replied' ,
375+ ' file.edited' ,
376+ ' server.connected' ,
377+ }
378+
379+ for _ , event_name in ipairs (events ) do
380+ state .event_manager :subscribe (event_name , function (event )
381+ log_event (event_name , event )
382+ end )
383+ end
387384end
388385
389386return M
0 commit comments