Esempio n. 1
0
 public void onTransferStart(MegaSDK api, MTransfer transfer)
 {
     _timer = new Timer(state =>
     {
         api.retryPendingConnections();
     }, null, TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(5));
 }
        public void onTransferTemporaryError(MegaSDK api, MTransfer transfer, MError e)
        {
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                if (DebugService.DebugSettings.IsDebugMode || Debugger.IsAttached)
                {
                    if (ProgressService.GetProgressBarBackgroundColor() != (Color)Application.Current.Resources["MegaRedColor"])
                    {
                        ProgressService.ChangeProgressBarBackgroundColor((Color)Application.Current.Resources["MegaRedColor"]);
                    }
                }
            });

            switch (e.getErrorCode())
            {
            case MErrorType.API_EGOINGOVERQUOTA: // Not enough quota
            case MErrorType.API_EOVERQUOTA:      // Overquota error
                ProcessOverquotaError(api, e);
                break;
            }

            // Extra checking to avoid NullReferenceException
            if (transfer == null)
            {
                return;
            }

            // Search the corresponding transfer in the transfers list
            var megaTransfer = TransfersService.SearchTransfer(TransfersService.MegaTransfers.SelectAll(), transfer);

            if (megaTransfer == null)
            {
                return;
            }

            var isBusy           = api.areTransfersPaused((int)transfer.getType()) ? false : true;
            var transferState    = api.areTransfersPaused((int)transfer.getType()) ? MTransferState.STATE_QUEUED : transfer.getState();
            var transferPriority = transfer.getPriority();

            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                // Only update the values if they have changed to improve the UI performance
                if (megaTransfer.Transfer != transfer)
                {
                    megaTransfer.Transfer = transfer;
                }
                if (megaTransfer.IsBusy != isBusy)
                {
                    megaTransfer.IsBusy = isBusy;
                }
                if (megaTransfer.TransferState != transferState)
                {
                    megaTransfer.TransferState = transferState;
                }
                if (megaTransfer.TransferPriority != transferPriority)
                {
                    megaTransfer.TransferPriority = transferPriority;
                }
            });
        }
Esempio n. 3
0
 public void onTransferTemporaryError(MegaSDK api, MTransfer transfer, MError e)
 {
     if (DebugService.DebugSettings.IsDebugMode || Debugger.IsAttached)
     {
         Deployment.Current.Dispatcher.BeginInvoke(() =>
                                                   ProgressService.ChangeProgressBarBackgroundColor((Color)Application.Current.Resources["MegaRedColor"]));
     }
 }
 public void onTransferTemporaryError(MegaSDK api, MTransfer transfer, MError e)
 {
     // Transfer overquota error
     if (e.getErrorCode() == MErrorType.API_EOVERQUOTA)
     {
         LogService.Log(MLogLevel.LOG_LEVEL_INFO, "Transfer quota exceeded (API_EOVERQUOTA)");
         OnTransferQuotaExceeded(EventArgs.Empty);
     }
 }
        public void onTransferFinish(MegaSDK api, MTransfer transfer, MError e)
        {
            if (_timer != null)
            {
                _timer.Dispose();
            }

            if (e.getErrorCode() == MErrorType.API_EGOINGOVERQUOTA || e.getErrorCode() == MErrorType.API_EOVERQUOTA)
            {
                //Stop the Camera Upload Service
                LogService.Log(MLogLevel.LOG_LEVEL_INFO,
                               "Storage quota exceeded ({0}) - Disabling CAMERA UPLOADS service", e.getErrorCode().ToString());
                OnStorageQuotaExceeded(EventArgs.Empty);
                return;
            }

            try
            {
                if (e.getErrorCode() == MErrorType.API_OK)
                {
                    ulong    mtime       = api.getNodeByHandle(transfer.getNodeHandle()).getModificationTime();
                    DateTime pictureDate = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Convert.ToDouble(mtime));
                    SettingsService.SaveSettingToFile <DateTime>("LastUploadDate", pictureDate);

                    // If file upload succeeded. Clear the error information for a clean sheet.
                    ErrorProcessingService.Clear();
                }
                else
                {
                    // An error occured. Log and process it.
                    switch (e.getErrorCode())
                    {
                    case MErrorType.API_EFAILED:
                    case MErrorType.API_EEXIST:
                    case MErrorType.API_EARGS:
                    case MErrorType.API_EREAD:
                    case MErrorType.API_EWRITE:
                    {
                        LogService.Log(MLogLevel.LOG_LEVEL_ERROR, e.getErrorString());
                        ErrorProcessingService.ProcessFileError(transfer.getFileName());
                        break;
                    }
                    }
                }
            }
            catch (Exception)
            {
                // Setting could not be saved. Just continue the run
            }
            finally
            {
                // Start a new upload action
                ScheduledAgent.Upload();
            }
        }
Esempio n. 6
0
        /// <summary>
        /// This function is called when a folder transfer has finished
        /// </summary>
        /// <param name="api">MegaApi object that started the transfer</param>
        /// <param name="transfer">Information about the transfer</param>
        /// <param name="e">Error information</param>
        private async void FolderTransferFinish(MegaSDK api, MTransfer transfer, MError e)
        {
            // In this case the transfer is not included in the transfers list.
            // We need to create a new 'TransferObjectModel' to work with it.
            var megaTransfer = TransferService.CreateTransferObjectModel(transfer);

            if (megaTransfer == null)
            {
                return;
            }

            megaTransfer.Transfer = transfer;
            UiService.OnUiThread(() =>
            {
                megaTransfer.TransferState    = transfer.getState();
                megaTransfer.TransferPriority = transfer.getPriority();
            });

            switch (e.getErrorCode())
            {
            case MErrorType.API_OK:
                if (transfer.getType() == MTransferType.TYPE_DOWNLOAD)
                {
                    if (megaTransfer.IsSaveForOfflineTransfer)
                    {
                        this.AddOfflineNodeFromTransfer(megaTransfer);
                        return;
                    }

                    if (!await megaTransfer.FinishDownload(megaTransfer.TransferPath, megaTransfer.SelectedNode.Name))
                    {
                        UiService.OnUiThread(() => megaTransfer.TransferState = MTransferState.STATE_FAILED);
                    }
                }
                break;

            case MErrorType.API_EGOINGOVERQUOTA: // Not enough quota
            case MErrorType.API_EOVERQUOTA:      //Storage overquota error
                ProcessOverquotaError(api, e);
                break;

            case MErrorType.API_EINCOMPLETE:
                if (megaTransfer.IsSaveForOfflineTransfer)
                {
                    this.RemoveOfflineNodeFromTransfer(megaTransfer);
                }
                break;

            default:
                ProcessDefaultError(transfer);
                break;
            }
        }
