public static void SeekBackward()
        {
            IPlayerContextManager playerContextManager = ServiceRegistration.Get <IPlayerContextManager>();

            playerContextManager.SeekBackward();
        }
示例#2
0
        protected override IDictionary <string, MediaCategory> GetAllAvailableCategories()
        {
            IMediaAccessor mediaAccessor = ServiceRegistration.Get <IMediaAccessor>();

            return(mediaAccessor.MediaCategories);
        }
示例#3
0
        public override void ReImportShare()
        {
            ILocalSharesManagement sharesManagement = ServiceRegistration.Get <ILocalSharesManagement>();

            sharesManagement.ReImportShare(_origShare.ShareId);
        }
        /// <summary>
        /// Updates the GUI data for a media items view screen which reflects the data of the <see cref="CurrentView"/>.
        /// </summary>
        /// <param name="createNewList">If set to <c>true</c>, this method will re-create the
        /// <see cref="AbstractScreenData.Items"/> list, else it will reuse it.</param>
        protected void UpdateMediaItems(bool createNewList)
        {
            View view;

            // Control other threads reentering this method
            lock (_syncObj)
            {
                if (_buildingList)
                { // Another thread is already building the items list - mark it as dirty and let the other thread
                  // rebuild it.
                    _listDirty = true;
                    return;
                }
                // Mark the list as being built
                view = _view;
                InstallViewChangeNotificator(_view.CreateViewChangeNotificator());
                _buildingList = true;
                _listDirty    = false;
            }
            try
            {
                Display_ListBeingBuilt();
                ItemsList items;
                if (createNewList)
                {
                    items = new ItemsList();
                }
                else
                {
                    items = _items;
                    items.Clear();
                }
                try
                {
                    // TODO: Add the items in a separate job while the UI already shows the new screen
                    if (view.IsValid)
                    {
                        // Add items for sub views
                        IList <View>      subViews   = view.SubViews;
                        IList <MediaItem> mediaItems = view.MediaItems;
                        lock (_syncObj)
                            if (_listDirty)
                            {
                                goto RebuildView;
                            }
                        if (subViews == null || mediaItems == null)
                        {
                            Display_ItemsInvalid();
                        }
                        else
                        {
                            if (subViews.Count + mediaItems.Count > Consts.MAX_NUM_ITEMS_VISIBLE)
                            {
                                Display_TooManyItems(subViews.Count + mediaItems.Count);
                            }
                            else
                            {
                                int totalNumItems = 0;

                                bool subViewsPreSorted          = false;
                                List <NavigationItem> viewsList = new List <NavigationItem>();
                                foreach (View sv in subViews)
                                {
                                    if (sv.Specification.SortedSubViews)
                                    {
                                        subViewsPreSorted = true;
                                    }
                                    ViewItem item    = new ViewItem(sv, null, sv.AbsNumItems);
                                    View     subView = sv;
                                    item.Command = new MethodDelegateCommand(() => NavigateToView(subView.Specification));
                                    viewsList.Add(item);
                                    if (sv.AbsNumItems.HasValue)
                                    {
                                        totalNumItems += sv.AbsNumItems.Value;
                                    }
                                }
                                // Morpheus_xx, 2014-05-03: Only sort the subviews here, if they are not pre-sorted by the ViewSpecification
                                if (!subViewsPreSorted)
                                {
                                    viewsList.Sort((v1, v2) => string.Compare(v1.SortString, v2.SortString));
                                }
                                CollectionUtils.AddAll(items, viewsList);

                                lock (_syncObj)
                                    if (_listDirty)
                                    {
                                        goto RebuildView;
                                    }

                                PlayableItemCreatorDelegate picd      = PlayableItemCreator;
                                List <PlayableMediaItem>    itemsList = mediaItems.Select(childItem => picd(childItem)).Where(item => item != null).ToList();
                                Sorting.Sorting             sorting   = CurrentSorting;
                                if (sorting != null)
                                {
                                    itemsList.Sort((i1, i2) => sorting.Compare(i1.MediaItem, i2.MediaItem));
                                }
                                else
                                {
                                    // Default sorting: Use SortString
                                    itemsList.Sort((i1, i2) => string.Compare(i1.SortString, i2.SortString));
                                }
                                CollectionUtils.AddAll(items, itemsList);

                                _currentTotalNumItems = totalNumItems == 0 ? new int?() : totalNumItems;
                                Display_Normal(items.Count, _currentTotalNumItems);
                            }
                        }
                    }
                    else
                    {
                        Display_ItemsInvalid();
                    }
                }
                catch (Exception e)
                {
                    ServiceRegistration.Get <ILogger>().Warn("AbstractItemsScreenData: Error creating items list", e);
                    Display_ItemsInvalid();
                }
RebuildView:
                bool dirty;
                lock (_syncObj)
                    if (_listDirty)
                    {
                        dirty         = true;
                        _buildingList = false;
                    }
                    else
                    {
                        dirty = false;
                    }
                if (dirty)
                {
                    UpdateMediaItems(createNewList);
                }
                else
                {
                    _items = items;
                    _items.FireChange();
                }
            }
            finally
            {
                lock (_syncObj)
                    _buildingList = false;
            }
        }
