Ejemplo n.º 1
0
 private void AddUploadHandle(TransferHandle h)
 {
     Invoke(() => Transfers.Add(h));
     h.PropertyChanged += (source, e) =>
     {
         if (e.PropertyName == "Status")
         {
             if (((TransferHandle)source).Status == TransferHandleStatus.Uploading)
             {
                 Status = ConnectivityStatus.Uploading;
             }
             else
             {
                 if (Transfers.All(t => t.Status == TransferHandleStatus.Success || t.Status == TransferHandleStatus.Cancelled || t.Status == TransferHandleStatus.Error))
                 {
                     Status = ConnectivityStatus.Online;
                 }
             }
         }
     };
     h.TransferEnded += (s1, e1) =>
     {
         AppendNode(h.Node);
     };
 }
Ejemplo n.º 2
0
        /// <summary>
        /// READ
        /// </summary>
        internal IFileDataRetriever GetFileRetriever(string path, string expectedId)
        {
            var node = AssertExist(path);

            AssertId(node, expectedId);

            var           attr     = node.Node.Type == MegaNodeType.File ? FileAttributes.Normal : FileAttributes.Directory;
            var           size     = node.Node.Type == MegaNodeType.File ? (long)node.Node.Size : 0;
            var           ts       = (DateTime)node.Node.Timestamp;
            var           fd       = new FileData(path, attr, ts, ts, ts, size);
            Func <Stream> streamFn = null;

            if (node.Node.Type == MegaNodeType.File)
            {
                streamFn = () =>
                {
                    var            tempFile = Path.Combine(TempDir, MegaApi.Utility.Util.RandomString(6) + ".sync");
                    bool           error    = false;
                    TransferHandle handle   = null;
                    api.DownloadFileSync(node.Node, tempFile);
                    return(File.OpenRead(tempFile));
                };
            }
            else
            {
                streamFn = () => { throw new NotImplementedException(); };
            }
            return(new FileRetriever(streamFn)
            {
                FileData = fd,
                RelativeDirectoryPath = Path.GetDirectoryName(path)
            });
        }
Ejemplo n.º 3
0
        public override void StartTransfer(TransferHandle hndl)
        {
            DownloadHandle handle = null;

            try { handle = (DownloadHandle)hndl; }
            catch (InvalidCastException)
            {
                throw new ArgumentException("Only DownloadHandle is supported");
            }
            byte[] dlKey = new byte[handle.Node.NodeKey.DecryptedKey.Length];
            Array.Copy(handle.Node.NodeKey.DecryptedKey, dlKey, dlKey.Length);
            if (dlKey.Length > 16)
            {
                dlKey.XorWith(0, dlKey, 16, 16);
            }
            var aesKey = new byte[16];

            Array.Copy(dlKey, aesKey, 16);
            handle.AesAlg = Crypto.CreateAes(aesKey);

            handle.Nonce = new byte[8];
            Array.Copy(dlKey, 16, handle.Nonce, 0, 8);

            handle.MacCheck = new byte[8];
            Array.Copy(dlKey, 24, handle.MacCheck, 0, 8);

            EnqueueTransfer(handle.Chunks);
        }
Ejemplo n.º 4
0
 void AddUploadHandle(TransferHandle h)
 {
     Invoke(() => transfers.Add(h));
     h.PropertyChanged += (s, ev) =>
     {
         h.TransferEnded += (s1, e1) => ShowFiles(currentNode, true);
     };
     SetStatusDone();
 }
Ejemplo n.º 5
0
 private void AddDownloadHandle(TransferHandle h)
 {
     Invoke(() => Transfers.Add(h));
     h.TransferEnded += (s1, e1) =>
     {
         if (Transfers.All(t => t.Progress >= 100))
         {
             Status = ConnectivityStatus.Online;
         }
     };
 }
