Skip to content

Commit 7c325d8

Browse files
committed
introduce ISignalLibHandle, add basic attachment methods
1 parent 6374e1f commit 7c325d8

File tree

8 files changed

+66
-14
lines changed

8 files changed

+66
-14
lines changed

Signal-Windows.Lib/SignalLibHandle.cs

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,46 @@ public interface ISignalFrontend
2626
void HandleMessageUpdate(SignalMessage updatedMessage);
2727
void ReplaceConversationList(List<SignalConversation> conversations);
2828
void HandleAuthFailure();
29+
void HandleAttachmentStatusChanged(SignalAttachment sa, SignalAttachmentStatus newStatus);
2930
}
3031

31-
public class SignalLibHandle
32+
public interface ISignalLibHandle
3233
{
33-
public static SignalLibHandle Instance;
34-
public SignalStore Store;
34+
//Frontend API
35+
SignalStore Store { get; set; }
36+
Task SendMessage(SignalMessage message, SignalConversation conversation);
37+
void ResendMessage(SignalMessage message);
38+
List<SignalMessageContainer> GetMessages(SignalConversation thread, int startIndex, int count);
39+
void SaveAndDispatchSignalConversation(SignalConversation updatedConversation, SignalMessage updateMessage);
40+
void PurgeAccountData();
41+
Task Acquire(CoreDispatcher d, ISignalFrontend w);
42+
Task Reacquire();
43+
void Release();
44+
void AddFrontend(CoreDispatcher d, ISignalFrontend w);
45+
void RemoveFrontend(CoreDispatcher d);
46+
47+
// Background API
48+
event EventHandler<SignalMessageEventArgs> SignalMessageEvent;
49+
void BackgroundAcquire();
50+
void BackgroundRelease();
51+
52+
// Attachment API
53+
void StartAttachmentDownload(SignalAttachment sa);
54+
//void AbortAttachmentDownload(SignalAttachment sa); TODO
55+
}
56+
57+
public static class SignalHelper
58+
{
59+
public static ISignalLibHandle CreateSignalLibHandle(bool headless)
60+
{
61+
return new SignalLibHandle(headless);
62+
}
63+
}
64+
65+
internal class SignalLibHandle : ISignalLibHandle
66+
{
67+
internal static SignalLibHandle Instance;
68+
public SignalStore Store { get; set; }
3569
private readonly ILogger Logger = LibsignalLogging.CreateLogger<SignalLibHandle>();
3670
public SemaphoreSlim SemaphoreSlim = new SemaphoreSlim(1, 1);
3771
private bool Headless;
@@ -214,6 +248,11 @@ await Task.Run(async () =>
214248
});
215249
}
216250

251+
public void ResendMessage(SignalMessage message)
252+
{
253+
OutgoingQueue.Add(message);
254+
}
255+
217256
public List<SignalMessageContainer> GetMessages(SignalConversation thread, int startIndex, int count)
218257
{
219258
return SignalDBContext.GetMessagesLocked(thread, startIndex, count);
@@ -230,7 +269,14 @@ public void SaveAndDispatchSignalConversation(SignalConversation updatedConversa
230269
}
231270
#endregion
232271

233-
#region backend api
272+
#region attachment api
273+
public void StartAttachmentDownload(SignalAttachment sa)
274+
{
275+
//TODO lock, check if already downloading, start a new download if not exists
276+
}
277+
#endregion
278+
279+
#region internal api
234280
internal void SaveAndDispatchSignalMessage(SignalMessage message, SignalConversation conversation)
235281
{
236282
conversation.MessagesCount += 1;

Signal-Windows.RC/SignalBackgroundTask.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System;
1+
2+
using System;
23
using System.Collections.Generic;
34
using System.Diagnostics;
45
using System.Linq;
@@ -22,7 +23,7 @@ public sealed class SignalBackgroundTask : IBackgroundTask
2223
private const string TaskName = "SignalMessageBackgroundTask";
2324
private readonly ILogger Logger = LibsignalLogging.CreateLogger<SignalBackgroundTask>();
2425
private BackgroundTaskDeferral Deferral;
25-
private SignalLibHandle Handle;
26+
private ISignalLibHandle Handle;
2627
private ToastNotifier ToastNotifier;
2728
private AutoResetEvent ResetEvent = new AutoResetEvent(false);
2829
private EventWaitHandle GlobalResetEvent;
@@ -52,7 +53,7 @@ public void Run(IBackgroundTaskInstance taskInstance)
5253
});
5354
try
5455
{
55-
Handle = new SignalLibHandle(true);
56+
Handle = SignalHelper.CreateSignalLibHandle(true);
5657
Handle.SignalMessageEvent += Handle_SignalMessageEvent;
5758
Handle.BackgroundAcquire();
5859
ResetEvent.WaitOne();
@@ -133,4 +134,4 @@ private IList<AdaptiveText> GetNotificationText(string authorName, string conten
133134
return text;
134135
}
135136
}
136-
}
137+
}