Esempio n. 7
0
        public void onTransferTemporaryError(MegaSDK api, MTransfer transfer, MError e)
        {
            // Transfer overquota error
            if (e.getErrorCode() == MErrorType.API_EOVERQUOTA)
            {
                UiService.OnUiThread(() =>
                {
                    AccountService.AccountDetails.IsInTransferOverquota = true;
                    DialogService.ShowTransferOverquotaWarning();
                });
            }

            // Extra checking to avoid NullReferenceException
            if (transfer == null)
            {
                return;
            }

            // Search the corresponding transfer in the transfers list
            var megaTransfer = TransferService.SearchTransfer(TransferService.MegaTransfers.SelectAll(), transfer);

            if (megaTransfer == null)
            {
                return;
            }

            var isBusy           = api.areTransfersPaused((int)transfer.getType()) ? false : true;
            var transferState    = api.areTransfersPaused((int)transfer.getType()) ? MTransferState.STATE_QUEUED : transfer.getState();
            var transferPriority = transfer.getPriority();

            UiService.OnUiThread(() =>
            {
                // Only update the values if they have changed to improve the UI performance
                if (megaTransfer.Transfer != transfer)
                {
                    megaTransfer.Transfer = transfer;
                }
                if (megaTransfer.IsBusy != isBusy)
                {
                    megaTransfer.IsBusy = isBusy;
                }
                if (megaTransfer.TransferState != transferState)
                {
                    megaTransfer.TransferState = transferState;
                }
                if (megaTransfer.TransferPriority != transferPriority)
                {
                    megaTransfer.TransferPriority = transferPriority;
                }
            });
        }
Esempio n. 8
0
        public async void onTransferFinish(MegaSDK api, MTransfer transfer, MError e)
        {
            _timer?.Dispose();

            //Storage overquota error
            if (e.getErrorCode() == MErrorType.API_EGOINGOVERQUOTA || e.getErrorCode() == MErrorType.API_EOVERQUOTA)
            {
                //Stop the Camera Upload Service
                LogService.Log(MLogLevel.LOG_LEVEL_INFO,
                               string.Format("Storage quota exceeded ({0}) - Disabling CAMERA UPLOADS service", e.getErrorCode().ToString()));
                OnStorageQuotaExceeded(EventArgs.Empty);
                _tcs.TrySetResult(e.getErrorString());
                return;
            }

            try
            {
                if (e.getErrorCode() == MErrorType.API_OK)
                {
                    ulong mtime    = api.getNodeByHandle(transfer.getNodeHandle()).getModificationTime();
                    var   fileDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Convert.ToDouble(mtime));
                    await SettingsService.SaveSettingToFileAsync(_dateSetting, fileDate.ToLocalTime());

                    _tcs.TrySetResult(null);
                }
                else
                {
                    // An error occured. Log and process it.
                    switch (e.getErrorCode())
                    {
                    case MErrorType.API_EFAILED:
                    case MErrorType.API_EEXIST:
                    case MErrorType.API_EARGS:
                    case MErrorType.API_EREAD:
                    case MErrorType.API_EWRITE:
                    {
                        // Error will be loggend by caller
                        _tcs.TrySetResult(e.getErrorString());
                        break;
                    }
                    }
                    _tcs.TrySetResult(null);
                }
            }
            catch (Exception ex)
            {
                _tcs.TrySetResult(ex.Message);
                // Setting could not be saved. Just continue the run
            }
        }
Esempio n. 9
0
        public void onTransferTemporaryError(MegaSDK api, MTransfer transfer, MError e)
        {
            switch (e.getErrorCode())
            {
            case MErrorType.API_EGOINGOVERQUOTA: // Not enough quota
            case MErrorType.API_EOVERQUOTA:      // Overquota error
                ProcessOverquotaError(api, e);
                break;
            }

            // Extra checking to avoid NullReferenceException
            if (transfer == null)
            {
                return;
            }

            // Search the corresponding transfer in the transfers list
            var megaTransfer = TransferService.SearchTransfer(TransferService.MegaTransfers.SelectAll(), transfer);

            if (megaTransfer == null)
            {
                return;
            }

            var isBusy           = api.areTransfersPaused((int)transfer.getType()) ? false : true;
            var transferState    = api.areTransfersPaused((int)transfer.getType()) ? MTransferState.STATE_QUEUED : transfer.getState();
            var transferPriority = transfer.getPriority();

            UiService.OnUiThread(() =>
            {
                // Only update the values if they have changed to improve the UI performance
                if (megaTransfer.Transfer != transfer)
                {
                    megaTransfer.Transfer = transfer;
                }
                if (megaTransfer.IsBusy != isBusy)
                {
                    megaTransfer.IsBusy = isBusy;
                }
                if (megaTransfer.TransferState != transferState)
                {
                    megaTransfer.TransferState = transferState;
                }
                if (megaTransfer.TransferPriority != transferPriority)
                {
                    megaTransfer.TransferPriority = transferPriority;
                }
            });
        }
Esempio n. 10
0
        public void onTransferUpdate(MegaSDK api, MTransfer transfer)
        {
            // Extra checking to avoid NullReferenceException
            if (transfer == null)
            {
                return;
            }

            // Use a temp variable to avoid InvalidOperationException
            var transfersList = Transfers.ToList();

            // Extra checking during finding to avoid NullReferenceException
            var megaTransfer = transfersList.FirstOrDefault(t =>
                                                            (t.Transfer != null) && (t.Transfer.getTag() == transfer.getTag()));

            if (megaTransfer != null)
            {
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    ProgressService.ChangeProgressBarBackgroundColor((Color)Application.Current.Resources["PhoneChromeColor"]);

                    megaTransfer.CancelButtonState             = true;
                    megaTransfer.TransferButtonIcon            = new Uri("/Assets/Images/cancel transfers.Screen-WXGA.png", UriKind.Relative);
                    megaTransfer.TransferButtonForegroundColor = new SolidColorBrush(Colors.White);
                    megaTransfer.IsBusy          = true;
                    megaTransfer.TotalBytes      = transfer.getTotalBytes();
                    megaTransfer.TransferedBytes = transfer.getTransferredBytes();
                    megaTransfer.TransferSpeed   = transfer.getSpeed().ToStringAndSuffixPerSecond();

                    if (megaTransfer.TransferedBytes > 0)
                    {
                        switch (megaTransfer.Type)
                        {
                        case TransferType.Download:
                            megaTransfer.Status = TransferStatus.Downloading;
                            break;

                        case TransferType.Upload:
                            megaTransfer.Status = TransferStatus.Uploading;
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                    }
                });
            }
        }
