コード例 #1
0
        public UpdateViewModel(IUpdateManager updateManager, ISettings settings, IDialogManager dialogManager, UpdateDownloadViewModel.Factory updateDownloadViewModelFactory, bool checkForUpdates) {
            _updateManager = updateManager;
            _settings = settings;
            _checkForUpdates = checkForUpdates;
            _releases = new ObservableCollection<ReleaseInfo>();

            _updateCommand = new RelayCommand(() => {
                Close();
                dialogManager.ShowDialog(updateDownloadViewModelFactory.Invoke(_releases.First()));
            }, () => CanUpdate);
            _cancelCommand = new RelayCommand(Close);

            var collectionView = CollectionViewSource.GetDefaultView(Releases);
            collectionView.Filter = item => ((ReleaseInfo)item).IsNew;

            BindingOperations.EnableCollectionSynchronization(_releases, _releases);
        }
コード例 #2
0
        public override void OnItemSelected(Item <Prepayment> item)
        {
            if (item == null)
            {
                return;
            }
            var data = item.GetData();

            if (data == null)
            {
                return;
            }

            _dialogManager.ShowDialog <PayChannelPanel>(DialogName.PayChannelPanel, false, false,
                                                        (dialog) =>
            {
                dialog.ApplyData("shop", data);
                dialog.Show();
            });
        }
コード例 #3
0
        public void Execute()
        {
            IServerConnectionManager serverConnectionManager = ServiceRegistration.Get <IServerConnectionManager>();
            SystemName homeServerSystem    = serverConnectionManager.LastHomeServerSystem;
            bool       localHomeServer     = homeServerSystem != null && homeServerSystem.IsLocalSystem();
            bool       homeServerConnected = serverConnectionManager.IsHomeServerConnected;

            if (localHomeServer && !homeServerConnected)
            {
                // Our home server is local, i.e. all shares of this system must be configured at the server, but the server is not online at the moment.
                IDialogManager dialogManager = ServiceRegistration.Get <IDialogManager>();
                dialogManager.ShowDialog(Consts.RES_CANNOT_ADD_SHARES_TITLE, Consts.RES_CANNOT_ADD_SHARE_LOCAL_HOME_SERVER_NOT_CONNECTED, DialogType.OkDialog, false,
                                         DialogButtonType.Ok);
                return;
            }

            IWorkflowManager workflowManager = ServiceRegistration.Get <IWorkflowManager>();

            workflowManager.NavigatePush(Consts.WF_STATE_ID_SHARE_ADD_CHOOSE_SYSTEM);
        }
コード例 #4
0
        protected override void DoHandle(RaceAward content)
        {
            var raceAwardQueue = _raceAward.Read();

            if (raceAwardQueue == null)
            {
                raceAwardQueue = new Queue <RaceAward>();
                _raceAward.Write(raceAwardQueue, Time.time);
            }

            if (!raceAwardQueue.Contains(content))
            {
                raceAwardQueue.Enqueue(content);
            }

            var cacheDialog = _dialogManager.GetCachedDialog(DialogName.RaceAwardsDialog);

            if (cacheDialog != null)
            {
                return;
            }

            if (raceAwardQueue.Count <= 0)
            {
                return;
            }

            var raceAward = raceAwardQueue.Dequeue();

            if (raceAward == null)
            {
                return;
            }

            _dialogManager.ShowDialog <RaceAwardsDialog>(DialogName.RaceAwardsDialog, false, true,
                                                         (dialog) =>
            {
                dialog.Apply(raceAward);
                dialog.Show();
            });
        }
コード例 #5
0
        protected override void DoHandle(SAddFriendRequestToReceiver msg)
        {
            var friendIgnoreList = _friendIgnoreList.Read();

            if (friendIgnoreList == null)
            {
                friendIgnoreList = new List <string>();
                _friendIgnoreList.Write(friendIgnoreList, Time.time);
            }

            if (friendIgnoreList.Contains(msg.sender_username))
            {
                return;
            }

            _dialogManager.ShowDialog <FriendRequestDialog>(DialogName.FriendRequestDialog, false, false,
                                                            (dialog) =>
            {
                dialog.ApplyData(msg.sender_username, msg.sender_nickname, msg.sender_sex);
                dialog.Show();
            });
        }
