//files that exist on disk and not in the cloud -- assume new file and upload //files that exist on disk and the lastmodified date is greater than our last sweep -- assume locally modified and upload public static int UploadNewLocalFiles(List <FileInfoX> localFiles, List <FileInfoX> remoteFiles, bool askUpload, DateTime lastSweepUtc) { var toUpload = localFiles.Where(x => !remoteFiles.Select(y => y.CloudFileName).Contains(x.CloudFileName) || x.LastModifiedUtc > lastSweepUtc).ToList(); if (toUpload.Count > 0) { NLogger.Current.Info("Found Uploads:"); foreach (var u in toUpload) { NLogger.Current.Info(u.LocalFileName); } } List <FileInfoX> confirmedToUpload = toUpload; if (askUpload) { confirmedToUpload = FillConfirmationList(toUpload, ConfirmRequest.Upload); } foreach (var x in confirmedToUpload) { if (x.LastModifiedUtc > lastSweepUtc) { var toDeleteX = remoteFiles.Where(y => y.CloudFileName == x.CloudFileName).FirstOrDefault(); OwnCloudClient.DeleteFile(toDeleteX.CloudFileNameWithEmbeddedData); } string f = Settings.WatchDir + x.LocalFileName; OwnCloudClient.UploadFile(f); } return(confirmedToUpload.Count); }
//files that have older versions in the cloud -- upload the new ones and delete the old outdated cloud files public static int ReplaceOutDatedRemoteFiles(List <FileInfoX> localFiles, List <FileInfoX> remoteFiles, bool confirmUpload) { var remoteQuery = (from l in localFiles join r in remoteFiles on l.CloudFileName equals r.CloudFileName where (l.LastModifiedUtc - r.LastModifiedUtc).TotalSeconds >= 2 select new { OldCloudNamePlusDate = r.CloudFileNameWithEmbeddedData, NewFileName = r.LocalFileName }).ToList(); bool assumeConfirmed = !confirmUpload; Dictionary <string, string> confirmed = new Dictionary <string, string>(); if (remoteQuery.Count > 0) { NLogger.Current.Info("Found Uploads:"); foreach (var uploadFile in remoteQuery) { NLogger.Current.Info(uploadFile.NewFileName); } } foreach (var uploadFile in remoteQuery) { Console.Write(ConfirmRequest.Upload.ToString() + " " + uploadFile.NewFileName + " "); if (assumeConfirmed) { Console.WriteLine(); confirmed.Add(uploadFile.OldCloudNamePlusDate, uploadFile.NewFileName); continue; } ConfirmAnswer a = GetAnswer(uploadFile.NewFileName); if (a == ConfirmAnswer.Confirm) { confirmed.Add(uploadFile.OldCloudNamePlusDate, uploadFile.NewFileName); } else if (a == ConfirmAnswer.Skip) { continue; } else if (a == ConfirmAnswer.SkipAll) { break; } else if (a == ConfirmAnswer.ConfirmAll) { assumeConfirmed = true; confirmed.Add(uploadFile.OldCloudNamePlusDate, uploadFile.NewFileName); } } foreach (var d in confirmed) { OwnCloudClient.DeleteFile(d.Key); //OldCloudNamePlusDate OwnCloudClient.UploadFile(Settings.WatchDir + d.Value); //NewFileName } return(confirmed.Count); }