Esempio n. 11
0
        public void onTransferStart(MegaSDK api, MTransfer transfer)
        {
            TransferObjectModel megaTransfer = null;

            if (transfer.getType() == MTransferType.TYPE_DOWNLOAD)
            {
                // If is a public node
                MNode node = transfer.getPublicMegaNode();
                if (node == null) // If not
                {
                    node = api.getNodeByHandle(transfer.getNodeHandle());
                }

                if (node != null)
                {
                    megaTransfer = new TransferObjectModel(api,
                                                           NodeService.CreateNew(api, App.AppInformation, node, ContainerType.CloudDrive),
                                                           TransferType.Download, transfer.getPath());
                }
            }
            else
            {
                megaTransfer = new TransferObjectModel(api, App.MainPageViewModel.CloudDrive.FolderRootNode,
                                                       TransferType.Upload, transfer.getPath());
            }

            if (megaTransfer != null)
            {
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    TransfersService.GetTransferAppData(transfer, megaTransfer);

                    megaTransfer.Transfer                      = transfer;
                    megaTransfer.Status                        = TransferStatus.Queued;
                    megaTransfer.CancelButtonState             = true;
                    megaTransfer.TransferButtonIcon            = new Uri("/Assets/Images/cancel transfers.Screen-WXGA.png", UriKind.Relative);
                    megaTransfer.TransferButtonForegroundColor = new SolidColorBrush(Colors.White);
                    megaTransfer.IsBusy                        = true;
                    megaTransfer.TotalBytes                    = transfer.getTotalBytes();
                    megaTransfer.TransferedBytes               = transfer.getTransferredBytes();
                    megaTransfer.TransferSpeed                 = transfer.getSpeed().ToStringAndSuffixPerSecond();

                    App.MegaTransfers.Add(megaTransfer);
                    Transfers.Add(megaTransfer);
                });
            }
        }
Esempio n. 12
0
        public void onTransferFinish(MegaSDK api, MTransfer transfer, MError e)
        {
            // Extra checking to avoid NullReferenceException
            if (transfer == null)
            {
                return;
            }

            if (transfer.isFolderTransfer())
            {
                FolderTransferFinish(api, transfer, e);
            }
            else
            {
                FileTransferFinish(api, transfer, e);
            }
        }
Esempio n. 13
0
 public void onTransferTemporaryError(MegaSDK api, MTransfer transfer, MError e)
 {
     switch (e.getErrorCode())
     {
     case MErrorType.API_EGOINGOVERQUOTA:
     case MErrorType.API_EOVERQUOTA:
         if (e.getValue() != 0)     // TRANSFER OVERQUOTA ERROR
         {
             LogService.Log(MLogLevel.LOG_LEVEL_INFO,
                            string.Format("Transfer quota exceeded ({0})", e.getErrorCode().ToString()));
         }
         else     // STORAGE OVERQUOTA ERROR
         {
             LogService.Log(MLogLevel.LOG_LEVEL_INFO,
                            string.Format("Storage quota exceeded ({0})", e.getErrorCode().ToString()));
         }
         break;
     }
 }
Esempio n. 14
0
        public void onTransferStart(MegaSDK api, MTransfer transfer)
        {
            // Extra checking to avoid NullReferenceException
            if (transfer == null)
            {
                return;
            }

            UiService.OnUiThread(() =>
            {
                var megaTransfer = TransferService.AddTransferToList(TransferService.MegaTransfers, transfer);
                if (megaTransfer != null)
                {
                    megaTransfer.Transfer         = transfer;
                    megaTransfer.IsBusy           = api.areTransfersPaused((int)transfer.getType()) ? false : true;
                    megaTransfer.TransferState    = api.areTransfersPaused((int)transfer.getType()) ? MTransferState.STATE_QUEUED : transfer.getState();
                    megaTransfer.TotalBytes       = transfer.getTotalBytes();
                    megaTransfer.TransferPriority = transfer.getPriority();
                }
            });
        }
