Exemple #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();
        }
 public SlimTvFavoriteRecordingsMediaListProvider()
 {
     _necessaryMias           = SlimTvConsts.NECESSARY_RECORDING_MIAS;
     _optionalMias            = SlimTvConsts.OPTIONAL_RECORDING_MIAS;
     _playableConverterAction = mi => new RecordingItem(mi)
     {
         Command = new MethodDelegateCommand(() => PlayItemsModel.CheckQueryPlayAction(mi))
     };
 }
Exemple #4
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))
     };
 }
        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
            };
        }
Exemple #6
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;
            }
        }
Exemple #7
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))
     };
 }
        /// <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);
            }
        }
        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);
     };
 }
        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;
        }
Exemple #12
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);
        }
Exemple #13
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);
        }
Exemple #14
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);
                }
            }
        }
        /// <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;
        }
Exemple #16
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();
        }
Exemple #17
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;
            }
        }
Exemple #18
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);
            }
        }
Exemple #19
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;
        }
Exemple #20
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);
        }
        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    count         = GetMessageValue <int>(message, "Count", 10);
                int    offset        = GetMessageValue <int>(message, "Offset");
                string albumName     = GetMessageValue <string>(message, "AlbumName");
                string id            = GetMessageValue <string>(message, "AlbumId");
                int    discNum       = GetMessageValue <int>(message, "DiscNumber");
                int    trackNum      = GetMessageValue <int>(message, "TrackNumber");
                int    startPos      = GetMessageValue <int>(message, "StartPosition");
                bool   onlyUnwatched = GetMessageValue <bool>(message, "OnlyUnplayedTracks");

                // Search for album
                if (action.Equals("albumsearch", StringComparison.InvariantCultureIgnoreCase))
                {
                    var list = await GetItemListAsync <MusicAlbumInfo>(client, search, Convert.ToUInt32(count), null, Helper.GetAlbumsByAlbumSearchAsync);

                    SendMessageToClient.Send(new MessageAlbums {
                        Albums = list
                    }, sender, true);
                }
                // Show album list
                else if (action.Equals("albumlist", StringComparison.InvariantCultureIgnoreCase))
                {
                    var list = await GetItemListAsync <MusicAlbumInfo>(client, null, Convert.ToUInt32(count), Convert.ToUInt32(offset), Helper.GetAlbumsByAlbumSearchAsync);

                    SendMessageToClient.Send(new MessageAlbums {
                        Albums = list
                    }, sender, true);
                }
                // Search for track
                if (action.Equals("tracksearch", StringComparison.InvariantCultureIgnoreCase))
                {
                    var list = await GetItemListAsync <MusicInfo>(client, search, Convert.ToUInt32(count), null, Helper.GetTracksByTrackSearchAsync);

                    SendMessageToClient.Send(new MessageMusic {
                        Music = list
                    }, sender, true);
                }
                // Show track list for album
                else if (action.Equals("tracklist", StringComparison.InvariantCultureIgnoreCase))
                {
                    var mediaItemGuid = await GetIdFromNameAsync(client, albumName, id, Helper.GetAlbumByAlbumNameAsync);

                    if (mediaItemGuid == null)
                    {
                        ServiceRegistration.Get <ILogger>().Error("WifiRemote: List Tracks: Couldn't convert AlbumId '{0} to Guid", id);
                        return(false);
                    }
                    var list = await Helper.GetTracksByAlbumIdAsync(client.UserId, mediaItemGuid.Value);

                    SendMessageToClient.Send(new MessageMusic {
                        Music = list.Select(i => new MusicInfo(i)).ToList()
                    }, sender, true);
                }
                // Show track details for this track
                else if (action.Equals("tracktails", StringComparison.InvariantCultureIgnoreCase))
                {
                    // TODO: implementation possible?
                }
                // Play a track
                else if (action.Equals("playtrack", StringComparison.InvariantCultureIgnoreCase))
                {
                    ServiceRegistration.Get <ILogger>().Debug("WifiRemote: Play Track: AlbumName: {0}, AlbumId: {1}, DiscNumber: {2}, TrackNumber: {3}, StartPos: {4}", albumName, id, discNum, trackNum, startPos);

                    var mediaItemGuid = await GetIdFromNameAsync(client, albumName, id, Helper.GetAlbumByAlbumNameAsync);

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

                    var episode = await Helper.GetTrackByAlbumTrackAsync(client.UserId, mediaItemGuid.Value, discNum, trackNum);

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

                    await Helper.PlayMediaItemAsync(episode.First().MediaItemId, startPos);
                }
                else if (action.Equals("playunplayedtrack", StringComparison.InvariantCultureIgnoreCase))
                {
                    ServiceRegistration.Get <ILogger>().Debug("WifiRemote Play Track: AlbumName: {0}, AlbumId: {1}", albumName, id);

                    var mediaItemGuid = await GetIdFromNameAsync(client, albumName, id, Helper.GetAlbumByAlbumNameAsync);

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

                    var tracks = await Helper.GetTracksByAlbumIdAsync(client.UserId, mediaItemGuid.Value);

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

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

                    await Helper.PlayMediaItemAsync(track.MediaItemId, 0);
                }
                else if (action.Equals("playrandomtrack", StringComparison.InvariantCultureIgnoreCase))
                {
                    ServiceRegistration.Get <ILogger>().Debug("WifiRemote: Play Track: AlbumName: {0}, AlbumId: {1}", albumName, id);

                    var mediaItemGuid = await GetIdFromNameAsync(client, albumName, id, Helper.GetAlbumByAlbumNameAsync);

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

                    var tracks = await Helper.GetTracksByAlbumIdAsync(client.UserId, mediaItemGuid.Value);

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

                    var trackList    = tracks?.ToList();
                    var episodeIndex = new Random().Next(0, trackList.Count - 1);
                    await Helper.PlayMediaItemAsync(trackList[episodeIndex].MediaItemId, 0);
                }
                else if (action.Equals("playalbum", StringComparison.InvariantCultureIgnoreCase))
                {
                    ServiceRegistration.Get <ILogger>().Debug("WifiRemote: Play Album: AlbumName: {0}, AlbumId: {1}, OnlyUnplayedTracks: {2}", albumName, id, onlyUnwatched);

                    var mediaItemGuid = await GetIdFromNameAsync(client, albumName, id, Helper.GetAlbumByAlbumNameAsync);

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

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

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

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

                    PlayItemsModel.CheckQueryPlayAction(() => tracks, UI.Presentation.Players.AVType.Audio);
                }
            }

            return(true);
        }
Exemple #22
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);
        }