@@ -235,61 +235,76 @@ internal async void ContactsList_SelectionChanged(object sender, SelectionChange
235
235
236
236
internal async Task TextBox_KeyDown ( object sender , KeyRoutedEventArgs e )
237
237
{
238
+ if ( e . Key == VirtualKey . Enter )
239
+ {
240
+ TextBox t = ( TextBox ) sender ;
241
+ await SendMessageButton_Click ( t ) ;
242
+ }
243
+ }
244
+
245
+ private async Task < bool > SendMessage ( string messageText )
246
+ {
247
+ Debug . WriteLine ( "starting sendmessage" ) ;
238
248
try
239
249
{
240
- if ( e . Key == VirtualKey . Enter )
250
+ if ( messageText != string . Empty )
241
251
{
242
- TextBox t = ( TextBox ) sender ;
243
- if ( t . Text != "" )
252
+ var now = Util . CurrentTimeMillis ( ) ;
253
+ SignalMessage message = new SignalMessage ( )
244
254
{
245
- var text = t . Text ;
246
- t . Text = "" ;
247
- var now = Util . CurrentTimeMillis ( ) ;
248
- SignalMessage message = new SignalMessage ( )
255
+ Author = null ,
256
+ ComposedTimestamp = now ,
257
+ Content = new SignalMessageContent ( ) { Content = messageText } ,
258
+ ThreadId = SelectedThread . ThreadId ,
259
+ ReceivedTimestamp = now ,
260
+ Direction = SignalMessageDirection . Outgoing ,
261
+ Read = true ,
262
+ Type = SignalMessageType . Normal
263
+ } ;
264
+ Debug . WriteLine ( "keydown lock await" ) ;
265
+ using ( await ActionInProgress . LockAsync ( ) )
266
+ {
267
+ Debug . WriteLine ( "keydown lock grabbed" ) ;
268
+ View . Thread . Append ( message ) ;
269
+ View . Thread . ScrollToBottom ( ) ;
270
+ SelectedThread . LastMessage = message ;
271
+ SelectedThread . View . UpdateConversationDisplay ( SelectedThread ) ;
272
+ MoveThreadToTop ( SelectedThread ) ;
273
+ await Task . Run ( ( ) =>
249
274
{
250
- Author = null ,
251
- ComposedTimestamp = now ,
252
- Content = new SignalMessageContent ( ) { Content = text } ,
253
- ThreadId = SelectedThread . ThreadId ,
254
- ReceivedTimestamp = now ,
255
- Direction = SignalMessageDirection . Outgoing ,
256
- Read = true ,
257
- Type = SignalMessageType . Normal
258
- } ;
259
- Debug . WriteLine ( "keydown lock await" ) ;
260
- using ( await ActionInProgress . LockAsync ( ) )
275
+ SignalDBContext . SaveMessageLocked ( message ) ;
276
+ SignalDBContext . ClearUnreadLocked ( SelectedThread . ThreadId ) ;
277
+ } ) ;
278
+ SelectedThread . LastMessageId = message . Id ;
279
+ SelectedThread . LastSeenMessageId = message . Id ;
280
+ if ( SelectedThread != null && SelectedThread . ThreadId == message . ThreadId )
261
281
{
262
- Debug . WriteLine ( "keydown lock grabbed" ) ;
263
- View . Thread . Append ( message ) ;
264
- View . Thread . ScrollToBottom ( ) ;
265
- SelectedThread . LastMessage = message ;
266
- SelectedThread . View . UpdateConversationDisplay ( SelectedThread ) ;
267
- MoveThreadToTop ( SelectedThread ) ;
268
- await Task . Run ( ( ) =>
269
- {
270
- SignalDBContext . SaveMessageLocked ( message ) ;
271
- SignalDBContext . ClearUnreadLocked ( SelectedThread . ThreadId ) ;
272
- } ) ;
273
- SelectedThread . LastMessageId = message . Id ;
274
- SelectedThread . LastSeenMessageId = message . Id ;
275
- if ( SelectedThread != null && SelectedThread . ThreadId == message . ThreadId )
276
- {
277
- View . Thread . AddToOutgoingMessagesCache ( message ) ;
278
- }
279
- OutgoingQueue . Add ( message ) ;
280
- var after = Util . CurrentTimeMillis ( ) ;
281
- Debug . WriteLine ( "ms until out queue: " + ( after - now ) ) ;
282
- View . Thread . RemoveUnreadMarker ( ) ;
282
+ View . Thread . AddToOutgoingMessagesCache ( message ) ;
283
283
}
284
- Debug . WriteLine ( "keydown lock released" ) ;
284
+ OutgoingQueue . Add ( message ) ;
285
+ var after = Util . CurrentTimeMillis ( ) ;
286
+ Debug . WriteLine ( "ms until out queue: " + ( after - now ) ) ;
287
+ View . Thread . RemoveUnreadMarker ( ) ;
285
288
}
289
+ Debug . WriteLine ( "keydown lock released" ) ;
286
290
}
291
+ return true ;
287
292
}
288
293
catch ( Exception ex )
289
294
{
290
295
Debug . WriteLine ( ex ) ;
291
296
Debug . WriteLine ( ex . Message ) ;
292
297
Debug . WriteLine ( ex . StackTrace ) ;
298
+ return false ;
299
+ }
300
+ }
301
+
302
+ internal async Task SendMessageButton_Click ( TextBox messageTextBox )
303
+ {
304
+ bool sendMessageResult = await SendMessage ( messageTextBox . Text ) ;
305
+ if ( sendMessageResult )
306
+ {
307
+ messageTextBox . Text = string . Empty ;
293
308
}
294
309
}
295
310
0 commit comments