示例#1
0
        public void Activate(CachedFileUpdaterActivatedEventArgs args)
        {
            // cache CachedFileUpdaterUI
            cachedFileUpdaterUI = args.CachedFileUpdaterUI;

            cachedFileUpdaterUI.FileUpdateRequested += CachedFileUpdaterUI_FileUpdateRequested;
            cachedFileUpdaterUI.UIRequested         += CachedFileUpdaterUI_UIRequested;

            switch (cachedFileUpdaterUI.UpdateTarget)
            {
            case CachedFileTarget.Local:
                scenarios = new List <Scenario> {
                    new Scenario()
                    {
                        Title = "Get latest version", ClassType = typeof(FilePickerContracts.CachedFileUpdater_Local)
                    }
                };
                break;

            case CachedFileTarget.Remote:
                scenarios = new List <Scenario> {
                    new Scenario()
                    {
                        Title = "Remote file update", ClassType = typeof(FilePickerContracts.CachedFileUpdater_Remote)
                    }
                };
                break;
            }

            Window.Current.Activate();
        }
示例#2
0
 private async void OnUIRequested(CachedFileUpdaterUI sender, object args)
 {
     // The event handler may be invoked on a background thread, so use the Dispatcher to run the UI-related code on the UI thread.
     await Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
     });
 }
示例#3
0
        void CachedFileUpdaterUI_FileUpdateRequested(CachedFileUpdaterUI sender, FileUpdateRequestedEventArgs args)
        {
            fileUpdateRequest         = args.Request;
            fileUpdateRequestDeferral = fileUpdateRequest.GetDeferral();
            switch (cachedFileUpdaterUI.UIStatus)
            {
            case UIStatus.Hidden:
                if (fileUpdateRequest.File.Name.Contains("ConflictingFile"))
                {
                    fileUpdateRequest.Status = FileUpdateStatus.UserInputNeeded;
                }
                else
                {
                    fileUpdateRequest.Status = FileUpdateStatus.Complete;
                }
                fileUpdateRequestDeferral.Complete();
                break;

            case UIStatus.Visible:
                break;

            case UIStatus.Unavailable:
                fileUpdateRequest.Status = FileUpdateStatus.Failed;
                fileUpdateRequestDeferral.Complete();
                break;
            }
        }
示例#4
0
        public void Activate(CachedFileUpdaterActivatedEventArgs args)
        {
            // cache CachedFileUpdaterUI
            cachedFileUpdaterUI = args.CachedFileUpdaterUI;

            // Currently, the Desktop device family activates the app in the background. Other device families
            // use a background task activation. We need to handle both cases.
            //
            // We can check to see if there is UI on activation to determine which case we are in, because
            // we receive the FileUpdateRequest differently.
            //
            // If activated in the foreground (visible), then the FileUpdateRequest is passed explicitly as
            // part of the activation.
            //
            // If activated in the background (not visible), then we subscribe to the FileUpdateRequested
            // and UIRequest events. The FileUpdateRequest is received as part of the FileUpdatedRequested event,
            // and UIRequested is raised when user input is needed to resolve a conflict.

            bool isForegroundActivated = (cachedFileUpdaterUI.UIStatus == UIStatus.Visible);

            if (isForegroundActivated)
            {
                fileUpdateRequest         = cachedFileUpdaterUI.UpdateRequest;
                fileUpdateRequestDeferral = cachedFileUpdaterUI.GetDeferral();
            }
            else
            {
                cachedFileUpdaterUI.FileUpdateRequested += CachedFileUpdaterUI_FileUpdateRequested;
                cachedFileUpdaterUI.UIRequested         += CachedFileUpdaterUI_UIRequested;
            }

            switch (cachedFileUpdaterUI.UpdateTarget)
            {
            case CachedFileTarget.Local:
                scenarios = new List <Scenario> {
                    new Scenario()
                    {
                        Title = "Get latest version", ClassType = typeof(FilePickerContracts.CachedFileUpdater_Local)
                    }
                };
                break;

            case CachedFileTarget.Remote:
                scenarios = new List <Scenario> {
                    new Scenario()
                    {
                        Title = "Remote file update", ClassType = typeof(FilePickerContracts.CachedFileUpdater_Remote)
                    }
                };
                break;
            }

            if (isForegroundActivated)
            {
                Window.Current.Content = this;
                this.OnNavigatedTo(null);
                Window.Current.Activate();
            }
        }
 // 需要显示 CachedFileUpdater 的 UI 时(即当 FileUpdateRequest.Status 等于 UserInputNeeded 时),会调用此事件处理器
 async void _cachedFileUpdaterUI_UIRequested(CachedFileUpdaterUI sender, object args)
 {
     await _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
         Windows.UI.Xaml.Window.Current.Content = this;
         lblMsg.Text = "FileUpdateStatus: " + _fileUpdateRequest.Status.ToString();
     });
 }
