Refactor to make _UndoPlaylistManager

This commit is contained in:
Et0h 2016-01-23 14:36:01 +00:00
parent 037e5aa21e
commit fc70c917bc

View File

@ -115,12 +115,11 @@ class SyncplayClient(object):
self.autoplayTimeLeft = constants.AUTOPLAY_DELAY self.autoplayTimeLeft = constants.AUTOPLAY_DELAY
self._playlist = [] self._playlist = []
self._previousPlaylist = None
self._previousPlaylistRoom = None
self._playlistIndex = None self._playlistIndex = None
self.__playerReady = defer.Deferred() self.__playerReady = defer.Deferred()
self._warnings = self._WarningManager(self._player, self.userlist, self.ui, self) self._warnings = self._WarningManager(self._player, self.userlist, self.ui, self)
self._undoPlaylist = self._UndoPlaylistManager()
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'])
self.ui.showMessage(getMessage("relative-config-notification").format(paths), noPlayer=True, noTimestamp=True) self.ui.showMessage(getMessage("relative-config-notification").format(paths), noPlayer=True, noTimestamp=True)
@ -531,7 +530,7 @@ class SyncplayClient(object):
except: except:
newIndex = 0 newIndex = 0
self.updateUndoPlaylistBuffer(currentPlaylist=self._playlist, newPlaylist=files) self._undoPlaylist.updateUndoPlaylistBuffer(currentPlaylist=self._playlist, newPlaylist=files, newRoom=self.userlist.currentUser.room)
self._playlist = files self._playlist = files
if username is None and self._protocol and self._protocol.logged: if username is None and self._protocol and self._protocol.logged:
@ -543,40 +542,48 @@ class SyncplayClient(object):
self.changeToPlaylistIndex(newIndex, username) self.changeToPlaylistIndex(newIndex, username)
self.ui.showMessage(u"{} updated the playlist".format(username)) self.ui.showMessage(u"{} updated the playlist".format(username))
def updateUndoPlaylistBuffer(self, currentPlaylist, newPlaylist):
if self.playlistBufferIsFromOldRoom():
self.movePlaylistBufferToNewRoom()
elif self.playlistBufferNeedsUpdating(currentPlaylist, newPlaylist):
self._previousPlaylist = currentPlaylist
def playlistBufferIsFromOldRoom(self):
return self._previousPlaylistRoom <> self.userlist.currentUser.room
def movePlaylistBufferToNewRoom(self):
self._previousPlaylist = None
self._previousPlaylistRoom = self.userlist.currentUser.room
def playlistBufferNeedsUpdating(self, currentPlaylist, newPlaylist):
return self._previousPlaylist <> currentPlaylist and currentPlaylist <> newPlaylist
@needsSharedPlaylistsEnabled @needsSharedPlaylistsEnabled
def undoPlaylistChange(self): def undoPlaylistChange(self):
if self._previousPlaylist is not None and self._playlist <> self._previousPlaylist: if self._undoPlaylist.canUndoPlaylist(self._playlist):
undidPlaylist = self._playlist newPlaylist = self._undoPlaylist.getPreviousPlaylist()
self.ui.setPlaylist(self._previousPlaylist) self.ui.setPlaylist(newPlaylist)
self.changePlaylist(self._previousPlaylist) self.changePlaylist(newPlaylist)
self._previousPlaylist = undidPlaylist
@needsSharedPlaylistsEnabled @needsSharedPlaylistsEnabled
def shufflePlaylist(self): def shufflePlaylist(self):
if self._playlist and len(self._playlist) > 0: if self._playlist and len(self._playlist) > 0:
oldPlaylist = self._playlist
random.seed() random.seed()
shuffledPlaylist = deepcopy(self._playlist) shuffledPlaylist = deepcopy(self._playlist)
random.shuffle(shuffledPlaylist) random.shuffle(shuffledPlaylist)
self.ui.setPlaylist(shuffledPlaylist) self.ui.setPlaylist(shuffledPlaylist)
self.changePlaylist(shuffledPlaylist) self.changePlaylist(shuffledPlaylist)
self._previousPlaylist = oldPlaylist
class _UndoPlaylistManager():
def __init__(self):
self._previousPlaylist = None
self._previousPlaylistRoom = None
def updateUndoPlaylistBuffer(self, currentPlaylist, newPlaylist, newRoom):
if self.playlistBufferIsFromOldRoom(newRoom):
self.movePlaylistBufferToNewRoom(newRoom)
elif self.playlistBufferNeedsUpdating(currentPlaylist, newPlaylist):
self._previousPlaylist = currentPlaylist
def playlistBufferIsFromOldRoom(self, newRoom):
return self._previousPlaylistRoom <> newRoom
def movePlaylistBufferToNewRoom(self, currentRoom):
self._previousPlaylist = None
self._previousPlaylistRoom = currentRoom
def playlistBufferNeedsUpdating(self, currentPlaylist, newPlaylist):
return self._previousPlaylist <> currentPlaylist and currentPlaylist <> newPlaylist
def canUndoPlaylist(self, currentPlaylist):
return self._previousPlaylist is not None and currentPlaylist <> self._previousPlaylist
def getPreviousPlaylist(self):
return self._previousPlaylist
def __executePrivacySettings(self, filename, size): def __executePrivacySettings(self, filename, size):
if self._config['filenamePrivacyMode'] == PRIVACY_SENDHASHED_MODE: if self._config['filenamePrivacyMode'] == PRIVACY_SENDHASHED_MODE: