private void AddOfflineNodeFromTransfer(TransferObjectModel megaTransfer) { var parentNode = SdkService.MegaSdk.getParentNode(megaTransfer.SelectedNode.OriginalMNode); // Need get the path on the transfer finish because the file name can be changed if already exists in the destiny path. var offlineNodePath = Path.Combine( OfflineService.GetOfflineParentNodePath(megaTransfer.SelectedNode.OriginalMNode), megaTransfer.Transfer.getFileName()); var sfoNode = new SavedForOfflineDB { Fingerprint = SdkService.MegaSdk.getNodeFingerprint(megaTransfer.SelectedNode.OriginalMNode), Base64Handle = megaTransfer.SelectedNode.OriginalMNode.getBase64Handle(), LocalPath = offlineNodePath, ParentBase64Handle = parentNode != null? parentNode.getBase64Handle() : string.Empty }; if (SavedForOfflineDB.ExistsNodeByLocalPath(sfoNode.LocalPath)) { SavedForOfflineDB.UpdateNode(sfoNode); } else { SavedForOfflineDB.InsertNode(sfoNode); } UiService.OnUiThread(() => megaTransfer.SelectedNode.IsSavedForOffline = true); OfflineService.CheckOfflineNodePath(megaTransfer.SelectedNode.OriginalMNode); }
public async void SaveForOffline() { // User must be online to perform this operation if (!await IsUserOnlineAsync()) { return; } var offlineParentNodePath = OfflineService.GetOfflineParentNodePath(this.OriginalMNode); if (!FolderService.FolderExists(offlineParentNodePath)) { FolderService.CreateFolder(offlineParentNodePath); } var existingNode = SavedForOfflineDB.SelectNodeByFingerprint(MegaSdk.getNodeFingerprint(this.OriginalMNode)); if (existingNode != null) { bool result = this.IsFolder ? await FolderService.CopyFolderAsync(existingNode.LocalPath, offlineParentNodePath) : await FileService.CopyFileAsync(existingNode.LocalPath, offlineParentNodePath); if (result) { SavedForOfflineDB.InsertNode(this.OriginalMNode); } } else { TransferService.MegaTransfers.Add(this.OfflineTransfer); this.OfflineTransfer.StartTransfer(true); } this.IsSavedForOffline = true; OfflineService.CheckOfflineNodePath(this.OriginalMNode); }