コード例 #6
0
        protected override void DoHandle(LeaveTableResult msg)
        {
            if (msg == null)
            {
                return;
            }

            _leaveTableResult.Write(msg, Time.time);

            if (msg.result == ResultCode.OK)
            {
                // 离桌成功,则清空选桌数据。
                _chooseTableResult.ClearAndInvalidate(Time.time);

                // 离桌成功,清空开局和结算数据。
                _startRound.ClearAndInvalidate(0);
                _roundEnd.ClearNotInvalidate();
                _raceRoundEnd.ClearNotInvalidate();
            }

            // 离桌不成功,则什么都不做。
            _chooseTableResult.Invalidate(Time.time);

            if (msg.result == ResultCode.LEAVE_WILL_PUNISH)
            {
                var room = _currentRoom.Read();

                _dialogManager.ShowDialog <PunishTipDialog>(DialogName.PunishTipDialog, false, false,
                                                            (dialog) =>
                {
                    dialog.ApplyData(
                        room,
                        "依然退出",
                        () => _remoteAPI.LeaveTable(true)
                        );
                    dialog.Show();
                });
            }
        }
コード例 #7
0
        protected override void DoHandle(LeaveRoomResult res)
        {
            _leaveRoomResult.Write(res, Time.time);

            if (res == null)
            {
                return;
            }

            if (res.result == ResultCode.OK)
            {
                UpdateRoom(res.room);

                _chooseRoomResult.ClearNotInvalidate();
                _chooseRoomFail.ClearNotInvalidate();

                _gLoginResult.ClearAndInvalidate(Time.time);
            }

            if (res.result == ResultCode.LEAVE_WILL_PUNISH)
            {
                _dialogManager.ShowDialog <PunishTipDialog>(DialogName.PunishTipDialog, false, false,
                                                            (dialog) =>
                {
                    dialog.ApplyData(
                        _currentRoom.Read(),
                        "依然退出",
                        () => _remoteAPI.LeaveRoom(true)
                        );
                    dialog.Show();
                });
            }

            if (_network.GetServer() == Server.GServer)
            {
                _network.StartConnectHServer();
            }
        }
コード例 #8
0
        public void QueryDeleteAll(List <MediaItem> mediaItems)
        {
            if (mediaItems.Count == 0)
            {
                ServiceRegistration.Get <ILogger>().Error("DeleteAllRecordings: No items to delete");
                return;
            }
            IDialogManager     dialogManager      = ServiceRegistration.Get <IDialogManager>();
            string             header             = LocalizationHelper.Translate(Consts.RES_CONFIRM_HEADER);
            string             text               = LocalizationHelper.Translate("[SlimTvClient.DeleteAllRecordings.Confirmation]", mediaItems.Count);
            Guid               handle             = dialogManager.ShowDialog(header, text, DialogType.YesNoDialog, false, DialogButtonType.No);
            DialogCloseWatcher dialogCloseWatcher = null;

            dialogCloseWatcher = new DialogCloseWatcher(this, handle,
                                                        async dialogResult =>
            {
                dialogCloseWatcher?.Dispose();
                if (dialogResult == DialogResult.Yes)
                {
                    await DeleteList(mediaItems);
                }
            });
        }
コード例 #9
0
        private async void LoadProjects(string path)
        {
            var oldRootPath = RootPath;

            RootPath = path;

            var fileScanningViewModel = _viewModelFactory.CreateFileScanningViewModel(path);
            var result = await _dialogManager.ShowDialog(fileScanningViewModel);

            if (result != null)
            {
                _settings.RootPath            = path;
                _projectRepository.RootPath   = path;
                _projectRepository.RootFolder = result.ProjectFolder;
                _mostRecentUsedFoldersRepository.SetCurrentFolder(path);
                Solution = _viewModelFactory.CreateSolutionViewModel(path, result.Projects);
                Show(String.Format("{0} projects loaded.", result.Projects.Count));
            }
            else
            {
                RootPath = oldRootPath;
            }
        }