示例#6
0
 async void CachedFileUpdaterUI_UIRequested(CachedFileUpdaterUI sender, object args)
 {
     // The event handler may be invoked on a background thread, so use the Dispatcher to run the UI-related code on the UI thread.
     await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
         Window.Current.Content = this;
         this.OnNavigatedTo(null);
     });
 }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // 获取 CachedFileUpdaterUI 对象
            var args = (CachedFileUpdaterActivatedEventArgs)e.Parameter;

            _cachedFileUpdaterUI = args.CachedFileUpdaterUI;

            _cachedFileUpdaterUI.Title = "缓存文件更新程序";

            _cachedFileUpdaterUI.FileUpdateRequested += _cachedFileUpdaterUI_FileUpdateRequested;
            _cachedFileUpdaterUI.UIRequested         += _cachedFileUpdaterUI_UIRequested;

            base.OnNavigatedTo(e);
        }
        async void _cachedFileUpdaterUI_FileUpdateRequested(CachedFileUpdaterUI sender, FileUpdateRequestedEventArgs args)
        {
            _fileUpdateRequest = args.Request;
            FileUpdateRequestDeferral fileUpdateRequestDeferral = _fileUpdateRequest.GetDeferral();

            if (_cachedFileUpdaterUI.UpdateTarget == CachedFileTarget.Local) // 由 CachedFileUpdater 更新 CachedFile(CachedFileTarget.Local 方式)
            {
                // 开始激活 CachedFileUpdater 时,是 UIStatus.Hidden 状态的
                if (_cachedFileUpdaterUI.UIStatus == UIStatus.Hidden)
                {
                    // 下面针对两种方式分别写示例

                    // 方式一:直接更新文件,并设置为 FileUpdateStatus.Complete 状态,最后完成
                    if (DateTime.Now.Second % 2 == 0)
                    {
                        await FileIO.AppendTextAsync(_fileUpdateRequest.File, Environment.NewLine + "由 CachedFileUpdater 更新:" + DateTime.Now.ToString());

                        _fileUpdateRequest.Status = FileUpdateStatus.Complete;
                        fileUpdateRequestDeferral.Complete();
                    }
                    // 方式二:设置为 FileUpdateStatus.UserInputNeeded 状态,并完成,之后会再次触发这个事件,并且变为 UIStatus.Visible 状态,弹出本页界面,
                    // 这样的话可以在用户做一些操作之后再更新文件(参见下面的 btnUpdate_Click 部分)
                    else
                    {
                        _fileUpdateRequest.Status = FileUpdateStatus.UserInputNeeded;
                        fileUpdateRequestDeferral.Complete();
                    }
                }
            }
            else if (_cachedFileUpdaterUI.UpdateTarget == CachedFileTarget.Remote) // 由 app 更新 CachedFile(CachedFileTarget.Remote 方式)
            {
                // 这里可以拿到 app 更新后的文件的结果
                string textContent = await FileIO.ReadTextAsync(_fileUpdateRequest.File);

                // 但是这里不能修改这个文件,否则会报错
                // await FileIO.AppendTextAsync(_fileUpdateRequest.File, Environment.NewLine + "由 CachedFileUpdater 更新:" + DateTime.Now.ToString());

                // CachedFileUpdater 返回给 app 一个 FileUpdateStatus 状态
                _fileUpdateRequest.Status = FileUpdateStatus.Complete;
                fileUpdateRequestDeferral.Complete();
            }
        }
示例#9
0
        void CachedFileUpdaterUI_FileUpdateRequested(CachedFileUpdaterUI sender, FileUpdateRequestedEventArgs args)
        {
            fileUpdateRequest         = args.Request;
            fileUpdateRequestDeferral = fileUpdateRequest.GetDeferral();
            switch (cachedFileUpdaterUI.UIStatus)
            {
            case UIStatus.Hidden:
                fileUpdateRequest.Status = FileUpdateStatus.UserInputNeeded;
                fileUpdateRequestDeferral.Complete();
                break;

            case UIStatus.Visible:
                break;

            case UIStatus.Unavailable:
                fileUpdateRequest.Status = FileUpdateStatus.Failed;
                fileUpdateRequestDeferral.Complete();
                break;
            }
        }
示例#10
0
        private void OnFileUpdateRequested(CachedFileUpdaterUI sender, FileUpdateRequestedEventArgs args)
        {
            switch (sender.UIStatus)
            {
            case UIStatus.Hidden:
                fileUpdateRequest         = args.Request;
                fileUpdateRequestDeferral = fileUpdateRequest.GetDeferral();
                // process cached file
                fileUpdateRequestDeferral.Complete();
                break;

            case UIStatus.Visible:
                // use the class fields

                fileUpdateRequestDeferral.Complete();
                break;

            case UIStatus.Unavailable:
                fileUpdateRequest.Status = FileUpdateStatus.Failed;
                fileUpdateRequestDeferral.Complete();
                break;
            }
        }