Ejemplo n.º 1
0
 void startVideoLoading(string url, bool useMPSourceFilter = false)
 {
     PlayItemsModel.CheckQueryPlayAction(new VideoItem(url));
     lastVideoUrl             = url;
     lastVideoSessionId       = currentVideoSessionId;
     lastUseMPUrlSourceFilter = useMPSourceFilter;
 }
        protected void FillList(IContentDirectory contentDirectory, Guid[] necessaryMIAs, ItemsList list, MediaItemToListItemAction converterAction)
        {
            MediaItemQuery query = new MediaItemQuery(necessaryMIAs, null)
            {
                Limit           = (uint)QueryLimit, // Last 5 imported items
                SortInformation = new List <SortInformation> {
                    new SortInformation(ImporterAspect.ATTR_DATEADDED, SortDirection.Descending)
                }
            };

            Guid?           userProfile = null;
            IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>();

            if (userProfileDataManagement != null && userProfileDataManagement.IsValidUser)
            {
                userProfile = userProfileDataManagement.CurrentUser.ProfileId;
            }

            var items = contentDirectory.Search(query, false, userProfile, false);

            list.Clear();
            foreach (MediaItem mediaItem in items)
            {
                PlayableMediaItem listItem = converterAction(mediaItem);
                listItem.Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(listItem.MediaItem));
                list.Add(listItem);
            }
            list.FireChange();
        }
Ejemplo n.º 3
0
        public override async Task <AsyncResult <ContentDirectoryMessaging.MediaItemChangeType> > ProcessAsync(MediaItem mediaItem)
        {
            await PlayItemsModel.PlayOrEnqueueItem(mediaItem, false, PlayerContextConcurrencyMode.None);

            AsyncResult <ContentDirectoryMessaging.MediaItemChangeType> result = new AsyncResult <ContentDirectoryMessaging.MediaItemChangeType>(true, ContentDirectoryMessaging.MediaItemChangeType.None);

            return(result);
        }
 public SlimTvFavoriteRecordingsMediaListProvider()
 {
     _necessaryMias           = SlimTvConsts.NECESSARY_RECORDING_MIAS;
     _optionalMias            = SlimTvConsts.OPTIONAL_RECORDING_MIAS;
     _playableConverterAction = mi => new RecordingItem(mi)
     {
         Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(mi))
     };
 }
Ejemplo n.º 5
0
        protected async void StartupCheck()
        {
            //Check if any removable drives are currently mounted
            var tasks = DriveInfo.GetDrives().Where(driveInfo => driveInfo.DriveType == DriveType.CDRom || driveInfo.DriveType == DriveType.Removable).
                        Select(driveInfo => Task.Run(() => ExamineVolume(driveInfo.Name)));
            await Task.WhenAll(tasks);

            PlayItemsModel.AddOrUpdateRemovableMediaItems(_removableMediaItems.Values.SelectMany(i => i));
        }
Ejemplo n.º 6
0
 public SlimTvUnwatchedRecordingsMediaListProvider()
 {
     _necessaryMias = SlimTvConsts.NECESSARY_RECORDING_MIAS;
     //Needed for calculating play percentage
     _optionalMias            = new Guid[] { VideoStreamAspect.ASPECT_ID };
     _playableConverterAction = mi => new RecordingItem(mi)
     {
         Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(mi))
     };
 }
