public ContentDirectoryInfo(RemoteContentDirectory contentDirectory) { if (contentDirectory == null) { throw new ArgumentNullException("contentDirectory"); } this.content_directry = contentDirectory; this.store = new TreeStore(typeof(ObjectRow)); var objects = new TreeView(); var column = new TreeViewColumn(); var cell = new CellRendererText(); column.PackStart(cell, true); column.SetCellDataFunc(cell, RenderObject); column.Title = "Objects"; objects.AppendColumn(column); objects.Selection.Changed += HandleObjectsSelectionChanged; objects.RowExpanded += HandleObjectsRowExpanded; objects.Model = store; var root = contentDirectory.GetRootObject(); store.AppendValues(new ObjectRow(root)); TreeIter iter; store.GetIterFirst(out iter); store.AppendValues(iter, loading); Add(objects); }
public ContentDirectoryInfo (RemoteContentDirectory contentDirectory) { if (contentDirectory == null) { throw new ArgumentNullException ("contentDirectory"); } this.content_directry = contentDirectory; this.store = new TreeStore (typeof (ObjectRow)); var objects = new TreeView (); var column = new TreeViewColumn (); var cell = new CellRendererText (); column.PackStart (cell, true); column.SetCellDataFunc (cell, RenderObject); column.Title = "Objects"; objects.AppendColumn (column); objects.Selection.Changed += HandleObjectsSelectionChanged; objects.RowExpanded += HandleObjectsRowExpanded; objects.Model = store; var root = contentDirectory.GetRootObject (); store.AppendValues (new ObjectRow (root)); TreeIter iter; store.GetIterFirst (out iter); store.AppendValues (iter, loading); Add (objects); }
public Gtk.Widget ProvideInfo(ServiceAnnouncement service) { var controller = service.GetService().GetController(); var content_directory = new RemoteContentDirectory(new ContentDirectoryController(controller)); return(new ContentDirectoryInfo(content_directory)); }
protected override Results <T> GetMoreResults(RemoteContentDirectory contentDirectory, ResultsSettings settings) { if (contentDirectory == null) { throw new ArgumentNullException("contentDirectory"); } return(contentDirectory.Search <T> (Container, Query, settings)); }
void ParseContainer(RemoteContentDirectory remote_dir, Container container, int depth, List <MusicTrack> music_tracks, List <VideoItem> video_tracks) { if (depth > 10 || (container.ChildCount != null && container.ChildCount == 0)) { return; } HandleResults <Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.Object> ( remote_dir.GetChildren <Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.Object> (container), remote_dir, chunk => { foreach (var upnp_object in chunk) { if (upnp_object is Item) { Item item = upnp_object as Item; if (item.IsReference || item.Resources.Count == 0) { continue; } if (item is MusicTrack) { music_tracks.Add(item as MusicTrack); } else if (item is VideoItem) { video_tracks.Add(item as VideoItem); } } else if (upnp_object is Container) { ParseContainer(remote_dir, upnp_object as Container, depth + 1, music_tracks, video_tracks); } if (music_tracks.Count > 500) { AddMusic(music_tracks); music_tracks.Clear(); } if (video_tracks.Count > 100) { AddVideo(video_tracks); video_tracks.Clear(); } } }); }
void HandleResults <T> (Results <T> results, RemoteContentDirectory remote_dir, ChunkHandler <T> chunkHandler) { bool has_results = results.Count > 0; while (has_results) { chunkHandler(results); has_results = results.HasMoreResults; if (has_results) { results = results.GetMoreResults(remote_dir); } } }
void TraverseContainer(RemoteContentDirectory remote_dir, Container container, string[] hierarchy, int position, List <MusicTrack> music_tracks, List <VideoItem> video_tracks) { if (hierarchy != null && hierarchy.Length > position) { HandleResults <Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.Object> ( remote_dir.GetChildren <Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.Object> (container), remote_dir, chunk => { foreach (var upnp_object in chunk) { if (upnp_object is Container && upnp_object.Title == hierarchy[position]) { TraverseContainer(remote_dir, upnp_object as Container, hierarchy, position + 1, music_tracks, video_tracks); } } }); } else { ParseContainer(remote_dir, container, 0, music_tracks, video_tracks); } }
public Gtk.Widget ProvideInfo (ServiceAnnouncement service) { var controller = service.GetService ().GetController (); var content_directory = new RemoteContentDirectory (new ContentDirectoryController (controller)); return new ContentDirectoryInfo (content_directory); }
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()); }