/// <summary> /// Handles a list of blocked numbers. This will update the database to match the /// blocked numbers list. /// </summary> /// <param name="blockedNumbers">The list of blocked numbers.</param> private async Task HandleBlockedNumbers(List <string> blockedNumbers) { List <SignalContact> blockedContacts = new List <SignalContact>(); List <SignalContact> contacts = SignalDBContext.GetAllContactsLocked(); foreach (var contact in contacts) { if (blockedNumbers.Contains(contact.ThreadId)) { if (!contact.Blocked) { contact.Blocked = true; SignalDBContext.UpdateBlockStatus(contact); blockedContacts.Add(contact); } } else { if (contact.Blocked) { contact.Blocked = false; SignalDBContext.UpdateBlockStatus(contact); } } } await SignalLibHandle.Instance.DispatchHandleBlockedContacts(blockedContacts); }
public void OnNavigatedTo() { List <SignalContact> blockedContacts = SignalDBContext.GetAllContactsLocked() .Where(contact => contact.Blocked) .ToList(); BlockedContacts = new ObservableCollection <SignalContact>(blockedContacts); }
public async Task SendBlockedMessage() { List <SignalContact> blockedContacts = SignalDBContext.GetAllContactsLocked().Where(c => c.Blocked).ToList(); List <string> blockedNumbers = new List <string>(); foreach (var contact in blockedContacts) { blockedNumbers.Add(contact.ThreadId); } var blockMessage = SignalServiceSyncMessage.ForBlocked(new BlockedListMessage(blockedNumbers)); OutgoingMessages.SendMessage(blockMessage); await DispatchHandleBlockedContacts(blockedContacts); }
private List <SignalConversation> GetConversations() { List <SignalConversation> conversations = new List <SignalConversation>(); List <SignalContact> contacts = SignalDBContext.GetAllContactsLocked(); List <SignalGroup> groups = SignalDBContext.GetAllGroupsLocked(); int amountContacts = contacts.Count; int amountGroups = groups.Count; int contactsIdx = 0; int groupsIdx = 0; while (contactsIdx < amountContacts || groupsIdx < amountGroups) { if (contactsIdx < amountContacts) { SignalConversation contact = contacts[contactsIdx]; if (groupsIdx < amountGroups) { SignalConversation group = groups[groupsIdx]; if (contact.LastActiveTimestamp > group.LastActiveTimestamp) { contactsIdx++; conversations.Add(contact); } else { groupsIdx++; conversations.Add(group); } } else { contactsIdx++; conversations.Add(contact); } } else if (groupsIdx < amountGroups) { SignalConversation group = groups[groupsIdx]; groupsIdx++; conversations.Add(group); } } return(conversations); }
public async Task Init() { Debug.WriteLine("Init lock wait"); using (await ActionInProgress.LockAsync(CancelSource.Token)) { Debug.WriteLine("Init lock grabbed"); Running = true; CancelSource = new CancellationTokenSource(); try { await Task.Run(async() => { SignalDBContext.FailAllPendingMessages(); List <SignalContact> contacts = SignalDBContext.GetAllContactsLocked(); List <SignalGroup> groups = SignalDBContext.GetAllGroupsLocked(); await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { try { int amountContacts = contacts.Count; int amountGroups = groups.Count; int contactsIdx = 0; int groupsIdx = 0; while (contactsIdx < amountContacts || groupsIdx < amountGroups) { if (contactsIdx < amountContacts) { SignalConversation contact = contacts[contactsIdx]; if (groupsIdx < amountGroups) { SignalConversation group = groups[groupsIdx]; if (contact.LastActiveTimestamp > group.LastActiveTimestamp) { contactsIdx++; AddThread(contact); } else { groupsIdx++; AddThread(group); } } else { contactsIdx++; AddThread(contact); } } else if (groupsIdx < amountGroups) { SignalConversation group = groups[groupsIdx]; groupsIdx++; AddThread(group); } } } catch (Exception e) { Debug.WriteLine(e.Message); Debug.WriteLine(e.StackTrace); } }); MessageReceiver = new SignalServiceMessageReceiver(CancelSource.Token, App.ServiceUrls, new StaticCredentialsProvider(App.Store.Username, App.Store.Password, App.Store.SignalingKey, (int)App.Store.DeviceId), App.USER_AGENT); Pipe = MessageReceiver.createMessagePipe(); MessageSender = new SignalServiceMessageSender(CancelSource.Token, App.ServiceUrls, App.Store.Username, App.Store.Password, (int)App.Store.DeviceId, new Store(), Pipe, null, App.USER_AGENT); IncomingMessagesTask = Task.Factory.StartNew(HandleIncomingMessages, TaskCreationOptions.LongRunning); OutgoingMessagesTask = Task.Factory.StartNew(HandleOutgoingMessages, TaskCreationOptions.LongRunning); }); } catch (AuthorizationFailedException) { Debug.WriteLine("OWS server rejected our credentials - redirecting to StartPage"); Running = false; CancelSource.Cancel(); View.Frame.Navigate(typeof(StartPage)); } catch (Exception e) { Debug.WriteLine(e.Message); Debug.WriteLine(e.StackTrace); } } Debug.WriteLine("Init lock released"); }