Example #1
0
 /// <summary>
 /// Creates a new instance of <see cref="AbstractItemsScreenData"/>.
 /// </summary>
 /// <param name="screen">The screen associated with this screen data.</param>
 /// <param name="menuItemLabel">Laben which will be shown in the menu to switch to this screen data.</param>
 /// <param name="navbarSubViewNavigationDisplayLabel">Display label to be shown in the navbar when we
 /// navigate to a sub view.</param>
 /// <param name="playableItemCreator">Delegate which will be called for a media item when the user chooses it.</param>
 /// <param name="presentsBaseView">If set to <c>true</c>, this items screen presents the base view (given by
 /// the <see cref="NavigationData.BaseViewSpecification"/>) and automatically creates the items. If set to
 /// <c>false</c>, the items have to be created by a sub class in method <see cref="CreateScreenData"/>.</param>
 protected AbstractItemsScreenData(string screen, string menuItemLabel, string navbarSubViewNavigationDisplayLabel,
                                   PlayableItemCreatorDelegate playableItemCreator, bool presentsBaseView) : base(screen, menuItemLabel)
 {
     _navbarSubViewNavigationDisplayLabel = navbarSubViewNavigationDisplayLabel;
     _playableItemCreator = playableItemCreator;
     _presentsBaseView    = presentsBaseView;
 }
 protected AbstractSearchScreenData(string screen, string menuItemLabel, PlayableItemCreatorDelegate playableItemCreator, bool applyUserFilter = true) :
     base(screen, menuItemLabel, null, playableItemCreator, false)
 {
     _applyUserFilter              = applyUserFilter;
     _delayedEvent                 = new DelayedEvent(Consts.TS_SEARCH_TEXT_TYPE.TotalMilliseconds);
     _delayedEvent.OnEventHandler += OnSearchTimerElapsed;
 }
 /// <summary>
 /// Creates a new instance of <see cref="AbstractItemsScreenData"/>.
 /// </summary>
 /// <param name="screen">The screen associated with this screen data.</param>
 /// <param name="menuItemLabel">Laben which will be shown in the menu to switch to this screen data.</param>
 /// <param name="navbarSubViewNavigationDisplayLabel">Display label to be shown in the navbar when we
 /// navigate to a sub view.</param>
 /// <param name="playableItemCreator">Delegate which will be called for a media item when the user chooses it.</param>
 /// <param name="presentsBaseView">If set to <c>true</c>, this items screen presents the base view (given by
 /// the <see cref="NavigationData.BaseViewSpecification"/>) and automatically creates the items. If set to
 /// <c>false</c>, the items have to be created by a sub class in method <see cref="CreateScreenData"/>.</param>
 protected AbstractItemsScreenData(string screen, string menuItemLabel, string navbarSubViewNavigationDisplayLabel,
     PlayableItemCreatorDelegate playableItemCreator, bool presentsBaseView) : base(screen, menuItemLabel)
 {
   _navbarSubViewNavigationDisplayLabel = navbarSubViewNavigationDisplayLabel;
   _playableItemCreator = playableItemCreator;
   _presentsBaseView = presentsBaseView;
 }
 public VideosShowItemsScreenData(PlayableItemCreatorDelegate playableItemCreator)
     : base(Consts.SCREEN_VIDEOS_SHOW_ITEMS, Consts.RES_COMMON_SHOW_ALL_MENU_ITEM,
 Consts.RES_FILTER_VIDEO_ITEMS_NAVBAR_DISPLAY_LABEL, playableItemCreator, true)
 {
     _availableMias = Consts.NECESSARY_VIDEO_MIAS;
       if (Consts.OPTIONAL_VIDEO_MIAS != null)
     _availableMias = _availableMias.Union(Consts.OPTIONAL_VIDEO_MIAS);
 }
 public MoviesSimpleSearchScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(playableItemCreator)
 {
     _availableMias = Consts.NECESSARY_MOVIES_MIAS;
     if (Consts.OPTIONAL_MOVIES_MIAS != null)
     {
         _availableMias = _availableMias.Union(Consts.OPTIONAL_MOVIES_MIAS);
     }
 }