Esempio n. 15
0
        /// <summary>
        /// This function is called when a transfer fails by a default error.
        /// It does the needed actions to process this kind of error.
        /// </summary>
        /// <param name="transfer"></param>
        private void ProcessDefaultError(MTransfer transfer)
        {
            string message, title = string.Empty;

            switch (transfer.getType())
            {
            case MTransferType.TYPE_DOWNLOAD:
                title = ResourceService.AppMessages.GetString("AM_DownloadFailed_Title");
                if (transfer.isFolderTransfer())
                {
                    message = ResourceService.AppMessages.GetString("AM_DownloadFolderFailed");
                }
                else
                {
                    message = ResourceService.AppMessages.GetString("AM_DownloadFileFailed");
                }
                break;

            case MTransferType.TYPE_UPLOAD:
                title = ResourceService.AppMessages.GetString("AM_UploadFailed_Title");
                if (transfer.isFolderTransfer())
                {
                    message = ResourceService.AppMessages.GetString("AM_UploadFolderFailed");
                }
                else
                {
                    message = ResourceService.AppMessages.GetString("AM_UploadFileFailed");
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            UiService.OnUiThread(async() =>
            {
                await DialogService.ShowAlertAsync(title,
                                                   string.Format(message, transfer.getFileName()));
            });
        }
Esempio n. 16
0
        /// <summary>
        /// Get the transfer "AppData" (substrings separated by '#')
        /// <para>- Substring 1: Boolean value to indicate if the download is for Save For Offline (SFO).</para>
        /// <para>- Substring 2: String which contains the download folder path external to the app sandbox cache.</para>
        /// </summary>
        /// <param name="transfer">MEGA SDK transfer to obtain the "AppData".</param>
        /// <param name="megaTransfer">App transfer object to be displayed.</param>
        /// <returns>Boolean value indicating if all was good.</returns>
        public static bool GetTransferAppData(MTransfer transfer, TransferObjectModel megaTransfer)
        {
            // Default values
            megaTransfer.IsSaveForOfflineTransfer = false;
            megaTransfer.ExternalDownloadPath     = null;

            // Only the downloads can contain app data
            if (transfer.getType() != MTransferType.TYPE_DOWNLOAD)
            {
                return(false);
            }

            // Get the transfer "AppData"
            String transferAppData = transfer.getAppData();

            if (String.IsNullOrWhiteSpace(transferAppData))
            {
                return(false);
            }

            // Split the string into the substrings separated by '#'
            string[] splittedAppData = transferAppData.Split("#".ToCharArray(), 2);
            if (splittedAppData.Count() < 1)
            {
                return(false);
            }

            // Set the corresponding values
            megaTransfer.IsSaveForOfflineTransfer = Convert.ToBoolean(splittedAppData[0]);

            if (splittedAppData.Count() >= 2)
            {
                megaTransfer.ExternalDownloadPath = splittedAppData[1];
            }

            return(true);
        }
        public void onTransferStart(MegaSDK api, MTransfer transfer)
        {
            // Extra checking to avoid NullReferenceException
            if (transfer == null)
            {
                return;
            }

            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                var megaTransfer = TransfersService.AddTransferToList(TransfersService.MegaTransfers, transfer);
                if (megaTransfer != null)
                {
                    TransfersService.GetTransferAppData(transfer, megaTransfer);

                    megaTransfer.Transfer           = transfer;
                    megaTransfer.IsBusy             = api.areTransfersPaused((int)transfer.getType()) ? false : true;
                    megaTransfer.TransferState      = api.areTransfersPaused((int)transfer.getType()) ? MTransferState.STATE_QUEUED : transfer.getState();
                    megaTransfer.TotalBytes         = transfer.getTotalBytes();
                    megaTransfer.TransferPriority   = transfer.getPriority();
                    megaTransfer.TransferButtonIcon = new Uri("/Assets/Images/cancel transfers.Screen-WXGA.png", UriKind.Relative);
                }
            });
        }
Esempio n. 18
0
        /// <summary>
        /// Add a <see cref="MTransfer"/> to the corresponding transfers list if it is not already included.
        /// </summary>
        /// <param name="megaTransfers"><see cref="TransferQueue"/> which contains the transfers list(s).</param>
        /// <param name="transfer"><see cref="MTransfer"/> to be added to the corresponding transfer list.</param>
        /// <returns>The <see cref="TransferObjectModel"/> corresponding to the <see cref="MTransfer"/>.</returns>
        public static TransferObjectModel AddTransferToList(TransferQueue megaTransfers, MTransfer transfer)
        {
            // Folder transfers are not included into the transfers list.
            if (transfer == null || transfer.isFolderTransfer())
            {
                return(null);
            }

            // Search if the transfer already exists into the transfers list.
            var megaTransfer = SearchTransfer(megaTransfers.SelectAll(), transfer);

            if (megaTransfer != null)
            {
                return(megaTransfer);
            }

            // If doesn't exist create a new one and add it to the transfers list
            megaTransfer = CreateTransferObjectModel(transfer);
            if (megaTransfer != null)
            {
                megaTransfers.Add(megaTransfer);
            }

            return(megaTransfer);
        }
