private async Task <bool> FetchNodesFromFolder() { var fetchNodesResult = await this.FetchNodes(); switch (fetchNodesResult) { case FetchNodesResult.Success: // Save the handle of the last public node accessed (Task #10801) SettingsService.SaveLastPublicNodeHandle(this.FolderLink.FolderRootNode.Handle); return(true); case FetchNodesResult.InvalidHandleOrDecryptionKey: LogService.Log(MLogLevel.LOG_LEVEL_WARNING, "Fetch nodes from folder link failed. Invalid handle or decryption key."); PublicLinkService.ShowLinkNoValidAlert(); break; case FetchNodesResult.InvalidDecryptionKey: PublicLinkService.Link = await PublicLinkService.ShowDecryptionKeyNotValidAlertAsync(); if (PublicLinkService.Link != null) { this.LoginToFolder(PublicLinkService.Link); } break; case FetchNodesResult.NoDecryptionKey: PublicLinkService.Link = await PublicLinkService.ShowDecryptionAlertAsync(); this._loginToFolder.DecryptionAlert = true; if (PublicLinkService.Link != null) { this.LoginToFolder(PublicLinkService.Link); } break; case FetchNodesResult.UnavailableLink: this.ShowUnavailableFolderLinkAlert(); break; case FetchNodesResult.AssociatedUserAccountTerminated: PublicLinkService.ShowAssociatedUserAccountTerminatedAlert(); break; case FetchNodesResult.Unknown: LogService.Log(MLogLevel.LOG_LEVEL_ERROR, "Fetch nodes failed."); this.ShowFetchNodesFailedAlertDialog(); break; } return(false); }
public async void LoginToFolder(string link) { if (string.IsNullOrWhiteSpace(link)) { return; } PublicLinkService.Link = link; if (_loginToFolder == null) { _loginToFolder = new LoginToFolderRequestListenerAsync(); _loginToFolder.IsWaiting += OnIsWaiting; } this.ControlState = false; this.IsBusy = true; this.ProgressHeaderText = ResourceService.ProgressMessages.GetString("PM_LoginToFolderHeader"); this.ProgressText = ResourceService.ProgressMessages.GetString("PM_LoginToFolderSubHeader"); var result = await _loginToFolder.ExecuteAsync(() => this.MegaSdk.loginToFolder(PublicLinkService.Link, _loginToFolder)); bool navigateBack = true; switch (result) { case LoginToFolderResult.Success: if (!await this.FetchNodesFromFolder()) { break; } this.LoadFolder(); navigateBack = false; break; case LoginToFolderResult.InvalidHandleOrDecryptionKey: LogService.Log(MLogLevel.LOG_LEVEL_WARNING, "Login to folder failed. Invalid handle or decryption key."); PublicLinkService.ShowLinkNoValidAlert(); break; case LoginToFolderResult.InvalidDecryptionKey: PublicLinkService.Link = await PublicLinkService.ShowDecryptionKeyNotValidAlertAsync(); if (PublicLinkService.Link != null) { this.LoginToFolder(PublicLinkService.Link); return; } break; case LoginToFolderResult.NoDecryptionKey: PublicLinkService.Link = await PublicLinkService.ShowDecryptionAlertAsync(); this._loginToFolder.DecryptionAlert = true; if (PublicLinkService.Link != null) { this.LoginToFolder(PublicLinkService.Link); return; } break; case LoginToFolderResult.Unknown: LogService.Log(MLogLevel.LOG_LEVEL_ERROR, "Login to folder failed."); await DialogService.ShowAlertAsync( ResourceService.AppMessages.GetString("AM_LoginToFolderFailed_Title"), ResourceService.AppMessages.GetString("AM_LoginToFolderFailed")); break; } this.ControlState = true; this.IsBusy = false; if (!navigateBack) { return; } OnUiThread(() => { // Navigate to the Cloud Drive page NavigateService.Instance.Navigate(typeof(CloudDrivePage), false, NavigationObject.Create(this.GetType())); }); }
public async void GetPublicNode(string link) { if (string.IsNullOrWhiteSpace(link)) { return; } PublicLinkService.Link = link; if (_getPublicNode == null) { _getPublicNode = new GetPublicNodeRequestListenerAsync(); } this.ControlState = false; this.IsBusy = true; var result = await _getPublicNode.ExecuteAsync(() => this.MegaSdk.getPublicNode(PublicLinkService.Link, _getPublicNode)); bool navigateBack = true; switch (result) { case GetPublicNodeResult.Success: LinkInformationService.PublicNode = _getPublicNode.PublicNode; // Save the handle of the last public node accessed (Task #10801) SettingsService.SaveLastPublicNodeHandle(_getPublicNode.PublicNode.getHandle()); this.Node = NodeService.CreateNew(this.MegaSdk, App.AppInformation, LinkInformationService.PublicNode, null); if (this.Node is ImageNodeViewModel) { (this.Node as ImageNodeViewModel).SetThumbnailImage(); (this.Node as ImageNodeViewModel).SetPreviewImage(); } navigateBack = false; break; case GetPublicNodeResult.InvalidHandleOrDecryptionKey: LogService.Log(MLogLevel.LOG_LEVEL_WARNING, "Get public node failed. Invalid handle or decryption key."); PublicLinkService.ShowLinkNoValidAlert(); break; case GetPublicNodeResult.InvalidDecryptionKey: PublicLinkService.Link = await PublicLinkService.ShowDecryptionKeyNotValidAlertAsync(); if (PublicLinkService.Link != null) { this.GetPublicNode(PublicLinkService.Link); return; } break; case GetPublicNodeResult.NoDecryptionKey: PublicLinkService.Link = await PublicLinkService.ShowDecryptionAlertAsync(); this._getPublicNode.DecryptionAlert = true; if (PublicLinkService.Link != null) { this.GetPublicNode(PublicLinkService.Link); return; } break; case GetPublicNodeResult.UnavailableLink: this.ShowUnavailableFileLinkAlert(); break; case GetPublicNodeResult.AssociatedUserAccountTerminated: PublicLinkService.ShowAssociatedUserAccountTerminatedAlert(); break; case GetPublicNodeResult.Unknown: LogService.Log(MLogLevel.LOG_LEVEL_WARNING, "Get public node failed."); await DialogService.ShowAlertAsync( ResourceService.AppMessages.GetString("AM_GetPublicNodeFailed_Title"), ResourceService.AppMessages.GetString("AM_GetPublicNodeFailed")); break; } this.ControlState = true; this.IsBusy = false; if (!navigateBack) { return; } OnUiThread(() => { // Navigate to the Cloud Drive page NavigateService.Instance.Navigate(typeof(CloudDrivePage), false, NavigationObject.Create(this.GetType())); }); }