Skip to content

Commit f6da5a0

Browse files
committed
resend buttons!
fixes #53
1 parent 07a3e49 commit f6da5a0

File tree

5 files changed

+67
-22
lines changed

5 files changed

+67
-22
lines changed

Signal-Windows/Controls/Conversation.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public void UpdateMessageBox(SignalMessage updatedMessage)
179179
if (OutgoingCache.ContainsKey(updatedMessage.Id))
180180
{
181181
var m = OutgoingCache[updatedMessage.Id];
182-
m.UpdateSignalMessageStatusIcon(updatedMessage);
182+
m.UpdateMessageBox(updatedMessage);
183183
}
184184
}
185185

Signal-Windows/Controls/Message.xaml

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,18 @@
2929
</DataTemplate>
3030
</ItemsControl.ItemTemplate>
3131
</ItemsControl>
32-
<StackPanel Name="FooterPanel" Orientation="Horizontal">
33-
<TextBlock Foreground="{x:Bind TimestampColor}" Text="{x:Bind FancyTimestamp}" Margin="0 0 5 0" />
34-
<Image Source="{StaticResource Check}" Visibility="{x:Bind CheckVisibility, Mode=OneWay}" Width="16" Height="16" />
35-
<Image Source="{StaticResource DoubleCheck}" Visibility="{x:Bind DoubleCheckVisibility, Mode=OneWay}" Width="16" Height="16" />
36-
</StackPanel>
32+
<Grid Name="FooterPanel">
33+
<Grid.ColumnDefinitions>
34+
<ColumnDefinition />
35+
<ColumnDefinition />
36+
<ColumnDefinition />
37+
<ColumnDefinition />
38+
</Grid.ColumnDefinitions>
39+
<TextBlock Grid.Column="0" Margin="0 0 5 0" Foreground="Red" FontWeight="SemiBold" Visibility="{x:Bind ResendVisibility, Mode=OneWay}" Tapped="ResendTextBlock_Tapped">Send again</TextBlock>
40+
<TextBlock Grid.Column="1" Foreground="{x:Bind TimestampColor}" Text="{x:Bind FancyTimestamp}" Margin="0 0 5 0" />
41+
<Image Grid.Column="2" Source="{StaticResource Check}" Visibility="{x:Bind CheckVisibility, Mode=OneWay}" Width="16" Height="16" />
42+
<Image Grid.Column="3" Source="{StaticResource DoubleCheck}" Visibility="{x:Bind DoubleCheckVisibility, Mode=OneWay}" Width="16" Height="16" />
43+
</Grid>
3744
</ItemsControl>
3845
</Border>
3946
</UserControl>

Signal-Windows/Controls/Message.xaml.cs

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public sealed partial class Message : UserControl, INotifyPropertyChanged
2020
public SolidColorBrush ContactNameColor { get; set; }
2121
public SolidColorBrush TextColor { get; set; }
2222
public SolidColorBrush TimestampColor { get; set; }
23+
public Visibility ResendVisibility { get; set; } = Visibility.Collapsed;
2324
public Visibility CheckVisibility { get; set; } = Visibility.Collapsed;
2425
public Visibility DoubleCheckVisibility { get; set; } = Visibility.Collapsed;
2526

@@ -76,10 +77,11 @@ private void MessageBox_DataContextChanged(FrameworkElement sender, DataContextC
7677
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(Model.ComposedTimestamp / 1000);
7778
DateTime dt = dateTimeOffset.UtcDateTime.ToLocalTime();
7879
FancyTimestamp = dt.ToString();
79-
SetSignalMessageStatusIcon(Model);
80+
UpdateSignalMessageStatusIcon(Model);
81+
UpdateResendButton(Model);
8082
}
8183

82-
private void SetSignalMessageStatusIcon(SignalMessage updatedMessage)
84+
private void UpdateSignalMessageStatusIcon(SignalMessage updatedMessage)
8385
{
8486
if (updatedMessage.Direction == SignalMessageDirection.Outgoing)
8587
{
@@ -117,11 +119,25 @@ private void SetSignalMessageStatusIcon(SignalMessage updatedMessage)
117119
}
118120
}
119121

120-
public void UpdateSignalMessageStatusIcon(SignalMessage updatedMessage)
122+
private void UpdateResendButton(SignalMessage updatedMessage)
121123
{
122-
SetSignalMessageStatusIcon(updatedMessage);
123-
PropertyChanged(this, new PropertyChangedEventArgs("CheckVisibility"));
124-
PropertyChanged(this, new PropertyChangedEventArgs("DoubleCheckVisibility"));
124+
if (updatedMessage.Direction == SignalMessageDirection.Outgoing && (updatedMessage.Status == SignalMessageStatus.Failed_Identity || updatedMessage.Status == SignalMessageStatus.Failed_Network))
125+
{
126+
ResendVisibility = Visibility.Visible;
127+
}
128+
else
129+
{
130+
ResendVisibility = Visibility.Collapsed;
131+
}
132+
}
133+
134+
public void UpdateMessageBox(SignalMessage updatedMessage)
135+
{
136+
UpdateSignalMessageStatusIcon(updatedMessage);
137+
UpdateResendButton(updatedMessage);
138+
PropertyChanged(this, new PropertyChangedEventArgs(nameof(CheckVisibility)));
139+
PropertyChanged(this, new PropertyChangedEventArgs(nameof(DoubleCheckVisibility)));
140+
PropertyChanged(this, new PropertyChangedEventArgs(nameof(ResendVisibility)));
125141
}
126142

