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.autoplayTimer = task.LoopingCall(self.autoplayCountdown)
|
||||||
self.autoplayTimeLeft = constants.AUTOPLAY_DELAY
|
self.autoplayTimeLeft = constants.AUTOPLAY_DELAY
|
||||||
|
|
||||||
|
self._playlist = []
|
||||||
|
self._playlistIndex = None
|
||||||
|
|
||||||
self._warnings = self._WarningManager(self._player, self.userlist, self.ui, self)
|
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']:
|
if constants.LIST_RELATIVE_CONFIGS and self._config.has_key('loadedRelativePaths') and self._config['loadedRelativePaths']:
|
||||||
paths = "; ".join(self._config['loadedRelativePaths'])
|
paths = "; ".join(self._config['loadedRelativePaths'])
|
||||||
@ -156,9 +159,6 @@ class SyncplayClient(object):
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def playlistUpdate(self, newPlaylist):
|
|
||||||
print newPlaylist
|
|
||||||
|
|
||||||
def _determinePlayerStateChange(self, paused, position):
|
def _determinePlayerStateChange(self, paused, position):
|
||||||
pauseChange = self.getPlayerPaused() != paused and self.getGlobalPaused() != paused
|
pauseChange = self.getPlayerPaused() != paused and self.getGlobalPaused() != paused
|
||||||
_playerDiff = abs(self.getPlayerPosition() - position)
|
_playerDiff = abs(self.getPlayerPosition() - position)
|
||||||
@ -171,6 +171,7 @@ class SyncplayClient(object):
|
|||||||
pauseChange, seeked = self._determinePlayerStateChange(paused, position)
|
pauseChange, seeked = self._determinePlayerStateChange(paused, position)
|
||||||
self._playerPosition = position
|
self._playerPosition = position
|
||||||
self._playerPaused = paused
|
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 pauseChange and utils.meetsMinVersion(self.serverVersion, constants.USER_READY_MIN_VERSION):
|
||||||
if not self.userlist.currentUser.canControl():
|
if not self.userlist.currentUser.canControl():
|
||||||
self._player.setPaused(self._globalPaused)
|
self._player.setPaused(self._globalPaused)
|
||||||
@ -410,6 +411,37 @@ class SyncplayClient(object):
|
|||||||
self.userlist.currentUser.setFile(filename, duration, size, path)
|
self.userlist.currentUser.setFile(filename, duration, size, path)
|
||||||
self.sendFile()
|
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):
|
def __executePrivacySettings(self, filename, size):
|
||||||
if self._config['filenamePrivacyMode'] == PRIVACY_SENDHASHED_MODE:
|
if self._config['filenamePrivacyMode'] == PRIVACY_SENDHASHED_MODE:
|
||||||
filename = utils.hashFilename(filename)
|
filename = utils.hashFilename(filename)
|
||||||
|
|||||||
@ -140,6 +140,10 @@ class SyncClientProtocol(JSONCommandProtocol):
|
|||||||
user, isReady = values["username"], values["isReady"]
|
user, isReady = values["username"], values["isReady"]
|
||||||
manuallyInitiated = values["manuallyInitiated"] if values.has_key("manuallyInitiated") else True
|
manuallyInitiated = values["manuallyInitiated"] if values.has_key("manuallyInitiated") else True
|
||||||
self._client.setReady(user, isReady, manuallyInitiated)
|
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):
|
def sendSet(self, setting):
|
||||||
self.sendMessage({"Set": 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):
|
def handleError(self, error):
|
||||||
self.dropWithError(error["message"])
|
self.dropWithError(error["message"])
|
||||||
|
|
||||||
@ -358,6 +377,10 @@ class SyncServerProtocol(JSONCommandProtocol):
|
|||||||
elif command == "ready":
|
elif command == "ready":
|
||||||
manuallyInitiated = set_[1]['manuallyInitiated'] if set_[1].has_key("manuallyInitiated") else False
|
manuallyInitiated = set_[1]['manuallyInitiated'] if set_[1].has_key("manuallyInitiated") else False
|
||||||
self._factory.setReady(self._watcher, set_[1]['isReady'], manuallyInitiated=manuallyInitiated)
|
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):
|
def sendSet(self, setting):
|
||||||
self.sendMessage({"Set": 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):
|
def sendUserSetting(self, username, room, file_, event):
|
||||||
room = {"name": room.getName()}
|
room = {"name": room.getName()}
|
||||||
user = {username: {}}
|
user = {username: {}}
|
||||||
|
|||||||
@ -72,8 +72,12 @@ class SyncFactory(Factory):
|
|||||||
self.sendJoinMessage(watcher)
|
self.sendJoinMessage(watcher)
|
||||||
else:
|
else:
|
||||||
self.sendRoomSwitchMessage(watcher)
|
self.sendRoomSwitchMessage(watcher)
|
||||||
|
|
||||||
|
room = watcher.getRoom()
|
||||||
|
watcher.setPlaylist(room.getSetBy().getName(), room.getPlaylist())
|
||||||
|
watcher.setPlaylistIndex(room.getSetBy().getName(), room.getPlaylistIndex())
|
||||||
if RoomPasswordProvider.isControlledRoom(roomName):
|
if RoomPasswordProvider.isControlledRoom(roomName):
|
||||||
for controller in watcher.getRoom().getControllers():
|
for controller in room.getControllers():
|
||||||
watcher.sendControlledRoomAuthStatus(True, controller, roomName)
|
watcher.sendControlledRoomAuthStatus(True, controller, roomName)
|
||||||
|
|
||||||
def sendRoomSwitchMessage(self, watcher):
|
def sendRoomSwitchMessage(self, watcher):
|
||||||
@ -132,6 +136,14 @@ class SyncFactory(Factory):
|
|||||||
watcher.setReady(isReady)
|
watcher.setReady(isReady)
|
||||||
self._roomManager.broadcastRoom(watcher, lambda w: w.sendSetReady(watcher.getName(), watcher.isReady(), manuallyInitiated))
|
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):
|
class RoomManager(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._rooms = {}
|
self._rooms = {}
|
||||||
@ -214,6 +226,8 @@ class Room(object):
|
|||||||
self._watchers = {}
|
self._watchers = {}
|
||||||
self._playState = self.STATE_PAUSED
|
self._playState = self.STATE_PAUSED
|
||||||
self._setBy = None
|
self._setBy = None
|
||||||
|
self._playlist = []
|
||||||
|
self._playlistIndex = None
|
||||||
|
|
||||||
def __str__(self, *args, **kwargs):
|
def __str__(self, *args, **kwargs):
|
||||||
return self.getName()
|
return self.getName()
|
||||||
@ -268,6 +282,18 @@ class Room(object):
|
|||||||
def canControl(self, watcher):
|
def canControl(self, watcher):
|
||||||
return True
|
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):
|
class ControlledRoom(Room):
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
Room.__init__(self, name)
|
Room.__init__(self, name)
|
||||||
@ -297,6 +323,14 @@ class ControlledRoom(Room):
|
|||||||
if self.canControl(setBy):
|
if self.canControl(setBy):
|
||||||
Room.setPosition(self, position, 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):
|
def canControl(self, watcher):
|
||||||
return watcher.getName() in self._controllers
|
return watcher.getName() in self._controllers
|
||||||
|
|
||||||
@ -370,6 +404,12 @@ class Watcher(object):
|
|||||||
def sendSetReady(self, username, isReady, manuallyInitiated=True):
|
def sendSetReady(self, username, isReady, manuallyInitiated=True):
|
||||||
self._connector.sendSetReady(username, isReady, manuallyInitiated)
|
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):
|
def __lt__(self, b):
|
||||||
if self.getPosition() is None or self._file is None:
|
if self.getPosition() is None or self._file is None:
|
||||||
return False
|
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('--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('--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('--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()
|
newPlaylist = self.getPlaylistState()
|
||||||
if newPlaylist <> self.playlistState and self._syncplayClient:
|
if newPlaylist <> self.playlistState and self._syncplayClient:
|
||||||
self.playlistState = newPlaylist
|
self.playlistState = newPlaylist
|
||||||
self._syncplayClient.playlistUpdate(newPlaylist)
|
self._syncplayClient.changePlaylist(newPlaylist)
|
||||||
|
|
||||||
def addTopLayout(self, window):
|
def addTopLayout(self, window):
|
||||||
window.topSplit = self.topSplitter(Qt.Horizontal, self)
|
window.topSplit = self.topSplitter(Qt.Horizontal, self)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user