Ejemplo n.º 7
0
        protected override async Task PrepareAsync()
        {
            await base.PrepareAsync();

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

            _defaultScreen    = new RecordingsShowItemsScreenData(picd);
            _availableScreens = new List <AbstractScreenData>
            {
                _defaultScreen,
                new RecordingFilterByNameScreenData(),
                new RecordingsFilterByChannelScreenData(),
                //new VideosFilterByActorScreenData(),
                //new VideosFilterByDirectorScreenData(),
                //new VideosFilterByWriterScreenData(),
                //new VideosFilterByGenreScreenData(),
                //new VideosFilterByYearScreenData(),
                //new VideosFilterBySystemScreenData(),
                new RecordingsSimpleSearchScreenData(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,
                EpisodeAspect.ASPECT_ID,
                AudioAspect.ASPECT_ID,
                VideoAspect.ASPECT_ID,
                VideoStreamAspect.ASPECT_ID,
                VideoAudioStreamAspect.ASPECT_ID,
                ImageAspect.ASPECT_ID
            }.Union(MediaNavigationModel.GetMediaSkinOptionalMIATypes(MediaNavigationMode));

            _customRootViewSpecification = new StackingViewSpecification(_viewName, null, _necessaryMias, optionalMias, true)
            {
                MaxNumItems = Consts.MAX_NUM_ITEMS_VISIBLE
            };
        }
Ejemplo n.º 8
0
        public async Task <bool> StartTimeshiftAsync(int slotIndex, IChannel channel)
        {
            if (TimeshiftControl == null || channel == null)
            {
                return(false);
            }

            ServiceRegistration.Get <ILogger>().Debug("SlimTvHandler: StartTimeshift slot {0} for channel '{1}'", slotIndex, channel.Name);

            int newSlotIndex = GetMatchingSlotIndex(slotIndex);

            if (_slotContexes[newSlotIndex].Channel != null && _slotContexes[newSlotIndex].Channel.MediaType != channel.MediaType)
            {
                // Switching between TV and radio - must close old player and start brand new one
                IPlayerContext playerContext = existingPlayerContext(newSlotIndex);
                if (playerContext == null)
                {
                    return(false);
                }
                playerContext.Close();
                await StopTimeshiftAsync(newSlotIndex);
            }
            var result = await TimeshiftControl.StartTimeshiftAsync(newSlotIndex, channel);

            IList <MultipleMediaItemAspect> pras;
            MediaItem timeshiftMediaItem = result.Result;

            if (result.Success && timeshiftMediaItem != null && MediaItemAspect.TryGetAspects(timeshiftMediaItem.Aspects, ProviderResourceAspect.Metadata, out pras))
            {
                string newAccessorPath = (string)pras[0].GetAttributeValue(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH);

                // if slot was empty, start a new player
                if (_slotContexes[newSlotIndex].AccessorPath == null)
                {
                    AddOrUpdateTimeshiftContext(timeshiftMediaItem as LiveTvMediaItem, channel);
                    PlayerContextConcurrencyMode playMode = GetMatchingPlayMode();
                    await PlayItemsModel.PlayOrEnqueueItem(timeshiftMediaItem, true, playMode);
                }
                else
                {
                    try
                    {
                        _slotContexes[newSlotIndex].CardChanging = true;
                        UpdateExistingMediaItem(timeshiftMediaItem, newSlotIndex);
                    }
                    finally
                    {
                        _slotContexes[newSlotIndex].CardChanging = false;
                    }
                }
                _slotContexes[newSlotIndex].AccessorPath = newAccessorPath;
                _slotContexes[newSlotIndex].Channel      = channel;
            }
            return(result.Success);
        }
Ejemplo n.º 9
0
 public SlimTvLatestRecordingsMediaListProvider()
 {
     _necessaryMias = SlimTvConsts.NECESSARY_RECORDING_MIAS;
     _optionalMias  = new Guid[] {
         VideoStreamAspect.ASPECT_ID,   // Needed for calculating play percentage
         VideoAspect.Metadata.AspectId, // Needed for playing TV recording
         AudioAspect.Metadata.AspectId  // Needed for playing Radio recording
     };
     _playableConverterAction = mi => new RecordingItem(mi)
     {
         Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(mi))
     };
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Constructs a dynamic <see cref="MediaItem"/> that contains the URL for the given <paramref name="stream"/> and starts the playback.
        /// </summary>
        /// <param name="stream">Stream.</param>
        public static void PlayStream(MyStream stream)
        {
            var mediaItem = CreateStreamMediaItem(stream);

            if (ServiceRegistration.Get <IPlayerContextManager>().IsVideoContextActive)
            {
                PlayItemsModel.CheckQueryPlayAction(mediaItem);
            }
            else
            {
                PlayItemsModel.PlayItem(mediaItem);
            }
        }
Ejemplo n.º 11
0
        void startPlayback()
        {
            AudioBufferStream stream = airtunesServer.GetStream(StreamType.Wave);

            if (stream != null)
            {
                AudioItem item = new AudioItem(new PlayerSettings(stream));
                setMetaData(item);
                PlayItemsModel.CheckQueryPlayAction(item);
                setDuration();
                isAudioPlaying = true;
            }
        }
Ejemplo n.º 12
0
        protected void LaunchLibRetroGame(string path, EmulatorConfiguration configuration, bool isExtractedPath)
        {
            LibRetroMediaItem mediaItem = new LibRetroMediaItem(configuration.Path, _mediaItem.Aspects);

            if (isExtractedPath)
            {
                mediaItem.ExtractedPath = path;
            }
            else
            {
                Cleanup();
            }
            PlayItemsModel.CheckQueryPlayAction(mediaItem);
        }
 protected BaseNavigationInitializer()
 {
     // Create a generic delegate that knows all kind of our inbuilt media item types.
     _genericPlayableItemCreatorDelegate = mi =>
     {
         if (mi.Aspects.ContainsKey(EpisodeAspect.ASPECT_ID))
         {
             return new EpisodeItem(mi)
                    {
                        Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(mi))
                    }
         }
         ;
         if (mi.Aspects.ContainsKey(MovieAspect.ASPECT_ID))
         {
             return new MovieItem(mi)
                    {
                        Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(mi))
                    }
         }
         ;
         if (mi.Aspects.ContainsKey(AudioAspect.ASPECT_ID))
         {
             return new AudioItem(mi)
                    {
                        Command = new MethodDelegateCommand(() => MediaNavigationModel.AddCurrentViewToPlaylist(mi))
                    }
         }
         ;
         if (mi.Aspects.ContainsKey(VideoAspect.ASPECT_ID))
         {
             return new VideoItem(mi)
                    {
                        Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(mi))
                    }
         }
         ;
         if (mi.Aspects.ContainsKey(ImageAspect.ASPECT_ID))
         {
             return new ImageItem(mi)
                    {
                        Command = new MethodDelegateCommand(() => MediaNavigationModel.AddCurrentViewToPlaylist(mi))
                    }
         }
         ;
         return(null);
     };
 }