127143
private async void AttachmentSaveButton_Click(object sender, RoutedEventArgs e)
@@ -151,5 +167,16 @@ private async void AttachmentSaveButton_Click(object sender, RoutedEventArgs e)
151167
Debug.WriteLine(ex.StackTrace);
152168
}
153169
}
170+
171+
private void TextBlock_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
172+
{
173+
174+
}
175+
176+
private void ResendTextBlock_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
177+
{
178+
App.ViewModels.MainPageInstance.OutgoingQueue.Add(Model);
179+
//TODO prevent button smashing
180+
}
154181
}
155182
}

Signal-Windows/Signal/OutgoingMessages.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public partial class MainPageViewModel
1616
/// <summary>
1717
/// Queue for pending outgoing messages.
1818
/// </summary>
19-
private BlockingCollection<SignalMessage> OutgoingQueue = new BlockingCollection<SignalMessage>(new ConcurrentQueue<SignalMessage>());
19+
public BlockingCollection<SignalMessage> OutgoingQueue = new BlockingCollection<SignalMessage>(new ConcurrentQueue<SignalMessage>());
2020

2121
/// <summary>
2222
/// Reads pending messages from the <see cref="OutgoingQueue"/> and attempts to send them
@@ -43,7 +43,7 @@ public void HandleOutgoingMessages()
4343
if (!token.IsCancellationRequested)
4444
{
4545
MessageSender.sendMessage(new SignalServiceAddress(outgoingSignalMessage.ThreadId), message);
46-
SignalDBContext.UpdateMessageStatus(outgoingSignalMessage, this);
46+
outgoingSignalMessage.Status = SignalMessageStatus.Confirmed;
4747
}
4848
}
4949
else
@@ -65,27 +65,31 @@ public void HandleOutgoingMessages()
6565
if (!token.IsCancellationRequested)
6666
{
6767
MessageSender.sendMessage(recipients, message);
68-
SignalDBContext.UpdateMessageStatus(outgoingSignalMessage, this);
68+
outgoingSignalMessage.Status = SignalMessageStatus.Confirmed;
6969
}
7070
}
7171
}
7272
catch (OperationCanceledException e)
7373
{
7474
Debug.WriteLine(e.Message);
7575
Debug.WriteLine(e.StackTrace);
76+
Debug.WriteLine("HandleOutgoingMessages finished");
77+
return;
7678
}
7779
catch (libsignal.exceptions.UntrustedIdentityException e)
7880
{
79-
LibsignalDBContext.UpdateIdentityLocked(e.getName(), Base64.encodeBytes(e.getUntrustedIdentity().serialize()), VerifiedStatus.Default, this);
80-
//TODO devise appropriate resend strategy
81+
//LibsignalDBContext.UpdateIdentityLocked(e.getName(), Base64.encodeBytes(e.getUntrustedIdentity().serialize()), VerifiedStatus.Default, this);
82+
Debug.WriteLine(e.Message);
83+
Debug.WriteLine(e.StackTrace);
84+
outgoingSignalMessage.Status = SignalMessageStatus.Failed_Identity;
8185
}
8286
catch (Exception e)
8387
{
8488
Debug.WriteLine(e.Message);
8589
Debug.WriteLine(e.StackTrace);
86-
OutgoingQueue.Add(outgoingSignalMessage);
87-
//TODO notify UI
90+
outgoingSignalMessage.Status = SignalMessageStatus.Failed_Network;
8891
}
92+
SignalDBContext.UpdateMessageStatus(outgoingSignalMessage, this);
8993
}
9094
Debug.WriteLine("HandleOutgoingMessages finished");
9195
}

Signal-Windows/Storage/DB.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -731,13 +731,20 @@ public static void UpdateMessageStatus(SignalMessage outgoingSignalMessage, Main
731731
m = ctx.Messages.Single(t => t.ComposedTimestamp == outgoingSignalMessage.ComposedTimestamp && t.Author == null);
732732
if (m != null)
733733
{
734-
if (m.Receipts == 0)
734+
if (outgoingSignalMessage.Status == SignalMessageStatus.Confirmed)
735735
{
736-
m.Status = SignalMessageStatus.Confirmed;
736+
if (m.Receipts > 0)
737+
{
738+
m.Status = SignalMessageStatus.Received;
739+
}
740+
else
741+
{
742+
m.Status = SignalMessageStatus.Confirmed;
743+
}
737744
}
738745
else
739746
{
740-
m.Status = SignalMessageStatus.Received;
747+
m.Status = outgoingSignalMessage.Status;
741748
}
742749
ctx.SaveChanges();
743750
}

0 commit comments

Comments
 (0)