Ejemplo n.º 6
0
 void CancelTransfer(TransferHandle handle, bool warn = true)
 {
     if (warn && (handle.Status == TransferHandleStatus.Downloading || handle.Status == TransferHandleStatus.Uploading))
     {
         var type = (handle.Status == TransferHandleStatus.Downloading ? "download" : "upload");
         var text = String.Format("Are you sure to cancel the {0} process for {1}?", type, handle.Node.Attributes.Name);
         if (MessageBox.Show(text, "Cancel " + type, MessageBoxButton.YesNo) == MessageBoxResult.No)
         {
             return;
         }
     }
     handle.CancelTransfer();
 }
Ejemplo n.º 7
0
        public override void StartTransfer(TransferHandle hndl)
        {
            UploadHandle handle = null;
            try{ handle = (UploadHandle)hndl;}
            catch(InvalidCastException)
            {
                throw new ArgumentException("Only UploadHandle is supported");
            }
            handle.UploadKey = Crypto.RandomKey(24);
            var ul_aes_key = new byte[16];
            Array.Copy(handle.UploadKey, ul_aes_key, 16);
            handle.AesAlg = Crypto.CreateAes(ul_aes_key);
            handle.Nonce = new byte[8];
            Array.Copy(handle.UploadKey, 16, handle.Nonce, 0, 8);

            EnqueueCrypt(handle.Chunks);
        }
Ejemplo n.º 8
0
        public override void StartTransfer(TransferHandle hndl)
        {
            UploadHandle handle = null;

            try{ handle = (UploadHandle)hndl; }
            catch (InvalidCastException)
            {
                throw new ArgumentException("Only UploadHandle is supported");
            }
            handle.UploadKey = Crypto.RandomKey(24);
            var ul_aes_key = new byte[16];

            Array.Copy(handle.UploadKey, ul_aes_key, 16);
            handle.AesAlg = Crypto.CreateAes(ul_aes_key);
            handle.Nonce  = new byte[8];
            Array.Copy(handle.UploadKey, 16, handle.Nonce, 0, 8);

            EnqueueCrypt(handle.Chunks);
        }
Ejemplo n.º 9
0
        public override void StartTransfer(TransferHandle hndl)
        {
            DownloadHandle handle = null;
            try { handle = (DownloadHandle)hndl; }
            catch (InvalidCastException)
            {
                throw new ArgumentException("Only DownloadHandle is supported");
            }
            byte[] dlKey = new byte[handle.Node.NodeKey.DecryptedKey.Length];
            Array.Copy(handle.Node.NodeKey.DecryptedKey, dlKey, dlKey.Length);
            if (dlKey.Length > 16) { dlKey.XorWith(0, dlKey, 16, 16); }
            var aesKey = new byte[16];
            Array.Copy(dlKey, aesKey, 16);
            handle.AesAlg = Crypto.CreateAes(aesKey);

            handle.Nonce = new byte[8];
            Array.Copy(dlKey, 16, handle.Nonce, 0, 8);

            handle.MacCheck = new byte[8];
            Array.Copy(dlKey, 24, handle.MacCheck, 0, 8);

            EnqueueTransfer(handle.Chunks);
        }
Ejemplo n.º 10
0
 public abstract void StartTransfer(TransferHandle handle);
Ejemplo n.º 11
0
 public abstract void StartTransfer(TransferHandle handle);
Ejemplo n.º 12
0
 // di container: autofac, castle windsor, ninject IoC, Di, Inversion of control
 public TransferMoney(TransferHandle handle, ILogTransfers logger)
 {
     Handle = handle;
     Logger = logger;
 }
Ejemplo n.º 13
0
 void AddDownloadHandle(TransferHandle h)
 {
     Invoke(() => transfers.Add(h));
     SetStatusDone();
 }
Ejemplo n.º 14
0
 // di container: autofac, castle windsor, ninject IoC, Di, Inversion of control
 public TransferMoney(TransferHandle handle, ILogTransfers logger)
 {
     Handle = handle;
     Logger = logger;
 }