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 UPnPMusicSource : PrimarySource
54
const int sort_order = 190;
55
private Dictionary<string, UPnPTrackInfo> music_tracks;
57
public UPnPMusicSource (string udn) : base (Catalog.GetString ("Music"), Catalog.GetString ("Music"), udn + "-music", sort_order)
59
Properties.SetStringList ("Icon.Name", "audio-x-generic", "source-library");
60
Properties.Set<string> ("SearchEntryDescription", Catalog.GetString ("Search your music"));
62
music_tracks = new Dictionary<string, UPnPTrackInfo> ();
64
// Remove tracks previously associated with this source
65
// we do this to be sure they are non-existant before we refresh.
76
public override void Dispose ()
82
public void Disconnect ()
84
// Stop currently playing track if its from us.
86
if (ServiceManager.PlayerEngine.CurrentState == Banshee.MediaEngine.PlayerState.Playing) {
87
DatabaseTrackInfo track = ServiceManager.PlayerEngine.CurrentTrack as DatabaseTrackInfo;
88
if (track != null && track.PrimarySource == this) {
89
ServiceManager.PlayerEngine.Close ();
94
// Remove tracks associated with this source, we will refetch them on next connect
98
public override bool CanDeleteTracks {
102
public void AddTracks (List<MusicTrack> tracks)
104
foreach (var track in tracks) {
105
if (music_tracks.ContainsKey(track.Id)) {
109
UPnPTrackInfo track_info = new UPnPTrackInfo (track, this);
110
track_info.Save (false);