1
- using Content . Shared . CartridgeLoader . Cartridges ;
1
+ using System . Linq ; // Emberfall
2
+ using Content . Client . _Emberfall . CartridgeLoader . Cartridges ; // Emberfall
3
+ using Content . Shared . _Emberfall . CartridgeLoader . Cartridges ; // Emberfall
4
+ using Content . Shared . CartridgeLoader . Cartridges ;
2
5
using Robust . Client . AutoGenerated ;
3
6
using Robust . Client . UserInterface . Controls ;
4
7
using Robust . Client . UserInterface . XAML ;
@@ -13,11 +16,112 @@ public LogProbeUiFragment()
13
16
RobustXamlLoader . Load ( this ) ;
14
17
}
15
18
16
- public void UpdateState ( List < PulledAccessLog > logs )
19
+ // Emberfall begin - Update to handle both types of data
20
+ public void UpdateState ( LogProbeUiState state )
17
21
{
18
22
ProbedDeviceContainer . RemoveAllChildren ( ) ;
19
23
20
- //Reverse the list so the oldest entries appear at the bottom
24
+ if ( state . NanoChatData != null )
25
+ {
26
+ SetupNanoChatView ( state . NanoChatData . Value ) ;
27
+ DisplayNanoChatData ( state . NanoChatData . Value ) ;
28
+ }
29
+ else
30
+ {
31
+ SetupAccessLogView ( ) ;
32
+ if ( state . PulledLogs . Count > 0 )
33
+ DisplayAccessLogs ( state . PulledLogs ) ;
34
+ }
35
+ }
36
+
37
+ private void SetupNanoChatView ( NanoChatData data )
38
+ {
39
+ TitleLabel . Text = Loc . GetString ( "log-probe-header-nanochat" ) ;
40
+ ContentLabel . Text = Loc . GetString ( "log-probe-label-message" ) ;
41
+
42
+ // Show card info if available
43
+ var cardInfo = new List < string > ( ) ;
44
+ if ( data . CardNumber != null )
45
+ cardInfo . Add ( Loc . GetString ( "log-probe-card-number" , ( "number" , $ "#{ data . CardNumber : D4} ") ) ) ;
46
+
47
+ // Add recipient count
48
+ cardInfo . Add ( Loc . GetString ( "log-probe-recipients" , ( "count" , data . Recipients . Count ) ) ) ;
49
+
50
+ CardNumberLabel . Text = string . Join ( " | " , cardInfo ) ;
51
+ CardNumberLabel . Visible = true ;
52
+ }
53
+
54
+ private void SetupAccessLogView ( )
55
+ {
56
+ TitleLabel . Text = Loc . GetString ( "log-probe-header-access" ) ;
57
+ ContentLabel . Text = Loc . GetString ( "log-probe-label-accessor" ) ;
58
+ CardNumberLabel . Visible = false ;
59
+ }
60
+
61
+ private void DisplayNanoChatData ( NanoChatData data )
62
+ {
63
+ // First add a recipient list entry
64
+ var recipientsList = Loc . GetString ( "log-probe-recipient-list" ) + "\n " + string . Join ( "\n " ,
65
+ data . Recipients . Values
66
+ . OrderBy ( r => r . Name )
67
+ . Select ( r => $ " { r . Name } " +
68
+ ( string . IsNullOrEmpty ( r . JobTitle ) ? "" : $ " ({ r . JobTitle } )") +
69
+ $ " | #{ r . Number : D4} ") ) ;
70
+
71
+ var recipientsEntry = new LogProbeUiEntry ( 0 , "---" , recipientsList ) ;
72
+ ProbedDeviceContainer . AddChild ( recipientsEntry ) ;
73
+
74
+ var count = 1 ;
75
+ foreach ( var ( partnerId , messages ) in data . Messages )
76
+ {
77
+ // Show only successfully delivered incoming messages
78
+ var incomingMessages = messages
79
+ . Where ( msg => msg . SenderId == partnerId && ! msg . DeliveryFailed )
80
+ . OrderByDescending ( msg => msg . Timestamp ) ;
81
+
82
+ foreach ( var msg in incomingMessages )
83
+ {
84
+ var messageText = Loc . GetString ( "log-probe-message-format" ,
85
+ ( "sender" , $ "#{ msg . SenderId : D4} ") ,
86
+ ( "recipient" , $ "#{ data . CardNumber : D4} ") ,
87
+ ( "content" , msg . Content ) ) ;
88
+
89
+ var entry = new NanoChatLogEntry (
90
+ count ,
91
+ TimeSpan . FromSeconds ( Math . Truncate ( msg . Timestamp . TotalSeconds ) ) . ToString ( ) ,
92
+ messageText ) ;
93
+
94
+ ProbedDeviceContainer . AddChild ( entry ) ;
95
+ count ++ ;
96
+ }
97
+
98
+ // Show only successfully delivered outgoing messages
99
+ var outgoingMessages = messages
100
+ . Where ( msg => msg . SenderId == data . CardNumber && ! msg . DeliveryFailed )
101
+ . OrderByDescending ( msg => msg . Timestamp ) ;
102
+
103
+ foreach ( var msg in outgoingMessages )
104
+ {
105
+ var messageText = Loc . GetString ( "log-probe-message-format" ,
106
+ ( "sender" , $ "#{ msg . SenderId : D4} ") ,
107
+ ( "recipient" , $ "#{ partnerId : D4} ") ,
108
+ ( "content" , msg . Content ) ) ;
109
+
110
+ var entry = new NanoChatLogEntry (
111
+ count ,
112
+ TimeSpan . FromSeconds ( Math . Truncate ( msg . Timestamp . TotalSeconds ) ) . ToString ( ) ,
113
+ messageText ) ;
114
+
115
+ ProbedDeviceContainer . AddChild ( entry ) ;
116
+ count ++ ;
117
+ }
118
+ }
119
+ }
120
+ // Emberfall end
121
+
122
+ // Emberfall - Handle this in a separate method
123
+ private void DisplayAccessLogs ( List < PulledAccessLog > logs )
124
+ {
21
125
logs . Reverse ( ) ;
22
126
23
127
var count = 1 ;
0 commit comments