GeezerVison is showing github.com — Fixing issue #29 (onedrive continuous triggering not working) · HighEncryption/SyncPro@9ff5008
File tree
Expand file treeCollapse file tree
Open diff view settings
SyncPro.Adapters.MicrosoftOneDrive SyncPro.Adapters.WindowsFileSystem
Expand file treeCollapse file tree
Open diff view settings
Collapse file
Copy file name to clipboardExpand all lines: SyncPro.Adapters.MicrosoftOneDrive/OneDriveAdapter.cs +13-2Lines changed: 13 additions & 2 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -643,10 +643,21 @@ private async Task ChangeNotificationThreadMain() |
643 | 643 | Logger.LogException(exception, "Failed to pull changes from OneDrive"); |
644 | 644 | } |
645 | 645 |
|
646 | | - if (changes != null && |
| 646 | + if (changes != null && |
| 647 | + changes.Changes.Any() && |
647 | 648 | !string.Equals(changes.State, this.Config.LatestDeltaToken, StringComparison.Ordinal)) |
648 | 649 | { |
649 | | - this.ItemChanged?.Invoke(this, new ItemsChangedEventArgs()); |
| 650 | + ItemsChangedEventArgs eventArgs = new ItemsChangedEventArgs(); |
| 651 | + |
| 652 | + foreach (IChangeTrackedAdapterItem change in changes.Changes) |
| 653 | + { |
| 654 | + eventArgs.Changes.Add( |
| 655 | + new ItemChange( |
| 656 | + change.FullName, |
| 657 | + ItemChangeType.None)); |
| 658 | + } |
| 659 | + |
| 660 | + this.ItemChanged?.Invoke(this, eventArgs); |
650 | 661 | } |
651 | 662 |
|
652 | 663 | Logger.Debug("OneDriveAdapter.ChangeNotificationThreadMain delay for " + OneDriveChangeNotificationPollingInterval); |
|
Collapse file
Copy file name to clipboardExpand all lines: SyncPro.Adapters.WindowsFileSystem/WindowsFileSystemAdapter.cs +8-3Lines changed: 8 additions & 3 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -350,6 +350,10 @@ public override void FinalizeItemWrite(Stream stream, EntryUpdateInfo updateInfo |
350 | 350 | SyncEntry = updateInfo.Entry, |
351 | 351 | AdapterId = this.Configuration.Id, |
352 | 352 | }; |
| 353 | + |
| 354 | + // [2018-04-30] It appears that the SyncEntryId field needs to be set on the adapter entry |
| 355 | + // in order to avoid a referential integrity violation in the DB. |
| 356 | + adapterEntry.SyncEntryId = updateInfo.Entry.Id; |
353 | 357 |
|
354 | 358 | updateInfo.Entry.AdapterEntries.Add(adapterEntry); |
355 | 359 | } |
@@ -574,9 +578,10 @@ private void NotifyOfPendingChanges() |
574 | 578 | return; |
575 | 579 | } |
576 | 580 |
|
577 | | - this.ItemChanged?.Invoke( |
578 | | - this, |
579 | | - new ItemsChangedEventArgs { Changes = pendingChangesToProcess }); |
| 581 | + ItemsChangedEventArgs eventArgs = new ItemsChangedEventArgs(); |
| 582 | + eventArgs.Changes.AddRange(pendingChangesToProcess); |
| 583 | + |
| 584 | + this.ItemChanged?.Invoke(this, eventArgs); |
580 | 585 | } |
581 | 586 |
|
582 | 587 | private void FileSystemWatcherError(object sender, ErrorEventArgs e) |
|
Collapse file
Copy file name to clipboardExpand all lines: SyncPro.Core/Adapters/IChangeNotification.cs +6-1Lines changed: 6 additions & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
@@ -45,7 +45,12 @@ public ItemChange(string fullName, ItemChangeType changeType) |
45 | 45 | /// </summary> |
46 | 46 | public class ItemsChangedEventArgs : EventArgs |
47 | 47 | { |
48 | | - public List<ItemChange> Changes { get; set; } |
| 48 | + public ItemsChangedEventArgs() |
| 49 | + { |
| 50 | + this.Changes = new List<ItemChange>(); |
| 51 | + } |
| 52 | + |
| 53 | + public List<ItemChange> Changes { get; } |
49 | 54 | } |
50 | 55 |
|
51 | 56 | /// <summary> |
|
Collapse file
Copy file name to clipboardExpand all lines: SyncPro.UI/ViewModels/EntryUpdateInfoViewModel.cs +5-1Lines changed: 5 additions & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
@@ -197,7 +197,11 @@ public EntryUpdateInfoViewModel( |
197 | 197 | this.RelativePath = info.RelativePath; |
198 | 198 | this.syncEntryId = info.Entry.Id; |
199 | 199 | this.sourceAdapterId = sourceAdapterId; |
200 | | - this.adapterEntryId = info.Entry.AdapterEntries.First(a => a.AdapterId == sourceAdapterId).AdapterEntryId; |
| 200 | + var adapterEntry = info.Entry.AdapterEntries.FirstOrDefault(a => a.AdapterId == sourceAdapterId); |
| 201 | + if (adapterEntry != null) |
| 202 | + { |
| 203 | + this.adapterEntryId = adapterEntry.AdapterEntryId; |
| 204 | + } |
201 | 205 |
|
202 | 206 | this.IsDirectory = info.Entry.Type == SyncEntryType.Directory; |
203 | 207 |
|
|