示例#5
0
        protected override bool ShareNameExists(string shareName)
        {
            ILocalSharesManagement sharesManagement = ServiceRegistration.Get <ILocalSharesManagement>();

            return(sharesManagement.Shares.Values.Any(share => (_origShare == null || share.ShareId != _origShare.ShareId) && share.Name == shareName));
        }
        public override Task <bool> IsAvailableAsync(MediaItem mediaItem)
        {
            var result = ServiceRegistration.Get <IWorkflowManager>().MenuStateActions.ContainsKey(ACTION_ID_ADD_ALL_TO_PLAYLIST);

            return(Task.FromResult(result));
        }
示例#7
0
        public void Close()
        {
            IPlayerManager playerManager = ServiceRegistration.Get <IPlayerManager>();

            playerManager.CloseSlot(_slotController);
        }
示例#8
0
        // Currently unused, teletext subtitles are not yet (re-)implemented!
        public void OnTextSubtitle(ref TextSubtitle sub)
        {
            ServiceRegistration.Get <ILogger>().Debug("On TextSubtitle called");
            try
            {
                if (sub.Page == _activeSubPage)
                {
                    ServiceRegistration.Get <ILogger>().Debug("Page: " + sub.Page);
                    ServiceRegistration.Get <ILogger>().Debug("Character table: " + sub.Encoding);
                    ServiceRegistration.Get <ILogger>().Debug("Timeout: " + sub.TimeOut);
                    ServiceRegistration.Get <ILogger>().Debug("Timestamp" + sub.TimeStamp);
                    ServiceRegistration.Get <ILogger>().Debug("Language: " + sub.Language);

                    String content = sub.Text;
                    if (content == null)
                    {
                        ServiceRegistration.Get <ILogger>().Error("OnTextSubtitle: sub.txt == null!");
                        return;
                    }
                }
            }
            catch (Exception e)
            {
                ServiceRegistration.Get <ILogger>().Error("Problem with TEXT_SUBTITLE");
                ServiceRegistration.Get <ILogger>().Error(e);
            }

            try
            {
                // if we dont need the subtitle
                if (!_renderSubtitles || _useBitmap || (_activeSubPage != sub.Page))
                {
                    ServiceRegistration.Get <ILogger>().Debug("Text subtitle (page {0}) discarded: useBitmap is {1} and activeSubPage is {2}", sub.Page, _useBitmap, _activeSubPage);
                    return;
                }
                ServiceRegistration.Get <ILogger>().Debug("Text subtitle (page {0}) ACCEPTED: useBitmap is {1} and activeSubPage is {2}", sub.Page, _useBitmap, _activeSubPage);

                Subtitle subtitle = new Subtitle(_device)
                {
                    SubBitmap     = RenderText(sub.LineContents),
                    TimeOut       = sub.TimeOut,
                    PresentTime   = sub.TimeStamp / 90000.0f + _startPos,
                    Height        = (uint)SkinContext.SkinResources.SkinHeight,
                    Width         = (uint)SkinContext.SkinResources.SkinWidth,
                    FirstScanLine = 0
                };

                lock (_subtitles)
                {
                    while (_subtitles.Count >= MAX_SUBTITLES_IN_QUEUE)
                    {
                        ServiceRegistration.Get <ILogger>().Debug("SubtitleRenderer: Subtitle queue too big, discarding first element");
                        _subtitles.RemoveFirst();
                    }
                    _subtitles.AddLast(subtitle);

                    ServiceRegistration.Get <ILogger>().Debug("SubtitleRenderer: Text subtitle added, now have {0} subtitles in cache {1} pos on last render was {2}", _subtitles.Count, subtitle, _currentTime);
                }
            }
            catch (Exception e)
            {
                ServiceRegistration.Get <ILogger>().Error("Problem processing text subtitle");
                ServiceRegistration.Get <ILogger>().Error(e);
            }
        }
