Added method stubs for sharedplaylists
This commit is contained in:
parent
9a12bac379
commit
efe32b406e
@ -113,6 +113,9 @@ class SyncplayClient(object):
|
||||
self.autoplayTimer = task.LoopingCall(self.autoplayCountdown)
|
||||
self.autoplayTimeLeft = constants.AUTOPLAY_DELAY
|
||||
|
||||
self._playlist = []
|
||||
self._playlistIndex = None
|
||||
|
||||
self._warnings = self._WarningManager(self._player, self.userlist, self.ui, self)
|
||||
if constants.LIST_RELATIVE_CONFIGS and self._config.has_key('loadedRelativePaths') and self._config['loadedRelativePaths']:
|
||||
paths = "; ".join(self._config['loadedRelativePaths'])
|
||||
@ -156,9 +159,6 @@ class SyncplayClient(object):
|
||||
return False
|
||||
return True
|
||||
|
||||
def playlistUpdate(self, newPlaylist):
|
||||
print newPlaylist
|
||||
|
||||
def _determinePlayerStateChange(self, paused, position):
|
||||
pauseChange = self.getPlayerPaused() != paused and self.getGlobalPaused() != paused
|
||||
_playerDiff = abs(self.getPlayerPosition() - position)
|
||||
@ -171,6 +171,7 @@ class SyncplayClient(object):
|
||||
pauseChange, seeked = self._determinePlayerStateChange(paused, position)
|
||||
self._playerPosition = position
|
||||
self._playerPaused = paused
|
||||
# TODO: if position +- 1s of the end of a file AND has next file in playlist -> rewind to 0 and switch file
|
||||
if pauseChange and utils.meetsMinVersion(self.serverVersion, constants.USER_READY_MIN_VERSION):
|
||||
if not self.userlist.currentUser.canControl():
|
||||
self._player.setPaused(self._globalPaused)
|
||||
@ -410,6 +411,37 @@ class SyncplayClient(object):
|
||||
self.userlist.currentUser.setFile(filename, duration, size, path)
|
||||
self.sendFile()
|
||||
|
||||
# TODO: execute changeToPlaylistIndex if file found in playlist
|
||||
|
||||
def changeToPlaylistIndex(self, index, username = None):
|
||||
if self._playlistIndex == index:
|
||||
return
|
||||
self._playlistIndex = index
|
||||
if username is None and self._protocol and self._protocol.logged:
|
||||
self._protocol.setPlaylistIndex(index)
|
||||
elif username != self.getUsername():
|
||||
# TODO: Display info about playlist file change
|
||||
|
||||
if index in self._playlist:
|
||||
filename = self._playlist[index]
|
||||
# TODO: Find Path
|
||||
path = 'https://www.youtube.com/watch?v=0iXX5h6Hxxs'
|
||||
if path:
|
||||
self._player.openFile(path)
|
||||
else:
|
||||
# TODO: Notify user about file not found
|
||||
pass
|
||||
|
||||
def changePlaylist(self, files, username = None):
|
||||
self._playlist = files
|
||||
|
||||
if username is None and self._protocol and self._protocol.logged:
|
||||
self._protocol.setPlaylist(files)
|
||||
elif username != self.getUsername():
|
||||
pass
|
||||
# TODO: Display info about playlist change
|
||||
# TODO: Update UI with new playlist
|
||||
|
||||
def __executePrivacySettings(self, filename, size):
|
||||
if self._config['filenamePrivacyMode'] == PRIVACY_SENDHASHED_MODE:
|
||||
filename = utils.hashFilename(filename)
|
||||
|
||||
@ -140,6 +140,10 @@ class SyncClientProtocol(JSONCommandProtocol):
|
||||
user, isReady = values["username"], values["isReady"]
|
||||
manuallyInitiated = values["manuallyInitiated"] if values.has_key("manuallyInitiated") else True
|
||||
self._client.setReady(user, isReady, manuallyInitiated)
|
||||
elif command == "playlistIndex":
|
||||
self._client.changeToPlaylistIndex(values['index'], values['user'])
|
||||
elif command == "playlistChange":
|
||||
self._client.changePlaylist(values['files'], values['user'])
|
||||
|
||||
def sendSet(self, setting):
|
||||
self.sendMessage({"Set": setting})
|
||||
@ -247,6 +251,21 @@ class SyncClientProtocol(JSONCommandProtocol):
|
||||
}
|
||||
})
|
||||
|
||||
def setPlaylist(self, files):
|
||||
self.sendSet({
|
||||
"playlistChange": {
|
||||
"files": files
|
||||
}
|
||||
})
|
||||
|
||||
def setPlaylistIndex(self, index):
|
||||
self.sendSet({
|
||||
"playlistIndex": {
|
||||
"index": index
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
def handleError(self, error):
|
||||
self.dropWithError(error["message"])
|
||||
|
||||
@ -358,6 +377,10 @@ class SyncServerProtocol(JSONCommandProtocol):
|
||||
elif command == "ready":
|
||||
manuallyInitiated = set_[1]['manuallyInitiated'] if set_[1].has_key("manuallyInitiated") else False
|
||||
self._factory.setReady(self._watcher, set_[1]['isReady'], manuallyInitiated=manuallyInitiated)
|
||||
elif command == "playlistChange":
|
||||
self._factory.setPlaylist(self._watcher, set_[1]['files'])
|
||||
elif command == "playlistIndex":
|
||||
self._factory.setPlaylistIndex(self._watcher, set_[1]['index'])
|
||||
|
||||
def sendSet(self, setting):
|
||||
self.sendMessage({"Set": setting})
|
||||
@ -389,6 +412,22 @@ class SyncServerProtocol(JSONCommandProtocol):
|
||||
}
|
||||
})
|
||||
|
||||
def setPlaylist(self, username, files):
|
||||
self.sendSet({
|
||||
"playlistChange": {
|
||||
"user": username,
|
||||
"files": files
|
||||
}
|
||||
})
|
||||
|
||||
def setPlaylistIndex(self, username, index):
|
||||
self.sendSet({
|
||||
"playlistIndex": {
|
||||
"user": username,
|
||||
"index": index
|
||||
}
|
||||
})
|
||||
|
||||
def sendUserSetting(self, username, room, file_, event):
|
||||
room = {"name": room.getName()}
|
||||
user = {username: {}}
|
||||
|
||||
@ -72,8 +72,12 @@ class SyncFactory(Factory):
|
||||
self.sendJoinMessage(watcher)
|
||||
else:
|
||||
self.sendRoomSwitchMessage(watcher)
|
||||
|
||||
room = watcher.getRoom()
|
||||
watcher.setPlaylist(room.getSetBy().getName(), room.getPlaylist())
|
||||
watcher.setPlaylistIndex(room.getSetBy().getName(), room.getPlaylistIndex())
|
||||
if RoomPasswordProvider.isControlledRoom(roomName):
|
||||
for controller in watcher.getRoom().getControllers():
|
||||
for controller in room.getControllers():
|
||||
watcher.sendControlledRoomAuthStatus(True, controller, roomName)
|
||||
|
||||
def sendRoomSwitchMessage(self, watcher):
|
||||
@ -132,6 +136,14 @@ class SyncFactory(Factory):
|
||||
watcher.setReady(isReady)
|
||||
self._roomManager.broadcastRoom(watcher, lambda w: w.sendSetReady(watcher.getName(), watcher.isReady(), manuallyInitiated))
|
||||
|
||||
def setPlaylist(self, watcher, files):
|
||||
watcher.getRoom().setPlaylist(files, watcher)
|
||||
self._roomManager.broadcastRoom(watcher, lambda w: w.setPlaylist(watcher.getName(), files))
|
||||
|
||||
def setPlaylistIndex(self, watcher, index):
|
||||
watcher.getRoom().setPlaylistIndex(index, watcher)
|
||||
self._roomManager.broadcastRoom(watcher, lambda w: w.setPlaylistIndex(watcher.getName(), index))
|
||||
|
||||
class RoomManager(object):
|
||||
def __init__(self):
|
||||
self._rooms = {}
|
||||
@ -214,6 +226,8 @@ class Room(object):
|
||||
self._watchers = {}
|
||||
self._playState = self.STATE_PAUSED
|
||||
self._setBy = None
|
||||
self._playlist = []
|
||||
self._playlistIndex = None
|
||||
|
||||
def __str__(self, *args, **kwargs):
|
||||
return self.getName()
|
||||
@ -268,6 +282,18 @@ class Room(object):
|
||||
def canControl(self, watcher):
|
||||
return True
|
||||
|
||||
def setPlaylist(self, files, setBy=None):
|
||||
self._playlist = files
|
||||
|
||||
def setPlaylistIndex(self, index, setBy=None):
|
||||
self._playlistIndex = index
|
||||
|
||||
def getPlaylist(self):
|
||||
return self._playlist
|
||||
|
||||
def getPlaylistIndex(self):
|
||||
return self._playlistIndex
|
||||
|
||||
class ControlledRoom(Room):
|
||||
def __init__(self, name):
|
||||
Room.__init__(self, name)
|
||||
@ -297,6 +323,14 @@ class ControlledRoom(Room):
|
||||
if self.canControl(setBy):
|
||||
Room.setPosition(self, position, setBy)
|
||||
|
||||
def setPlaylist(self, files, setBy=None):
|
||||
if self.canControl(setBy):
|
||||
self._playlist = files
|
||||
|
||||
def setPlaylistIndex(self, index, setBy=None):
|
||||
if self.canControl(setBy):
|
||||
self._playlistIndex = index
|
||||
|
||||
def canControl(self, watcher):
|
||||
return watcher.getName() in self._controllers
|
||||
|
||||
@ -370,6 +404,12 @@ class Watcher(object):
|
||||
def sendSetReady(self, username, isReady, manuallyInitiated=True):
|
||||
self._connector.sendSetReady(username, isReady, manuallyInitiated)
|
||||
|
||||
def setPlaylistIndex(self, username, index):
|
||||
self._connector.setPlaylistIndex(username, index)
|
||||
|
||||
def setPlaylist(self, username, files):
|
||||
self._connector.setPlaylist(username, files)
|
||||
|
||||
def __lt__(self, b):
|
||||
if self.getPosition() is None or self._file is None:
|
||||
return False
|
||||
@ -442,4 +482,4 @@ class ConfigurationGetter(object):
|
||||
self._argparser.add_argument('--isolate-rooms', action='store_true', help=getMessage("server-isolate-room-argument"))
|
||||
self._argparser.add_argument('--disable-ready', action='store_true', help=getMessage("server-disable-ready-argument"))
|
||||
self._argparser.add_argument('--salt', metavar='salt', type=str, nargs='?', help=getMessage("server-salt-argument"))
|
||||
self._argparser.add_argument('--motd-file', metavar='file', type=str, nargs='?', help=getMessage("server-motd-argument"))
|
||||
self._argparser.add_argument('--motd-file', metavar='file', type=str, nargs='?', help=getMessage("server-motd-argument"))
|
||||
|
||||
@ -807,7 +807,7 @@ class MainWindow(QtGui.QMainWindow):
|
||||
newPlaylist = self.getPlaylistState()
|
||||
if newPlaylist <> self.playlistState and self._syncplayClient:
|
||||
self.playlistState = newPlaylist
|
||||
self._syncplayClient.playlistUpdate(newPlaylist)
|
||||
self._syncplayClient.changePlaylist(newPlaylist)
|
||||
|
||||
def addTopLayout(self, window):
|
||||
window.topSplit = self.topSplitter(Qt.Horizontal, self)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user