Esempio n. 19
0
        /// <summary>
        /// Create a <see cref="TransferObjectModel"/> from a <see cref="MTransfer"/>.
        /// </summary>
        /// <param name="transfer"></param>
        /// <returns>The new <see cref="TransferObjectModel"/></returns>
        public static TransferObjectModel CreateTransferObjectModel(MTransfer transfer)
        {
            if (transfer == null)
            {
                return(null);
            }

            try
            {
                TransferObjectModel megaTransfer = null;

                switch (transfer.getType())
                {
                case MTransferType.TYPE_DOWNLOAD:
                    MNode node = transfer.getPublicMegaNode() ??                               // If is a public node
                                 SdkService.MegaSdk.getNodeByHandle(transfer.getNodeHandle()); // If not

                    if (node == null)
                    {
                        return(null);
                    }

                    megaTransfer = new TransferObjectModel(SdkService.MegaSdk,
                                                           NodeService.CreateNew(SdkService.MegaSdk, App.AppInformation, node, ContainerType.CloudDrive),
                                                           MTransferType.TYPE_DOWNLOAD, transfer.getPath());
                    break;

                case MTransferType.TYPE_UPLOAD:
                    var parentNode = SdkService.MegaSdk.getNodeByHandle(transfer.getParentHandle());

                    if (parentNode == null)
                    {
                        return(null);
                    }

                    megaTransfer = new TransferObjectModel(SdkService.MegaSdk,
                                                           NodeService.CreateNew(SdkService.MegaSdk, App.AppInformation, parentNode, ContainerType.CloudDrive),
                                                           MTransferType.TYPE_UPLOAD, transfer.getPath());
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                if (megaTransfer != null)
                {
                    GetTransferAppData(transfer, megaTransfer);

                    megaTransfer.Transfer          = transfer;
                    megaTransfer.TransferState     = transfer.getState();
                    megaTransfer.TransferPriority  = transfer.getPriority();
                    megaTransfer.IsBusy            = false;
                    megaTransfer.TotalBytes        = transfer.getTotalBytes();
                    megaTransfer.TransferedBytes   = transfer.getTransferredBytes();
                    megaTransfer.TransferSpeed     = string.Empty;
                    megaTransfer.TransferMeanSpeed = 0;

                    megaTransfer.TransferState = !SdkService.MegaSdk.areTransfersPaused((int)transfer.getType())
                        ? MTransferState.STATE_QUEUED : MTransferState.STATE_PAUSED;
                }

                return(megaTransfer);
            }
            catch (Exception) { return(null); }
        }
Esempio n. 20
0
 public bool onTransferData(MegaSDK api, MTransfer transfer, byte[] data)
 {
     return(false);
 }
Esempio n. 21
0
 public void onTransferUpdate(MegaSDK api, MTransfer transfer)
 {
 }
        public void onTransferUpdate(MegaSDK api, MTransfer transfer)
        {
            // Extra checking to avoid NullReferenceException
            if (transfer == null)
            {
                return;
            }

            // Search the corresponding transfer in the transfers list
            var megaTransfer = TransfersService.SearchTransfer(TransfersService.MegaTransfers.SelectAll(), transfer);

            if (megaTransfer == null)
            {
                return;
            }

            var isBusy            = api.areTransfersPaused((int)transfer.getType()) ? false : true;
            var transferState     = api.areTransfersPaused((int)transfer.getType()) ? MTransferState.STATE_QUEUED : transfer.getState();
            var totalBytes        = transfer.getTotalBytes();
            var transferedBytes   = transfer.getTransferredBytes();
            var transferSpeed     = transfer.getSpeed().ToStringAndSuffixPerSecond();
            var transferMeanSpeed = transfer.getMeanSpeed();
            var transferPriority  = transfer.getPriority();

            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                if (ProgressService.GetProgressBarBackgroundColor() != (Color)Application.Current.Resources["PhoneChromeColor"])
                {
                    ProgressService.ChangeProgressBarBackgroundColor((Color)Application.Current.Resources["PhoneChromeColor"]);
                }

                // Only update the values if they have changed to improve the UI performance
                if (megaTransfer.Transfer != transfer)
                {
                    megaTransfer.Transfer = transfer;
                }
                if (megaTransfer.IsBusy != isBusy)
                {
                    megaTransfer.IsBusy = isBusy;
                }
                if (megaTransfer.TransferState != transferState)
                {
                    megaTransfer.TransferState = transferState;
                }
                if (megaTransfer.TotalBytes != totalBytes)
                {
                    megaTransfer.TotalBytes = totalBytes;
                }
                if (megaTransfer.TransferedBytes != transferedBytes)
                {
                    megaTransfer.TransferedBytes = transferedBytes;
                }
                if (megaTransfer.TransferSpeed != transferSpeed)
                {
                    megaTransfer.TransferSpeed = transferSpeed;
                }
                if (megaTransfer.TransferMeanSpeed != transferMeanSpeed)
                {
                    megaTransfer.TransferMeanSpeed = transferMeanSpeed;
                }
                if (megaTransfer.TransferPriority != transferPriority)
                {
                    megaTransfer.TransferPriority = transferPriority;
                }
            });
        }
        public async void onTransferFinish(MegaSDK api, MTransfer transfer, MError e)
        #endif
        {
            // Search the corresponding transfer in the transfers list
            var megaTransfer = TransfersService.SearchTransfer(TransfersService.MegaTransfers.SelectAll(), transfer);

            if (megaTransfer == null)
            {
                return;
            }

            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                ProgressService.ChangeProgressBarBackgroundColor((Color)Application.Current.Resources["PhoneChromeColor"]);

                megaTransfer.Transfer         = transfer;
                megaTransfer.TransferState    = transfer.getState();
                megaTransfer.TransferPriority = transfer.getPriority();

                TransfersService.GetTransferAppData(transfer, megaTransfer);

                megaTransfer.TotalBytes      = transfer.getTotalBytes();
                megaTransfer.TransferedBytes = transfer.getTransferredBytes();
                megaTransfer.TransferSpeed   = string.Empty;
            });

            switch (e.getErrorCode())
            {
            case MErrorType.API_OK:
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    megaTransfer.TransferedBytes    = megaTransfer.TotalBytes;
                    megaTransfer.TransferButtonIcon = new Uri("/Assets/Images/completed transfers.Screen-WXGA.png", UriKind.Relative);
                });

                switch (megaTransfer.Type)
                {
                case MTransferType.TYPE_DOWNLOAD:
                    if (megaTransfer.IsSaveForOfflineTransfer)         //If is a save for offline download transfer
                    {
                        var node = megaTransfer.SelectedNode as NodeViewModel;
                        if (node != null)
                        {
                            // Need get the path on the transfer finish because the file name can be changed
                            // if already exists in the destiny path.
                            var newOfflineLocalPath = Path.Combine(transfer.getParentPath(), transfer.getFileName()).Replace("/", "\\");

                            var sfoNode = new SavedForOffline
                            {
                                Fingerprint          = SdkService.MegaSdk.getNodeFingerprint(node.OriginalMNode),
                                Base64Handle         = node.OriginalMNode.getBase64Handle(),
                                LocalPath            = newOfflineLocalPath,
                                IsSelectedForOffline = true
                            };

                            // If is a public node (link) the destination folder is the SFO root, so the parent handle
                            // is the handle of the root node.
                            if (node.ParentContainerType != ContainerType.PublicLink)
                            {
                                sfoNode.ParentBase64Handle = (SdkService.MegaSdk.getParentNode(node.OriginalMNode)).getBase64Handle();
                            }
                            else
                            {
                                sfoNode.ParentBase64Handle = SdkService.MegaSdk.getRootNode().getBase64Handle();
                            }

                            if (!(SavedForOffline.ExistsNodeByLocalPath(sfoNode.LocalPath)))
                            {
                                SavedForOffline.Insert(sfoNode);
                            }
                            else
                            {
                                SavedForOffline.UpdateNode(sfoNode);
                            }

                            Deployment.Current.Dispatcher.BeginInvoke(() =>
                            {
                                node.IsAvailableOffline = node.IsSelectedForOffline = true;
                                TransfersService.MoveMegaTransferToCompleted(TransfersService.MegaTransfers, megaTransfer);
                            });

                                    #if WINDOWS_PHONE_80
                            //If is download transfer of an image file
                            var imageNode = node as ImageNodeViewModel;
                            if (imageNode != null)
                            {
                                Deployment.Current.Dispatcher.BeginInvoke(() => imageNode.ImageUri = new Uri(megaTransfer.TransferPath));

                                bool exportToPhotoAlbum = SettingsService.LoadSetting <bool>(SettingsResources.ExportImagesToPhotoAlbum, false);
                                if (exportToPhotoAlbum)
                                {
                                    Deployment.Current.Dispatcher.BeginInvoke(() => imageNode.SaveImageToCameraRoll(false));
                                }
                            }
                                    #endif
                        }
                    }
                    else         //If is a standard download transfer (no for save for offline)
                    {
                        bool result = false;

                        //If is download transfer of an image file
                        var imageNode = megaTransfer.SelectedNode as ImageNodeViewModel;
                        if (imageNode != null)
                        {
                            Deployment.Current.Dispatcher.BeginInvoke(() => imageNode.ImageUri = new Uri(megaTransfer.TransferPath));

                            if (megaTransfer.AutoLoadImageOnFinish)
                            {
                                Deployment.Current.Dispatcher.BeginInvoke(() =>
                                {
                                    if (imageNode.OriginalMNode.hasPreview())
                                    {
                                        return;
                                    }
                                    imageNode.PreviewImageUri = new Uri(imageNode.PreviewPath);
                                });
                            }

                                    #if WINDOWS_PHONE_81
                            try
                            {
                                result = await megaTransfer.FinishDownload(megaTransfer.TransferPath, imageNode.Name);
                            }
                            catch (Exception exception)
                            {
                                LogService.Log(MLogLevel.LOG_LEVEL_ERROR, "Error finishing a download to an external location", exception);
                            }
                                    #endif
                        }
                                #if WINDOWS_PHONE_81
                        else         //If is a download transfer of other file type
                        {
                            var node = megaTransfer.SelectedNode as FileNodeViewModel;
                            if (node != null)
                            {
                                try
                                {
                                    result = await megaTransfer.FinishDownload(megaTransfer.TransferPath, node.Name);
                                }
                                catch (Exception exception)
                                {
                                    LogService.Log(MLogLevel.LOG_LEVEL_ERROR, "Error finishing a download to an external location", exception);
                                }
                            }
                        }
                                #endif

                        Deployment.Current.Dispatcher.BeginInvoke(() =>
                        {
                            if (!result)
                            {
                                megaTransfer.TransferState = MTransferState.STATE_FAILED;
                            }
                            else
                            {
                                TransfersService.MoveMegaTransferToCompleted(TransfersService.MegaTransfers, megaTransfer);
                            }
                        });
                    }
                    break;

                case MTransferType.TYPE_UPLOAD:
                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                                                              TransfersService.MoveMegaTransferToCompleted(TransfersService.MegaTransfers, megaTransfer));
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                break;

            case MErrorType.API_EGOINGOVERQUOTA: // Not enough quota
            case MErrorType.API_EOVERQUOTA:      // Storage overquota error
                // Stop all upload transfers
                LogService.Log(MLogLevel.LOG_LEVEL_INFO,
                               string.Format("Storage quota exceeded ({0}) - Canceling uploads", e.getErrorCode().ToString()));
                api.cancelTransfers((int)MTransferType.TYPE_UPLOAD);

                // Disable the "camera upload" service if is enabled
                if (MediaService.GetAutoCameraUploadStatus())
                {
                    LogService.Log(MLogLevel.LOG_LEVEL_INFO,
                                   string.Format("Storage quota exceeded ({0}) - Disabling CAMERA UPLOADS service", e.getErrorCode().ToString()));
                    MediaService.SetAutoCameraUpload(false);
                    SettingsService.SaveSetting(SettingsResources.CameraUploadsIsEnabled, false);
                }

                Deployment.Current.Dispatcher.BeginInvoke(() => DialogService.ShowOverquotaAlert());
                break;

            case MErrorType.API_EINCOMPLETE:
                Deployment.Current.Dispatcher.BeginInvoke(() => megaTransfer.TransferState = MTransferState.STATE_CANCELLED);
                break;

            default:
                Deployment.Current.Dispatcher.BeginInvoke(() => megaTransfer.TransferState = MTransferState.STATE_FAILED);
                switch (megaTransfer.Type)
                {
                case MTransferType.TYPE_DOWNLOAD:
                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                    {
                        new CustomMessageDialog(
                            AppMessages.DownloadNodeFailed_Title,
                            String.Format(AppMessages.DownloadNodeFailed, e.getErrorString()),
                            App.AppInformation,
                            MessageDialogButtons.Ok).ShowDialog();
                    });

                    break;

                case MTransferType.TYPE_UPLOAD:
                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                    {
                        new CustomMessageDialog(
                            AppMessages.UploadNodeFailed_Title,
                            String.Format(AppMessages.UploadNodeFailed, e.getErrorString()),
                            App.AppInformation,
                            MessageDialogButtons.Ok).ShowDialog();
                    });

                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                break;
            }
        }
 public void onTransferFinish(MegaSDK api, MTransfer transfer, MError e)
