/// <summary> /// CREATE /// </summary> internal SyncedNodeAttributes InsertNode(FileData fileData, string path, Stream dataStream) { string newId = null; lock (serverNodes) { AssertPathClear(path); var parent = AssertParentForPath(path); MegaNode newNode = null; if (fileData.IsDirectory) { newNode = api.CreateFolderSync(parent.Node.Id, fileData.Name); } else { AssertNonZero(fileData); newNode = api.UploadStreamSync(parent.Node.Id, fileData.Name, dataStream, fileData.Size); } serverNodes.Add(HelperFromNode(newNode)); newId = newNode.Id; } return(new SyncedNodeAttributes { Path = fileData.RelativePath, Id = newId }); }
public static DownloadHandle GetHandle(string filename, long filesize, string downloadUrl, MegaNode node, string tempPath = null) { var handle = new DownloadHandle(filename, filesize, tempPath); handle.DownloadUrl = downloadUrl; handle.Node = node; return handle; }
public MRequestUpdateAttributes(MegaUser user, MegaNode node) : base(user) { MegaNode.EncryptAttrs(node); encryptedAttributes = node.encryptedAttributes; n = node.Id; key = node.NodeKey.EncryptedKey; }
private void FinishFile(UploadHandle handle, string uploadHandle) { handle.Mac = new byte[16]; foreach (var chunk in handle.Chunks) { handle.Mac = handle.Mac.Xor(chunk.Mac); handle.Mac = Crypto.Encrypt(handle.AesAlg, handle.Mac); } PrepareNodeKeys(handle); var node = new MegaNode { Id = uploadHandle, ParentId = handle.UploadTargetNode, Type = MegaNodeType.File, Attributes = new NodeAttributes { Name = handle.Name }, NodeKey = new NodeKeys(handle.NodeKeys, User) }; var r = new MRequestCompleteUpload <MResponseCompleteUpload>(User, node); //Console.WriteLine("Sending finish request"); r.Success += (s, a) => { handle.Node = a.NewNode.FirstOrDefault(); handle.EndTransfer(null); }; r.Error += (s, a) => { handle.EndTransfer(a.Error); }; transport.EnqueueRequest(r); }
public MRequestCompleteUpload(MegaUser user, MegaNode node) : base(user) { t = node.ParentId; n = new List <MegaNode> { node }; this.user = user; Converters.Add(new NodeKeyConverter(user.masterKeyAlg, user)); }
MegaNodeHelper HelperFromNode(MegaNode node) { lock (serverNodes) { return(new MegaNodeHelper { Node = node, Parent = serverNodes.Where(n => n.Node.Id == node.ParentId).FirstOrDefault() }); } }
private void DownloadFile(MegaNode clickedNode) { var d = new SaveFileDialog(); d.FileName = clickedNode.Attributes.Name; if (d.ShowDialog() == true) { SetStatus("Starting download..."); api.DownloadFile(clickedNode, d.FileName, AddDownloadHandle, SetStatusError); } }
bool IsInsideWorkingRoot(MegaNode node) { lock (serverNodes) { var parent = serverNodes.Where(n => n.Node.Id == node.ParentId).FirstOrDefault(); if (parent == null && node.ParentId != rootFolder.Node.Id) { return(false); } return(true); } }
private void AppendNode(MegaNode node) { var newNode = new MegaListNode(node) { Parent = _flatNodes[node.ParentId] }; _flatNodes.Add(node.Id, newNode); Invoke(() => _flatNodes[node.ParentId].Children.Add(newNode)); OnPropertyChanged("CurrentNode"); OnPropertyChanged("FileNodesCount"); OnPropertyChanged("FileNodesSize"); }
/** * Creates a mega node. It gets pushed into a list elsewhere. * Initializes some properties * @param id The index it will inhabit in the megas list */ MegaNode CreateMegaNode(int id) { MegaNode n = (Instantiate(megaNodeFab) as Transform).GetComponent <MegaNode>(); n.t.position = Random.onUnitSphere * Random.Range(.25f, 1f); n.id = -id; n.index = id; n.mass = 0; n.t.SetParent(container); n.name = "megaNode" + id; return(n); }
private void ScheduleUpload(string[] files, MegaNode target) { SetStatus("Adding files and folders..."); var list = new List <Tuple <string, string> >(); foreach (var file in files) { var root = Path.GetDirectoryName(file); list.Add(new Tuple <string, string>(file, root)); if ((new FileInfo(file).Attributes & FileAttributes.Directory) == FileAttributes.Directory) { AddDirectoryContent(file, list, root); } } SetStatus("Preparing MEGA folders..."); foreach (var file in list) { var filename = file.Item1.Replace(file.Item2, "").TrimStart(Path.DirectorySeparatorChar); var folder = Path.GetDirectoryName(filename); try { var d = api.CreateFolderSync(target, nodes, folder, Path.DirectorySeparatorChar); var fi = new FileInfo(file.Item1); if ((fi.Attributes & FileAttributes.Directory) == FileAttributes.Directory) { try { nodes.Add(api.CreateFolderSync(d.Id, Path.GetFileName(filename))); } catch (MegaApiException e) { SetStatusError(e.ErrorNumber); } } else { if (fi.Length > 0) { api.UploadFile(d.Id, file.Item1, AddUploadHandle, SetStatusError); } } } catch (MegaApiException e) { SetStatusError(e.ErrorNumber); } } SetStatusDone(); }
public MRequestCreateFolder(MegaUser user, string folderName, string parentNode) : base(user) { this.user = user; t = parentNode; var folder = new MegaNode { Id = "xxxxxxxx", Type = MegaNodeType.Folder, Attributes = new NodeAttributes { Name = folderName }, NodeKey = new NodeKeys(Crypto.RandomKey(16), user) }; n.Add(folder); Converters.Add(new NodeKeyConverter(user.masterKeyAlg, user)); }
private void InitialLoadNodes() { Invoke(() => listBoxDownloads.ItemsSource = transfers); SetStatus("Retrieving the list of files..."); api.GetNodes((list) => { Invoke(() => { buttonUpload.IsEnabled = true; buttonRefresh.IsEnabled = true; buttonLogout.IsEnabled = true; buttonLogin.IsEnabled = true; }); SetStatusDone(); nodes = list; currentNode = list.Where(n => n.Type == MegaNodeType.RootFolder).FirstOrDefault(); ShowFiles(); }, e => SetStatusError(e)); }
private void Window_Drop_1(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { if ((e.Effects & DragDropEffects.Copy) == DragDropEffects.Copy) { String[] files = (String[])e.Data.GetData(DataFormats.FileDrop); if (files.Length > 0) { MegaNode target = null; lock (nodes) { target = nodes.Where(n => n.Id == currentNode.Id).First(); } Util.StartThread(() => ScheduleUpload(files, target), "drag_drop_upload_start"); } } } }
private void ShowFiles(MegaNode parent = null, bool refresh = false) { if (parent == null) { parent = currentNode; } if (refresh) { SetStatus("Refreshing file info..."); api.GetNodes((l) => { SetStatusDone(); nodes = l; ShowFiles(parent); }, e => SetStatusError(e)); return; } var list = nodes.Where(n => n.ParentId == parent.Id).ToList <MegaNode>(); currentNode = parent.Type == MegaNodeType.Dummy ? nodes.Where(n => n.Id == parent.Id).FirstOrDefault() : parent; if (currentNode.Type != MegaNodeType.RootFolder) { var p = nodes.Where(n => n.Id == currentNode.ParentId).FirstOrDefault(); list.Insert(0, new MegaNode { Id = p.Id, Attributes = new NodeAttributes { Name = ".." }, Type = MegaNodeType.Dummy }); } Invoke(() => listBoxNodes.ItemsSource = list); }
static void Upload(string file) { ConsoleExt.Log("Uploading {0}.", file); var nodes = Mega2.GetNodesSync(); MegaNode nodetouse = null; foreach (var node in nodes.Where(node => node.Attributes.Name == "TI3 Replays")) { nodetouse = node; } var uploadnode = Mega2.UploadFileSync(nodetouse.Id, file); uploadnode.Attributes.Name = Path.GetFileName(file); Mega2.UpdateNodeAttrSync(uploadnode); File.AppendAllText(Path.Combine(SaveDirectory, "upload.txt"), string.Format("{0} - {1}\r\n", Path.GetFileName(file), Mega.get_link(uploadnode.Id, Encode(uploadnode.NodeKey.DecryptedKey)))); #region MegaLibrary implementation //Not using as will throw an exception on Mono /*var nodes = Mega.retrieve_nodes(); * Node nodetouse = null; * foreach (var node in nodes.Where(node => node.attributes.name == "TI3 Replays")) * { * nodetouse = node; * } * Mega.upload(file, nodetouse == null ? Mega.create_folder("TI3 Replays") : nodetouse.identifier); * nodes = Mega.retrieve_nodes(); * Node uploadnode = null; * foreach (var node in nodes.Where(node => node.attributes.name == Path.GetFileName(file))) * uploadnode = node; * File.AppendAllText(Path.Combine(SaveDirectory, "upload.txt"), * string.Format("{0} - {1}\r\n", Path.GetFileName(file), * Mega.get_link(uploadnode.identifier, uploadnode.key)));*/ #endregion ConsoleExt.Log("Uploaded {0}.", Path.GetFileName(file)); }
public static DownloadHandle GetHandle(string filename, long filesize, string downloadUrl, MegaNode node, string tempPath = null) { var handle = new DownloadHandle(filename, filesize, tempPath); handle.DownloadUrl = downloadUrl; handle.Node = node; return(handle); }
public MegaListNode(MegaNode baseNode) { Children = new ObservableCollection <MegaListNode>(); _baseNode = baseNode; }
internal void OnDeserialized(StreamingContext context) { MegaNode.DecryptAttrs(this); }
private void FinishFile(UploadHandle handle, string uploadHandle) { handle.Mac = new byte[16]; foreach (var chunk in handle.Chunks) { handle.Mac = handle.Mac.Xor(chunk.Mac); handle.Mac = Crypto.Encrypt(handle.AesAlg, handle.Mac); } PrepareNodeKeys(handle); var node = new MegaNode { Id = uploadHandle, ParentId = handle.UploadTargetNode, Type = MegaNodeType.File, Attributes = new NodeAttributes { Name = handle.Name }, NodeKey = new NodeKeys(handle.NodeKeys, User) }; var r = new MRequestCompleteUpload<MResponseCompleteUpload>(User, node); //Console.WriteLine("Sending finish request"); r.Success += (s, a) => { handle.Node = a.NewNode.FirstOrDefault(); handle.EndTransfer(null); }; r.Error += (s, a) => { handle.EndTransfer(a.Error); }; transport.EnqueueRequest(r); }