-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathThreadRequest.cpp
More file actions
123 lines (75 loc) · 2.21 KB
/
ThreadRequest.cpp
File metadata and controls
123 lines (75 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "ThreadRequest.h"
#include "GameAPI.h"
#include "Globals.h"
#include "MusicState.h"
#include "MusicTimes.h"
#include "MusicPlayer.h"
ThreadRequest threadRequest;
HANDLE hThreadMutex = CreateMutex (nullptr, FALSE, nullptr); //Lock when using the object threadState.
bool ThreadRequest::hasRequestedNextTrack () {
if (nextTrack) {
nextTrack = false;
return true;
}
return false;
}
bool ThreadRequest::hasRequestedCustomTrack () const {
return !customTrackPath.empty ();
}
bool ThreadRequest::hasRequestedHoldMusicPlayer () const {
return holdMusicPlayer;
}
void ThreadRequest::clearRequestNextTrack () {
nextTrack = false;
}
set<PendingPlaylist>& ThreadRequest::getPendingPlaylists () {
return pendingPlaylists;
}
string ThreadRequest::getCustomTrack () {
return customTrackPath;
}
void ThreadRequest::clearCustomTrack () {
customTrackPath.clear ();
}
void ThreadRequest::requestPlayCustomTrack (const string &trackPath) {
WaitForSingleObject (hThreadMutex, INFINITE);
nextTrack = false;
customTrackPath = trackPath;
ReleaseMutex (hThreadMutex);
}
void ThreadRequest::requestSetPlaylist (ActivePlaylist *aplToSwap, Playlist *playlist, bool afterThisTrack, float delay) {
WaitForSingleObject (hMusicTimesMutex, INFINITE);
int fadeOut = musicTimes.getFadeOut ();
int fadeIn = musicTimes.getFadeIn ();
ReleaseMutex (hMusicTimesMutex);
WaitForSingleObject (hThreadMutex, INFINITE);
if (afterThisTrack || delay > 0) {
pendingPlaylists.emplace (aplToSwap, playlist, afterThisTrack, delay, fadeOut, fadeIn);
} else {
aplToSwap->playlist = playlist;
if (selectedActivePlaylist == aplToSwap) {
setPlaylistFadeOut = fadeOut;
setPlaylistFadeIn = fadeIn;
nextTrack = true;
}
}
ReleaseMutex (hThreadMutex);
}
bool ThreadRequest::requestHoldMusicPlayer (bool hold) {
bool changed = false;
WaitForSingleObject (hThreadMutex, INFINITE);
if (holdMusicPlayer != hold) {
holdMusicPlayer = hold;
changed = true;
}
ReleaseMutex (hThreadMutex);
return changed;
}
void ThreadRequest::requestNextTrack (bool noHold) {
WaitForSingleObject (hThreadMutex, INFINITE);
nextTrack = true;
if (noHold) {
holdMusicPlayer = false;
}
ReleaseMutex (hThreadMutex);
}