Signal-Windows/App.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ sealed partial class App : Application
3939
public static bool MainPageActive = false;
4040
public static string USER_AGENT = "Signal-Windows";
4141
public static uint PREKEY_BATCH_SIZE = 100;
42-
public static SignalLibHandle Handle = new SignalLibHandle(false);
42+
public static ISignalLibHandle Handle = SignalHelper.CreateSignalLibHandle(false);
4343
private Dictionary<int, SignalWindowsFrontend> Views = new Dictionary<int, SignalWindowsFrontend>();
4444
public static int MainViewId;
4545
private IBackgroundTaskRegistration backgroundTaskRegistration;

Signal-Windows/Controls/Message.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ private void MessageBox_DataContextChanged(FrameworkElement sender, DataContextC
103103

104104
private void ResendTextBlock_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
105105
{
106-
App.Handle.OutgoingQueue.Add(Model.Message);
106+
App.Handle.ResendMessage(Model.Message);
107107
}
108108

109109
internal bool HandleUpdate(SignalMessage updatedMessage)

Signal-Windows/SignalWindowsFrontend.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,10 @@ public void HandleAuthFailure()
4848
{
4949
// TODO
5050
}
51+
52+
public void HandleAttachmentStatusChanged(SignalAttachment sa, SignalAttachmentStatus status)
53+
{
54+
//TODO
55+
}
5156
}
5257
}

Signal-Windows/ViewModels/FinishRegistrationPageViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ await Task.Run(() =>
4646
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
4747
{
4848
App.Store = store;
49-
SignalLibHandle.Instance.Store = store;
49+
App.Handle.Store = store;
5050
}).AsTask().Wait();
5151

5252
/* create prekeys */

Signal-Windows/ViewModels/LinkPageViewModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public async Task BeginLinking()
114114
{
115115
UIEnabled = false;
116116
App.Store = store;
117-
SignalLibHandle.Instance.Store = store;
117+
App.Handle.Store = store;
118118
}).AsTask().Wait();
119119

120120
/* create prekeys */
@@ -125,7 +125,7 @@ public async Task BeginLinking()
125125
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
126126
{
127127
App.Store = store;
128-
SignalLibHandle.Instance.Store = store;
128+
App.Handle.Store = store;
129129
View.Finish(true);
130130
}).AsTask().Wait();
131131
});

Signal-Windows/ViewModels/MainPageViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ private async Task<bool> SendMessage(string messageText)
102102
Read = true,
103103
Type = SignalMessageType.Normal
104104
};
105-
await SignalLibHandle.Instance.SendMessage(message, SelectedThread);
105+
await App.Handle.SendMessage(message, SelectedThread);
106106
Debug.WriteLine("keydown lock released");
107107
}
108108
return true;

0 commit comments

Comments
 (0)