5
// Tobias 'topfs2' Arrskog <tobias.arrskog@gmail.com>
7
// Copyright (C) 2011 Tobias 'topfs2' Arrskog
9
// Permission is hereby granted, free of charge, to any person obtaining
10
// a copy of this software and associated documentation files (the
11
// "Software"), to deal in the Software without restriction, including
12
// without limitation the rights to use, copy, modify, merge, publish,
13
// distribute, sublicense, and/or sell copies of the Software, and to
14
// permit persons to whom the Software is furnished to do so, subject to
15
// the following conditions:
17
// The above copyright notice and this permission notice shall be
18
// included in all copies or substantial portions of the Software.
20
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30
using System.Collections.Generic;
36
using Mono.Upnp.Dcp.MediaServer1.ContentDirectory1;
37
using Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.AV;
39
using Hyena.Collections;
42
using Banshee.Sources;
43
using Banshee.Sources.Gui;
44
using Banshee.Collection.Database;
45
using Banshee.ServiceStack;
46
using Banshee.Preferences;
47
using Banshee.MediaEngine;
48
using Banshee.PlaybackController;
50
namespace Banshee.UPnPClient
52
public class UPnPVideoSource : PrimarySource
54
const int sort_order = 190;
55
private Dictionary<string, UPnPTrackInfo> video_tracks;
57
public UPnPVideoSource (string udn) : base (Catalog.GetString ("Video"), Catalog.GetString ("Video"), udn + "-video", sort_order)
59
Properties.SetStringList ("Icon.Name", "video-x-generic", "video", "source-library");
60
Properties.Set<string> ("SearchEntryDescription", Catalog.GetString ("Search your videos"));
61
Properties.SetString ("TrackView.ColumnControllerXml", String.Format (@"
64
<remove-default column=""DiscColumn"" />
65
<remove-default column=""AlbumColumn"" />
66
<remove-default column=""ComposerColumn"" />
67
<remove-default column=""AlbumArtistColumn"" />
68
<remove-default column=""ConductorColumn"" />
69
<remove-default column=""ComposerColumn"" />
70
<remove-default column=""BpmColumn"" />
71
<sort-column direction=""asc"">track_title</sort-column>
72
<column modify-default=""ArtistColumn"">
74
<long-title>{0}</long-title>
77
", Catalog.GetString ("Produced By")));
79
video_tracks = new Dictionary<string, UPnPTrackInfo> ();
81
// Remove tracks previously associated with this source
82
// we do this to be sure they are non-existant before we refresh.
93
public override void Dispose ()
99
public void Disconnect ()
101
// Stop currently playing track if its from us.
103
if (ServiceManager.PlayerEngine.CurrentState == Banshee.MediaEngine.PlayerState.Playing) {
104
DatabaseTrackInfo track = ServiceManager.PlayerEngine.CurrentTrack as DatabaseTrackInfo;
105
if (track != null && track.PrimarySource == this) {
106
ServiceManager.PlayerEngine.Close ();
111
// Remove tracks associated with this source, we will refetch them on next connect
115
public override bool ShowBrowser {
116
get { return false; }
119
protected override bool HasArtistAlbum {
120
get { return false; }
123
public override bool CanDeleteTracks {
124
get { return false; }
127
public void AddTracks (List<VideoItem> tracks)
129
foreach (var track in tracks) {
130
if (video_tracks.ContainsKey(track.Id)) {
134
UPnPTrackInfo track_info = new UPnPTrackInfo (track, this);
135
track_info.Save (false);