Ejemplo n.º 14
0
        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(Consts.RES_VIDEOS_VIEW_NAME,
                                                                                             null, Consts.NECESSARY_VIDEO_MIAS, skinDependentOptionalMIATypeIDs, true)
            {
                MaxNumItems = Consts.MAX_NUM_ITEMS_VISIBLE
            };
            AbstractScreenData filterByGenre = new VideosFilterByGenreScreenData();
            ICollection <AbstractScreenData> availableScreens = new List <AbstractScreenData>
            {
                new VideosShowItemsScreenData(picd),
                new VideosFilterByLanguageScreenData(),
                new VideosFilterByActorScreenData(),
                filterByGenre,
                // C# doesn't like it to have an assignment inside a collection initializer
                new VideosFilterByYearScreenData(),
                new VideosFilterBySystemScreenData(),
                new VideosSimpleSearchScreenData(picd),
            };

            Sorting.Sorting sortByTitle = new SortByTitle();
            ICollection <Sorting.Sorting> availableSortings = new List <Sorting.Sorting>
            {
                sortByTitle,
                new SortByYear(),
                new VideoSortByFirstGenre(),
                new VideoSortByDuration(),
                new VideoSortByDirector(),
                new VideoSortByFirstActor(),
                new VideoSortBySize(),
                new VideoSortByAspectRatio(),
                new SortBySystem(),
            };

            navigationData = new NavigationData(null, Consts.RES_VIDEOS_VIEW_NAME, MediaNavigationRootState,
                                                MediaNavigationRootState, rootViewSpecification, filterByGenre, availableScreens, sortByTitle)
            {
                AvailableSortings = availableSortings
            };

            mediaNavigationMode = MediaNavigationMode;
        }
