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

« back to all changes in this revision

Viewing changes to src/Extensions/Banshee.UPnPClient/Banshee.UPnPClient/UPnPTrackInfo.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
// UPnPTrackInfo.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.Upnp.Dcp.MediaServer1.ContentDirectory1;
 
34
using Mono.Upnp.Dcp.MediaServer1.ContentDirectory1.AV;
 
35
 
 
36
using Hyena;
 
37
 
 
38
using Banshee.Sources;
 
39
using Banshee.Collection;
 
40
using Banshee.Collection.Database;
 
41
 
 
42
namespace Banshee.UPnPClient
 
43
{
 
44
    public class UPnPTrackInfo : DatabaseTrackInfo
 
45
    {
 
46
        static long id = 0;
 
47
 
 
48
        public UPnPTrackInfo (MusicTrack track, UPnPMusicSource source) : this (track as Item, source)
 
49
        {
 
50
            ArtistName = track.Artists.Count > 0 ? track.Artists[0].Name : "";
 
51
            AlbumTitle = track.Albums.Count > 0 ? track.Albums[0] : "";
 
52
            
 
53
            TrackNumber = track.OriginalTrackNumber.GetValueOrDefault ();
 
54
 
 
55
            Genre = track.Genres.Count > 0 ? track.Genres[0] : "";
 
56
        }
 
57
 
 
58
        public UPnPTrackInfo (VideoItem track, UPnPVideoSource source) : this (track as Item, source)
 
59
        {
 
60
            ArtistName = track.Producers.Count > 0 ? track.Producers[0] : "";
 
61
 
 
62
            Genre = track.Genres.Count > 0 ? track.Genres[0] : "";
 
63
        }
 
64
 
 
65
        public UPnPTrackInfo (Item track, PrimarySource source) : base ()
 
66
        {
 
67
            if (track == null) {
 
68
              throw new ArgumentNullException ("track");
 
69
            }
 
70
 
 
71
            if (source == null) {
 
72
              throw new ArgumentNullException ("source");
 
73
            }
 
74
 
 
75
            TrackTitle = track.Title;
 
76
 
 
77
            Resource resource = FindSuitableResource (track.Resources);
 
78
 
 
79
            if (resource != null) {
 
80
                BitRate = (int)resource.BitRate.GetValueOrDefault ();
 
81
                BitsPerSample = (int)resource.BitsPerSample.GetValueOrDefault ();
 
82
                Duration = resource.Duration.GetValueOrDefault ();
 
83
                SampleRate = (int)resource.SampleFrequency.GetValueOrDefault ();
 
84
                FileSize = (int)resource.Size.GetValueOrDefault ();
 
85
 
 
86
                Uri = new SafeUri (resource.Uri);
 
87
            } else {
 
88
                CanPlay = false;
 
89
            }
 
90
 
 
91
            ExternalId = ++id;
 
92
 
 
93
            PrimarySource = source;
 
94
        }
 
95
 
 
96
        private Resource FindSuitableResource (IList<Resource> resources)
 
97
        {
 
98
            foreach (Resource resource in resources) {
 
99
                if (resource.Uri != null && resource.Uri.Scheme == System.Uri.UriSchemeHttp) {
 
100
                    return resource;
 
101
                }
 
102
            }
 
103
 
 
104
            return null;
 
105
        }
 
106
    }
 
107
}