public Finder(UPnPDevice device, Gallery presenter) { Controller = new ContentDirectoryController(this); Model = MediaServerModel.GetInstance(); Device = device; Presenter = presenter; }
public UPnPServerSource(Device device) : base(Catalog.GetString("UPnP Share"), device.FriendlyName, 300) { Properties.SetStringList("Icon.Name", "computer", "network-server"); TypeUniqueId = "upnp-container"; expanded_schema = new SchemaEntry <bool> ("plugins.upnp." + device.Udn, "expanded", true, "UPnP Share expanded", "UPnP Share expanded"); udn = device.Udn; ContentDirectoryController content_directory = null; foreach (Service service in device.Services) { Log.Debug("UPnPService \"" + device.FriendlyName + "\" Implements " + service.Type); if (service.Type.Type == "ContentDirectory") { content_directory = new ContentDirectoryController(service.GetController()); } } if (content_directory == null) { throw new ArgumentNullException("content_directory"); } ThreadAssist.Spawn(delegate { Parse(device, content_directory); }); }
private void InitializeMediaReceiver(UPnPDevice device = null, string userAgent = null) { if (!Helper.InDesignerMode) { var appInfo = new AppInfo(Assembly.GetEntryAssembly()); if (Utility.IsStringEmpty(userAgent)) { HTTPMessage.DefaultUserAgent = string.Format("{0} {1}.{2}", appInfo.Title, appInfo.Version.Major, appInfo.Version.Minor); } else { HTTPMessage.DefaultUserAgent = userAgent; } } AutoChooseFirstDevice = true; var actions = MediaServerModel.CreateDefaultActionsInstance(); actions.ItemFactory = new UPnPItemFactory(); MediaServerModel.Start(actions); Model = MediaServerModel.GetInstance(); Controller = new ContentDirectoryController(this, false, device); Controller.ItemActivated += OnItemActivated; Controller.ClearView += OnClearView; Controller.AddItemToView += OnAddItemToView; Controller.AddContainerToView += OnAddContainerToView; Controller.OpenDeviceView += OpenDeviceView; Controller.OpenContainerView += OnOpenContainerView; Controller.OpenAVItemView += OnOpenAvItemView; Controller.ParseBegin += OnParseBegin; Controller.ParseEnd += OnParseEnd; Controller.ParseCancelled += OnParseCancelled; Controller.BrowseResultsReceived += OnBrowseResultsReceived; Model.Actions.ContentDirectory.NewDeviceFound += OnNewDeviceFound; if (Model.Actions.Download != null) { Model.Actions.Download.DownloadCompleted += OnDownloadCompleted; Model.Actions.Download.ProgressChanged += OnDownloadProgressChanged; } ImageWidth = Constants.DEFAULT_GALLERY_ITEM_WIDTH; ImageHeight = Constants.DEFAULT_GALLERY_ITEM_HEIGHT; TitlesExcludedFromImageReplacement = string.Empty; PageManager = new UPnPPageManager(this); Devices = new ObservableCollection<UPnPDevice>(); if (device != null) { Devices.Add(device); Device = device; } AllDevices = new ObservableCollection<UPnPDevice>(); WaitForItemEvent = new ManualResetEvent(false); }
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()); }