Fixing bugs in infrastructure
[smartthings-infrastructure.git] / MusicPlayer / MusicPlayer.groovy
1 //Create a class for music player
2 package MusicPlayer
3 import SmartThing.SmartThing
4
5 public class MusicPlayer extends SmartThing {
6         // id, label, and display name of the device
7         String id
8         String label
9         String displayName
10         // Maps from features to values
11         HashMap<String, String> deviceValuesMap = new HashMap<String, String>()
12         HashMap<String, Integer> deviceIntValuesMap = new HashMap<String, Integer>()
13         // Possible values for eventsSince method
14         List<String> possibleValues = new ArrayList<String>();
15         
16         MusicPlayer(Closure sendEvent, String id, String label, String displayName, Integer currentLevel, 
17                     String currentMute, String currentStatus, String currentTrackData, String currentTrackDescription) {
18                 deviceValueSmartThing = deviceValuesMap
19                 deviceIntValueSmartThing = deviceIntValuesMap
20                 idSmartThing = id
21                 labelSmartThing = label
22                 displayNameSmartThing = displayName
23                 sendEventSmartThings = sendEvent
24                 possibleValuesSmartThings = possibleValues
25
26                 // Initialization
27                 this.id = id
28                 this.label = label
29                 possibleValues.add("on")
30                 possibleValues.add("off")
31
32                 deviceValuesMap.put("status", currentStatus)
33                 deviceValuesMap.put("trackDescription", currentTrackDescription)
34                 deviceValuesMap.put("mute", currentMute)
35                 deviceValuesMap.put("trackData", currentTrackData)
36                 deviceIntValuesMap.put("level", currentLevel)
37         }
38
39         // Methods to set values
40         def on(LinkedHashMap metaData) {
41                 on()
42         }
43
44         def on() {
45                 action("on", "status")
46         }
47
48         def off(LinkedHashMap metaData) {
49                 off()
50         }
51
52         def off() {
53                 action("off", "status")
54         }
55
56         def mute(LinkedHashMap metaData) {
57                 mute()
58         }
59
60         def mute() {
61                 action("muted", "mute")
62         }
63
64         def unmute(LinkedHashMap metaData) {
65                 unmute()
66         }
67
68         def unmute() {
69                 action("unmuted", "mute")
70         }
71
72         def nextTrack(LinkedHashMap metaData) {
73                 nextTrack()
74         }
75
76         def nextTrack() {
77                 play()
78                 musicChangeEvents()
79         }
80
81         def pause(LinkedHashMap metaData) {
82                 pause()
83         }
84
85         def pause() {
86                 action("pause", "status")
87         }
88
89         def play(LinkedHashMap metaData) {
90                 play()
91         }
92
93         def play() {
94                 action("play", "status")
95         }
96
97         def playTrack(LinkedHashMap metaData) {
98                 playTrack()
99         }
100
101         def playTrack(String trackToPlay) {
102                 play()
103                 musicChangeEvents()
104         }
105
106         def previousTrack(LinkedHashMap metaData) {
107                 previousTrack()
108         }
109
110         def previousTrack() {
111                 play()
112                 musicChangeEvents()
113         }
114         
115         def resumeTrack(LinkedHashMap metaData) {
116                 resumeTrack()
117         }
118
119         def resumeTrack(String trackToResume) {
120                 play()
121         }
122
123         def restoreTrack(LinkedHashMap metaData) {
124                 restoreTrack()
125         }
126
127         def restoreTrack(String trackToRestore) {
128                 play()
129                 musicChangeEvents()
130         }
131
132         def setLevel(LinkedHashMap metaData) {
133                 setLevel()
134         }
135
136         def setLevel(int level) {
137                 action(level, "level")
138         }
139
140         def setTrack(LinkedHashMap metaData) {
141                 setTrack()
142         }
143
144         def setTrack(String trackToSet) {
145                 play()
146                 
147         }
148
149         def stop(LinkedHashMap metaData) {
150                 stop()
151         }
152
153         def stop() {
154                 action("stop", "status")
155         }
156
157         def musicChangeEvents() {
158                 setValue([name: "trackDescription", value: "someDescriptions", deviceId: id.toString(), descriptionText: "",
159                            displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
160                 setValue([name: "trackData", value: "someTrack", deviceId: id.toString(), descriptionText: "",
161                            displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
162         }
163 }