void UploadPrivateCallback() { ReadSentItems(); var local = new FileSystemProvider(_context.LocalStorage, Provider.PrivateDirectory); IRemoteProvider remote = CreateRemote(Provider.PrivateDirectory); // push var localItems = new List<Item>(local.Items); foreach (Item l in localItems) { if (!_sentItems.Contains(l.RelativePath)) { if (!remote.FileExists(l.RelativePath) || remote.FindFile(l.RelativePath).Time < l.Time || remote.FindFile(l.RelativePath).Size < l.Size) // для поддержки докачки { using (Stream stream = local.GetStream(l.RelativePath)) remote.SaveFile(l.RelativePath, stream); _sentItems.Add(l.RelativePath); } } } WriteSentItems(); }
void SyncSharedCallback() { var local = new FileSystemProvider(_context.LocalStorage, Provider.SharedDirectory); IRemoteProvider remote = CreateRemote(Provider.SharedDirectory); // download var remoteItems = new List<Item>(remote.Items); foreach (Item r in remoteItems) if (!local.FileExists(r.RelativePath) || local.FindFile(r.RelativePath).Time < r.Time) { Item item = r; remote.LoadFile(r.RelativePath, stream => local.SaveFile(item.RelativePath, stream)); } // remove deleted var localItems = new List<Item>(local.Items); foreach (Item l in localItems) { if (!remote.Items.Exists(val => val.RelativePath == l.RelativePath)) local.DeleteFile(l.RelativePath); } }