!7 compact module AllOnlineComputers > DynCalculatedList { LS computerIDs, data; transient StefansOS_ConnectToServer connector; L calc() { ret data; } start { ownResource(connector = new StefansOS_ConnectToServer); connector.onLine = voidfunc(S line) { new Matches m; if (swic(line, "ComputerIDs = ", m)) { computerIDs = safeUnstruct($1); updateList(); vmBus_send('onlineComputerIDs, computerIDs); setModuleName(n2(computerIDs, "Online Computer")); } }; connector.startWithSubs("computerIDs"); } afterVisualize { listPopupMenuItem(list, "Send clipboard there", rThread { pcall-infobox { dm_sendClipboardTo_verbose(extractLastComputerID(selected())); } }); } // API LS onlineComputerIDs() { ret computerIDs; } bool isComputerOnline(S computerID) { ret contains(computerIDs, computerID); } void updateList { fO computerNames = dm_computerNames_opt(); setField(data := sortedIC(map(computerIDs, func(S id) -> S { S name = dm_callOpt(computerNames, 'nameForID, id); ret (eq(id, computerID()) ? "[this one] " : "") + (nempty(name) ? name + " (" + id + ")" : id); }))); } }