|
|
|
@ -3,12 +3,13 @@
|
|
|
|
|
# Copyright 2010 Maurizio Porrato <maurizio.porrato@gmail.com> |
|
|
|
|
# See LICENSE.txt for copyright info |
|
|
|
|
|
|
|
|
|
import shelve |
|
|
|
|
from twisted.python import log |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ClientTracker(object): |
|
|
|
|
|
|
|
|
|
def __init__(self, cbClient, cbNet, cbMute, cbBlock, cbAdmin): |
|
|
|
|
def __init__(self, filename, cbClient, cbNet, cbMute, cbBlock, cbAdmin): |
|
|
|
|
self._clientData = {} |
|
|
|
|
self._net = {} |
|
|
|
|
self._mute = {} |
|
|
|
@ -19,6 +20,24 @@ class ClientTracker(object):
|
|
|
|
|
self.cbMute = cbMute |
|
|
|
|
self.cbBlock = cbBlock |
|
|
|
|
self.cbAdmin = cbAdmin |
|
|
|
|
self.filename = filename |
|
|
|
|
self.load() |
|
|
|
|
|
|
|
|
|
def load(self, filename=None): |
|
|
|
|
s = shelve.open(filename or self.filename) |
|
|
|
|
try: |
|
|
|
|
self._mute = s['mute'] |
|
|
|
|
self._block = s['block'] |
|
|
|
|
self._admin = s['admin'] |
|
|
|
|
except KeyError: pass |
|
|
|
|
s.close() |
|
|
|
|
|
|
|
|
|
def save(self, filename=None): |
|
|
|
|
s = shelve.open(filename or self.filename) |
|
|
|
|
s['mute'] = self._mute |
|
|
|
|
s['block'] = self._block |
|
|
|
|
s['admin'] = self._admin |
|
|
|
|
s.close() |
|
|
|
|
|
|
|
|
|
def getClient(self, clientId): |
|
|
|
|
return self._clientData[clientId].user |
|
|
|
@ -76,7 +95,7 @@ class ClientTracker(object):
|
|
|
|
|
if clientId in self._mute: |
|
|
|
|
client.user.M = 1 |
|
|
|
|
a = self._mute[clientId].AI |
|
|
|
|
self._mute[clientId].update(client.user.dict()) |
|
|
|
|
self._mute[clientId].update(**client.user.dict()) |
|
|
|
|
self._mute[clientId].AI = a |
|
|
|
|
else: |
|
|
|
|
client.user.M = 0 |
|
|
|
@ -85,6 +104,7 @@ class ClientTracker(object):
|
|
|
|
|
if client.user.EA in self._admin: |
|
|
|
|
client.role = "ADMIN" |
|
|
|
|
self._admin[client.user.EA].update(client.user.dict()) |
|
|
|
|
self.save() |
|
|
|
|
if len(nc) == 1: |
|
|
|
|
self.cbNet(self.getNetworkList()) |
|
|
|
|
self.cbClient(net, self.getClientList(net)) |
|
|
|
@ -101,6 +121,7 @@ class ClientTracker(object):
|
|
|
|
|
if not self._net[net]: |
|
|
|
|
del self._net[net] |
|
|
|
|
self.cbNet(self.getNetworkList()) |
|
|
|
|
self.save() |
|
|
|
|
self.cbClient(net, self.getClientList(net)) |
|
|
|
|
|
|
|
|
|
def setStatus(self, clientId, status): |
|
|
|
@ -114,6 +135,7 @@ class ClientTracker(object):
|
|
|
|
|
if clientId not in self._mute: |
|
|
|
|
self._mute[clientId] = self.getClient(clientId).copy(AI=admin.ON) |
|
|
|
|
self._clientData[clientId].user.M = 1 |
|
|
|
|
self.save() |
|
|
|
|
net = self.getClient(clientId).NT |
|
|
|
|
self.cbClient(net, self.getClientList(net)) |
|
|
|
|
self.cbMute(self.getMuteList()) |
|
|
|
@ -125,6 +147,7 @@ class ClientTracker(object):
|
|
|
|
|
self._clientData[clientId].user.M = 0 |
|
|
|
|
net = self._clientData[clientId].user.NT |
|
|
|
|
self.cbClient(net, self.getClientList(net)) |
|
|
|
|
self.save() |
|
|
|
|
self.cbMute(self.getMuteList()) |
|
|
|
|
|
|
|
|
|
def block(self, admin, clientId): |
|
|
|
@ -132,21 +155,25 @@ class ClientTracker(object):
|
|
|
|
|
self._block[clientId] = self.getClient(clientId).copy(AI=admin.ON) |
|
|
|
|
if clientId in self._clientData: |
|
|
|
|
net = self._clientData[clientId].user.NT |
|
|
|
|
self.save() |
|
|
|
|
self.cbBlock(self.getBlockList()) |
|
|
|
|
|
|
|
|
|
def unBlock(self, clientId): |
|
|
|
|
if clientId in self._block: |
|
|
|
|
del self._block[clientId] |
|
|
|
|
self.save() |
|
|
|
|
self.cbBlock(self.getBlockList()) |
|
|
|
|
|
|
|
|
|
def admin(self, clientId): |
|
|
|
|
if clientId not in self._admin: |
|
|
|
|
self._admin[clientId] = self.getClient(clientId).copy() |
|
|
|
|
self.save() |
|
|
|
|
self.cbAdmin(self.getAdminList()) |
|
|
|
|
|
|
|
|
|
def unAdmin(self, clientId): |
|
|
|
|
if clientId in self._admin: |
|
|
|
|
del self._admin[clientId] |
|
|
|
|
self.save() |
|
|
|
|
self.cbAdmin(self.getAdminList()) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|