Esempio n. 1
0
        protected override Results <T> GetMoreResults(RemoteContentDirectory contentDirectory,
                                                      ResultsSettings settings)
        {
            if (contentDirectory == null)
            {
                throw new ArgumentNullException("contentDirectory");
            }

            return(contentDirectory.Search <T> (Container, Query, settings));
        }
Esempio n. 2
0
        void Parse(Device device, ContentDirectoryController content_directory)
        {
            RemoteContentDirectory remote_dir = new RemoteContentDirectory(content_directory);
            DateTime begin            = DateTime.Now;
            bool     recursive_browse = !content_directory.CanSearch;

            try {
                Container root = remote_dir.GetRootObject();

                if (!recursive_browse)
                {
                    try {
                        Log.Debug("Content directory is searchable, let's search");

                        HandleResults <MusicTrack> (remote_dir.Search <MusicTrack>(root, visitor => visitor.VisitDerivedFrom("upnp:class", "object.item.audioItem.musicTrack"), new ResultsSettings()),
                                                    remote_dir,
                                                    chunk => {
                            List <MusicTrack> music_tracks = new List <MusicTrack>();
                            foreach (var item in chunk)
                            {
                                music_tracks.Add(item as MusicTrack);
                            }

                            AddMusic(music_tracks);
                        });

                        HandleResults <VideoItem>  (remote_dir.Search <VideoItem>(root, visitor => visitor.VisitDerivedFrom("upnp:class", "object.item.videoItem"), new ResultsSettings()),
                                                    remote_dir,
                                                    chunk => {
                            List <VideoItem> video_tracks = new List <VideoItem>();
                            foreach (var item in chunk)
                            {
                                video_tracks.Add(item as VideoItem);
                            }

                            AddVideo(video_tracks);
                        });
                    } catch (System.InvalidCastException exception) {
                        Log.Exception(exception);
                        recursive_browse = true;
                    }
                }

                if (recursive_browse)
                {
                    Log.Debug("Content directory is not searchable, let's browse recursively");
                    List <MusicTrack> music_tracks = new List <MusicTrack> ();
                    List <VideoItem>  video_tracks = new List <VideoItem> ();

                    foreach (var hierarchy in FindBrowseQuirks(device))
                    {
                        TraverseContainer(remote_dir, root, hierarchy, 0, music_tracks, video_tracks);
                    }

                    if (music_tracks.Count > 0)
                    {
                        AddMusic(music_tracks);
                    }
                    if (video_tracks.Count > 0)
                    {
                        AddVideo(video_tracks);
                    }
                }
            } catch (Exception exception) {
                Log.Exception(exception);
            }

            Log.Debug("Found all items on the service, took " + (DateTime.Now - begin).ToString());
        }