Example #6
0
 public AudioSimpleSearchScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_AUDIO_SIMPLE_SEARCH, Consts.RES_SIMPLE_SEARCH_FILTER_MENU_ITEM, playableItemCreator)
 {
     _availableMias = Consts.NECESSARY_AUDIO_MIAS;
     if (Consts.OPTIONAL_AUDIO_MIAS != null)
     {
         _availableMias = _availableMias.Union(Consts.OPTIONAL_AUDIO_MIAS);
     }
 }
Example #7
0
 public AudioShowItemsScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_AUDIO_SHOW_ITEMS, Consts.RES_COMMON_SHOW_ALL_MENU_ITEM,
          Consts.RES_FILTER_AUDIO_ITEMS_NAVBAR_DISPLAY_LABEL, playableItemCreator, true)
 {
     _filteredMias  = new Guid[] { AudioAspect.ASPECT_ID };
     _availableMias = Consts.NECESSARY_AUDIO_MIAS;
     if (Consts.OPTIONAL_AUDIO_MIAS != null)
     {
         _availableMias = _availableMias.Union(Consts.OPTIONAL_AUDIO_MIAS);
     }
 }
 public ImagesShowItemsScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_IMAGE_SHOW_ITEMS, Consts.RES_SHOW_ALL_IMAGE_ITEMS_MENU_ITEM,
     Consts.RES_FILTER_IMAGE_ITEMS_NAVBAR_DISPLAY_LABEL, playableItemCreator, true)
 {
 }
 public RecordingsShowItemsScreenData(PlayableItemCreatorDelegate playableItemCreator) :
   base(SlimTvConsts.SCREEN_RECORDINGS_SHOW_ITEMS, SlimTvConsts.RES_SHOW_ALL_RECORDINGS_ITEMS_MENU_ITEM,
     SlimTvConsts.RES_FILTER_RECORDINGS_ITEMS_NAVBAR_DISPLAY_LABEL, playableItemCreator, true)
 {
 }
 public AudioShowItemsScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_AUDIO_SHOW_ITEMS, Consts.RES_SHOW_ALL_AUDIO_ITEMS_MENU_ITEM,
     Consts.RES_FILTER_AUDIO_ITEMS_NAVBAR_DISPLAY_LABEL, playableItemCreator, true)
 {
 }
Example #11
0
 public BrowseMediaNavigationScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_BROWSE_MEDIA_NAVIGATION, null, Consts.RES_BROWSE_MEDIA_NAVIGATION_NAVBAR_DISPLAY_LABEL,
          playableItemCreator, true)
 {
 }
 public SeriesShowItemsScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_SERIES_SHOW_ITEMS, Consts.RES_SHOW_ALL_VIDEO_ITEMS_MENU_ITEM,
     Consts.RES_FILTER_SERIES_ITEMS_NAVBAR_DISPLAY_LABEL, playableItemCreator, true)
 {
 }
Example #13
0
 public MoviesSimpleSearchScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(playableItemCreator)
 {
 }
Example #14
0
 protected AbstractSearchScreenData(string screen, string menuItemLabel, PlayableItemCreatorDelegate playableItemCreator) :
     base(screen, menuItemLabel, null, playableItemCreator, false)
 {
     _searchTimer = new Timer(OnSearchTimerElapsed, null, Timeout.Infinite, Timeout.Infinite);
 }
 public RecordingsSimpleSearchScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(playableItemCreator)
 {
 }
Example #16
0
 public ImagesShowItemsScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_IMAGE_SHOW_ITEMS, Consts.RES_COMMON_SHOW_ALL_MENU_ITEM,
          Consts.RES_FILTER_IMAGE_ITEMS_NAVBAR_DISPLAY_LABEL, playableItemCreator, true)
 {
 }
 public SeriesSimpleSearchScreenData(PlayableItemCreatorDelegate playableItemCreator) :
   base(playableItemCreator)
 {
 }
        /// <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));
                                }

                                // Derived classes can implement special initial selection handling here,
                                // e.g. the first unwatched episode could be selected from a list of episodes
                                SetSelectedItem(itemsList);
                                CollectionUtils.AddAll(items, itemsList);

                                // Support custom sorting logic by view specification. At this time it can work on both MediaItems and SubViews.
                                if (view.Specification.CustomItemsListSorting != null)
                                {
                                    view.Specification.CustomItemsListSorting(items, sorting);
                                }

                                _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;
            }
        }