コード例 #10
0
        /// <inheritdoc />
        public void ShowDialog(params DialogField[] fields)
        {
            // If no dialog Manager is given and not enough predefined options are available.
            if (_dialogManager == null && _options.Count - _optionIndex < fields.Length)
            {
                throw new InvalidOperationException("Not enough predefined dialog options.");
            }

            // Collect predefined options for each field
            var fieldIndex = 0;

            while (_optionIndex < _options.Count && fieldIndex < fields.Length)
            {
                var option = _options[_optionIndex++];

                fields[fieldIndex++].Result = option;
                DialogOptions.Add(option);
            }

            // If all fields were already processed by predefined options
            if (fieldIndex >= fields.Length)
            {
                return;
            }

            // Collect results from dialog manager if predefined options are exhausted
            var subFields = fields.Skip(fieldIndex).ToArray();

            _dialogManager?.ShowDialog(subFields);

            // Add results from the dialog Manager to the results
            foreach (var subField in subFields)
            {
                DialogOptions.Add(subField.Result);
            }
        }
コード例 #11
0
 public void ShowShop()
 {
     _dialogManager.ShowDialog <ShopPanel>(DialogName.ShopPanel, false, false,
                                           (shop) => { shop.Show(ShopPanel.ShopType.Commodity); });
 }
コード例 #12
0
 public void SupportRequest()
 {
     dialogManager.ShowDialog(supportViewModel);
 }
コード例 #13
0
 public void Handle(ProtoMessage msg)
 {
     _appController.ClearAppStateData();
     _dialogManager.ShowDialog <BeenReplacedDialog>(DialogName.BeenReplacedDialog, true, true);
 }
コード例 #14
0
 public void FindFriend()
 {
     _dialogManager.ShowDialog <FindFriendDialog>(DialogName.FindFriendDialog);
 }
コード例 #15
0
 public void ShowSettings()
 {
     _dialogManager.ShowDialog(new SettingsViewModel(_settings));
 }
コード例 #16
0
 public void ShowExchange()
 {
     _dialogManager.ShowDialog <ShopPanel>(DialogName.ShopPanel, false, false,
                                           (shop) => { shop.Show(ShopPanel.ShopType.Exchange); });
 }
