@@ -82,6 +82,8 @@ var state: struct {
8282 slock_pin_input1 : ? []const u8 = null , // verified against a second time input
8383 // sysupdates channel
8484 curr_sysupdates_chan : ? comm.Message.SysupdatesChan = null ,
85+ sysupdates_switch_inprogress : bool = false ,
86+ sysupdates_target_chan : ? comm.Message.SysupdatesChan = null ,
8587} = .{};
8688
8789/// creates a settings panel allowing to change hostname and lnd alias,
@@ -240,6 +242,31 @@ pub fn update(sett: comm.Message.Settings) !void {
240242
241243 state .curr_sysupdates_chan = sett .sysupdates .channel ;
242244
245+ // If a sysupdates switch is in progress, keep spinner until daemon confirms the target channel.
246+ if (state .sysupdates_switch_inprogress ) {
247+ if (state .sysupdates_target_chan ) | target | {
248+ if (sett .sysupdates .channel == target ) {
249+ // Switch confirmed by daemon -> return UI to steady state.
250+ state .sysupdates_switch_inprogress = false ;
251+ state .sysupdates_target_chan = null ;
252+
253+ tab .sysupdates .card .spin (.off );
254+ tab .sysupdates .chansel .enable ();
255+ tab .sysupdates .switchbtn .label .setTextStatic (textSwitch );
256+
257+ // Hide selected value & require an explicit new selection to enable SWITCH again.
258+ tab .sysupdates .chansel .setText ("" );
259+ tab .sysupdates .switchbtn .disable ();
260+ } else {
261+ // Still waiting -> keep UI locked/spinning.
262+ tab .sysupdates .card .spin (.on );
263+ tab .sysupdates .chansel .disable ();
264+ tab .sysupdates .switchbtn .disable ();
265+ tab .sysupdates .switchbtn .label .setTextStatic ("UPDATING ..." );
266+ }
267+ }
268+ }
269+
243270 // nodename
244271 state .curr_nodename .set (sett .hostname );
245272 try tab .nodename .currname .setTextFmt (& buf , cmark ++ "CURRENT NAME:# {s}" , .{state .curr_nodename .val ()});
@@ -387,12 +414,17 @@ export fn nm_sysupdates_switch_click(_: *lvgl.LvEvent) void {
387414fn switchSysupdates (name : []const u8 ) ! void {
388415 const chan = std .meta .stringToEnum (comm .Message .SysupdatesChan , name ) orelse return error .InvalidSysupdateChannel ;
389416 logger .debug ("switching sysupdates to channel {}" , .{chan });
417+ state .sysupdates_switch_inprogress = true ;
418+ state .sysupdates_target_chan = chan ;
390419
391420 tab .sysupdates .switchbtn .disable ();
392421 tab .sysupdates .switchbtn .label .setTextStatic ("UPDATING ..." );
393422 tab .sysupdates .chansel .disable ();
394423 tab .sysupdates .card .spin (.on );
395424 errdefer {
425+ state .sysupdates_switch_inprogress = false ;
426+ state .sysupdates_target_chan = null ;
427+
396428 tab .sysupdates .card .spin (.off );
397429 tab .sysupdates .chansel .enable ();
398430 tab .sysupdates .switchbtn .enable ();
0 commit comments