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"); }