-
Notifications
You must be signed in to change notification settings - Fork 0
/
threader.py
107 lines (86 loc) · 2.85 KB
/
threader.py
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
from playlist import Playlist
from track import Track
from settings import volumizer
import threading
from queue import Queue
class TrackThreader():
def __init__(self):
self.track = None
self.onEndCustomCallback = None
self.volume = volumizer.getJSON()['config']['milli']
def __play_track(self, track, callback = None):
self.setVolume(volumizer.getJSON()['config']['milli'])
if(callback == None):
track.play()
else:
callback(track)
self.__oversee_track(track)
#This makes track to disapear after it's done playing
def __oversee_track(self, track):
while (track.isBusy() or track.isPaused()) and not track.shouldEnd():
continue
if(self.onEndCustomCallback == None):
if(self.track != None):
print(self.track.getPath() + " finished playing.")
self.setTrack(None)
else:
self.__play_track(track, self.onEndCustomCallback)
def getThread(self, path):
self.track = Track(path, self.volume)
self.playingThread = threading.Thread(target = self.__play_track, args=(self.track, ))
self.playingThread.daemon = True
return {'thread' : self.playingThread,
'track' : self.track}
def currentTrack(self):
return self.track
def setTrack(self, track):
self.track = track
def setVolume(self, volume):
self.volume = volume
if self.track != None:
self.track.setVolume(volume)
def registerOnEndCustomCallback(self, callback):
self.onEndCustomCallback = callback
class PlaylistThreader():
def __init__(self):
self.playingThread = None
self.playlist = None
self.volume = volumizer.getJSON()['config']['milli']
def __play_playlist(self, position = 0):
self.setVolume(volumizer.getJSON()['config']['milli'])
self.playlist.play(position)
self.__oversee_playlist()
def __oversee_playlist(self):
while True:
try:
if self.playlist == None:
break
if self.playlist != None and self.playlist.nextTrackAvilable() and self.playlist.shouldGoNext():
print("NEXT TRACK!")
self.playlist.nextTrack()
if self.playlist != None and not self.playlist.nextTrackAvilable() and self.playlist.shouldGoNext():
print("Playlist finished playing")
self.setPlaylist(None)
break
except:
break
def getThread(self, tracks, position = 0):
self.playlist = Playlist(tracks, self.volume)
self.playingThread = threading.Thread(target = self.__play_playlist, args=(position,))
self.playingThread.daemon = True
return {'thread' : self.playingThread,
'playlist' : self.playlist}
def startThread(self):
if self.playingThread != None:
self.playingThread.start()
def currentPlaylist(self):
return self.playlist
def setPlaylist(self, playlist):
self.playlist = playlist
def reInit(self):
self.playingThread = None
self.playlist = None
def setVolume(self, volume):
self.volume = volume
if self.playlist != None and self.playlist.currentTrack != None:
self.playlist.setVolume(volume)