示例#9
0
        public void DrawOverlay(Texture targetTexture)
        {
            Subtitle currentSubtitle;

            lock (_syncObj)
            {
                currentSubtitle = _subtitles.ToList().FirstOrDefault(s => s.ShouldDraw);
                if (currentSubtitle == null)
                {
                    return;
                }

                if (targetTexture == null || targetTexture.IsDisposed || currentSubtitle.SubTexture == null || currentSubtitle.SubTexture.IsDisposed)
                {
                    if (_drawCount > 0)
                    {
                        ServiceRegistration.Get <ILogger>().Debug("Draw count for last sub: {0}", _drawCount);
                    }
                    _drawCount = 0;
                    return;
                }
                _drawCount++;
            }

            try
            {
                // TemporaryRenderTarget changes RenderTarget to texture and restores settings when done (Dispose)
                using (new TemporaryRenderTarget(targetTexture))
                    using (TemporaryRenderState temporaryRenderState = new TemporaryRenderState())
                        using (Sprite sprite = new Sprite(_device))
                        {
                            sprite.Begin(SpriteFlags.AlphaBlend);
                            // No alpha test here, allow all values
                            temporaryRenderState.SetTemporaryRenderState(RenderState.AlphaTestEnable, 0);

                            // Use the SourceAlpha channel and InverseSourceAlpha for destination
                            temporaryRenderState.SetTemporaryRenderState(RenderState.BlendOperation, (int)BlendOperation.Add);
                            temporaryRenderState.SetTemporaryRenderState(RenderState.SourceBlend, (int)Blend.SourceAlpha);
                            temporaryRenderState.SetTemporaryRenderState(RenderState.DestinationBlend, (int)Blend.InverseSourceAlpha);

                            // Check the target texture dimensions and adjust scaling and translation
                            SurfaceDescription desc      = targetTexture.GetLevelDescription(0);
                            Matrix             transform = Matrix.Identity;

                            // Position subtitle and scale it to match video frame size, if required
                            transform *= Matrix.Translation(currentSubtitle.HorizontalPosition, currentSubtitle.FirstScanLine, 0);

                            if (currentSubtitle.ScreenWidth != desc.Width || currentSubtitle.ScreenHeight != desc.Height)
                            {
                                var factorW = (float)desc.Width / currentSubtitle.ScreenWidth;
                                var factorH = (float)desc.Height / currentSubtitle.ScreenHeight;
                                transform *= Matrix.Scaling(factorW, factorH, 1);
                            }

                            sprite.Transform = transform;
                            sprite.Draw(currentSubtitle.SubTexture, SharpDX.Color.White);
                            sprite.End();
                        }

                if (_onTextureInvalidated != null)
                {
                    _onTextureInvalidated();
                }
            }
            catch (Exception ex)
            {
                ServiceRegistration.Get <ILogger>().Debug("Error in DrawOverlay", ex);
            }
        }
        public static void ToggleCurrentPlayer()
        {
            IPlayerContextManager playerContextManager = ServiceRegistration.Get <IPlayerContextManager>();

            playerContextManager.ToggleCurrentPlayer();
        }
        public static void SwitchPipPlayers()
        {
            IPlayerContextManager playerContextManager = ServiceRegistration.Get <IPlayerContextManager>();

            playerContextManager.SwitchPipPlayers();
        }
        public static void ToggleMute()
        {
            IPlayerManager playerManager = ServiceRegistration.Get <IPlayerManager>();

            playerManager.Muted ^= true;
        }
        public static void Next()
        {
            IPlayerContextManager playerContextManager = ServiceRegistration.Get <IPlayerContextManager>();

            playerContextManager.NextItem();
        }
        public static void Previous()
        {
            IPlayerContextManager playerContextManager = ServiceRegistration.Get <IPlayerContextManager>();

            playerContextManager.PreviousItem();
        }