Esempio n. 25
0
        /// <summary>
        /// This function is called when a file transfer has finished
        /// </summary>
        /// <param name="api">MegaApi object that started the transfer</param>
        /// <param name="transfer">Information about the transfer</param>
        /// <param name="e">Error information</param>
        private async void FileTransferFinish(MegaSDK api, MTransfer transfer, MError e)
        {
            // Search the corresponding transfer in the transfers list
            var megaTransfer = TransferService.SearchTransfer(TransferService.MegaTransfers.SelectAll(), transfer);

            if (megaTransfer == null)
            {
                return;
            }

            UiService.OnUiThread(() =>
            {
                megaTransfer.Transfer         = transfer;
                megaTransfer.TransferState    = transfer.getState();
                megaTransfer.TransferPriority = transfer.getPriority();

                TransferService.GetTransferAppData(transfer, megaTransfer);

                megaTransfer.TotalBytes      = transfer.getTotalBytes();
                megaTransfer.TransferedBytes = transfer.getTransferredBytes();
                megaTransfer.TransferSpeed   = string.Empty;
                megaTransfer.IsBusy          = false;
            });

            switch (e.getErrorCode())
            {
            case MErrorType.API_OK:
                UiService.OnUiThread(() => megaTransfer.TransferedBytes = megaTransfer.TotalBytes);
                if (megaTransfer.Type == MTransferType.TYPE_DOWNLOAD)
                {
                    //If is download transfer of an image file
                    if (megaTransfer.SelectedNode is ImageNodeViewModel)
                    {
                        var imageNode = megaTransfer.SelectedNode as ImageNodeViewModel;

                        UiService.OnUiThread(() => imageNode.ImageUri = new Uri(megaTransfer.TransferPath));

                        if (megaTransfer.AutoLoadImageOnFinish)
                        {
                            UiService.OnUiThread(() =>
                            {
                                if (imageNode.OriginalMNode.hasPreview())
                                {
                                    return;
                                }
                                imageNode.PreviewImageUri = new Uri(imageNode.PreviewPath);
                                imageNode.IsBusy          = false;
                            });
                        }
                    }

                    if (megaTransfer.IsSaveForOfflineTransfer)
                    {
                        this.AddOfflineNodeFromTransfer(megaTransfer);
                    }
                    else if (!await megaTransfer.FinishDownload(megaTransfer.TransferPath, megaTransfer.SelectedNode.Name))
                    {
                        UiService.OnUiThread(() => megaTransfer.TransferState = MTransferState.STATE_FAILED);
                        return;
                    }
                }

                UiService.OnUiThread(() => TransferService.MoveMegaTransferToCompleted(TransferService.MegaTransfers, megaTransfer));
                break;

            case MErrorType.API_EGOINGOVERQUOTA: // Not enough quota
            case MErrorType.API_EOVERQUOTA:      //Storage overquota error
                ProcessOverquotaError(api, e);
                break;

            case MErrorType.API_EINCOMPLETE:
                if (megaTransfer.IsSaveForOfflineTransfer)
                {
                    this.RemoveOfflineNodeFromTransfer(megaTransfer);
                }
                break;

            default:
                ProcessDefaultError(transfer);
                break;
            }
        }