コード例 #17
0
ファイル: Startup.cs プロジェクト: eiximenis/tvision2
        Task ITvisionAppStartup.Startup(ITuiEngine tui)
        {
            var skin = _skinManager.CurrentSkin;
            var dvpf = _layoutManager.DynamicViewportFactory;

            var mainStackPanel = new TvStackPanel(tui.UI, "mainStackPanel");

            mainStackPanel.AsComponent().AddViewport(dvpf.Create(vpf => vpf.FullViewport().Translate(new TvPoint(0, 1)).Grow(0, -3)));
            mainStackPanel.Layout.Add("*", "3");
            var listFilesGrid = new TvGrid(tui.UI, new GridState(1, 2));

            mainStackPanel.At(0).Add(listFilesGrid);

            tui.UI.Add(mainStackPanel);

            // TODO: Implement BorderedPanel
            // mainStackPanel.At(1).Add(new BorderedPanel());

            var textbox = new TvTextbox(skin, null, new TextboxState());
            //var left = new TvList<FileItem>(skin, new Viewport(new TvPoint(0, 0), 10, 1, 0),
            //    new ListState<FileItem>(Enumerable.Empty<FileItem>(), f => new TvListItem() { Text = f.Name }));

            var actind = new TvActivityIndicator(skin, new Viewport(new TvPoint(0, 22), 1, 1, 0)
                                                 , new ActivityIndicatorState());

            tui.UI.Add(actind);


            var left = new TvList <FileItem>(skin, new Viewport(new TvPoint(0, 0), 10, 1, 0),
                                             ListState <FileItem>
                                             .From(Enumerable.Empty <FileItem>())
                                             .AddFixedColumn(fi => fi.IsDirectory ? "*" : " ", width: 2)
                                             .AddColumn(fi => fi.Name)
                                             .Build());


            left.StyleProvider
            .Use(Core.Colors.TvColor.Red, Core.Colors.TvColor.Blue)
            .When(f => (f.FileAttributes & System.IO.FileAttributes.Hidden) == System.IO.FileAttributes.Hidden)
            .AppliesToColumn(1);

            var right = new TvList <FileItem>(skin, new Viewport(new TvPoint(0, 0), 10, 1, 0),
                                              new ListState <FileItem>(Enumerable.Empty <FileItem>(), new TvListColumnSpec <FileItem>()
            {
                Transformer = f => f.Name
            }));

            right.StyleProvider
            .Use(Core.Colors.TvColor.Red, Core.Colors.TvColor.Blue)
            .When(f => (f.FileAttributes & System.IO.FileAttributes.Hidden) == System.IO.FileAttributes.Hidden)
            .AppliesToColumn(1);

            var menu = new TvMenuBar(skin, dvpf.Create(vpf => vpf.FullViewport().TakeRows(1, 0)),
                                     new MenuBarState(new[] { "Left", "Edit", "Command", "Options", "Help", "Right" }), opt =>
            {
                opt.ItemsSpacedBy(4);
            });

            //var window = new TvWindow(skin, vpf.FullViewport().CreateCentered(20, 10), new WindowState(tui.UI));
            //var label = new TvLabel(skin, new Viewport(new TvPoint(0, 0), 9, 1, 0), new LabelState() { Text = "In Window" });
            //window.State.UI.Add(label);

            var label = new TvLabel(skin, new Viewport(new TvPoint(0, 0), 9, 1, 0),
                                    new LabelState()
            {
                Text = "In Window"
            });


            var dialog = _dialogManager.CreateDialog(dvpf.Create(vpf => vpf.FullViewport().CreateCentered(20, 10)),
                                                     d => { d.State.UI.Add(label); });



            var sleft = TvStatexControl.Wrap <TvList <FileItem>, ListState <FileItem>, FileList>(left, opt =>
            {
                opt.UseStore("left");
                opt.UseStatexTransformation((fl, cs) =>
                {
                    cs.Clear();
                    cs.AddRange(fl.Items);
                });
                opt.On(c => c.OnItemClicked)
                .Dispatch((s, args) => new TvAction <string>("FETCH_DIR", args.FullName))
                .When(f => f.IsDirectory);

                opt.OnKeyEvent(e => e.AsConsoleKeyInfo().Key == System.ConsoleKey.Enter)
                .Dispatch(s => new TvAction <FileItem>("FETCH_INFO", s[s.SelectedIndex]));

                opt.OnKeyEvent(e => e.AsConsoleKeyInfo().Key == System.ConsoleKey.Backspace)
                .Dispatch(s => new TvAction("FETCH_BACK"));
            });
            var sright = TvStatexControl.Wrap <TvList <FileItem>, ListState <FileItem>, FileList>(right, opt =>
            {
                opt.UseStore("right");
                opt.UseStatexTransformation((fl, cs) =>
                {
                    cs.Clear();
                    cs.AddRange(fl.Items);
                });
                opt.On(c => c.OnItemClicked)
                .Dispatch((s, args) => new TvAction <string>("FETCH_DIR", args.FullName))
                .When(f => f.IsDirectory);
            });

            listFilesGrid.Use(0, 0).Add(left);
            listFilesGrid.Use(0, 1).Add(right);
            var bottom = new TvStackPanel(tui.UI, "BottomContainer");

            bottom.Layout.Add(new LayoutSize());
            bottom.AsComponent().AddViewport(dvpf.Create(vpf => vpf.BottomViewport(2)));
            bottom.At(0).Add(textbox);
            tui.UI.Add(bottom);
            tui.UI.Add(menu);

            //tui.UI.Add(window);

            _dialogManager.ShowDialog(dialog);

            if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
            {
                _storeSelector.GetStore <FileList>("left").Dispatch(new TvAction <string>("FETCH_DIR", "/"));
                _storeSelector.GetStore <FileList>("right").Dispatch(new TvAction <string>("FETCH_DIR", "/home/eiximenis"));
            }
            else
            {
                _storeSelector.GetStore <FileList>("left").Dispatch(new TvAction <string>("FETCH_DIR", "C:\\"));
                _storeSelector.GetStore <FileList>("right").Dispatch(new TvAction <string>("FETCH_DIR", "D:\\"));
            }


            return(Task.CompletedTask);
        }
