Beispiel #1
0
        /// <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;
 }
Beispiel #3
0
 public MRequestUpdateAttributes(MegaUser user, MegaNode node) : base(user)
 {
     MegaNode.EncryptAttrs(node);
     encryptedAttributes = node.encryptedAttributes;
     n   = node.Id;
     key = node.NodeKey.EncryptedKey;
 }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
 MegaNodeHelper HelperFromNode(MegaNode node)
 {
     lock (serverNodes)
     {
         return(new MegaNodeHelper
         {
             Node = node,
             Parent = serverNodes.Where(n => n.Node.Id == node.ParentId).FirstOrDefault()
         });
     }
 }
Beispiel #7
0
        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);
            }
        }
Beispiel #8
0
 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");
        }
Beispiel #10
0
    /**
     *      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);
    }
Beispiel #11
0
        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();
        }
Beispiel #12
0
        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));
        }
Beispiel #13
0
 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));
 }
Beispiel #14
0
        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");
                    }
                }
            }
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        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));
        }
Beispiel #17
0
        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;
 }
Beispiel #19
0
 internal void OnDeserialized(StreamingContext context)
 {
     MegaNode.DecryptAttrs(this);
 }
Beispiel #20
0
 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);
 }