private async Task RecursivelyUpdateParent(SkyDriveDataCommon item) { var source = await SkyDriveDataSource.GetInstance(); if (item.UniqueId == source.Root) { return; } var updatedItem = await UpdateItem(item); if (updatedItem != null) { //update parent await RecursivelyUpdateParent(FolderCollection[updatedItem.Parent_id]); } }
private async Task <SkyDriveDataCommon> GetUpdatedMetadata(SkyDriveDataCommon item) { SkyDriveDataSource source = await SkyDriveDataSource.GetInstance(); SkyDriveDataCommon updatedItem; if (item.Type == SkyDriveItemType.Folder) { updatedItem = await source.GetFolder(item.UniqueId); } else { updatedItem = await source.GetFile(item.UniqueId); } return(updatedItem); }
private async Task <SkyDriveDataCommon> UpdateItem(SkyDriveDataCommon item) { var updatedItem = await GetUpdatedMetadata(item); if (updatedItem != null) { if (item.Type == SkyDriveItemType.File) { //file var file = FolderCollection[item.Parent_id].Items.FirstOrDefault(a => a.UniqueId == item.UniqueId); if (file != null) { //update file information from server file.Size = updatedItem.Size; file.Updated_time = updatedItem.Updated_time; file.Parent_id = updatedItem.Parent_id; file.Description = updatedItem.Description; //update parent await RecursivelyUpdateParent(FolderCollection[updatedItem.Parent_id]); } } else { //folder var cachedFolder = FolderCollection[item.UniqueId]; var cachedFolderParent = FolderCollection[item.Parent_id]; SkyDriveFolder folderToUpdate = cachedFolderParent.Subalbums.FirstOrDefault(a => a.UniqueId == item.UniqueId); if (folderToUpdate != null) { int index = cachedFolderParent.Subalbums.IndexOf(folderToUpdate); cachedFolderParent.Subalbums.RemoveAt(index); cachedFolderParent.Subalbums.Insert(index, (SkyDriveFolder)updatedItem); } cachedFolder.Title = updatedItem.Title; cachedFolder.Updated_time = updatedItem.Updated_time; cachedFolder.Count = ((SkyDriveFolder)updatedItem).Count; cachedFolder.Size = ((SkyDriveFolder)updatedItem).Size; cachedFolder.Parent_id = updatedItem.Parent_id; } } return(updatedItem); }