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; } }); }
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(); } }
/// <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; } }
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; } }); }
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 } }
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; } }); }
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(); } } }); } }
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); }); } }
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); } }
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; } }
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(); } }); }
/// <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())); }); }
/// <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); } }); }
/// <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); }
/// <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); } }
public bool onTransferData(MegaSDK api, MTransfer transfer, byte[] data) { return(false); }
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)
/// <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; } }
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; } }); }
/// <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); }
public void onTransferTemporaryError(MegaSDK api, MTransfer transfer, MError e) { }
public void onTransferUpdate(MegaSDK api, MTransfer transfer) { // Do nothing }
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; } } } }