diff --git a/Notesnook.API/Hubs/SyncV2Hub.cs b/Notesnook.API/Hubs/SyncV2Hub.cs index 234f48e..2609d33 100644 --- a/Notesnook.API/Hubs/SyncV2Hub.cs +++ b/Notesnook.API/Hubs/SyncV2Hub.cs @@ -263,14 +263,17 @@ namespace Notesnook.API.Hubs if (includeMonographs) { + var isSyncingMonographsForFirstTime = !device.HasInitialMonographsSync; var unsyncedMonographs = ids.Where((id) => id.EndsWith(":monograph")).ToHashSet(); var unsyncedMonographIds = unsyncedMonographs.Select((id) => id.Split(":")[0]).ToArray(); - var userMonographs = isResetSync + var userMonographs = isResetSync || isSyncingMonographsForFirstTime ? await Repositories.Monographs.FindAsync(m => m.UserId == userId) : await Repositories.Monographs.FindAsync(m => m.UserId == userId && unsyncedMonographIds.Contains(m.ItemId)); if (userMonographs.Any() && !await Clients.Caller.SendMonographs(userMonographs).WaitAsync(TimeSpan.FromMinutes(10))) throw new HubException("Client rejected monographs."); + + device.HasInitialMonographsSync = true; } deviceService.Reset(); diff --git a/Notesnook.API/Services/SyncDeviceService.cs b/Notesnook.API/Services/SyncDeviceService.cs index 2c1bf3d..1fd036d 100644 --- a/Notesnook.API/Services/SyncDeviceService.cs +++ b/Notesnook.API/Services/SyncDeviceService.cs @@ -44,6 +44,16 @@ namespace Notesnook.API.Services set => SetMetadata("LastAccessTime", value.ToString()); } + /// + /// Indicates if the monographs have been synced for the first time + /// ever on a device. + /// + public readonly bool HasInitialMonographsSync + { + get => !string.IsNullOrEmpty(GetMetadata("HasInitialMonographsSync")); + set => SetMetadata("HasInitialMonographsSync", value.ToString()); + } + private static string CreateFilePath(string userId, string? deviceId = null, string? metadataKey = null) { return Path.Join("sync", userId, deviceId, metadataKey);