1 //Create a class for music player
3 import Timer.SimulatedTimer
6 public class MusicPlayer {
9 private String displayName
13 private int trackNumber
14 private String trackData
15 private String trackDescription
18 MusicPlayer(Closure sendEvent, String id, String label, String displayName, int level, String mute, String status, int trackNumber, String trackData, String trackDescription) {
19 this.sendEvent = sendEvent
22 this.displayName = displayName
26 this.trackNumber = trackNumber
27 this.trackData = trackData
28 this.trackDescription = trackDescription
32 def setValue(String value, String name) {
33 if ((name == "status") && (value != this.status)) {
35 println("the status of the music player with id:$id is changed to $value!")
36 } else if ((name == "level") && (value != this.level)) {
37 this.level = value.toInteger()
38 println("the level sound of the music player with id:$id is changed to $value!")
39 } else if ((name == "trackDescription") && (value != this.trackDescription)) {
40 this.trackDescription = value
41 println("the trackDescription of the music player with id:$id is changed to $value!")
42 } else if ((name == "trackData") && (value != this.trackData)) {
43 this.trackData = value
44 println("the trackData of the music player with id:$id is changed to $value!")
45 } else if ((name == "mute") && (value != this.mute)) {
47 println("the mute state of the music player with id:$id is changed to $value!")
52 def on(LinkedHashMap metaData) {
57 println("the music player with id:$id is on!")
59 sendEvent([name: "status", value: "on", deviceId: this.id, descriptionText: "",
60 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
63 def off(LinkedHashMap metaData) {
67 if (status != "off") {
68 println("the music player with id:$id is off!")
70 sendEvent([name: "status", value: "off", deviceId: this.id, descriptionText: "",
71 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
74 def mute(LinkedHashMap metaData) {
78 if (mute != "muted") {
79 println("the music player with id:$id is muted!")
81 sendEvent([name: "mute", value: "muted", deviceId: this.id, descriptionText: "",
82 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
85 def nextTrack(LinkedHashMap metaData) {
89 trackNumber = trackNumber+1
90 def trackPlaying = trackData
91 println("the $trackPlaying is selected!")
92 if (status != "play") {
94 sendEvent([name: "status", value: "play", deviceId: this.id, descriptionText: "",
95 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
97 sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
98 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
99 sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
100 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
102 def pause(LinkedHashMap metaData) {
106 if (status != "pause") {
107 println("the music player with id:$id is paused!")
108 this.status = "pause"
109 sendEvent([name: "status", value: "pause", deviceId: this.id, descriptionText: "",
110 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
113 def play(LinkedHashMap metaData) {
117 if (status != "play") {
118 println("the music player with id:$id is starting to play!")
120 sendEvent([name: "status", value: "play", deviceId: this.id, descriptionText: "",
121 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
124 def playTrack(LinkedHashMap metaData) {
127 def playTrack(String trackToPlay) {
128 def trackPlaying = trackData
129 println("the $trackPlaying is selected to play!")
130 if (status != "play") {
132 sendEvent([name: "status", value: "play", deviceId: this.id, descriptionText: "",
133 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
135 sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
136 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
137 sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
138 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
140 def previousTrack(LinkedHashMap metaData) {
143 def previousTrack() {
144 if (trackNumber != 1)
145 trackNumber = trackNumber-1
146 def trackPlaying = trackData
147 println("the $trackPlaying is selected!")
148 if (status != "playing") {
149 this.status = "playing"
150 sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
151 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
153 sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
154 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
155 sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
156 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
158 /*def restoreTrack(String trackToRestore) {
159 musicPlayers*.restoreTrack(trackToRestore)
161 def resumeTrack(LinkedHashMap metaData) {
164 def resumeTrack(String trackToResume) {
165 def trackPlaying = trackData
166 println("the $trackPlaying is resumed!")
167 if (status != "play") {
169 sendEvent([name: "status", value: "play", deviceId: this.id, descriptionText: "",
170 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
173 def setLevel(LinkedHashMap metaData) {
176 def setLevel(int level) {
177 if (level != this.level) {
179 println("the level of sound is changed to $level!")
180 sendEvent([name: "level", value: "$level", deviceId: this.id, descriptionText: "",
181 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
184 def setTrack(LinkedHashMap metaData) {
187 def setTrack(String trackToSet) {
188 def trackPlaying = trackData
189 println("the $trackPlaying is set!")
190 if (status != "play") {
192 sendEvent([name: "status", value: "play", deviceId: this.id, descriptionText: "",
193 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
195 sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
196 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
197 sendEvent([name: "trackData", value: "someTrack", deviceId: this.id, descriptionText: "",
198 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
200 def stop(LinkedHashMap metaData) {
204 if (status != "stop") {
205 println("the music player with id:$id is stop!")
207 sendEvent([name: "status", value: "stop", deviceId: this.id, descriptionText: "",
208 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
211 def playText(LinkedHashMap metaData) {
214 def playText(String text) {
215 println("the music player with id:$id is playing the text:$text!")
216 if (status != "play") {
218 sendEvent([name: "status", value: "play", deviceId: this.id, descriptionText: "",
219 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
223 def currentValue(String deviceFeature) {
224 if (deviceFeature == "playpause") {
229 def latestValue(String deviceFeature) {
230 if (deviceFeature == "playpause") {