コード例 #18
0
        public static void ShowUserTaskDialog(this IDialogManager dialogManager, IAppContext context)
        {
            var dataRepository     = context.GetDataRepository();
            var userTaskListResult = dataRepository.GetContainer <UserTaskListResult>(DataKey.UserTaskListResult);

            dialogManager.RequestDialog <UserTaskDialog>(DialogName.UserTaskDialog,
                                                         () =>
            {
                var remoteApi = context.GetRemoteAPI();
                userTaskListResult.ClearNotInvalidate();
                remoteApi.RequestUserTaskList();
            },
                                                         () =>
            {
                var data = userTaskListResult.Read();
                if (data == null)
                {
                    return(null);
                }

                var res = data.res;
                if (res == null)
                {
                    return(null);
                }

                if (res.code == ResultCode.OK)
                {
                    var taskList = data.user_task_state;
                    if (taskList == null || taskList.Count <= 0)
                    {
                        return(TaskResult.Fail(ResultCode.FAILED, "没有任务数据"));
                    }
                    return(TaskResult.Success());
                }
                else
                {
                    return(TaskResult.Fail(res.code, res.msg));
                }
            },
                                                         () =>
            {
                dialogManager.ShowDialog <UserTaskDialog>(DialogName.UserTaskDialog, false, false,
                                                          (dialog) =>
                {
                    var data = userTaskListResult.Read();
                    if (data != null)
                    {
                        dialogManager.AddDialogToCacheDialog(DialogName.UserTaskDialog, dialog);
                        dialog.Show();
                    }
                });
            },
                                                         (errCode, errMsg) =>
            {
                if (!string.IsNullOrEmpty(errMsg))
                {
                    dialogManager.ShowToast(errMsg, 3, true);
                }
                else
                {
                    dialogManager.ShowToast("获取任务信息失败", 3, true);
                }
            });
        }
