~ubuntu-branches/ubuntu/raring/banshee/raring

« back to all changes in this revision

Viewing changes to src/Extensions/Banshee.UPnPClient/Banshee.UPnPClient/UPnPVideoSource.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 UPnPVideoSource : PrimarySource
 
53
    {
 
54
        const int sort_order = 190;
 
55
        private Dictionary<string, UPnPTrackInfo> video_tracks;
 
56
 
 
57
        public UPnPVideoSource (string udn) : base (Catalog.GetString ("Video"), Catalog.GetString ("Video"), udn + "-video", sort_order)
 
58
        {
 
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 (@"
 
62
                <column-controller>
 
63
                  <add-all-defaults />
 
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"">
 
73
                    <title>{0}</title>
 
74
                    <long-title>{0}</long-title>
 
75
                  </column>
 
76
                </column-controller>
 
77
            ", Catalog.GetString ("Produced By")));
 
78
 
 
79
            video_tracks = new Dictionary<string, UPnPTrackInfo> ();
 
80
 
 
81
            // Remove tracks previously associated with this source
 
82
            // we do this to be sure they are non-existant before we refresh.
 
83
            PurgeTracks ();
 
84
            AfterInitialized ();
 
85
            OnTracksRemoved ();
 
86
        }
 
87
 
 
88
        ~UPnPVideoSource ()
 
89
        {
 
90
            Dispose ();
 
91
        }
 
92
 
 
93
        public override void Dispose ()
 
94
        {
 
95
            Disconnect ();
 
96
            base.Dispose ();
 
97
        }
 
98
 
 
99
        public void Disconnect ()
 
100
        {
 
101
            // Stop currently playing track if its from us.
 
102
            try {
 
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 ();
 
107
                    }
 
108
                }
 
109
            } catch {}
 
110
 
 
111
            // Remove tracks associated with this source, we will refetch them on next connect
 
112
            PurgeTracks ();
 
113
        }
 
114
 
 
115
        public override bool ShowBrowser {
 
116
            get { return false; }
 
117
        }
 
118
 
 
119
        protected override bool HasArtistAlbum {
 
120
            get { return false; }
 
121
        }
 
122
 
 
123
        public override bool CanDeleteTracks {
 
124
            get { return false; }
 
125
        }
 
126
 
 
127
        public void AddTracks (List<VideoItem> tracks)
 
128
        {
 
129
            foreach (var track in tracks) {
 
130
                if (video_tracks.ContainsKey(track.Id)) {
 
131
                    continue;
 
132
                }
 
133
 
 
134
                UPnPTrackInfo track_info = new UPnPTrackInfo (track, this);
 
135
                track_info.Save (false);
 
136
            }
 
137
 
 
138
            OnTracksAdded ();
 
139
        }
 
140
    }
 
141
}