protected override void Prepare()
    {
      base.Prepare();

      AbstractItemsScreenData.PlayableItemCreatorDelegate picd = mi => new RecordingItem(mi) { Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(mi)) };

      _defaultScreen = new VideosShowItemsScreenData(picd);
      _availableScreens = new List<AbstractScreenData>
        {
          _defaultScreen,
          new RecordingFilterByNameScreenData(),
          new RecordingsFilterByChannelScreenData(),
          //new VideosFilterByActorScreenData(),
          //new VideosFilterByDirectorScreenData(),
          //new VideosFilterByWriterScreenData(),
          //new VideosFilterByGenreScreenData(),
          //new VideosFilterByYearScreenData(),
          //new VideosFilterBySystemScreenData(),
          new VideosSimpleSearchScreenData(picd),
        };

      _defaultSorting = new SortByRecordingDateDesc();
      _availableSortings = new List<Sorting>
        {
          _defaultSorting,
          new SortByTitle(),
          //new VideoSortByFirstGenre(),
          //new VideoSortByDuration(),
          //new VideoSortByFirstActor(),
          //new VideoSortByFirstDirector(),
          //new VideoSortByFirstWriter(),
          //new VideoSortBySize(),
          //new VideoSortByAspectRatio(),
          //new SortBySystem(),
        };

      var optionalMias = new[]
      {
        MovieAspect.ASPECT_ID,
        SeriesAspect.ASPECT_ID,
        AudioAspect.ASPECT_ID,
        VideoAspect.ASPECT_ID,
        ImageAspect.ASPECT_ID
      }.Union(MediaNavigationModel.GetMediaSkinOptionalMIATypes(MediaNavigationMode));

      _customRootViewSpecification = new StackingViewSpecification(_viewName, null, _necessaryMias, optionalMias, true)
      {
        MaxNumItems = Consts.MAX_NUM_ITEMS_VISIBLE
      };
    }
    public RecordingsLibrary()
    {
      _mediaNavigationMode = SlimTvConsts.MEDIA_NAVIGATION_MODE;
      _mediaNavigationRootState = SlimTvConsts.WF_MEDIA_NAVIGATION_ROOT_STATE;
      _viewName = SlimTvConsts.RES_RECORDINGS_VIEW_NAME;
      _necessaryMias = SlimTvConsts.NECESSARY_RECORDING_MIAS;

      AbstractItemsScreenData.PlayableItemCreatorDelegate picd = mi => new RecordingItem(mi) { Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(mi)) };

      _defaultScreen = new RecordingFilterByNameScreenData();
      _availableScreens = new List<AbstractScreenData>
        {
          new VideosShowItemsScreenData(picd),
          _defaultScreen,
          new RecordingsFilterByChannelScreenData(),
          new VideosFilterByActorScreenData(),
          new VideosFilterByDirectorScreenData(),
          new VideosFilterByWriterScreenData(),
          new VideosFilterByGenreScreenData(),
          new VideosFilterByYearScreenData(),
          new VideosFilterBySystemScreenData(),
          new VideosSimpleSearchScreenData(picd),
        };

      _defaultSorting = new SortByRecordingDateDesc();
      _availableSortings = new List<Sorting>
        {
          _defaultSorting,
          new SortByTitle(),
          new VideoSortByFirstGenre(),
          new VideoSortByDuration(),
          new VideoSortByFirstActor(),
          new VideoSortByFirstDirector(),
          new VideoSortByFirstWriter(),
          new VideoSortBySize(),
          new VideoSortByAspectRatio(),
          new SortBySystem(),
        };
    }
    public void InitMediaNavigation(out string mediaNavigationMode, out NavigationData navigationData)
    {
      IEnumerable<Guid> skinDependentOptionalMIATypeIDs = MediaNavigationModel.GetMediaSkinOptionalMIATypes(MediaNavigationMode);
      AbstractItemsScreenData.PlayableItemCreatorDelegate picd = mi => new VideoItem(mi)
        {
          Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(mi))
        };
      ViewSpecification rootViewSpecification = new MediaLibraryQueryViewSpecification(SlimTvConsts.RES_RECORDINGS_VIEW_NAME,
        null, SlimTvConsts.NECESSARY_RECORDING_MIAS, skinDependentOptionalMIATypeIDs, true)
        {
          MaxNumItems = Consts.MAX_NUM_ITEMS_VISIBLE
        };
      AbstractScreenData defaultScreen = new RecordingFilterByNameScreenData();
      ICollection<AbstractScreenData> availableScreens = new List<AbstractScreenData>
        {
          // C# doesn't like it to have an assignment inside a collection initializer
          defaultScreen,
          new VideosShowItemsScreenData(picd),
          new RecordingsFilterByChannelScreenData(),
          new VideosFilterByActorScreenData(),
          new VideosFilterByDirectorScreenData(),
          new VideosFilterByWriterScreenData(),
          new VideosFilterByGenreScreenData(),
          new VideosFilterByYearScreenData(),
          new VideosFilterBySystemScreenData(),
          new VideosSimpleSearchScreenData(picd),
        };
      Sorting defaultSorting = new SortByRecordingDateDesc();
      ICollection<Sorting> availableSortings = new List<Sorting>
        {
          defaultSorting,
          new SortByTitle(),
          new VideoSortByFirstGenre(),
          new VideoSortByDuration(),
          new VideoSortByFirstActor(),
          new VideoSortByFirstDirector(),
          new VideoSortByFirstWriter(),
          new VideoSortBySize(),
          new VideoSortByAspectRatio(),
          new SortBySystem(),
        };

      navigationData = new NavigationData(null, Consts.RES_MOVIES_VIEW_NAME, MediaNavigationRootState,
        MediaNavigationRootState, rootViewSpecification, defaultScreen, availableScreens, defaultSorting)
        {
          AvailableSortings = availableSortings
        };
      mediaNavigationMode = MediaNavigationMode;
    }