Example #19
0
        /// <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;

                                List <NavigationItem> viewsList = new List <NavigationItem>();
                                foreach (View sv in subViews)
                                {
                                    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;
                                    }
                                }
                                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);

                                Display_Normal(items.Count, totalNumItems == 0 ? new int?() : totalNumItems);
                            }
                        }
                    }
                    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;
            }
        }
 protected AbstractSearchScreenData(string screen, string menuItemLabel, PlayableItemCreatorDelegate playableItemCreator) :
     base(screen, menuItemLabel, null, playableItemCreator, false)
 {
   _searchTimer = new Timer(OnSearchTimerElapsed, null, Timeout.Infinite, Timeout.Infinite);
 }
Example #21
0
 public RecordingsShowItemsScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(SlimTvConsts.SCREEN_RECORDINGS_SHOW_ITEMS, SlimTvConsts.RES_SHOW_ALL_RECORDINGS_ITEMS_MENU_ITEM,
          SlimTvConsts.RES_FILTER_RECORDINGS_ITEMS_NAVBAR_DISPLAY_LABEL, playableItemCreator, true)
 {
 }
 protected AbstractBrowseMediaNavigationScreenData(string screen, string menuItemLabel, string navbarSubViewNavigationDisplayLabel,
                                                   PlayableItemCreatorDelegate playableItemCreator, bool presentsBaseView) :
     base(screen, menuItemLabel, navbarSubViewNavigationDisplayLabel, playableItemCreator, presentsBaseView)
 {
 }
Example #23
0
 public VideosShowItemsScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_VIDEOS_SHOW_ITEMS, Consts.RES_SHOW_ALL_VIDEO_ITEMS_MENU_ITEM,
          Consts.RES_FILTER_VIDEO_ITEMS_NAVBAR_DISPLAY_LABEL, playableItemCreator, true)
 {
 }
 public LocalMediaNavigationScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_LOCAL_MEDIA_NAVIGATION, null, Consts.RES_LOCAL_MEDIA_NAVIGATION_NAVBAR_DISPLAY_LABEL,
     playableItemCreator, true) { }
 public RecordingsSimpleSearchScreenData(PlayableItemCreatorDelegate playableItemCreator) :
   base(playableItemCreator)
 {
 }
 public ImagesSimpleSearchScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_IMAGE_SIMPLE_SEARCH, Consts.RES_SIMPLE_SEARCH_FILTER_MENU_ITEM, playableItemCreator)
 {
 }
 public VideosSimpleSearchScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_VIDEOS_SIMPLE_SEARCH, Consts.RES_SIMPLE_SEARCH_FILTER_MENU_ITEM, playableItemCreator)
 {
 }
 protected AbstractSearchScreenData(string screen, string menuItemLabel, PlayableItemCreatorDelegate playableItemCreator) :
   base(screen, menuItemLabel, null, playableItemCreator, false)
 {
   _delayedEvent = new DelayedEvent(Consts.TS_SEARCH_TEXT_TYPE.TotalMilliseconds);
   _delayedEvent.OnEventHandler += OnSearchTimerElapsed;
 }
Example #29
0
 public LocalMediaNavigationScreenData(PlayableItemCreatorDelegate playableItemCreator) :
     base(Consts.SCREEN_LOCAL_MEDIA_NAVIGATION, null, Consts.RES_LOCAL_MEDIA_NAVIGATION_NAVBAR_DISPLAY_LABEL,
          playableItemCreator, true)
 {
     _availableMias = Consts.NECESSARY_BROWSING_MIAS;
 }