Esempio n. 26
0
        public void onTransferUpdate(MegaSDK api, MTransfer transfer)
        {
            // Extra checking to avoid NullReferenceException
            if (transfer == null)
            {
                return;
            }

            // Search the corresponding transfer in the transfers list
            var megaTransfer = TransferService.SearchTransfer(TransferService.MegaTransfers.SelectAll(), transfer);

            if (megaTransfer == null)
            {
                return;
            }

            var isBusy            = api.areTransfersPaused((int)transfer.getType()) ? false : true;
            var transferState     = api.areTransfersPaused((int)transfer.getType()) ? MTransferState.STATE_QUEUED : transfer.getState();
            var totalBytes        = transfer.getTotalBytes();
            var transferedBytes   = transfer.getTransferredBytes();
            var transferSpeed     = transfer.getSpeed().ToStringAndSuffixPerSecond();
            var transferMeanSpeed = transfer.getMeanSpeed();
            var transferPriority  = transfer.getPriority();

            UiService.OnUiThread(() =>
            {
                // Only update the values if they have changed to improve the UI performance
                if (megaTransfer.Transfer != transfer)
                {
                    megaTransfer.Transfer = transfer;
                }
                if (megaTransfer.IsBusy != isBusy)
                {
                    megaTransfer.IsBusy = isBusy;
                }
                if (megaTransfer.TransferState != transferState)
                {
                    megaTransfer.TransferState = transferState;
                }
                if (megaTransfer.TotalBytes != totalBytes)
                {
                    megaTransfer.TotalBytes = totalBytes;
                }
                if (megaTransfer.TransferedBytes != transferedBytes)
                {
                    megaTransfer.TransferedBytes = transferedBytes;
                }
                if (megaTransfer.TransferSpeed != transferSpeed)
                {
                    megaTransfer.TransferSpeed = transferSpeed;
                }
                if (megaTransfer.TransferMeanSpeed != transferMeanSpeed)
                {
                    megaTransfer.TransferMeanSpeed = transferMeanSpeed;
                }
                if (megaTransfer.TransferPriority != transferPriority)
                {
                    megaTransfer.TransferPriority = transferPriority;
                }
            });
        }
Esempio n. 27
0
        /// <summary>
        /// Search into a transfers list the <see cref="TransferObjectModel"/> corresponding to a <see cref="MTransfer"/>.
        /// </summary>
        /// <param name="transfersList">Transfers list where search the transfer.</param>
        /// <param name="transfer">Transfer to search.</param>
        /// <returns>The transfer object if exists or NULL in other case.</returns>
        public static TransferObjectModel SearchTransfer(IList <TransferObjectModel> transfersList, MTransfer transfer)
        {
            // Folder transfers are not included into the transfers list.
            if (transfersList == null || transfer == null || transfer.isFolderTransfer())
            {
                return(null);
            }

            TransferObjectModel megaTransfer = null;

            try
            {
                megaTransfer = transfersList.FirstOrDefault(
                    t => (t.Transfer != null && t.Transfer.getTag() == transfer.getTag()) ||
                    (t.TransferPath != null && t.TransferPath.Equals(transfer.getPath())));
            }
            catch (Exception e)
            {
                var fileName = transfer.getFileName();
                var message  = (fileName == null) ? "Error searching transfer" :
                               string.Format("Error searching transfer. File: '{0}'", fileName);
                LogService.Log(MLogLevel.LOG_LEVEL_ERROR, message, e);
                return(null);
            }

            return(megaTransfer);
        }
Esempio n. 28
0
 public void onTransferTemporaryError(MegaSDK api, MTransfer transfer, MError e)
 {
 }
Esempio n. 29
0
 public void onTransferUpdate(MegaSDK api, MTransfer transfer)
 {
     // Do nothing
 }