Ejemplo n.º 15
0
        public bool WatchRecordingFromBeginning(IProgram program)
        {
            string fileOrStream;

            if (ScheduleControl.GetRecordingFileOrStream(program, out fileOrStream))
            {
                IChannel channel;
                if (ChannelAndGroupInfo.GetChannel(program.ChannelId, out channel))
                {
                    MediaItem recordig = SlimTvMediaItemBuilder.CreateRecordingMediaItem(0, fileOrStream, program, channel);
                    PlayItemsModel.CheckQueryPlayAction(recordig);
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 16
0
 void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
 {
     if (message.ChannelName == RemovableMediaMessaging.CHANNEL)
     {
         RemovableMediaMessaging.MessageType messageType = (RemovableMediaMessaging.MessageType)message.MessageType;
         if (messageType == RemovableMediaMessaging.MessageType.MediaInserted)
         {
             string drive = (string)message.MessageData[RemovableMediaMessaging.DRIVE_LETTER];
             var    type  = ExamineVolume(drive);
             if (_removableMediaItems.TryGetValue(drive, out var items))
             {
                 PlayItemsModel.AddOrUpdateRemovableMediaItems(items);
             }
             RemovableMediaManagerSettings settings = ServiceRegistration.Get <ISettingsManager>().Load <RemovableMediaManagerSettings>();
             if (settings.AutoPlay == AutoPlayType.AutoPlay)
             {
                 IPlayerContextManager pcm = ServiceRegistration.Get <IPlayerContextManager>();
                 if (!pcm.IsFullscreenContentWorkflowStateActive)
                 {
                     CheckAutoPlay(drive, type);
                 }
             }
         }
         else if (messageType == RemovableMediaMessaging.MessageType.MediaRemoved)
         {
             string drive = (string)message.MessageData[RemovableMediaMessaging.DRIVE_LETTER];
             IEnumerable <MediaItem> items;
             if (_removableMediaItems.TryRemove(drive, out items))
             {
                 PlayItemsModel.RemoveRemovableMediaItems(items);
             }
             if (_removableMediaItems.TryRemove(drive + @"\", out items))
             {
                 PlayItemsModel.RemoveRemovableMediaItems(items);
             }
         }
     }
     else if (message.ChannelName == ServerConnectionMessaging.CHANNEL)
     {
         ServerConnectionMessaging.MessageType messageType = (ServerConnectionMessaging.MessageType)message.MessageType;
         if (messageType == ServerConnectionMessaging.MessageType.HomeServerConnected && _runStartupCheck)
         {
             _runStartupCheck = false;
             StartupCheck();
         }
     }
 }
Ejemplo n.º 17
0
        public bool WatchRecordingFromBeginning(IProgram program)
        {
            string fileOrStream;

            if (ScheduleControl.GetRecordingFileOrStream(program, out fileOrStream))
            {
                IChannel channel;
                if (ChannelAndGroupInfo.GetChannel(program.ChannelId, out channel))
                {
                    MediaItem recordig = SlimTvMediaItemBuilder.CreateRecordingMediaItem(0, fileOrStream, program, channel);
                    PlayerContextConcurrencyMode playMode = GetMatchingPlayMode();
                    PlayItemsModel.PlayOrEnqueueItem(recordig, true, playMode);
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 18
0
        public async Task <bool> WatchRecordingFromBeginningAsync(IProgram program)
        {
            var result = await ScheduleControl.GetRecordingFileOrStreamAsync(program);

            if (result.Success)
            {
                string fileOrStream = result.Result;

                var channelResult = await ChannelAndGroupInfo.GetChannelAsync(program.ChannelId);

                if (channelResult.Success)
                {
                    MediaItem recordig = SlimTvMediaItemBuilder.CreateRecordingMediaItem(0, fileOrStream, program, channelResult.Result);
                    PlayItemsModel.CheckQueryPlayAction(recordig);
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 19
0
        protected void CheckAutoPlay(string drive, AVType type)
        {
            if (string.IsNullOrEmpty(drive))
            {
                return;
            }

            if (_removableMediaItems.TryGetValue(drive, out var items))
            {
                if (type == AVType.None)
                {
                    PlayItemsModel.CheckQueryPlayAction(() => items);
                }
                else
                {
                    PlayItemsModel.CheckQueryPlayAction(() => items, type);
                }
            }
        }
Ejemplo n.º 20
0
        public bool StartTimeshift(int slotIndex, IChannel channel)
        {
            if (TimeshiftControl == null || channel == null)
            {
                return(false);
            }

            ServiceRegistration.Get <ILogger>().Debug("SlimTvHandler: StartTimeshift slot {0} for channel '{1}'", slotIndex, channel.Name);

            int       newSlotIndex = GetMatchingSlotIndex(slotIndex);
            MediaItem timeshiftMediaItem;
            bool      result = TimeshiftControl.StartTimeshift(newSlotIndex, channel, out timeshiftMediaItem);
            IList <MultipleMediaItemAspect> pras;

            if (result && timeshiftMediaItem != null && MediaItemAspect.TryGetAspects(timeshiftMediaItem.Aspects, ProviderResourceAspect.Metadata, out pras))
            {
                string newAccessorPath = (string)pras[0].GetAttributeValue(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH);

                // if slot was empty, start a new player
                if (_slotContexes[newSlotIndex].AccessorPath == null)
                {
                    AddOrUpdateTimeshiftContext(timeshiftMediaItem as LiveTvMediaItem, channel);
                    PlayerContextConcurrencyMode playMode = GetMatchingPlayMode();
                    PlayItemsModel.PlayOrEnqueueItem(timeshiftMediaItem, true, playMode);
                }
                else
                {
                    try
                    {
                        _slotContexes[newSlotIndex].CardChanging = true;
                        UpdateExistingMediaItem(timeshiftMediaItem);
                    }
                    finally
                    {
                        _slotContexes[newSlotIndex].CardChanging = false;
                    }
                }
                _slotContexes[newSlotIndex].AccessorPath = newAccessorPath;
                _slotContexes[newSlotIndex].Channel      = channel;
            }

            return(result);
        }
Ejemplo n.º 21
0
        internal static async Task PlayMediaItemAsync(Guid mediaItemGuid, int startPos)
        {
            ISet <Guid> necessaryMIATypes = new HashSet <Guid>();

            necessaryMIATypes.Add(MediaAspect.ASPECT_ID);
            necessaryMIATypes.Add(ProviderResourceAspect.ASPECT_ID);
            necessaryMIATypes.Add(ImporterAspect.ASPECT_ID);

            ISet <Guid> optionalMIATypes = new HashSet <Guid>();

            optionalMIATypes.Add(AudioAspect.ASPECT_ID);
            optionalMIATypes.Add(VideoAspect.ASPECT_ID);
            optionalMIATypes.Add(MovieAspect.ASPECT_ID);
            optionalMIATypes.Add(SeriesAspect.ASPECT_ID);
            optionalMIATypes.Add(ImageAspect.ASPECT_ID);

            IList <MediaItem> items        = new List <MediaItem>();
            IFilter           searchFilter = new MediaItemIdFilter(mediaItemGuid);
            MediaItemQuery    searchQuery  = new MediaItemQuery(necessaryMIATypes, optionalMIATypes, searchFilter)
            {
                Limit = 1
            };
            var cd = ServiceRegistration.Get <IServerConnectionManager>(false);

            if (cd?.ContentDirectory != null)
            {
                items = await cd.ContentDirectory.SearchAsync(searchQuery, false, null, false);
            }

            if (items.Count == 0)
            {
                ServiceRegistration.Get <ILogger>().Info("WifiRemote: PlayFile: No media item found");
                return;
            }

            await PlayItemsModel.PlayItem(items[0]);

            if (startPos > 0)
            {
                SetPosition(startPos, true);
            }
        }
Ejemplo n.º 22
0
        public bool StartTimeshift(int slotIndex, IChannel channel)
        {
            if (TimeshiftControl == null || channel == null)
            {
                return(false);
            }

            int       newSlotIndex = GetMatchingSlotIndex(slotIndex);
            MediaItem timeshiftMediaItem;
            bool      result = TimeshiftControl.StartTimeshift(newSlotIndex, channel, out timeshiftMediaItem);

            if (result && timeshiftMediaItem != null)
            {
                string newAccessorPath =
                    (string)timeshiftMediaItem.Aspects[ProviderResourceAspect.ASPECT_ID].GetAttributeValue(
                        ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH);

                // if slot was empty, start a new player
                if (_slotContexes[newSlotIndex].AccessorPath == null)
                {
                    AddTimeshiftContext(timeshiftMediaItem as LiveTvMediaItem, channel);
                    PlayerContextConcurrencyMode playMode = GetMatchingPlayMode();
                    PlayItemsModel.PlayOrEnqueueItem(timeshiftMediaItem, true, playMode);
                }
                else
                {
                    try
                    {
                        _slotContexes[newSlotIndex].CardChanging = true;
                        UpdateExistingMediaItem(timeshiftMediaItem);
                    }
                    finally
                    {
                        _slotContexes[newSlotIndex].CardChanging = false;
                    }
                }
                _slotContexes[newSlotIndex].AccessorPath = newAccessorPath;
                _slotContexes[newSlotIndex].Channel      = channel;
            }

            return(result);
        }
        /// <summary>
        /// Examines the media in the given <paramref name="drive"/> and auto-plays the inserted media. Depending on the type of the
        /// inserted media, different play modes are choosen.
        /// </summary>
        /// <param name="drive">Drive to be examined. Format: <c>D:</c>.</param>
        protected void ExamineVolume(string drive)
        {
            if (string.IsNullOrEmpty(drive))
            {
                return;
            }

            DriveInfo              driveInfo = new DriveInfo(drive);
            VideoDriveHandler      vdh;
            AudioCDDriveHandler    acddh;
            MultimediaDriveHandler mcddh;

            if ((vdh = VideoDriveHandler.TryCreateVideoDriveHandler(driveInfo, Consts.NECESSARY_VIDEO_MIAS)) != null)
            {
                PlayItemsModel.CheckQueryPlayAction(vdh.VideoItem);
            }
            else if ((acddh = AudioCDDriveHandler.TryCreateAudioCDDriveHandler(driveInfo)) != null)
            {
                PlayItemsModel.CheckQueryPlayAction(() => acddh.GetAllMediaItems(), AVType.Audio);
            }
            else if ((mcddh = MultimediaDriveHandler.TryCreateMultimediaCDDriveHandler(driveInfo,
                                                                                       Consts.NECESSARY_VIDEO_MIAS, Consts.NECESSARY_AUDIO_MIAS, Consts.NECESSARY_IMAGE_MIAS)) != null)
            {
                switch (mcddh.MediaType)
                {
                case MultiMediaType.Video:
                case MultiMediaType.Image:
                    PlayItemsModel.CheckQueryPlayAction(() => mcddh.GetAllMediaItems(), AVType.Video);
                    break;

                case MultiMediaType.Audio:
                    PlayItemsModel.CheckQueryPlayAction(() => mcddh.GetAllMediaItems(), AVType.Audio);
                    break;

                case MultiMediaType.Diverse:
                    PlayItemsModel.CheckQueryPlayAction(() => mcddh.GetAllMediaItems());
                    break;
                }
            }
            return;
        }
Ejemplo n.º 24
0
        protected void FillList(IContentDirectory contentDirectory, Guid[] necessaryMIAs, ItemsList list, MediaItemToListItemAction converterAction)
        {
            MediaItemQuery query = new MediaItemQuery(necessaryMIAs, null)
            {
                Limit           = (uint)QueryLimit, // Last 5 imported items
                SortInformation = new List <SortInformation> {
                    new SortInformation(ImporterAspect.ATTR_DATEADDED, SortDirection.Descending)
                }
            };

            var items = contentDirectory.Search(query, false);

            list.Clear();
            foreach (MediaItem mediaItem in items)
            {
                PlayableMediaItem listItem = converterAction(mediaItem);
                listItem.Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(listItem.MediaItem));
                list.Add(listItem);
            }
            list.FireChange();
        }
Ejemplo n.º 25
0
        private void OnSetAvTransportUri(OnEventSetAVTransportURIEventArgs e)
        {
            Logger.Debug("Set Uri Event fired");
            Logger.Debug("CurrentURI " + e.CurrentURI);
            Logger.Debug("CurrentURIMetaData " + e.CurrentURIMetaData);

            //Logger.Debug("MimeType: {0}", Utils.GetMimeFromUrl(e.CurrentURI, e.CurrentURIMetaData));
            _playerType = Utils.GetContentTypeFromUrl(e.CurrentURI, e.CurrentURIMetaData);

            switch (_playerType)
            {
            case ContentType.Audio:
                break;

            case ContentType.Image:
                var imageItem = UPnPMediaItemFactory.CreateImageItem(e.CurrentURI);
                imageItem.AddMetaDataToMediaItem(e.CurrentURIMetaData);

                var ic = GetPlayerContext <UPnPRendererImagePlayer>();
                if (ic != null)
                {
                    ic.DoPlay(imageItem);
                }
                else
                {
                    PlayItemsModel.CheckQueryPlayAction(imageItem);
                }
                break;

            case ContentType.Video:
                break;

            case ContentType.Unknown:
                break;
            }
        }
Ejemplo n.º 26
0
        void airplayServer_ShowPhoto(object sender, PhotoEventArgs e)
        {
            //When playing a video from the camera roll the client sends a thumbnail before the video.
            //Occasionally we receive it after due to threading so we should ignore it if we have just started playing a video.
            lock (videoInfoSync)
                if (currentVideoSessionId != null && DateTime.Now.Subtract(videoReceiveTime).TotalSeconds < 2)
                {
                    return;
                }

            lock (photoInfoSync)
                photoSessionId = e.SessionId;
            ImageItem item = new ImageItem(e.AssetKey, e.Photo);
            var       ic   = getPlayerContext <AirplayImagePlayer>();

            if (ic != null)
            {
                ic.DoPlay(item);
            }
            else
            {
                PlayItemsModel.CheckQueryPlayAction(item);
            }
        }
Ejemplo n.º 27
0
        private void OnPlay()
        {
            TraceLogger.WriteLine("Event Fired! - Play -- ");
            VolumeChanged();

            var avTransportUri         = _transportServiceImpl.StateVariables["AVTransportURI"].Value.ToString();
            var avTransportUriMetadata = _transportServiceImpl.StateVariables["AVTransportURIMetaData"].Value.ToString();

            switch (_playerType)
            {
            case ContentType.Audio:
                if (_isPaused)
                {
                    ChangeUPnPAVTransportServiceStateToPlaying();
                    ResumePlayer <UPnPRendererAudioPlayer>();
                    break;
                }

                StopPlayer <UPnPRendererAudioPlayer>();

                var audioItem = UPnPMediaItemFactory.CreateAudioItem(avTransportUri);
                audioItem.AddMetaDataToMediaItem(avTransportUriMetadata);
                PlayItemsModel.CheckQueryPlayAction(audioItem);
                break;

            case ContentType.Image:
                var imageItem = UPnPMediaItemFactory.CreateImageItem(avTransportUri);
                imageItem.AddMetaDataToMediaItem(avTransportUriMetadata);

                var ic = GetPlayerContext <UPnPRendererImagePlayer>();
                if (ic != null)
                {
                    ic.DoPlay(imageItem);
                }
                else
                {
                    PlayItemsModel.CheckQueryPlayAction(imageItem);
                }
                break;

            case ContentType.Video:
                if (_isPaused)
                {
                    Logger.Debug("Resume!!");
                    ChangeUPnPAVTransportServiceStateToPlaying();
                    ResumePlayer <UPnPRendererVideoPlayer>();
                    break;
                }
                Logger.Debug("NO Resume!!");

                StopPlayer <UPnPRendererVideoPlayer>();

                var videoItem = UPnPMediaItemFactory.CreateVideoItem(avTransportUri);
                videoItem.AddMetaDataToMediaItem(avTransportUriMetadata);
                PlayItemsModel.CheckQueryPlayAction(videoItem);
                break;

            case ContentType.Unknown:
                Logger.Warn("Can't play because of unknown player type");
                return; // we don't want to start the timer
            }

            _timer.Enabled   = true;
            _timer.AutoReset = true;
        }
Ejemplo n.º 28
0
        public virtual async Task <bool> UpdateItemsAsync(int maxItems, UpdateReason updateReason)
        {
            if (!ShouldUpdate(updateReason))
            {
                return(false);
            }

            if (_playableConverterAction == null && _playableContainerConverterAction == null)
            {
                return(false);
            }

            var contentDirectory = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory;

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

            MediaItemQuery query = await CreateQueryAsync();

            if (query == null)
            {
                return(false);
            }
            query.Limit = (uint)maxItems;

            Guid?userProfile = CurrentUserProfile?.ProfileId;
            bool showVirtual = VirtualMediaHelper.ShowVirtualMedia(_necessaryMias);

            var items = await contentDirectory.SearchAsync(query, true, userProfile, showVirtual);

            lock (_allItems.SyncRoot)
            {
                if (_currentMediaItems != null && _currentMediaItems.Select(m => m.MediaItemId).SequenceEqual(items.Select(m => m.MediaItemId)))
                {
                    return(false);
                }
                _currentMediaItems = items;
                IEnumerable <ListItem> listItems;
                if (_playableConverterAction != null)
                {
                    listItems = items.Select(mi =>
                    {
                        PlayableMediaItem listItem = _playableConverterAction(mi);
                        listItem.Command           = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(listItem.MediaItem));
                        return(listItem);
                    });
                }
                else
                {
                    listItems = items.Select(mi => _playableContainerConverterAction(mi));
                }

                _allItems.Clear();
                CollectionUtils.AddAll(_allItems, listItems);
            }

            _allItems.FireChange();
            return(true);
        }
Ejemplo n.º 29
0
 public override bool Process(MediaItem mediaItem, out ContentDirectoryMessaging.MediaItemChangeType changeType)
 {
     changeType = ContentDirectoryMessaging.MediaItemChangeType.None;
     PlayItemsModel.PlayOrEnqueueItem(mediaItem, false, PlayerContextConcurrencyMode.None);
     return(true);
 }
Ejemplo n.º 30
0
        public static async Task <bool> ParseAsync(JObject message, SocketServer server, AsyncSocket sender)
        {
            string action = GetMessageValue <string>(message, "Action");
            var    client = sender.GetRemoteClient();

            if (!string.IsNullOrEmpty(action))
            {
                string search        = GetMessageValue <string>(message, "Search");
                int    offset        = GetMessageValue <int>(message, "Offset");
                int    count         = GetMessageValue <int>(message, "Count", 10);
                string seriesName    = GetMessageValue <string>(message, "SeriesName");
                int    seasonNum     = GetMessageValue <int>(message, "SeasonNumber");
                string id            = GetMessageValue <string>(message, "SeriesId");
                int    episodeNum    = GetMessageValue <int>(message, "EpisodeNumber");
                int    startPos      = GetMessageValue <int>(message, "StartPosition");
                bool   onlyUnwatched = GetMessageValue <bool>(message, "OnlyUnwatchedEpisodes");

                // Search for series
                if (action.Equals("seriessearch", StringComparison.InvariantCultureIgnoreCase))
                {
                    var list = await GetItemListAsync <SeriesShowInfo>(client, search, Convert.ToUInt32(count), null, Helper.GetSeriesBySeriesSearchAsync);

                    SendMessageToClient.Send(new MessageSeries {
                        Series = list
                    }, sender, true);
                }
                // Show series list
                else if (action.Equals("serieslist", StringComparison.InvariantCultureIgnoreCase))
                {
                    var list = await GetItemListAsync <SeriesShowInfo>(client, null, Convert.ToUInt32(count), Convert.ToUInt32(offset), Helper.GetSeriesBySeriesSearchAsync);

                    SendMessageToClient.Send(new MessageSeries {
                        Series = list
                    }, sender, true);
                }
                // Show season list for series
                else if (action.Equals("seasonlist", StringComparison.InvariantCultureIgnoreCase))
                {
                    var mediaItemGuid = await GetIdFromNameAsync(client, seriesName, id, Helper.GetSeriesBySeriesNameAsync);

                    if (mediaItemGuid == null)
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: List Seasons: Couldn't convert SeriesId '{0} to Guid", id);
                        return(false);
                    }

                    var list = await Helper.GetSeasonsBySeriesIdAsync(client.UserId, mediaItemGuid.Value);

                    SendMessageToClient.Send(new MessageSeasons {
                        Seasons = list.Select(i => new SeriesSeasonInfo(i)).ToList()
                    }, sender, true);
                }
                // Show episode list for series season
                else if (action.Equals("episodelist", StringComparison.InvariantCultureIgnoreCase))
                {
                    var mediaItemGuid = await GetIdFromNameAsync(client, seriesName, id, Helper.GetSeriesBySeriesNameAsync);

                    if (mediaItemGuid == null)
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: List Episodes: Couldn't convert SeriesId '{0} to Guid", id);
                        return(false);
                    }

                    var list = await Helper.GetEpisodesBySeriesSeasonAsync(client.UserId, mediaItemGuid.Value, seasonNum);

                    SendMessageToClient.Send(new MessageEpisodes {
                        Episodes = list.Select(i => new SeriesEpisodeInfo(i)).ToList()
                    }, sender, true);
                }
                // Show movie details for this episode
                else if (action.Equals("episodetails", StringComparison.InvariantCultureIgnoreCase))
                {
                    // TODO: implementation possible?
                }
                // Play a episode
                else if (action.Equals("playepisode", StringComparison.InvariantCultureIgnoreCase))
                {
                    ServiceRegistration.Get <ILogger>().Debug("WifiRemote: Play Episode: SeriesName: {0}, SeriesId: {1}, SeasonNumber: {2}, EpisodeNumber: {3}, StartPos: {4}", seriesName, id, seasonNum, episodeNum, startPos);

                    var mediaItemGuid = await GetIdFromNameAsync(client, seriesName, id, Helper.GetSeriesBySeriesNameAsync);

                    if (mediaItemGuid == null)
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: Play Episode: Couldn't convert SeriesId '{0} to Guid", id);
                        return(false);
                    }

                    var episode = await Helper.GetEpisodeBySeriesEpisodeAsync(client.UserId, mediaItemGuid.Value, seasonNum, episodeNum);

                    if (episode == null)
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: Play Episode: Couldn't find episode");
                        return(false);
                    }

                    await Helper.PlayMediaItemAsync(episode.MediaItemId, startPos);
                }
                else if (action.Equals("playunwatchedepisode", StringComparison.InvariantCultureIgnoreCase))
                {
                    ServiceRegistration.Get <ILogger>().Debug("WifiRemote: Play Episode: SeriesName: {0}, SeriesId: {1}", seriesName, id);

                    var mediaItemGuid = await GetIdFromNameAsync(client, seriesName, id, Helper.GetSeriesBySeriesNameAsync);

                    if (mediaItemGuid == null)
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: Play Episode: Couldn't convert SeriesId '{0} to Guid", id);
                        return(false);
                    }

                    var episodes = await Helper.GetEpisodesBySeriesIdAsync(client.UserId, mediaItemGuid.Value);

                    if (!(episodes?.Count > 0))
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: Play Episode: Couldn't find episodes");
                        return(false);
                    }

                    var episode = episodes.FirstOrDefault(e => Convert.ToInt32(e.UserData.FirstOrDefault(d => d.Key == UserDataKeysKnown.KEY_PLAY_PERCENTAGE).Value ?? "0") < 100);
                    if (episode == null)
                    {
                        episode = episodes.LastOrDefault(e => Convert.ToInt32(e.UserData.FirstOrDefault(d => d.Key == UserDataKeysKnown.KEY_PLAY_PERCENTAGE).Value ?? "0") == 100);
                    }
                    if (episode == null)
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: Play Episode: Couldn't find episodes");
                        return(false);
                    }

                    await Helper.PlayMediaItemAsync(episode.MediaItemId, 0);
                }
                else if (action.Equals("playrandomepisode", StringComparison.InvariantCultureIgnoreCase))
                {
                    ServiceRegistration.Get <ILogger>().Debug("WifiRemote: Play Episode: SeriesName: {0}, SeriesId: {1}", seriesName, id);

                    var mediaItemGuid = await GetIdFromNameAsync(client, seriesName, id, Helper.GetSeriesBySeriesNameAsync);

                    if (mediaItemGuid == null)
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: Play Episode: Couldn't convert SeriesId '{0} to Guid", id);
                        return(false);
                    }

                    var episodes = await Helper.GetEpisodesBySeriesIdAsync(client.UserId, mediaItemGuid.Value);

                    if (!(episodes?.Count > 0))
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: Play Episode: Couldn't find episodes");
                        return(false);
                    }

                    var episodeList  = episodes?.ToList();
                    var episodeIndex = new Random().Next(0, episodeList.Count - 1);
                    await Helper.PlayMediaItemAsync(episodeList[episodeIndex].MediaItemId, 0);
                }
                else if (action.Equals("playseason", StringComparison.InvariantCultureIgnoreCase))
                {
                    ServiceRegistration.Get <ILogger>().Debug("WifiRemote: Play Season: SeriesName: {0}, SeriesId: {1}, SeasonNumber: {2}, OnlyUnwatchedEpisodes: {3}", seriesName, id, seasonNum, onlyUnwatched);

                    var mediaItemGuid = await GetIdFromNameAsync(client, seriesName, id, Helper.GetSeriesBySeriesNameAsync);

                    if (mediaItemGuid == null)
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: Play Season: Couldn't convert SeriesId '{0} to Guid", id);
                        return(false);
                    }

                    var items = await Helper.GetEpisodesBySeriesSeasonAsync(client.UserId, mediaItemGuid.Value, seasonNum);

                    IEnumerable <MediaItem> episodes = null;
                    if (onlyUnwatched)
                    {
                        episodes = items.Where(e => Convert.ToInt32(e.UserData.FirstOrDefault(d => d.Key == UserDataKeysKnown.KEY_PLAY_PERCENTAGE).Value ?? "0") < 100);
                    }
                    else
                    {
                        episodes = items;
                    }

                    if (!(episodes?.Count() > 0))
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: Play Season: Couldn't find any episodes");
                        return(false);
                    }

                    PlayItemsModel.CheckQueryPlayAction(() => episodes, UI.Presentation.Players.AVType.Video);
                }
                else if (action.Equals("playseries", StringComparison.InvariantCultureIgnoreCase))
                {
                    ServiceRegistration.Get <ILogger>().Debug("WifiRemote: Play Series: SeriesName: {0}, SeriesId: {1}, OnlyUnwatchedEpisodes: {2}", seriesName, id, onlyUnwatched);

                    var mediaItemGuid = await GetIdFromNameAsync(client, seriesName, id, Helper.GetSeriesBySeriesNameAsync);

                    if (mediaItemGuid == null)
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: Play Series: Couldn't convert SeriesId '{0} to Guid", id);
                        return(false);
                    }

                    var items = await Helper.GetEpisodesBySeriesIdAsync(client.UserId, mediaItemGuid.Value);

                    IEnumerable <MediaItem> episodes = null;
                    if (onlyUnwatched)
                    {
                        episodes = items.Where(e => Convert.ToInt32(e.UserData.FirstOrDefault(d => d.Key == UserDataKeysKnown.KEY_PLAY_PERCENTAGE).Value ?? "0") < 100);
                    }
                    else
                    {
                        episodes = items;
                    }

                    if (!(episodes?.Count() > 0))
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: Play Series: Couldn't find any episodes");
                        return(false);
                    }

                    PlayItemsModel.CheckQueryPlayAction(() => episodes, UI.Presentation.Players.AVType.Video);
                }
            }

            return(true);
        }