1 package org.musicontroller;
2
3 import java.util.List;
4
5 import org.musicontroller.core.Song;
6 import org.musicontroller.security.IUser;
7 import org.musicontroller.songselection.CandidateSelector;
8 import org.musicontroller.songselection.SongSelector;
9
10 public interface DJ {
11
12 public void setMusiController(MusiController musicontroller);
13 public MusiController getMusiController();
14 public void setSongSelector(SongSelector selector);
15 public SongSelector getSongSelector();
16 public CandidateSelector getCandidateSelector();
17 public void setCandidateSelector(CandidateSelector selector);
18 public void setUser(IUser user);
19 public IUser getUser();
20
21 /**
22 * Requests a song.
23 * @param songid The Id of the Song.
24 */
25 public void requestSong(long songid);
26
27 /**
28 * Unrequests a previously requested Song. The Song will be marked 'skipped'.
29 * @param songid The Id of the Song.
30 */
31 public void unrequestSong(long songid);
32
33 /**
34 * Tells the DJ to skip the currently playing Song.
35 */
36 public void skipSong();
37
38 /**
39 * Tells the DJ to skip the currently playing Song, and start playing a new one.
40 * @param songid The Id of the new Song to be played.
41 */
42 public void playSong(long songid);
43
44 /**
45 * @return True, if skipSong was called, False otherwise.
46 */
47 public boolean mustSkip();
48
49 /**
50 * Call this when the currently playing Song has indeed be skipped.
51 * A skipped-event will be added to the Song.
52 */
53 public void confirmSkip();
54
55 /**
56 * Call this when the currently playing Song has been played completely.
57 * A played-event will be added to the Song.
58 */
59 public void confirmPlay();
60
61 /**
62 * Sets the state of the DJ.
63 * @param playing Use True, if the DJ is playing or False otherwise.
64 */
65 public void setPlaying(boolean playing);
66
67 public List<Long> getRequests();
68
69 /**
70 * Lets the DJ choose a new Song to play, using the SongSelector to select
71 * a song from the candidates generated by the CandidateSelector
72 * @return A new Song
73 */
74 public Song choose();
75
76 /**
77 * Takes a look into the future, and tells which Songs will be played next.
78 * This information is valid until new requests/unrequests are made.
79 *
80 * Requests will always be in the resultset, followed by 'count' predicted
81 * songs.
82 * @param count The amount of Songs to predict (maxed at 15).
83 * @return A List of Song-ids that will be played next.
84 */
85 public List<Long> peek(int count);
86
87 /**
88 * @return The Song that is currently playing, or null is the DJ is not playing
89 * any Song.
90 */
91 public Song getCurrentSong();
92
93 /**
94 * To be used by the StreamService, to provide feedback to the DJ about
95 * the amount of milliseconds that have been played of the current ssong.
96 * @param millis The amount of milliseconds the current song has been played.
97 */
98 public void setPlayingTime(int millis);
99
100 /**
101 * @return The amount of milliseconds the current song has been played.
102 */
103 public int getPlayingTime();
104 }