示例#15
0
        private bool CreateOrUpdateRow(bool updateOnly, ref int channelIndex, int rowIndex)
        {
            if (channelIndex >= ChannelsPrograms.Count)
            {
                return(false);
            }
            ChannelProgramListItem channel = ChannelsPrograms[channelIndex] as ChannelProgramListItem;

            if (channel == null)
            {
                return(false);
            }

            // Default: take viewport from model
            var model = SlimTvMultiChannelGuideModel;

            if (model == null)
            {
                return(false);
            }
            DateTime viewportStart = model.GuideStartTime;
            DateTime viewportEnd   = model.GuideEndTime;

            int colIndex = GroupButtonEnabled ? 1 : 0;

            if (!updateOnly)
            {
                Control btnHeader = CreateControl(channel);
                SetGrid(btnHeader, colIndex, rowIndex, 1);

                // Deep copy the styles to each program button.
                btnHeader.Template = MpfCopyManager.DeepCopyCutLVPs(HeaderTemplate);
                Children.Add(btnHeader);
            }

            int      colSpan       = 0;
            DateTime?lastStartTime = null;
            DateTime?lastEndTime   = viewportStart;

#if DEBUG_LAYOUT
            // Debug layouting:
            if (rowIndex == 0)
            {
                ServiceRegistration.Get <ILogger>().Debug("EPG: Viewport: {0}-{1} PerCell: {2} min", viewportStart.ToShortTimeString(), viewportEnd.ToShortTimeString(), _perCellTime);
            }
#endif
            if (updateOnly)
            {
                // Remove all programs outside of viewport.
                DateTime start      = viewportStart;
                DateTime end        = viewportEnd;
                var      removeList = GetRowItems(rowIndex).Where(el =>
                {
                    ProgramListItem p = (ProgramListItem)el.Context;
                    return(p.Program.EndTime <= start || p.Program.StartTime >= end || channel.Channel.ChannelId != ((IProgram)p.AdditionalProperties["PROGRAM"]).ChannelId ||
                           p is PlaceholderListItem);
                }).ToList();
                removeList.ForEach(Children.Remove);
            }

            colIndex++; // After header (and optional GroupButton)
            int programIndex = 0;
            while (programIndex < channel.Programs.Count && colIndex <= _numberOfColumns)
            {
                ProgramListItem program = channel.Programs[programIndex] as ProgramListItem;
                if (program == null || program.Program.StartTime > viewportEnd)
                {
                    break;
                }

                // Ignore programs outside viewport and programs that start at same time (duplicates)
                if (program.Program.EndTime <= viewportStart || (lastStartTime.HasValue && lastStartTime.Value == program.Program.StartTime))
                {
                    programIndex++;
                    continue;
                }

                lastStartTime = program.Program.StartTime;

                CalculateProgamPosition(program, viewportStart, viewportEnd, ref colIndex, ref colSpan, ref lastEndTime);

                Control btnEpg = GetOrCreateControl(program, rowIndex);
                SetGrid(btnEpg, colIndex, rowIndex, colSpan);

                if (ChannelContext.IsSameChannel(channel.Channel, ChannelContext.Instance.Channels.Current) && program.IsRunning && !updateOnly)
                {
                    btnEpg.SetFocusPrio = SetFocusPriority.Highest;
                }

                programIndex++;
                colIndex += colSpan; // Skip spanned columns.
            }

            channelIndex++;
            return(true);
        }
        /// <summary>
        /// Gets a list of <see cref="FanArtImage"/>s for a requested <paramref name="mediaType"/>, <paramref name="fanArtType"/> and <paramref name="name"/>.
        /// The name can be: Series name, Actor name, Artist name depending on the <paramref name="mediaType"/>.
        /// </summary>
        /// <param name="mediaType">Requested FanArtMediaType</param>
        /// <param name="fanArtType">Requested FanArtType</param>
        /// <param name="name">Requested name of Series, Actor, Artist...</param>
        /// <param name="maxWidth">Maximum width for image. <c>0</c> returns image in original size.</param>
        /// <param name="maxHeight">Maximum height for image. <c>0</c> returns image in original size.</param>
        /// <param name="singleRandom">If <c>true</c> only one random image URI will be returned</param>
        /// <param name="result">Result if return code is <c>true</c>.</param>
        /// <returns><c>true</c> if at least one match was found.</returns>
        public bool TryGetFanArt(string mediaType, string fanArtType, string name, int maxWidth, int maxHeight, bool singleRandom, out IList <IResourceLocator> result)
        {
            result = null;
            Guid mediaItemId;

            if (mediaType != FanArtMediaTypes.Album && mediaType != FanArtMediaTypes.Audio)
            {
                return(false);
            }

            if (!Guid.TryParse(name, out mediaItemId))
            {
                return(false);
            }

            IMediaLibrary mediaLibrary = ServiceRegistration.Get <IMediaLibrary>(false);

            if (mediaLibrary == null)
            {
                return(false);
            }

            IFilter           filter        = null;
            IList <MediaItem> items         = null;
            List <Guid>       necessaryMias = new List <Guid>(NECESSARY_MIAS);

            if (mediaType == FanArtMediaTypes.Album)
            {
                filter = new RelationshipFilter(AudioAspect.ROLE_TRACK, AudioAlbumAspect.ROLE_ALBUM, mediaItemId);
            }
            else if (mediaType == FanArtMediaTypes.Audio)
            {
                //Might be a request for track cover which doesn't exist. Album cover is used instead.
                filter = new MediaItemIdFilter(mediaItemId);
            }
            else
            {
                return(false);
            }

            MediaItemQuery mediaQuery = new MediaItemQuery(necessaryMias, filter);

            mediaQuery.Limit = 1;
            items            = mediaLibrary.Search(mediaQuery, false, null, false);
            if (items == null || items.Count == 0)
            {
                return(false);
            }

            MediaItem mediaItem = items.First();

            // Virtual resources won't have any local fanart
            if (mediaItem.IsVirtual)
            {
                return(false);
            }
            var mediaIteamLocator = mediaItem.GetResourceLocator();
            var fanArtPaths       = new List <ResourcePath>();
            var files             = new List <IResourceLocator>();

            // File based access
            try
            {
                var    mediaItemPath          = mediaIteamLocator.NativeResourcePath;
                var    mediaItemDirectoryPath = ResourcePathHelper.Combine(mediaItemPath, "../");
                string album = null;
                if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, AudioAspect.ATTR_ALBUM, out album) && LocalFanartHelper.IsDiscFolder(album, mediaItemDirectoryPath.FileName))
                {
                    //Probably a CD folder so try next parent
                    mediaItemDirectoryPath = ResourcePathHelper.Combine(mediaItemPath, "../../");
                }
                var mediaItemFileNameWithoutExtension = ResourcePathHelper.GetFileNameWithoutExtension(mediaItemPath.ToString()).ToLowerInvariant();
                var mediaItemExtension = ResourcePathHelper.GetExtension(mediaItemPath.ToString());

                using (var directoryRa = new ResourceLocator(mediaIteamLocator.NativeSystemId, mediaItemDirectoryPath).CreateAccessor())
                {
                    var directoryFsra = directoryRa as IFileSystemResourceAccessor;
                    if (directoryFsra != null)
                    {
                        var potentialFanArtFiles = LocalFanartHelper.GetPotentialFanArtFiles(directoryFsra);

                        if (fanArtType == FanArtTypes.Undefined || fanArtType == FanArtTypes.Poster || fanArtType == FanArtTypes.Cover || fanArtType == FanArtTypes.Thumbnail)
                        {
                            fanArtPaths.AddRange(LocalFanartHelper.FilterPotentialFanArtFilesByName(potentialFanArtFiles, LocalFanartHelper.POSTER_FILENAMES));
                            fanArtPaths.AddRange(LocalFanartHelper.FilterPotentialFanArtFilesByName(potentialFanArtFiles, LocalFanartHelper.THUMB_FILENAMES));
                        }

                        if (fanArtType == FanArtTypes.DiscArt)
                        {
                            fanArtPaths.AddRange(LocalFanartHelper.FilterPotentialFanArtFilesByName(potentialFanArtFiles, LocalFanartHelper.DISCART_FILENAMES));
                        }

                        if (fanArtType == FanArtTypes.FanArt)
                        {
                            fanArtPaths.AddRange(LocalFanartHelper.FilterPotentialFanArtFilesByPrefix(potentialFanArtFiles, LocalFanartHelper.BACKDROP_FILENAMES));

                            if (directoryFsra.ResourceExists("ExtraFanArt/"))
                            {
                                using (var extraFanArtDirectoryFsra = directoryFsra.GetResource("ExtraFanArt/"))
                                    fanArtPaths.AddRange(LocalFanartHelper.GetPotentialFanArtFiles(extraFanArtDirectoryFsra));
                            }
                        }

                        files.AddRange(fanArtPaths.Select(path => new ResourceLocator(mediaIteamLocator.NativeSystemId, path)));
                    }
                }
            }
            catch (Exception ex)
            {
#if DEBUG
                ServiceRegistration.Get <ILogger>().Warn("LocalAlbumFanArtProvider: Error while searching fanart of type '{0}' for '{1}'", ex, fanArtType, mediaIteamLocator);
#endif
            }
            result = files;
            return(files.Count > 0);
        }
        protected void GetNowAndNextProgramsList_Async()
        {
            IThreadPool threadPool = ServiceRegistration.Get <IThreadPool>();

            threadPool.Add(GetNowAndNextProgramsList);
        }
