Skip to content

Commit d9eb53e

Browse files
committed
changed when conversation gets saved in database
1 parent 447386d commit d9eb53e

File tree

6 files changed

+58
-95
lines changed

6 files changed

+58
-95
lines changed

Signal-Windows.Lib/SignalLibHandle.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public interface ISignalFrontend
4848
void HandleAttachmentStatusChanged(SignalAttachment sa);
4949
void HandleBlockedContacts(List<SignalContact> blockedContacts);
5050
void HandleMessageDelete(SignalMessage messsage);
51-
void Release();
51+
Task Release();
5252
}
5353

5454
public interface ISignalLibHandle
@@ -928,11 +928,11 @@ internal async Task DispatchRelease()
928928
foreach (var dispatcher in Frames.Keys)
929929
{
930930
var taskCompletionSource = new TaskCompletionSource<bool>();
931-
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
931+
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
932932
{
933933
try
934934
{
935-
Frames[dispatcher].Release();
935+
await Frames[dispatcher].Release();
936936
}
937937
catch (Exception e)
938938
{

Signal-Windows.Lib/Storage/SignalDBContext.cs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -743,21 +743,6 @@ public static void InsertOrUpdateConversationLocked(SignalConversation conversat
743743
}
744744
}
745745

746-
public static void InsertOrUpdateConversationsLocked(IEnumerable<SignalConversation> conversations)
747-
{
748-
lock (DBLock)
749-
{
750-
using (var ctx = new SignalDBContext())
751-
{
752-
foreach (SignalConversation conversation in conversations)
753-
{
754-
InsertOrUpdateConversation(ctx, conversation);
755-
}
756-
ctx.SaveChanges();
757-
}
758-
}
759-
}
760-
761746
private static void InsertOrUpdateConversation(SignalDBContext ctx, SignalConversation conversation)
762747
{
763748
var dbConversation = GetSignalConversationByThreadId(ctx, conversation.ThreadId);

Signal-Windows/App.xaml.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
using Windows.Networking.BackgroundTransfer;
2626
using Windows.UI;
2727
using libsignalservice.configuration;
28-
using System.Linq;
2928

3029
namespace Signal_Windows
3130
{
@@ -93,10 +92,6 @@ private async void App_Suspending(object sender, SuspendingEventArgs e)
9392
Logger.LogInformation("Suspending");
9493
var def = e.SuspendingOperation.GetDeferral();
9594
await Task.Run(() => Handle.Release());
96-
await Task.Run(() =>
97-
{
98-
SignalDBContext.InsertOrUpdateConversationsLocked(Views.Values.SelectMany(view => view.Locator.MainPageInstance.Conversations));
99-
});
10095
def.Complete();
10196
Logger.LogDebug("Suspended");
10297
}

Signal-Windows/Controls/Conversation.xaml.cs

Lines changed: 49 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ public sealed partial class Conversation : UserControl, INotifyPropertyChanged
4747
public VirtualizedCollection Collection;
4848
private CoreWindowActivationState ActivationState = CoreWindowActivationState.Deactivated;
4949
private int LastMarkReadRequest;
50-
private string SelectedFileToken;
5150
private StorageFile SelectedFile;
5251

5352
private string _ThreadDisplayName;
@@ -219,10 +218,6 @@ public void Load(SignalConversation conversation)
219218
{
220219
LoadDraft();
221220
}
222-
else
223-
{ // Set the current draft in the new conversation object.
224-
SaveDraftInCurrentConversation();
225-
}
226221
UserInputBar.FocusTextBox();
227222
DisposeCurrentThread();
228223
UpdateHeader(conversation);
@@ -357,7 +352,7 @@ private async void UserInputBar_OnSendMessageButtonClicked()
357352
var filePicker = new FileOpenPicker();
358353
filePicker.FileTypeFilter.Add("*"); // Without this the file picker throws an exception, this is not documented
359354
var file = await filePicker.PickSingleFileAsync();
360-
SetSelectedFile(file, true);
355+
SetSelectedFile(file);
361356
if (SelectedFile != null)
362357
{
363358
UserInputBar.FocusTextBox();
@@ -484,7 +479,7 @@ await Task.Run(() =>
484479

485480
private void AddedAttachmentDisplay_OnCancelAttachmentButtonClicked()
486481
{
487-
SetSelectedFile(null, true);
482+
SetSelectedFile(null);
488483
}
489484

490485
private void UpdateSendButtonIcon()
@@ -501,35 +496,64 @@ private void UpdateSendButtonIcon()
501496

502497
private void ResetInput()
503498
{
504-
SetSelectedFile(null, true);
499+
SetSelectedFile(null);
505500
UserInputBar.InputText = string.Empty;
506501
UpdateSendButtonIcon();
507-
SaveDraftInCurrentConversation();
508502
}
509503

510-
public void SaveDraftInCurrentConversation()
504+
/// <summary>
505+
/// Saves the selected file in StorageApplicationPermissions store and saves conversation in database.
506+
/// </summary>
507+
/// <returns>Task that saves conversation in database.</returns>
508+
public async Task SaveCurrentConversationInDatabase()
511509
{
512510
if (SignalConversation != null)
513511
{
514512
SignalConversation.Draft = UserInputBar.InputText;
515-
SignalConversation.DraftFileTokens = SelectedFileToken;
513+
if (SelectedFile == null)
514+
{
515+
if (!string.IsNullOrEmpty(SignalConversation.DraftFileTokens) &&
516+
StorageApplicationPermissions.FutureAccessList.ContainsItem(SignalConversation.DraftFileTokens))
517+
{
518+
StorageApplicationPermissions.FutureAccessList.Remove(SignalConversation.DraftFileTokens);
519+
}
520+
SignalConversation.DraftFileTokens = null;
521+
}
522+
else
523+
{
524+
if (string.IsNullOrEmpty(SignalConversation.DraftFileTokens) ||
525+
!StorageApplicationPermissions.FutureAccessList.ContainsItem(SignalConversation.DraftFileTokens))
526+
{
527+
SignalConversation.DraftFileTokens = StorageApplicationPermissions.FutureAccessList.Add(SelectedFile);
528+
}
529+
else
530+
{
531+
// Just reuse the old key
532+
StorageApplicationPermissions.FutureAccessList.AddOrReplace(SignalConversation.DraftFileTokens, SelectedFile);
533+
}
534+
}
535+
// SignalConversation can change while starting Thread.
536+
SignalConversation conversationToSave = SignalConversation;
537+
await Task.Run(() =>
538+
{
539+
SignalDBContext.InsertOrUpdateConversationLocked(conversationToSave);
540+
});
516541
}
517542
}
518543

519544
private async Task LoadDraft()
520545
{
521546
UserInputBar.InputText = SignalConversation.Draft ?? string.Empty;
522547
UserInputBar.SetCursorPositionToEnd();
523-
SetSelectedFile(null, false);
548+
SetSelectedFile(null);
524549
try
525550
{
526551
StorageFile file = !string.IsNullOrWhiteSpace(SignalConversation.DraftFileTokens) &&
527552
StorageApplicationPermissions.FutureAccessList.ContainsItem(SignalConversation.DraftFileTokens) ?
528553
await StorageApplicationPermissions.FutureAccessList.GetFileAsync(SignalConversation.DraftFileTokens) : null;
529554
if (file != null)
530555
{
531-
SelectedFileToken = SignalConversation.DraftFileTokens;
532-
SetSelectedFile(file, false);
556+
SetSelectedFile(file);
533557
}
534558
}
535559
catch (Exception e)
@@ -539,62 +563,21 @@ private async Task LoadDraft()
539563
}
540564

541565
/// <summary>
542-
/// Set file as attatchment in UI and save it in StorageApplicationPermissions store and save it as draft in database.
543-
/// StorageApplicationPermissions stores the file to access it even after restart of app.
566+
/// Set file as attatchment in UI.
544567
/// </summary>
545568
/// <param name="file">Attatchment to set in UI and save</param>
546-
/// <param name="save">If true save the file in StorageApplicationPermissions store and in database. If false only set in UI</param>
547-
private void SetSelectedFile(StorageFile file, bool save)
569+
private void SetSelectedFile(StorageFile file)
548570
{
549-
try
550-
{
551-
SelectedFile = file;
552-
if (save)
553-
{
554-
if (file == null)
555-
{
556-
if (!string.IsNullOrEmpty(SelectedFileToken))
557-
{
558-
StorageApplicationPermissions.FutureAccessList.Remove(SelectedFileToken);
559-
}
560-
SelectedFileToken = null;
561-
}
562-
else
563-
{
564-
if (string.IsNullOrEmpty(SelectedFileToken))
565-
{
566-
SelectedFileToken = StorageApplicationPermissions.FutureAccessList.Add(file);
567-
}
568-
else
569-
{
570-
// Just reuse the old key
571-
StorageApplicationPermissions.FutureAccessList.AddOrReplace(SelectedFileToken, file);
572-
}
573-
}
574-
// Save in Datebase as soon as possible to avoid loosing token
575-
SaveDraftInCurrentConversation();
576-
Task.Run(() =>
577-
{
578-
SignalDBContext.InsertOrUpdateConversationLocked(SignalConversation);
579-
});
580-
}
581-
}
582-
catch (Exception e)
571+
SelectedFile = file;
572+
if (SelectedFile == null)
583573
{
584-
Logger.LogError("SetSelectedFile() failed: {0}\n{1}", e.Message, e.StackTrace);
574+
AddedAttachmentDisplay.HideAttachment();
585575
}
586-
finally
576+
else
587577
{
588-
if (SelectedFile == null)
589-
{
590-
AddedAttachmentDisplay.HideAttachment();
591-
}
592-
else
593-
{
594-
AddedAttachmentDisplay.ShowAttachment(SelectedFile.Name);
595-
}
596-
UpdateSendButtonIcon();
578+
AddedAttachmentDisplay.ShowAttachment(SelectedFile.Name);
597579
}
580+
UpdateSendButtonIcon();
598581
}
599582

600583
private async void Grid_KeyDown(object sender, KeyRoutedEventArgs e)
@@ -609,7 +592,7 @@ private async void Grid_KeyDown(object sender, KeyRoutedEventArgs e)
609592
{
610593
var pastedFiles = await dataPackageView.GetStorageItemsAsync();
611594
var pastedFile = pastedFiles[0];
612-
SetSelectedFile(pastedFile as StorageFile, true);
595+
SetSelectedFile(pastedFile as StorageFile);
613596
}
614597
else if (dataPackageView.Contains(StandardDataFormats.Bitmap))
615598
{
@@ -629,7 +612,7 @@ private async void Grid_KeyDown(object sender, KeyRoutedEventArgs e)
629612
pixels.DetachPixelData());
630613
await encoder.FlushAsync();
631614
}
632-
SetSelectedFile(tmpFile, true);
615+
SetSelectedFile(tmpFile);
633616
}
634617
}
635618
}
@@ -648,7 +631,7 @@ private async void Grid_Drop(object sender, DragEventArgs e)
648631
{
649632
var storageItems = await e.DataView.GetStorageItemsAsync();
650633
var storageItem = storageItems[0];
651-
SetSelectedFile(storageItem as StorageFile, true);
634+
SetSelectedFile(storageItem as StorageFile);
652635
}
653636
}
654637

