diff --git a/ucs-school-umc-computerroom/umc/js/computerroom.js b/ucs-school-umc-computerroom/umc/js/computerroom.js index 6aa7be2..aa8ef2b 100644 --- a/ucs-school-umc-computerroom/umc/js/computerroom.js +++ b/ucs-school-umc-computerroom/umc/js/computerroom.js @@ -261,7 +261,7 @@ define([ isMultiAction: true, enablingMode: "some", canExecute: checkUCC('lockInput', lang.hitch(this, function(item) { - return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.InputLock; + return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.InputLock[0] === false; })), callback: lang.hitch(this, '_lockInput', true) }, { @@ -271,7 +271,7 @@ define([ isMultiAction: true, enablingMode: "some", canExecute: checkUCC('unlockInput', lang.hitch(this, function(item) { - return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.InputLock; + return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.InputLock[0] === true; })), callback: lang.hitch(this, '_lockInput', false) }, { @@ -292,7 +292,7 @@ define([ isMultiAction: true, enablingMode: "some", canExecute: checkUCC('ScreenLock', lang.hitch(this, function(item) { - return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false); + return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.ScreenLock[0] === false; })), callback: lang.hitch(this, '_lockScreen', true) }, { @@ -303,7 +303,7 @@ define([ isMultiAction: true, enablingMode: "some", canExecute: checkUCC('ScreenUnLock', lang.hitch(this, function(item) { - return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false); + return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.ScreenLock[0] === true; })), callback: lang.hitch(this, '_lockScreen', false) }]; @@ -422,15 +422,6 @@ define([ _lockInput: function(lock, ids, items) { array.forEach(items, lang.hitch(this, function(comp) { - if (comp.connection[0] != 'connected' || // not connected - !comp.user || !comp.user[0] || // no user logged on - (comp.teacher && comp.teacher[0] === true) || // teacher logged in - comp.InputLock[0] === null || // unclear status - comp.InputLock[0] === lock // already locked/unlocked - ) { - // ignore them - return; - } this.umcpCommand('computerroom/lock', { computer: comp.id[0], device: 'input', @@ -443,15 +434,6 @@ define([ _lockScreen: function(lock, ids, items) { array.forEach(items, lang.hitch(this, function(comp) { - if (comp.connection[0] != 'connected' || // not connected - !comp.user || !comp.user[0] || // no user logged on - (comp.teacher && comp.teacher[0] === true) || // teacher logged in - comp.ScreenLock[0] === null || // unclear status - comp.ScreenLock[0] === lock // already locked/unlocked - ) { - // ignore them - return; - } this.umcpCommand('computerroom/lock', { computer: comp.id[0], device: 'screen', diff --git a/ucs-school-umc-computerroom/umc/python/computerroom/__init__.py b/ucs-school-umc-computerroom/umc/python/computerroom/__init__.py index 9da6be7..7945e3c 100644 --- a/ucs-school-umc-computerroom/umc/python/computerroom/__init__.py +++ b/ucs-school-umc-computerroom/umc/python/computerroom/__init__.py @@ -450,7 +450,7 @@ def update(self, request, ldap_user_read=None): if not self._italc.school or not self._italc.room: raise UMC_Error('no room selected') - computers = [computer.dict for computer in self._italc.values() if computer.hasChanged] + computers = self._italc.query() result = {'computers': computers} userDN = _getRoomOwner(self._italc.roomDN) diff --git a/ucs-school-umc-computerroom/umc/python/computerroom/italc2.py b/ucs-school-umc-computerroom/umc/python/computerroom/italc2.py index 60cc30c..0c8cb61 100644 --- a/ucs-school-umc-computerroom/umc/python/computerroom/italc2.py +++ b/ucs-school-umc-computerroom/umc/python/computerroom/italc2.py @@ -183,7 +183,6 @@ def isInitialized(self): def hasChanged(self): self.lock() diff = self._has_changed - self._has_changed = False self._old = copy.deepcopy(self._current) self.unlock() return diff @@ -373,15 +372,17 @@ def stop(self): @property def dict(self): - item = {'id': self.name, - 'name': self.name, - 'user': self.user.current, - 'teacher': self.isTeacher, - 'connection': self.state.current, - 'description': self.description, - 'ip': self.ipAddress, - 'mac': self.macAddress, - 'objectType': self.objectType} + item = { + 'id': self.name, + 'name': self.name, + 'user': self.user.current, + 'teacher': self.isTeacher, + 'connection': self.state.current, + 'description': self.description, + 'ip': self.ipAddress, + 'mac': self.macAddress, + 'objectType': self.objectType + } item.update(self.flagsDict) return item @@ -390,6 +391,11 @@ def hasChanged(self): states = (self.state, self.flags, self.user, self.teacher) return any(state.hasChanged for state in states) + def reset_has_changed(self): + states = (self.state, self.flags, self.user, self.teacher) + for state in states: + state._has_changed = False + # UDM properties @property def name(self): @@ -435,31 +441,31 @@ def description(self): @property def screenLock(self): - if not self._core or self._core.slaveStateFlags() == 0: + if not self._core: return None return self._core.isScreenLockRunning() @property def inputLock(self): - if not self._core or self._core.slaveStateFlags() == 0: + if not self._core: return None return self._core.isInputLockRunning() @property def demoServer(self): - if not self._core or self._core.slaveStateFlags() == 0: + if not self._core: return None return self._core.isDemoServerRunning() @property def demoClient(self): - if not self._core or self._core.slaveStateFlags() == 0: + if not self._core: return None return self._core.isDemoClientRunning() @property def messageBox(self): - if not self._core or self._core.slaveStateFlags() == 0: + if not self._core: return None return self._core.isMessageBoxRunning() @@ -612,6 +618,9 @@ def logOut(self): return self._core.logoutUser() + def __repr__(self): + return '<%s(%s)>' % (type(self).__name__, self.ipAddress,) + class ITALC_Manager(dict, notifier.signals.Provider): SCHOOL = None @@ -745,3 +754,10 @@ def stopDemo(self): self.demoServer.stopDemoServer() for client in self.demoClients: client.stopDemoClient() + + def query(self): + try: + return [computer.dict for computer in self.values() if computer.hasChanged] + finally: + for computer in self.values(): + computer.reset_has_changed()