示例#18
0
        public static string Translate(string maybeLocalizationResource, params object[] parameters)
        {
            ILocalization localization = ServiceRegistration.Get <ILocalization>();

            return(localization.ToString(maybeLocalizationResource, parameters));
        }
示例#19
0
        public static void ShowPlaylistsOverview()
        {
            IWorkflowManager workflowManager = ServiceRegistration.Get <IWorkflowManager>();

            workflowManager.NavigatePush(Consts.WF_STATE_ID_PLAYLISTS_OVERVIEW);
        }
示例#20
0
        protected override void InitGenreMap()
        {
            if (_tvGenresInited)
            {
                return;
            }

            _tvGenresInited = true;

            string          genre;
            bool            enabled;
            IGenreConverter converter = ServiceRegistration.Get <IGenreConverter>();

            if (converter == null)
            {
                return;
            }

            // Get the id of the mp genre identified as the movie genre.
            int genreMapMovieGenreId;

            if (!int.TryParse(_tvBusiness.GetSetting("genreMapMovieGenreId").Value, out genreMapMovieGenreId))
            {
                genreMapMovieGenreId = -1;
            }

            // Each genre map value is a '{' delimited list of "program" genre names (those that may be compared with the genre from the program listings).
            // It is an error if a single "program" genre is mapped to more than one guide genre; behavior is undefined for this condition.
            int genreIndex = 0;

            while (true)
            {
                // The genremap key is an integer value that is added to a base value in order to locate the correct localized genre name string.
                genre = _tvBusiness.GetSetting("genreMapName" + genreIndex).Value;
                if (string.IsNullOrEmpty(genre))
                {
                    break;
                }

                // Get the status of the mp genre.
                if (!bool.TryParse(_tvBusiness.GetSetting("genreMapNameEnabled" + genreIndex).Value, out enabled))
                {
                    enabled = true;
                }
                EpgGenre?epgGenre = null;
                if (enabled && genreIndex == genreMapMovieGenreId)
                {
                    epgGenre = EpgGenre.Movie;
                }
                else if (enabled && !string.IsNullOrEmpty(genre))
                {
                    if (converter.GetGenreId(genre, GenreCategory.Epg, null, out int genreId))
                    {
                        epgGenre = (EpgGenre)genreId;
                    }
                }
                if (epgGenre.HasValue)
                {
                    string genreMapEntry = _tvBusiness.GetSetting("genreMapEntry" + genreIndex).Value;
                    if (!string.IsNullOrEmpty(genreMapEntry))
                    {
                        _tvGenres.TryAdd(epgGenre.Value, genreMapEntry.Split(new char[] { '{' }, StringSplitOptions.RemoveEmptyEntries));
                    }
                }
                genreIndex++;
            }
        }
        protected void ShowProgramActions(IProgram program)
        {
            if (program == null)
            {
                return;
            }

            ILocalization loc = ServiceRegistration.Get <ILocalization>();

            _programActions = new ItemsList();
            // if program is over already, there is nothing to do.
            if (program.EndTime < DateTime.Now)
            {
                _programActions.Add(new ListItem(Consts.KEY_NAME, loc.ToString("[SlimTvClient.ProgramOver]")));
            }
            else
            {
                // Check if program is currently running.
                bool isRunning = DateTime.Now >= program.StartTime && DateTime.Now <= program.EndTime;
                if (isRunning)
                {
                    _programActions.Add(new ListItem(Consts.KEY_NAME, loc.ToString("[SlimTvClient.WatchNow]"))
                    {
                        Command = new MethodDelegateCommand(() =>
                        {
                            IChannel channel;
                            if (_tvHandler.ProgramInfo.GetChannel(program, out channel))
                            {
                                IWorkflowManager workflowManager = ServiceRegistration.Get <IWorkflowManager>();
                                SlimTvClientModel model          = workflowManager.GetModel(SlimTvClientModel.MODEL_ID) as SlimTvClientModel;
                                if (model != null)
                                {
                                    model.Tune(channel);
                                }
                            }
                        })
                    });
                }

                if (_tvHandler.ScheduleControl != null)
                {
                    RecordingStatus recordingStatus;
                    if (_tvHandler.ScheduleControl.GetRecordingStatus(program, out recordingStatus) && recordingStatus != RecordingStatus.None)
                    {
                        if (isRunning)
                        {
                            _programActions.Add(
                                new ListItem(Consts.KEY_NAME, loc.ToString("[SlimTvClient.WatchFromBeginning]"))
                            {
                                Command = new MethodDelegateCommand(() => _tvHandler.WatchRecordingFromBeginning(program))
                            });
                        }

                        _programActions.Add(
                            new ListItem(Consts.KEY_NAME, loc.ToString("[SlimTvClient.DeleteSchedule]"))
                        {
                            Command = new MethodDelegateCommand(() =>
                            {
                                if (_tvHandler.ScheduleControl.RemoveScheduleForProgram(program, ScheduleRecordingType.Once))
                                {
                                    UpdateRecordingStatus(program, RecordingStatus.None);
                                }
                            }
                                                                )
                        });
                    }
                    else
                    {
                        _programActions.Add(
                            new ListItem(Consts.KEY_NAME, loc.ToString(isRunning ? "[SlimTvClient.RecordNow]" : "[SlimTvClient.CreateSchedule]"))
                        {
                            Command = new MethodDelegateCommand(() =>
                            {
                                ISchedule schedule;
                                if (_tvHandler.ScheduleControl.CreateSchedule(program, ScheduleRecordingType.Once, out schedule))
                                {
                                    UpdateRecordingStatus(program, RecordingStatus.Scheduled);
                                }
                            }
                                                                )
                        });
                    }
                }
            }

            // Add list entries for extensions
            foreach (KeyValuePair <Guid, TvExtension> programExtension in _programExtensions)
            {
                TvExtension extension = programExtension.Value;
                // First check if this extension applies for the selected program
                if (!extension.Extension.IsAvailable(program))
                {
                    continue;
                }

                _programActions.Add(
                    new ListItem(Consts.KEY_NAME, loc.ToString(extension.Caption))
                {
                    Command = new MethodDelegateCommand(() => extension.Extension.ProgramAction(program))
                });
            }

            IScreenManager screenManager = ServiceRegistration.Get <IScreenManager>();

            screenManager.ShowDialog(_programActionsDialogName);
        }
