Skip to content

Commit 4c7adba

Browse files
authored
Merge pull request #56 from kristapsk/fix-sysupdates-switch-ui
Fix SYSUPDATES switch spinner by stopping only after daemon confirms target channel
2 parents f88ed25 + 947d27d commit 4c7adba

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

src/ui/settings.zig

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 {
387414
fn 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

Comments
 (0)