コード例 #19
0
        protected void CheckPlayMenuInternal(MediaItem item)
        {
            IPlayerContextManager pcm = ServiceRegistration.Get <IPlayerContextManager>();
            int numOpen = pcm.NumActivePlayerContexts;

            if (numOpen == 0)
            {
                // Asynchronously leave the current workflow state because we're called from a workflow model method
                IThreadPool threadPool = ServiceRegistration.Get <IThreadPool>();
                threadPool.Add(() =>
                {
                    LeaveCheckQueryPlayActionSingleItemState();
                    CheckEdition(item);
                    //CheckResumeAction(item);
                });
                return;
            }
            _playMenuItems = new ItemsList();
            AVType avType   = pcm.GetTypeOfMediaItem(item);
            int    numAudio = pcm.GetPlayerContextsByAVType(AVType.Audio).Count();
            int    numVideo = pcm.GetPlayerContextsByAVType(AVType.Video).Count();

            switch (avType)
            {
            case AVType.Audio:
            {
                ListItem playItem = new ListItem(Consts.KEY_NAME, Consts.RES_PLAY_AUDIO_ITEM)
                {
                    Command = new MethodDelegateCommand(() =>
                        {
                            LeaveCheckQueryPlayActionSingleItemState();
                            CheckEdition(item);
                            //CheckResumeAction(item);
                        })
                };
                _playMenuItems.Add(playItem);
                if (numAudio > 0)
                {
                    ListItem enqueueItem = new ListItem(Consts.KEY_NAME, Consts.RES_ENQUEUE_AUDIO_ITEM)
                    {
                        Command = new AsyncMethodDelegateCommand(() =>
                            {
                                LeaveCheckQueryPlayActionSingleItemState();
                                return(PlayOrEnqueueItem(item, false, PlayerContextConcurrencyMode.None));
                            })
                    };
                    _playMenuItems.Add(enqueueItem);
                }
                if (numVideo > 0)
                {
                    ListItem playItemConcurrently = new ListItem(Consts.KEY_NAME, Consts.RES_MUTE_VIDEO_PLAY_AUDIO_ITEM)
                    {
                        Command = new AsyncMethodDelegateCommand(() =>
                            {
                                LeaveCheckQueryPlayActionSingleItemState();
                                return(PlayOrEnqueueItem(item, true, PlayerContextConcurrencyMode.ConcurrentVideo));
                            })
                    };
                    _playMenuItems.Add(playItemConcurrently);
                }
            }
            break;

            case AVType.Video:
            {
                ListItem playItem = new ListItem(Consts.KEY_NAME, Consts.RES_PLAY_VIDEO_IMAGE_ITEM)
                {
                    Command = new MethodDelegateCommand(() =>
                        {
                            LeaveCheckQueryPlayActionSingleItemState();
                            CheckEdition(item);
                            //CheckResumeAction(item);
                        })
                };
                _playMenuItems.Add(playItem);
                if (numVideo > 0)
                {
                    ListItem enqueueItem = new ListItem(Consts.KEY_NAME, Consts.RES_ENQUEUE_VIDEO_IMAGE_ITEM)
                    {
                        Command = new AsyncMethodDelegateCommand(() =>
                            {
                                LeaveCheckQueryPlayActionSingleItemState();
                                return(PlayOrEnqueueItem(item, false, PlayerContextConcurrencyMode.None));
                            })
                    };
                    _playMenuItems.Add(enqueueItem);
                }
                if (numAudio > 0)
                {
                    ListItem playItem_A = new ListItem(Consts.KEY_NAME, Consts.RES_PLAY_VIDEO_IMAGE_ITEM_MUTED_CONCURRENT_AUDIO)
                    {
                        Command = new AsyncMethodDelegateCommand(() =>
                            {
                                LeaveCheckQueryPlayActionSingleItemState();
                                return(PlayOrEnqueueItem(item, true, PlayerContextConcurrencyMode.ConcurrentAudio));
                            })
                    };
                    _playMenuItems.Add(playItem_A);
                }
                if (numVideo > 0)
                {
                    ListItem playItem_V = new ListItem(Consts.KEY_NAME, Consts.RES_PLAY_VIDEO_IMAGE_ITEM_PIP)
                    {
                        Command = new AsyncMethodDelegateCommand(() =>
                            {
                                LeaveCheckQueryPlayActionSingleItemState();
                                return(PlayOrEnqueueItem(item, true, PlayerContextConcurrencyMode.ConcurrentVideo));
                            })
                    };
                    _playMenuItems.Add(playItem_V);
                }
            }
            break;

            default:
            {
                IDialogManager dialogManager  = ServiceRegistration.Get <IDialogManager>();
                Guid           dialogHandleId = dialogManager.ShowDialog(Consts.RES_SYSTEM_INFORMATION, Consts.RES_CANNOT_PLAY_ITEM_DIALOG_TEXT,
                                                                         DialogType.OkDialog, false, DialogButtonType.Ok);
                _dialogCloseWatcher = new DialogCloseWatcher(this, dialogHandleId, dialogResult => LeaveCheckQueryPlayActionSingleItemState());
            }
            break;
            }
            IScreenManager screenManager = ServiceRegistration.Get <IScreenManager>();

            screenManager.ShowDialog(Consts.DIALOG_PLAY_MENU, (dialogName, dialogInstanceId) => LeaveCheckQueryPlayActionSingleItemState());
        }
