Fixing a bug in MusicPlayer.
[smartthings-infrastructure.git] / MusicPlayer / MusicPlayer.groovy
index 675f47a6a8faeb4855f800731e5a401f9b2c5cc0..8d1a95d67809030b76c11fd56dcf0230a6050cef 100644 (file)
@@ -13,8 +13,10 @@ public class MusicPlayer {
        private int trackNumber
        private String trackData
        private String trackDescription
+       def sendEvent
        
-       MusicPlayer(String id, String label, String displayName, int level, String mute, String status, int trackNumber, String trackData, String trackDescription) {
+       MusicPlayer(Closure sendEvent, String id, String label, String displayName, int level, String mute, String status, int trackNumber, String trackData, String trackDescription) {
+               this.sendEvent = sendEvent
                this.id = id
                this.label = label
                this.displayName = displayName
@@ -51,7 +53,9 @@ public class MusicPlayer {
                if (mute != "muted") {
                        println("the music player with id:$id is muted!")
                        this.mute = "muted"
-                       sendEvent([name: "mute", value: "mute", deviceId: this.id, descriptionText: "",
+                       sendEvent([name: "mute", value: "muted", deviceId: this.id, descriptionText: "",
+                                  displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "mute.muted", value: "muted", deviceId: this.id, descriptionText: "",
                                   displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
                }
        }
@@ -63,6 +67,8 @@ public class MusicPlayer {
                        this.status = "playing"
                        sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
                                   displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "status.playing", value: "playing", deviceId: this.id, descriptionText: "",
+                                  displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
                }
                sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
                           displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
@@ -75,6 +81,8 @@ public class MusicPlayer {
                        this.status = "paused"
                        sendEvent([name: "status", value: "paused", deviceId: this.id, descriptionText: "",
                                   displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "status.paused", value: "paused", deviceId: this.id, descriptionText: "",
+                                  displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
                }
        }
        def play() {
@@ -83,6 +91,8 @@ public class MusicPlayer {
                        this.status = "playing"
                        sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
                                   displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "status.playing", value: "playing", deviceId: this.id, descriptionText: "",
+                                  displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
                }
        }
        def playTrack(String trackToPlay) {
@@ -92,6 +102,8 @@ public class MusicPlayer {
                        this.status = "playing"
                        sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
                                   displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "status.playing", value: "playing", deviceId: this.id, descriptionText: "",
+                                  displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
                }
                sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
                           displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
@@ -107,6 +119,8 @@ public class MusicPlayer {
                        this.status = "playing"
                        sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
                                   displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "status.playing", value: "playing", deviceId: this.id, descriptionText: "",
+                                  displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
                }
                sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
                           displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
@@ -123,6 +137,8 @@ public class MusicPlayer {
                        this.status = "playing"
                        sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
                                   displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "status.playing", value: "playing", deviceId: this.id, descriptionText: "",
+                                  displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
                }
        }
        def setLevel(int level) {
@@ -140,6 +156,8 @@ public class MusicPlayer {
                        this.status = "playing"
                        sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
                                   displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "status.playing", value: "playing", deviceId: this.id, descriptionText: "",
+                                  displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
                }
                sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: this.id, descriptionText: "",
                           displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
@@ -152,6 +170,18 @@ public class MusicPlayer {
                        this.status = "stopped"
                        sendEvent([name: "status", value: "stopped", deviceId: this.id, descriptionText: "",
                                   displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "status.stopped", value: "stopped", deviceId: this.id, descriptionText: "",
+                                  displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+               }
+       }
+       def playText(String text) {
+               println("the music player with id:$id is playing the text:$text!")
+               if (status != "playing") {
+                       this.status = "playing"
+                       sendEvent([name: "status", value: "playing", deviceId: this.id, descriptionText: "",
+                                 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "status.playing", value: "playing", deviceId: this.id, descriptionText: "",
+                                 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
                }
        }
 
@@ -160,4 +190,10 @@ public class MusicPlayer {
                        return status
                }
        }
+
+       def latestValue(String deviceFeature) {
+               if (deviceFeature == "musicPlayer") {
+                       return status
+               }
+       }
 }