Signal-Windows/SignalWindowsFrontend.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,9 @@ private void CheckNotification(SignalConversation conversation)
112112
}
113113
}
114114

115-
public void Release()
115+
public Task Release()
116116
{
117-
Locator.MainPageInstance.Release();
117+
return Locator.MainPageInstance.Release();
118118
}
119119
}
120120
}

Signal-Windows/ViewModels/MainPageViewModel.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ public void ConversationsList_SelectionChanged(object sender, SelectionChangedEv
218218
WelcomeVisibility = Visibility.Collapsed;
219219
ThreadVisibility = Visibility.Visible;
220220
SelectedThread = SelectedConversation;
221-
View.Thread.SaveDraftInCurrentConversation();
221+
View.Thread.SaveCurrentConversationInDatabase();
222222
View.Thread.Load(SelectedThread);
223223
View.SwitchToStyle(View.GetCurrentViewStyle());
224224
}
@@ -314,7 +314,7 @@ public void HandleMessageRead(SignalConversation updatedConversation)
314314

315315
public void HandleIdentitykeyChange(LinkedList<SignalMessage> messages)
316316
{
317-
foreach(var message in messages)
317+
foreach (var message in messages)
318318
{
319319
var conversation = ConversationsDictionary[message.ThreadId];
320320
conversation.MessagesCount += 1;
@@ -414,9 +414,9 @@ public void HandleMessageDelete(SignalMessage message)
414414
}
415415
}
416416

417-
public void Release()
417+
public Task Release()
418418
{
419-
View.Thread.SaveDraftInCurrentConversation();
419+
return View.Thread.SaveCurrentConversationInDatabase();
420420
}
421421
#endregion
422422
}

0 commit comments

Comments
 (0)