コード例 #20
0
 public void AccountLogin()
 {
     _dialogManager.ShowDialog <LoginPanel>(DialogName.LoginPanel, true, true);
 }
コード例 #21
0
        protected void ShowServerNotConnectedDialog()
        {
            IDialogManager dialogManager = ServiceRegistration.Get <IDialogManager>();

            dialogManager.ShowDialog(Consts.RES_SERVER_NOT_CONNECTED_DIALOG_HEADER, Consts.RES_SERVER_NOT_CONNECTED_DIALOG_TEXT, DialogType.OkDialog, false, null);
        }
コード例 #22
0
        /// <summary>
        /// Tries to build a player for the given <paramref name="mediaItem"/>.
        /// </summary>
        /// <param name="mediaItem">Media item to be played.</param>
        /// <param name="exceptions">All exceptions which have been thrown by any player builder which was tried.</param>
        /// <returns>Player which was built or <c>null</c>, if no player could be built for the given resource.</returns>
        internal IPlayer BuildPlayer_NoLock(MediaItem mediaItem, out ICollection <Exception> exceptions)
        {
            ICollection <IPlayerBuilder> builders;

            lock (_syncObj)
                builders = new List <IPlayerBuilder>(_playerBuilders.Values.OrderByDescending(w => w.Priority).ThenBy(w => w.Id).Select(w => w.PlayerBuilder));
            exceptions = new List <Exception>();

            if (mediaItem.IsStub)
            {
                MediaItem stubMI = null;
                if (mediaItem.Aspects.ContainsKey(MovieAspect.ASPECT_ID) || mediaItem.Aspects.ContainsKey(EpisodeAspect.ASPECT_ID))
                {
                    if (TryCreateInsertVideoMediaMediaItem(mediaItem, out stubMI))
                    {
                        mediaItem = stubMI;
                    }
                }
                else if (mediaItem.Aspects.ContainsKey(AudioAspect.ASPECT_ID))
                {
                    if (TryCreateInsertAudioMediaMediaItem(mediaItem, out stubMI))
                    {
                        mediaItem = stubMI;
                    }
                }

                if (stubMI == null)
                {
                    string header = LocalizationHelper.Translate("[Media.Stub.Title]");
                    string text   = LocalizationHelper.Translate("[Media.Stub.Message]");
                    if (mediaItem.Aspects.ContainsKey(StubAspect.ASPECT_ID))
                    {
                        string message;
                        if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, StubAspect.ATTR_MESSAGE, out message))
                        {
                            text = message;
                        }
                    }
                    IDialogManager dialogManager = ServiceRegistration.Get <IDialogManager>();
                    dialogManager.ShowDialog(header, text, DialogType.OkDialog, false, DialogButtonType.Ok);
                    return(null);
                }
            }

            if (mediaItem.IsVirtual)
            {
                string         header        = LocalizationHelper.Translate("[Media.Virtual.Title]");
                string         text          = LocalizationHelper.Translate("[Media.Virtual.Message]");
                IDialogManager dialogManager = ServiceRegistration.Get <IDialogManager>();
                dialogManager.ShowDialog(header, text, DialogType.OkDialog, false, DialogButtonType.Ok);
                return(null);
            }

            foreach (IPlayerBuilder playerBuilder in builders)
            {
                try
                {
                    IPlayer player = playerBuilder.GetPlayer(mediaItem);
                    if (player != null)
                    {
                        return(player);
                    }
                }
                catch (Exception e)
                {
                    ServiceRegistration.Get <ILogger>().Error("Unable to create media player for media item '{0}'", e, mediaItem);
                    exceptions.Add(e);
                }
            }
            return(null);
        }