Esempio n. 30
0
        public async void onTransferFinish(MegaSDK api, MTransfer transfer, MError e)
        #endif
        {
            // Extra checking to avoid NullReferenceException
            if (transfer == null)
            {
                return;
            }

            // Use a temp variable to avoid InvalidOperationException
            var transfersList = Transfers.ToList();

            // Extra checking during finding to avoid NullReferenceException
            var megaTransfer = transfersList.FirstOrDefault(t =>
                                                            (t.Transfer != null) && (t.Transfer.getTag() == transfer.getTag()));

            if (megaTransfer != null)
            {
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    ProgressService.ChangeProgressBarBackgroundColor((Color)Application.Current.Resources["PhoneChromeColor"]);

                    TransfersService.GetTransferAppData(transfer, megaTransfer);

                    megaTransfer.TotalBytes        = transfer.getTotalBytes();
                    megaTransfer.TransferedBytes   = transfer.getTransferredBytes();
                    megaTransfer.TransferSpeed     = transfer.getSpeed().ToStringAndSuffixPerSecond();
                    megaTransfer.IsBusy            = false;
                    megaTransfer.CancelButtonState = false;
                });

                switch (e.getErrorCode())
                {
                case MErrorType.API_OK:
                {
                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                        {
                            megaTransfer.TransferedBytes               = megaTransfer.TotalBytes;
                            megaTransfer.TransferButtonIcon            = new Uri("/Assets/Images/completed transfers.Screen-WXGA.png", UriKind.Relative);
                            megaTransfer.TransferButtonForegroundColor = (SolidColorBrush)Application.Current.Resources["MegaRedSolidColorBrush"];
                        });

                    switch (megaTransfer.Type)
                    {
                    case TransferType.Download:
                        if (megaTransfer.IsSaveForOfflineTransfer)             //If is a save for offline download transfer
                        {
                            var node = megaTransfer.SelectedNode as NodeViewModel;
                            if (node != null)
                            {
                                // Need get the path on the transfer finish because the file name can be changed
                                // if already exists in the destiny path.
                                var newOfflineLocalPath = Path.Combine(transfer.getParentPath(), transfer.getFileName()).Replace("/", "\\");

                                var sfoNode = new SavedForOffline
                                {
                                    Fingerprint          = App.MegaSdk.getNodeFingerprint(node.OriginalMNode),
                                    Base64Handle         = node.OriginalMNode.getBase64Handle(),
                                    LocalPath            = newOfflineLocalPath,
                                    IsSelectedForOffline = true
                                };

                                // If is a public node (link) the destination folder is the SFO root, so the parent handle
                                // is the handle of the root node.
                                if (node.ParentContainerType != ContainerType.PublicLink)
                                {
                                    sfoNode.ParentBase64Handle = (App.MegaSdk.getParentNode(node.OriginalMNode)).getBase64Handle();
                                }
                                else
                                {
                                    sfoNode.ParentBase64Handle = App.MegaSdk.getRootNode().getBase64Handle();
                                }

                                if (!(SavedForOffline.ExistsNodeByLocalPath(sfoNode.LocalPath)))
                                {
                                    SavedForOffline.Insert(sfoNode);
                                }
                                else
                                {
                                    SavedForOffline.UpdateNode(sfoNode);
                                }

                                Deployment.Current.Dispatcher.BeginInvoke(() => node.IsAvailableOffline = node.IsSelectedForOffline = true);

                                            #if WINDOWS_PHONE_80
                                //If is download transfer of an image file
                                var imageNode = node as ImageNodeViewModel;
                                if (imageNode != null)
                                {
                                    Deployment.Current.Dispatcher.BeginInvoke(() => imageNode.ImageUri = new Uri(megaTransfer.FilePath));

                                    bool exportToPhotoAlbum = SettingsService.LoadSetting <bool>(SettingsResources.ExportImagesToPhotoAlbum, false);
                                    if (exportToPhotoAlbum)
                                    {
                                        Deployment.Current.Dispatcher.BeginInvoke(() => imageNode.SaveImageToCameraRoll(false));
                                    }
                                }
                                            #endif
                            }
                        }
                        else             //If is a standard download transfer (no for save for offline)
                        {
                            //If is download transfer of an image file
                            var imageNode = megaTransfer.SelectedNode as ImageNodeViewModel;
                            if (imageNode != null)
                            {
                                Deployment.Current.Dispatcher.BeginInvoke(() => imageNode.ImageUri = new Uri(megaTransfer.FilePath));

                                if (megaTransfer.AutoLoadImageOnFinish)
                                {
                                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                                        {
                                            if (imageNode.OriginalMNode.hasPreview())
                                            {
                                                return;
                                            }
                                            imageNode.PreviewImageUri = new Uri(imageNode.PreviewPath);
                                            imageNode.IsBusy          = false;
                                        });
                                }

                                            #if WINDOWS_PHONE_81
                                if (!await megaTransfer.FinishDownload(megaTransfer.FilePath, imageNode.Name))
                                {
                                    Deployment.Current.Dispatcher.BeginInvoke(() => megaTransfer.Status = TransferStatus.Error);
                                    break;
                                }
                                            #endif
                            }
                                        #if WINDOWS_PHONE_81
                            else             //If is a download transfer of other file type
                            {
                                var node = megaTransfer.SelectedNode as FileNodeViewModel;
                                if (node != null)
                                {
                                    if (!await megaTransfer.FinishDownload(megaTransfer.FilePath, node.Name))
                                    {
                                        Deployment.Current.Dispatcher.BeginInvoke(() => megaTransfer.Status = TransferStatus.Error);
                                        break;
                                    }
                                }
                            }
                                        #endif
                        }

                        Deployment.Current.Dispatcher.BeginInvoke(() => megaTransfer.Status = TransferStatus.Downloaded);
                        break;

                    case TransferType.Upload:
                        Deployment.Current.Dispatcher.BeginInvoke(() => megaTransfer.Status = TransferStatus.Uploaded);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    break;
                }

                case MErrorType.API_EOVERQUOTA:
                {
                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                        {
                            // Stop all upload transfers
                            api.cancelTransfers((int)MTransferType.TYPE_UPLOAD);

                            // Disable the "camera upload" service
                            MediaService.SetAutoCameraUpload(false);
                            SettingsService.SaveSetting(SettingsResources.CameraUploadsIsEnabled, false);

                            DialogService.ShowOverquotaAlert();
                        });

                    break;
                }

                case MErrorType.API_EINCOMPLETE:
                {
                    Deployment.Current.Dispatcher.BeginInvoke(() => megaTransfer.Status = TransferStatus.Canceled);
                    break;
                }

                default:
                {
                    Deployment.Current.Dispatcher.BeginInvoke(() => megaTransfer.Status = TransferStatus.Error);
                    switch (megaTransfer.Type)
                    {
                    case TransferType.Download:
                        Deployment.Current.Dispatcher.BeginInvoke(() =>
                            {
                                new CustomMessageDialog(
                                    AppMessages.DownloadNodeFailed_Title,
                                    String.Format(AppMessages.DownloadNodeFailed, e.getErrorString()),
                                    App.AppInformation,
                                    MessageDialogButtons.Ok).ShowDialog();
                            });

                        break;

                    case TransferType.Upload:
                        Deployment.Current.Dispatcher.BeginInvoke(() =>
                            {
                                new CustomMessageDialog(
                                    AppMessages.UploadNodeFailed_Title,
                                    String.Format(AppMessages.UploadNodeFailed, e.getErrorString()),
                                    App.AppInformation,
                                    MessageDialogButtons.Ok).ShowDialog();
                            });

                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    break;
                }
                }
            }
        }