View Javadoc

1   package org.rpi.providers;
2   
3   import java.util.Observable;
4   import java.util.Observer;
5   
6   import org.apache.log4j.Logger;
7   import org.openhome.net.device.DvDevice;
8   import org.openhome.net.device.IDvInvocation;
9   import org.openhome.net.device.providers.DvProviderAvOpenhomeOrgInfo1;
10  import org.rpi.mplayer.TrackInfo;
11  import org.rpi.player.PlayManager;
12  import org.rpi.player.events.EventBase;
13  import org.rpi.player.events.EventTrackChanged;
14  import org.rpi.player.events.EventUpdateTrackInfo;
15  import org.rpi.player.events.EventUpdateTrackMetaText;
16  import org.rpi.playlist.CustomTrack;
17  import org.rpi.utils.Utils;
18  
19  public class PrvInfo extends DvProviderAvOpenhomeOrgInfo1 implements Observer {
20  
21  	private Logger log = Logger.getLogger(PrvInfo.class);
22  	
23  	private int meta_text_id = -99;
24  
25  	public PrvInfo(DvDevice iDevice) {
26  		super(iDevice);
27  		log.debug("Creating Info");
28  
29  		enablePropertyTrackCount();
30  		enablePropertyDetailsCount();
31  		enablePropertyMetatextCount();
32  		enablePropertyUri();
33  		enablePropertyMetadata();
34  		enablePropertyDuration();
35  		enablePropertyBitRate();
36  		enablePropertyBitDepth();
37  		enablePropertySampleRate();
38  		enablePropertyLossless();
39  		enablePropertyCodecName();
40  		enablePropertyMetatext();
41  
42  		setPropertyTrackCount(0);
43  		setPropertyDetailsCount(0);
44  		setPropertyMetatextCount(0);
45  		setPropertyUri("");
46  		setPropertyMetadata("");
47  		setPropertyDuration(0);
48  		setPropertyBitRate(0);
49  		setPropertyBitDepth(0);
50  		setPropertySampleRate(0);
51  		setPropertyLossless(false);
52  		setPropertyCodecName("");
53  		setPropertyMetatext("");
54  
55  		enableActionCounters();
56  		enableActionTrack();
57  		enableActionDetails();
58  		enableActionMetatext();
59  		PlayManager.getInstance().observInfoEvents(this);
60  	}
61  
62  	/***
63  	 * Used to Set the Track
64  	 * 
65  	 * @param track
66  	 */
67  	private void setTrack(CustomTrack track) {
68  		try {
69  			if(track ==null)
70  				return;
71  			long trackCount = getPropertyTrackCount();
72  			trackCount++;
73  			propertiesLock();
74  			setPropertyTrackCount(trackCount);
75  			setPropertyUri(track.getUri());
76  			String metaData = track.getMetadata();
77  			//<DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><item id="d55942-co887" parentID="co887" restricted="0"><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/">Rendez-Vu</dc:title><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Basement Jaxx</dc:creator><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">1999-01-01</dc:date><upnp:artist role="AlbumArtist" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">Basement Jaxx</upnp:artist><upnp:artist role="Composer" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">Felix Buxton</upnp:artist><upnp:artist role="Composer" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">Simon Ratcliffe</upnp:artist><upnp:artist role="Performer" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">Basement Jaxx</upnp:artist><upnp:album xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">Remedy</upnp:album><upnp:genre xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">Electronica</upnp:genre><upnp:albumArtURI dlna:profileID="JPEG_TN" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">http://192.168.1.205:26125/aa/29203/1957278084/cover.jpg?size=0</upnp:albumArtURI><upnp:originalTrackNumber xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">1</upnp:originalTrackNumber><res duration="0:05:44.000" size="5593088" bitrate="16213" bitsPerSample="16" sampleFrequency="44100" nrAudioChannels="2" protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01">http://192.168.1.205:26125/content/c2/b16/f44100/d55942-co887.mp3</res><res duration="0:05:44.000" size="60850988" bitrate="176400" bitsPerSample="16" sampleFrequency="44100" nrAudioChannels="2" protocolInfo="http-get:*:audio/wav:DLNA.ORG_PN=WAV;DLNA.ORG_OP=01">http://192.168.1.205:26125/content/c2/b16/f44100/d55942-co887.forced.wav</res><res duration="0:05:44.000" size="60850944" bitrate="176400" bitsPerSample="16" sampleFrequency="44100" nrAudioChannels="2" protocolInfo="http-get:*:audio/L16:DLNA.ORG_PN=LPCM;DLNA.ORG_OP=01;DLNA.ORG_CI=1">http://192.168.1.205:26125/content/c2/b16/f44100/d55942-co887.forced.l16</res><res duration="0:05:44.000" size="5593088" bitrate="16213" bitsPerSample="16" sampleFrequency="44100" nrAudioChannels="2" protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01">http://192.168.1.205:26125/content/c2/b16/f44100/d55942-co887.mp3</res><upnp:class xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/">object.item.audioItem.musicTrack</upnp:class></item></DIDL-Lite>
78  			//String metaData = "<DIDL-Lite xmlns='urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/'><item id='d73430-co1811' parentID='co1811' restricted='0'><dc:title xmlns:dc='http://purl.org/dc/elements/1.1/'> dctitle</dc:title><dc:creator xmlns:dc='http://purl.org/dc/elements/1.1/'>dc creator</dc:creator><dc:date xmlns:dc='http://purl.org/dc/elements/1.1/'>1998-01-01</dc:date><upnp:artist role='AlbumArtist' xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>AlbumArtest</upnp:artist><upnp:artist role='Composer' xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>Ian Curtis</upnp:artist><upnp:artist role='Composer' xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>Peter Hook</upnp:artist><upnp:artist role='Composer' xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>Stephen Morris</upnp:artist><upnp:artist role='Composer' xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>Bernard Sumner</upnp:artist><upnp:artist role='Performer' xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>Performer</upnp:artist><upnp:album xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>Album</upnp:album><upnp:genre xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>Pop/Rock</upnp:genre><upnp:albumArtURI dlna:profileID='JPEG_TN' xmlns:dlna='urn:schemas-dlna-org:metadata-1-0/' xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>http://192.168.1.205:26125/aa/157341/656268630/cover.jpg?size=0</upnp:albumArtURI><upnp:originalTrackNumber xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>1</upnp:originalTrackNumber><upnp:originalDiscNumber xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>1</upnp:originalDiscNumber><upnp:originalDiscCount xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>4</upnp:originalDiscCount><res duration='0:02:52.000' size='30430100' bitrate='176400' bitsPerSample='16' sampleFrequency='44100' nrAudioChannels='2' protocolInfo='http-get:*:audio/wav:DLNA.ORG_PN=WAV;DLNA.ORG_OP=01'>http://192.168.1.205:26125/content/c2/b16/f44100/d73430-co1811.forced.wav</res><upnp:class xmlns:upnp='urn:schemas-upnp-org:metadata-1-0/upnp/'>object.item.audioItem.musicTrack</upnp:class></item></DIDL-Lite>";
79  			setPropertyMetadata(metaData);
80  			setPropertyDetailsCount(0);	
81  			setPropertyMetatext(track.getMetaText());
82  //			if(!track.getMetaText().equalsIgnoreCase(""))
83  //			{
84  //				long meta_text_count = getPropertyMetatextCount();
85  //				meta_text_count++;
86  //				setPropertyMetatextCount(meta_text_count);
87  //				setPropertyMetatext(track.getMetaText());
88  //			}
89  			propertiesUnlock();
90  		} catch (Exception e) {
91  			log.error("Error: setTrack", e);
92  		}
93  	}
94  
95  	public void setDetails(long duration, long bitRate, long bitDepth, long sampleRate, boolean lossLess, String codecName) {
96  		try {
97  			long detailsCount = getPropertyDetailsCount();
98  			detailsCount++;
99  			propertiesLock();
100 			setPropertyDetailsCount(detailsCount);
101 			setPropertyDuration(duration);
102 			setPropertyBitRate(bitRate * 1000);
103 			setPropertyBitDepth(bitDepth);
104 			setPropertySampleRate(sampleRate);
105 			setPropertyLossless(lossLess);
106 			setPropertyCodecName(codecName);
107 			propertiesUnlock();
108 		} catch (Exception e) {
109 			log.error("Error: setDetails", e);
110 		}
111 	}
112 
113 	/***
114 	 * Used to Set the MetaText
115 	 * 
116 	 * @param meta_text
117 	 */
118 	public void setMetaText(String meta_text) {
119 		try {
120 			if (null != meta_text) {
121 				long meta_text_count = getPropertyMetatextCount();
122 				meta_text_count++;
123 				propertiesLock();
124 				setPropertyMetatextCount(meta_text_count);
125 				setPropertyMetatext(meta_text);
126 				propertiesUnlock();
127 			}
128 		} catch (Exception e) {
129 			log.error("Error SetMetaText: ", e);
130 		}
131 	}
132 
133 	@Override
134 	protected Counters counters(IDvInvocation paramIDvInvocation) {
135 		log.debug("Counters" + Utils.getLogText(paramIDvInvocation));
136 		long trackCount = getPropertyTrackCount();
137 		long detailsCount = getPropertyDetailsCount();
138 		long metaextCount = getPropertyMetatextCount();
139 		Counters counters = new Counters(trackCount, detailsCount, metaextCount);
140 		//log.debug("Return counters: " + counters.toString());
141 		return counters;
142 	}
143 
144 	@Override
145 	protected Track track(IDvInvocation paramIDvInvocation) {
146 		log.debug("track " + Utils.getLogText(paramIDvInvocation));
147 		String uri = getPropertyUri();
148 		String meta_data = getPropertyMetadata();
149 		Track track = new Track(uri, meta_data);
150 		log.debug("Return Track: " + track.toString());
151 		return track;
152 	}
153 
154 	@Override
155 	protected Details details(IDvInvocation paramIDvInvocation) {
156 		log.debug("details " + Utils.getLogText(paramIDvInvocation));
157 		long duration = getPropertyDuration();
158 		long bitRate = getPropertyBitRate();
159 		long bitDepth = getPropertyBitDepth();
160 		long sampleRate = getPropertySampleRate();
161 		boolean lossless = getPropertyLossless();
162 		String codecName = getPropertyCodecName();
163 		Details details = new Details(duration, bitRate, bitDepth, sampleRate, lossless, codecName);
164 		log.debug("Return Details: " + details.toString());
165 		return details;
166 	}
167 
168 	@Override
169 	protected String metatext(IDvInvocation paramIDvInvocation) {
170 		log.debug("metatext " + Utils.getLogText(paramIDvInvocation));
171 		String metaExt = getPropertyMetatext();
172 		log.debug("Return metatext: " + metaExt);
173 		return metaExt;
174 	}
175 
176 	@Override
177 	public void update(Observable paramObservable, Object obj) {
178 		EventBase e = (EventBase)obj;
179 		switch(e.getType())
180 		{
181 		case EVENTUPDATETRACKINFO:
182 			EventUpdateTrackInfo euti = (EventUpdateTrackInfo)e;
183 			TrackInfo i = (TrackInfo) euti.getTrackInfo();
184 			setDetails(i.getDuration(), i.getBitrate(), i.getBitDepth(), i.getSampleRate(), false, i.getCodec());
185 			break;	
186 
187 		case EVENTUPDATETRACKMETATEXT:
188 			EventUpdateTrackMetaText etm = (EventUpdateTrackMetaText)e;
189 			setMetaText(etm.getMetaText());
190 			break;
191 		case EVENTTRACKCHANGED:
192 			EventTrackChanged etc = (EventTrackChanged)e;
193 			setTrack(etc.getTrack());
194 			break;
195 		}
196 		
197 	}
198 
199 }