/// <summary> /// Saves the selected file in StorageApplicationPermissions store and saves conversation in database. /// </summary> /// <returns>Task that saves conversation in database.</returns> public async Task SaveCurrentConversationInDatabase() { if (SignalConversation != null) { SignalConversation.Draft = UserInputBar.InputText; if (SelectedFile == null) { if (!string.IsNullOrEmpty(SignalConversation.DraftFileTokens) && StorageApplicationPermissions.FutureAccessList.ContainsItem(SignalConversation.DraftFileTokens)) { StorageApplicationPermissions.FutureAccessList.Remove(SignalConversation.DraftFileTokens); } SignalConversation.DraftFileTokens = null; } else { if (string.IsNullOrEmpty(SignalConversation.DraftFileTokens) || !StorageApplicationPermissions.FutureAccessList.ContainsItem(SignalConversation.DraftFileTokens)) { SignalConversation.DraftFileTokens = StorageApplicationPermissions.FutureAccessList.Add(SelectedFile); } else { // Just reuse the old key StorageApplicationPermissions.FutureAccessList.AddOrReplace(SignalConversation.DraftFileTokens, SelectedFile); } } // SignalConversation can change while starting Thread. SignalConversation conversationToSave = SignalConversation; await Task.Run(() => { SignalDBContext.InsertOrUpdateConversationLocked(conversationToSave); }); } }
public void SaveAndDispatchSignalConversation(SignalConversation updatedConversation, SignalMessage updateMessage) { Logger.LogTrace("SaveAndDispatchSignalConversation() locking"); SemaphoreSlim.Wait(CancelSource.Token); SignalDBContext.InsertOrUpdateConversationLocked(updatedConversation); DispatchAddOrUpdateConversation(updatedConversation, updateMessage); SemaphoreSlim.Release(); Logger.LogTrace("SaveAndDispatchSignalConversation() released"); }
public async Task SaveAndDispatchSignalConversation(SignalConversation updatedConversation, SignalMessage updateMessage) { Logger.LogTrace("SaveAndDispatchSignalConversation() locking"); await SemaphoreSlim.WaitAsync(CancelSource.Token); try { SignalDBContext.InsertOrUpdateConversationLocked(updatedConversation); await DispatchAddOrUpdateConversation(updatedConversation, updateMessage); } catch (Exception e) { Logger.LogError("SaveAndDispatchSignalConversation() failed: {0}\n{1}", e.Message, e.StackTrace); } finally { SemaphoreSlim.Release(); Logger.LogTrace("SaveAndDispatchSignalConversation() released"); } }