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
64
65
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
78
79 setPropertyMetadata(metaData);
80 setPropertyDetailsCount(0);
81 setPropertyMetatext(track.getMetaText());
82
83
84
85
86
87
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
115
116
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
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 }