示例#22
0
        internal static void SendMessageReloadScreens()
        {
            SystemMessage msg = new SystemMessage(MessageType.ReloadScreens);

            ServiceRegistration.Get <IMessageBroker>().Send(CHANNEL, msg);
        }
示例#23
0
        protected override IEnumerable <ResourceProviderMetadata> GetAvailableBaseResourceProviders()
        {
            IMediaAccessor mediaAccessor = ServiceRegistration.Get <IMediaAccessor>();

            return(mediaAccessor.LocalBaseResourceProviders.Select(resourceProvider => resourceProvider.Metadata));
        }
示例#24
0
        public static bool LoadLayoutSettings(string nextScreen, out ScreenConfig screenConfig)
        {
            ViewSettings viewSettings = ServiceRegistration.Get <ISettingsManager>().Load <ViewSettings>();

            return(viewSettings.ScreenConfigs.TryGetValue(nextScreen, out screenConfig));
        }
示例#25
0
        protected override bool SharePathExists(ResourcePath sharePath)
        {
            ILocalSharesManagement sharesManagement = ServiceRegistration.Get <ILocalSharesManagement>();

            return(sharesManagement.Shares.Values.Any(share => (_origShare == null || share.ShareId != _origShare.ShareId) && share.BaseResourcePath == sharePath));
        }
示例#26
0
        public static bool LoadScreenHierarchy(string currentScreen, out string nextScreen)
        {
            ViewSettings viewSettings = ServiceRegistration.Get <ISettingsManager>().Load <ViewSettings>();

            return(viewSettings.ScreenHierarchy.TryGetValue(currentScreen, out nextScreen));
        }
示例#27
0
        public override void UpdateShare(RelocationMode relocationMode)
        {
            ILocalSharesManagement sharesManagement = ServiceRegistration.Get <ILocalSharesManagement>();

            sharesManagement.UpdateShare(_origShare.ShareId, ChoosenResourcePath, ShareName, GetMediaCategoriesCleanedUp(), relocationMode);
        }
示例#28
0
 protected void SwitchToCurrentScreen()
 {
     ServiceRegistration.Get <IScreenManager>().ShowScreen(_currentScreenData.Screen);
 }
示例#29
0
        public static IEnumerable <Share> GetShares()
        {
            ILocalSharesManagement sharesManagement = ServiceRegistration.Get <ILocalSharesManagement>();

            return(sharesManagement.Shares.Values);
        }
        public static void Stop()
        {
            IPlayerContextManager playerContextManager = ServiceRegistration.Get <IPlayerContextManager>();

            playerContextManager.Stop();
        }