]> git.basschouten.com Git - openhab-addons.git/blob
a25390ab298d914b6b45362026d8719f3643a9cf
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.squeezebox.internal.handler;
14
15 import java.util.List;
16 import java.util.concurrent.atomic.AtomicBoolean;
17 import java.util.concurrent.atomic.AtomicInteger;
18
19 import org.openhab.binding.squeezebox.internal.model.Favorite;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 /**
24  * This {@link SqueezeBoxNotificationListener}- is a type of PlayerEventListener
25  * that's used to monitor certain events related to the notification functionality.
26  *
27  * @author Mark Hilbush - Initial contribution
28  * @author Mark Hilbush - Added event to update favorites list
29  */
30 public final class SqueezeBoxNotificationListener implements SqueezeBoxPlayerEventListener {
31     private final Logger logger = LoggerFactory.getLogger(SqueezeBoxNotificationListener.class);
32
33     private final String playerMAC;
34
35     // Used to monitor when the player stops
36     private final AtomicBoolean started = new AtomicBoolean(false);
37     private final AtomicBoolean stopped = new AtomicBoolean(false);
38
39     // Used to monitor when the player pauses
40     private final AtomicBoolean paused = new AtomicBoolean(false);
41
42     // Used to monitor for updates to the playlist
43     private final AtomicBoolean playlistUpdated = new AtomicBoolean(false);
44
45     // Used to monitor when the player volume changes to a specific target value
46     private final AtomicInteger volume = new AtomicInteger(-1);
47
48     SqueezeBoxNotificationListener(String playerMAC) {
49         this.playerMAC = playerMAC;
50     }
51
52     // Stopped
53     public void resetStopped() {
54         this.started.set(false);
55         this.stopped.set(false);
56     }
57
58     public boolean isStopped() {
59         return this.stopped.get();
60     }
61
62     // Paused
63     public void resetPaused() {
64         this.paused.set(false);
65     }
66
67     public boolean isPaused() {
68         return this.paused.get();
69     }
70
71     // Playlist updated
72     public void resetPlaylistUpdated() {
73         this.playlistUpdated.set(false);
74     }
75
76     public boolean isPlaylistUpdated() {
77         return this.playlistUpdated.get();
78     }
79
80     // Volume updated
81     public void resetVolumeUpdated() {
82         this.volume.set(-1);
83     }
84
85     public boolean isVolumeUpdated(int volume) {
86         return this.volume.get() == volume;
87     }
88
89     // Implementation of listener interfaces
90     @Override
91     public void playerAdded(SqueezeBoxPlayer player) {
92     }
93
94     @Override
95     public void powerChangeEvent(String mac, boolean power) {
96     }
97
98     /*
99      * Monitor for player mode changing to stop.
100      */
101     @Override
102     public void modeChangeEvent(String mac, String mode) {
103         if (!this.playerMAC.equals(mac)) {
104             return;
105         }
106         logger.trace("Mode is {} for player {}", mode, mac);
107
108         if ("play".equals(mode)) {
109             this.started.set(true);
110         } else if (this.started.get() && "stop".equals(mode)) {
111             this.stopped.set(true);
112         }
113         if ("pause".equals(mode)) {
114             this.paused.set(true);
115         }
116     }
117
118     /*
119      * Monitor for when the volume is updated to a specific target value
120      */
121     @Override
122     public void absoluteVolumeChangeEvent(String mac, int volume) {
123         if (!this.playerMAC.equals(mac)) {
124             return;
125         }
126         this.volume.set(volume);
127         logger.trace("Volume is {} for player {}", volume, mac);
128     }
129
130     @Override
131     public void relativeVolumeChangeEvent(String mac, int volumeChange) {
132         if (!this.playerMAC.equals(mac)) {
133             return;
134         }
135
136         int newVolume = this.volume.get() + volumeChange;
137         newVolume = Math.min(newVolume, 100);
138         newVolume = Math.max(newVolume, 0);
139
140         this.volume.set(newVolume);
141         logger.trace("Volume changed [{}] for player {}. New volume: {}", volumeChange, mac, volume);
142     }
143
144     @Override
145     public void muteChangeEvent(String mac, boolean mute) {
146     }
147
148     @Override
149     public void currentPlaylistIndexEvent(String mac, int index) {
150     }
151
152     @Override
153     public void currentPlayingTimeEvent(String mac, int time) {
154     }
155
156     @Override
157     public void durationEvent(String mac, int duration) {
158     }
159
160     /*
161      * Monitor for when the playlist is updated
162      */
163     @Override
164     public void numberPlaylistTracksEvent(String mac, int track) {
165         if (!this.playerMAC.equals(mac)) {
166             return;
167         }
168         logger.trace("Number of playlist tracks is {} for player {}", track, mac);
169         playlistUpdated.set(true);
170     }
171
172     @Override
173     public void currentPlaylistShuffleEvent(String mac, int shuffle) {
174     }
175
176     @Override
177     public void currentPlaylistRepeatEvent(String mac, int repeat) {
178     }
179
180     @Override
181     public void titleChangeEvent(String mac, String title) {
182     }
183
184     @Override
185     public void albumChangeEvent(String mac, String album) {
186     }
187
188     @Override
189     public void artistChangeEvent(String mac, String artist) {
190     }
191
192     @Override
193     public void coverArtChangeEvent(String mac, String coverArtUrl) {
194     }
195
196     @Override
197     public void yearChangeEvent(String mac, String year) {
198     }
199
200     @Override
201     public void genreChangeEvent(String mac, String genre) {
202     }
203
204     @Override
205     public void albumArtistChangeEvent(String mac, String albumArtist) {
206     }
207
208     @Override
209     public void trackArtistChangeEvent(String mac, String trackArtist) {
210     }
211
212     @Override
213     public void bandChangeEvent(String mac, String band) {
214     }
215
216     @Override
217     public void composerChangeEvent(String mac, String composer) {
218     }
219
220     @Override
221     public void conductorChangeEvent(String mac, String conductor) {
222     }
223
224     @Override
225     public void remoteTitleChangeEvent(String mac, String title) {
226     }
227
228     @Override
229     public void irCodeChangeEvent(String mac, String ircode) {
230     }
231
232     @Override
233     public void updateFavoritesListEvent(List<Favorite> favorites) {
234     }
235
236     @Override
237     public void sourceChangeEvent(String mac, String source) {
238     }
239
240     @Override
241     public void buttonsChangeEvent(String mac, String likeCommand, String unlikeCommand) {
242     }
243
244     @Override
245     public void connectedStateChangeEvent(String mac, boolean connected) {
246     }
247 }