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

            return(contentDirectory.GetChildren <T> (Container, settings));
        }
Exemplo n.º 2
0
        void HandleObjectsRowExpanded(object o, RowExpandedArgs args)
        {
            var container = GetContainer(args.Iter);

            if (container == null)
            {
                return;
            }
            var path = args.Path.Copy();

            ThreadPool.QueueUserWorkItem(state => {
                try {
                    var children = content_directry.GetChildren <Object> (container);
                    Application.Invoke((s, a) => {
                        TreeIter iter, loading_iter;
                        store.GetIter(out iter, path);
                        store.IterNthChild(out loading_iter, iter, 0);
                        List <ItemRow> items = null;
                        var position         = -1;
                        foreach (var child in children)
                        {
                            position++;
                            var item = child as Item;
                            if (item != null && item.IsReference)
                            {
                                if (items == null)
                                {
                                    items = new List <ItemRow> ();
                                }
                                items.Add(new ItemRow(item, store.GetPath(store.InsertWithValues(iter, position, loading))));
                                continue;
                            }
                            var child_iter = store.InsertWithValues(iter, position, new ObjectRow(child));
                            var c          = child as Container;
                            if (c != null && c.ChildCount > 0)
                            {
                                store.AppendValues(child_iter, loading);
                            }
                        }
                        store.Remove(ref loading_iter);
                        if (items != null)
                        {
                            Load(items);
                        }
                    });
                } catch (Exception e) {
                    Console.WriteLine(e);
                }
            });
        }
Exemplo n.º 3
0
        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();
                    }
                }
            });
        }
Exemplo n.º 4
0
 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);
     }
 }