feat(ui): abas passivas sem badges na lista lateral (v1)

Sub-abas de chat e screencast são criadas em segundo plano ao receber; D23 adiado na UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Gabriel Felipe Souza SantosandCursor committed 2026-10-27 18:27:09 -03:00
1 parent 1414f59a20
commit fc657345ba
10 files changed
+89 -200

No files matched your search

@@ -562,10 +562,11 @@ public class ScreenCastPanel extends JPanel {
}
receiveScopes.put(viewKey, scope != null ? scope : ScreenCastReceiveScope.BROADCAST);
resolveSenderIp(message.getName(), viewKey);
sessionTabs.addOrSelectTab(viewKey, message.getName(), message.getName(), new JPanel(), true);
sessionTabs.addTabIfAbsent(viewKey, message.getName(), message.getName(), new JPanel(), true);
setBodyContent(viewKey, new JScrollPane(new JLabel(new ImageIcon(image))));
sessionTabs.selectTab(viewKey);
showBodyCard(viewKey);
if (viewKey.equals(sessionTabs.selectedKey())) {
showBodyCard(viewKey);
}
} catch (IOException ex) {
updateTabError(viewKey, message.getName(), "Erro ao ler imagem: " + ex.getMessage(), scope);
}
@@ -588,8 +589,10 @@ public class ScreenCastPanel extends JPanel {
receiveScopes.put(tabKey, scope != null ? scope : ScreenCastReceiveScope.BROADCAST);
JLabel label = new JLabel("<html><p style='color:#c62828'>" + error + "</p></html>");
setBodyContent(tabKey, label);
sessionTabs.addOrSelectTab(tabKey, title, title, new JPanel(), true);
showBodyCard(tabKey);
sessionTabs.addTabIfAbsent(tabKey, title, title, new JPanel(), true);
if (tabKey.equals(sessionTabs.selectedKey())) {
showBodyCard(tabKey);
}
}
private void ensureBodyPanel(String key) {
@@ -4,8 +4,6 @@ import java.util.List;
import pitiupi.api.plugin.PeerActionsRegistrar;
import pitiupi.api.plugin.PluginWorkspace;
import pitiupi.api.plugin.PeerActivityFocusTokens;
import pitiupi.application.activity.PeerActivityInbox;
import pitiupi.application.peeractions.PeerAction;
import pitiupi.application.presence.UserPeerView;
import pitiupi.application.peeractions.PeerActionTarget;
@@ -110,7 +108,6 @@ public class ScreenCastPlugin extends Plugin {
return;
}
ScreenCastReceiveScope scope = classifyIncoming(msg);
recordScreenCastActivity(msg, scope);
screenCastPanel.receiveScreenCastMessage(msg, scope);
}
}
@@ -137,27 +134,4 @@ public class ScreenCastPlugin extends Plugin {
return ScreenCastReceiveScope.BROADCAST;
}
private void recordScreenCastActivity(ScreenCastMessage msg, ScreenCastReceiveScope scope) {
if (connectionManager == null) {
return;
}
PeerActivityInbox inbox = connectionManager.getPeerActivityInbox();
if (scope == ScreenCastReceiveScope.DIRECT) {
for (UserPeerView view : connectionManager.getPresenceService().listPeerViews()) {
if (!view.isBroadcastTarget()
&& msg.getName() != null
&& msg.getName().equals(view.getDisplayName())
&& view.getInstanceId() != null) {
inbox.signal(
view.getInstanceId(),
getIdentifier(),
"screencast.peer",
PeerActivityFocusTokens.peerInstance(view.getInstanceId())
);
return;
}
}
}
inbox.signalBroadcast(getIdentifier(), "screencast.multicast", PeerActivityFocusTokens.broadcast());
}
}