~ubuntu-branches/ubuntu/quantal/banshee/quantal

« back to all changes in this revision

Viewing changes to src/Extensions/Banshee.UPnPClient/Banshee.UPnPClient/UPnPMusicSource.cs

  • Committer: Package Import Robot
  • Author(s): Chow Loong Jin
  • Date: 2012-02-18 22:17:24 UTC
  • mfrom: (6.3.23 experimental)
  • Revision ID: package-import@ubuntu.com-20120218221724-cnwdvn490wjjue8t
Tags: 2.3.5-1ubuntu1
* Merge from Debian Experimental, remaining changes:
  + Enable and recommend SoundMenu and Disable NotificationArea by default
  + Disable boo and karma extensions
  + Move desktop file for Meego UI to /usr/share/une/applications
  + Change the url for the Amazon store redirector

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
2
// UPnPClientSource.cs
 
3
//
 
4
// Authors:
 
5
//   Tobias 'topfs2' Arrskog <tobias.arrskog@gmail.com>
 
6
//
 
7
// Copyright (C) 2011 Tobias 'topfs2' Arrskog
 
8
//
 
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:
 
16
//
 
17
// The above copyright notice and this permission notice shall be
 
18
// included in all copies or substantial portions of the Software.
 
19
//
 
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.
 
27
//
 
28
 
 
29
using System;
 
30
using System.Collections.Generic;
 
31
 
 
32
using Mono.Unix;
 
33
using Mono.Addins;
 
34
 
 
35
using Mono.Upnp;
 
36
using Mono.Upnp.Dcp.MediaServer1.ContentDirectory1;
 
37
using Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.AV;
 
38
 
 
39
using Hyena.Collections;
 
40
 
 
41
using Banshee.Base;
 
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;
 
49
 
 
50
namespace Banshee.UPnPClient
 
51
{
 
52
    public class UPnPMusicSource : PrimarySource
 
53
    {
 
54
        const int sort_order = 190;
 
55
        private Dictionary<string, UPnPTrackInfo> music_tracks;
 
56
 
 
57
        public UPnPMusicSource (string udn) : base (Catalog.GetString ("Music"), Catalog.GetString ("Music"), udn + "-music", sort_order)
 
58
        {
 
59
            Properties.SetStringList ("Icon.Name", "audio-x-generic", "source-library");
 
60
            Properties.Set<string> ("SearchEntryDescription", Catalog.GetString ("Search your music"));
 
61
 
 
62
            music_tracks = new Dictionary<string, UPnPTrackInfo> ();
 
63
 
 
64
            // Remove tracks previously associated with this source
 
65
            // we do this to be sure they are non-existant before we refresh.
 
66
            PurgeTracks ();
 
67
            AfterInitialized ();
 
68
            OnTracksRemoved ();
 
69
        }
 
70
 
 
71
        ~UPnPMusicSource ()
 
72
        {
 
73
            Dispose ();
 
74
        }
 
75
 
 
76
        public override void Dispose ()
 
77
        {
 
78
            Disconnect ();
 
79
            base.Dispose ();
 
80
        }
 
81
 
 
82
        public void Disconnect ()
 
83
        {
 
84
            // Stop currently playing track if its from us.
 
85
            try {
 
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 ();
 
90
                    }
 
91
                }
 
92
            } catch {}
 
93
 
 
94
            // Remove tracks associated with this source, we will refetch them on next connect
 
95
            PurgeTracks ();
 
96
        }
 
97
 
 
98
        public override bool CanDeleteTracks {
 
99
            get { return false; }
 
100
        }
 
101
 
 
102
        public void AddTracks (List<MusicTrack> tracks)
 
103
        {
 
104
            foreach (var track in tracks) {
 
105
                if (music_tracks.ContainsKey(track.Id)) {
 
106
                    continue;
 
107
                }
 
108
 
 
109
                UPnPTrackInfo track_info = new UPnPTrackInfo (track, this);
 
110
                track_info.Save (false);
 
111
            }
 
112
 
 
113
            OnTracksAdded ();
 
114
        }
 
115
    }
 
116
}