Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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()));
            });
        }
Esempio n. 3
0
        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()));
            });
        }