def on_update(self): """updates the gui via pulling infos out of tor and the bank- slow, stupid, and easy""" # don't do updates if we arent visible if not GTKUtils.is_visible(self.container): return configuredAsRelay = self.torApp.is_server() if configuredAsRelay: self.relayRow.update_row_image(True) else: self.relayRow.reset_row_image() relayStatus, relayStateString = self.torApp.get_relay_status() if self.torApp.is_server(): self.statusRow.update_row_image(relayStatus) else: self.statusRow.reset_row_image() self.statusRow.widget.set_markup('<span size="large">%s</span>' % (relayStateString)) # update as appropriate for rows when we are trying to be a relay if configuredAsRelay: boolToStringMapping = {True: "is reachable", False: "is unreachable", None: "testing..."} # do updates where we have the info relayPortsState = self.torApp.get_all_port_status() for row in self.statusRows: updateForGUIPort = row.rowName in relayPortsState if updateForGUIPort: port = relayPortsState[row.rowName] row.update_row_image(port[0]) statusText = boolToStringMapping[port[0]] row.widget.set_markup('<span size="large">%s %s</span>' % (port[1], statusText)) # else, null everything out else: for row in [self.udpRelayPortRow, self.tcpRelayPortRow, self.dirPortRow, self.statusRow]: row.reset_row_image() row.widget.set_markup('<span size="large">offline</span>') # update the balance bank = Bank.get() if not bank: return credits = bank.get_expected_balance() if not credits: return self.creditsRow.widget.set_markup( '<span size="large">%s (%s)</span>' % (credits, Format.convert_to_gb(credits)) ) if credits > 200: creditState = True elif credits > 100: creditState = None else: creditState = False self.creditsRow.update_row_image(creditState)
def on_update(self): """updates the gui via pulling infos out of tor and the bank- slow, stupid, and easy""" #don't do updates if we arent visible if not GTKUtils.is_visible(self.container): return configuredAsRelay = self.torApp.is_server() if configuredAsRelay: self.relayRow.update_row_image(True) else: self.relayRow.reset_row_image() relayStatus, relayStateString = self.torApp.get_relay_status() if self.torApp.is_server(): self.statusRow.update_row_image(relayStatus) else: self.statusRow.reset_row_image() self.statusRow.widget.set_markup('<span size="large">%s</span>' % (relayStateString)) #update as appropriate for rows when we are trying to be a relay if configuredAsRelay: boolToStringMapping = {True: 'is reachable', False: 'is unreachable', None: 'testing...'} #do updates where we have the info relayPortsState = self.torApp.get_all_port_status() for row in self.statusRows: updateForGUIPort = row.rowName in relayPortsState if updateForGUIPort: port = relayPortsState[row.rowName] row.update_row_image(port[0]) statusText = boolToStringMapping[port[0]] row.widget.set_markup('<span size="large">%s %s</span>' % (port[1], statusText)) #else, null everything out else: for row in [self.udpRelayPortRow, self.tcpRelayPortRow, self.dirPortRow, self.statusRow]: row.reset_row_image() row.widget.set_markup('<span size="large">offline</span>') #update the balance bank = Bank.get() if not bank: return credits = bank.get_expected_balance() if not credits: return self.creditsRow.widget.set_markup('<span size="large">%s (%s)</span>'%\ (credits, Format.convert_to_gb(credits))) if credits > 200: creditState = True elif credits > 100: creditState = None else: creditState = False self.creditsRow.update_row_image(creditState)
def update_completion(self): #dont bother if we are not visible: if not GTKUtils.is_visible(self.container): return if self.download and self.download.storagewrapper: have = self.download.storagewrapper.have i = 0 for filePieces in self.download.fileselector.filepieces: completion = 0.0 for piece in filePieces: completion += float(have[piece]) fileLen = float(len(filePieces)) if fileLen <= 0: completion = 100.0 else: completion /= fileLen completion *= 100.0 rowIter = self.liststore.get_iter(str(i)) self.liststore.set_value(rowIter, 3, completion) i += 1
def draw(self): if self.shouldDraw: if GTKUtils.is_visible(self): self.queue_draw() return True
def draw(self): if self.shouldDraw: if GTKUtils.is_visible(self): self.queue_draw() return True
def on_update(self): if not GTKUtils.is_visible(self.container): return if not self.download.started: return #now add the actual data: stats = self.download.startStats(True) peers = stats['spew'] peersUpdated = set() if not peers: return for peerInfo in peers: #format all data for this peer def format_bool(val): if val is True: return '1' if val is False: return '0' return str(val) peerId = peerInfo['id'] peerClient = peerInfo['client'] peerIp = peerInfo['ip'] upRate = float(peerInfo['uprate']) downRate = float(peerInfo['downrate']) totalUp = int(peerInfo['utotal']) totalDown = int(peerInfo['dtotal']) chokedUp = format_bool(peerInfo['uchoked']) chokedDown = format_bool(peerInfo['dchoked']) snubbed = format_bool(peerInfo['snubbed']) interestedUp = format_bool(peerInfo['uinterested']) interestedDown = format_bool(peerInfo['dinterested']) speed = float(peerInfo['speed']) requests = str(peerInfo['pendingRequests']) circId = str(peerInfo['circId']) completed = float(peerInfo['completed']) allValues = [peerIp, upRate, downRate, totalUp, totalDown, chokedUp, chokedDown, snubbed, interestedUp, interestedDown, speed, requests, circId, completed, peerClient, peerId] #do we have a row already for this peer? if peerId in self.peerRows: #then just update the row peerIter = self.liststore[self.peerRows[peerId].get_path()].iter valuesArg = [] for columnTuple, value in zip(self.COLUMNS, allValues): idx = self.attrIdx[columnTuple[0]] valuesArg.append(idx) valuesArg.append(value) self.liststore.set(peerIter, *valuesArg) else: #otherwise have to make a new one peerIter = self.liststore.append(allValues) self.peerRows[peerId] = gtk.TreeRowReference(self.liststore, self.liststore.get_string_from_iter(peerIter)) peersUpdated.add(peerId) toRemove = set() for peerId, row in self.peerRows.iteritems(): if peerId not in peersUpdated: toRemove.add(peerId) for row in toRemove: del self.peerRows[row]
def on_update(self): #dont bother if we are not visible: if not GTKUtils.is_visible(self.container): return #track which rows still exist: updateObjects = set() appList = self.bbApp.applications.values() + [ self.bbApp, self.bbApp.torApp ] #update each app: for app in appList: #make sure a row exists for it if not hasattr(app, "treeRow") or not app.treeRow: #insert into the model iter = self.mdl.append(None, (app.name, "", "", "", "", "", "", 1, "white", "black", True)) #set treeRow so we can more easily update in the future app.treeRow = gtk.TreeRowReference( self.mdl, self.mdl.get_string_from_iter(iter)) #update each circ: for app in appList: for circuit in app.circuits: self.objects.add(circuit) #if circuit.treeView is not set, this must be a new circuit if not hasattr(circuit, "treeRow") or not circuit.treeRow: #insert into the model iter = self.mdl.append( self.mdl[circuit.app.treeRow.get_path()].iter, (str(circuit.id), circuit.status, "path", "0", "", "0 sec", "0", 1, "white", "black", True)) #set circuit.treeRow so we can more easily update in the future circuit.treeRow = gtk.TreeRowReference( self.mdl, self.mdl.get_string_from_iter(iter)) #update the information in the row updateObjects.add(circuit) self.update_object(circuit, "circuit") #update each stream: for app in appList: for stream in app.streams.values(): self.objects.add(stream) #if stream.circuit.treeRow is not set, this must be a new circuit if not stream.treeRow: #this might happen if the stream is new and hasnt been assigned a circuit yet if not stream.circuit: return #this should never happen. if not stream.circuit.treeRow: log_msg( "%s has a circuit %s with no treeRow?" % (stream.id, stream.circuit.id), 0) return #get the row of the circuit iter = self.mdl[stream.circuit.treeRow.get_path()].iter #insert the stream as a child of the circuit iter = self.mdl.append( iter, (str(stream.id), stream.status, stream.targetHost, "0", "", "0 sec", "0", 0, "white", "black", True)) #set stream.treeRow for easy updating later stream.treeRow = gtk.TreeRowReference( self.mdl, self.mdl.get_string_from_iter(iter)) else: #check that we are under the RIGHT circuit (in case of being reattached): parent = None shouldUpdate = False #do we have a circuit? if stream.circuit: #is that circuit in the GUI yet? if stream.circuit.treeRow: parent = self.mdl[ stream.circuit.treeRow.get_path()].iter iter = self.mdl[stream.treeRow.get_path()].iter iter = self.mdl.iter_parent(iter) #do we have a parent row? if iter: #check if it is the RIGHT parent row or not id = int(self.mdl.get_value(iter, 0)) if id != stream.circuit.id: shouldUpdate = True else: shouldUpdate = True else: log_msg( "Stream " + str(stream.id) + " has Circuit " + str(stream.circuit.id) + " with no treeRow?", 0) else: #can justput at the end of the list, top level: shouldUpdate = True #remove old row and insert new row if necessary: if shouldUpdate: oldIter = self.mdl[stream.treeRow.get_path()].iter n_columns = self.mdl.get_n_columns() values = self.mdl.get(oldIter, *range(n_columns)) self.mdl.remove(oldIter) newIter = self.mdl.append(parent, values) stream.treeRow = gtk.TreeRowReference( self.mdl, self.mdl.get_string_from_iter(newIter)) #update the information in the row self.update_object(stream, "stream") updateObjects.add(stream) #remove any of our rows that were NOT updated: toRemove = [] for obj in self.objects: if obj not in updateObjects: toRemove.append(obj) for obj in toRemove: self.remove_object(obj) self.objects.remove(obj)
def on_update(self): #dont bother if we are not visible: if not GTKUtils.is_visible(self.container): return #track which rows still exist: updateObjects = set() appList = self.bbApp.applications.values() + [self.bbApp, self.bbApp.torApp] #update each app: for app in appList: #make sure a row exists for it if not hasattr(app, "treeRow") or not app.treeRow: #insert into the model iter = self.mdl.append(None, (app.name, "", "", "", "", "", "", 1, "white", "black", True)) #set treeRow so we can more easily update in the future app.treeRow = gtk.TreeRowReference(self.mdl, self.mdl.get_string_from_iter(iter)) #update each circ: for app in appList: for circuit in app.circuits: self.objects.add(circuit) #if circuit.treeView is not set, this must be a new circuit if not hasattr(circuit, "treeRow") or not circuit.treeRow: #insert into the model iter = self.mdl.append(self.mdl[circuit.app.treeRow.get_path()].iter, (str(circuit.id), circuit.status, "path", "0", "", "0 sec", "0", 1, "white", "black", True)) #set circuit.treeRow so we can more easily update in the future circuit.treeRow = gtk.TreeRowReference(self.mdl, self.mdl.get_string_from_iter(iter)) #update the information in the row updateObjects.add(circuit) self.update_object(circuit, "circuit") #update each stream: for app in appList: for stream in app.streams.values(): self.objects.add(stream) #if stream.circuit.treeRow is not set, this must be a new circuit if not stream.treeRow: #this might happen if the stream is new and hasnt been assigned a circuit yet if not stream.circuit: return #this should never happen. if not stream.circuit.treeRow: log_msg("%s has a circuit %s with no treeRow?" % (stream.id, stream.circuit.id), 0) return #get the row of the circuit iter = self.mdl[stream.circuit.treeRow.get_path()].iter #insert the stream as a child of the circuit iter = self.mdl.append(iter, (str(stream.id), stream.status, stream.targetHost, "0", "", "0 sec", "0", 0, "white", "black", True)) #set stream.treeRow for easy updating later stream.treeRow = gtk.TreeRowReference(self.mdl, self.mdl.get_string_from_iter(iter)) else: #check that we are under the RIGHT circuit (in case of being reattached): parent = None shouldUpdate = False #do we have a circuit? if stream.circuit: #is that circuit in the GUI yet? if stream.circuit.treeRow: parent = self.mdl[stream.circuit.treeRow.get_path()].iter iter = self.mdl[stream.treeRow.get_path()].iter iter = self.mdl.iter_parent(iter) #do we have a parent row? if iter: #check if it is the RIGHT parent row or not id = int(self.mdl.get_value(iter, 0)) if id != stream.circuit.id: shouldUpdate = True else: shouldUpdate = True else: log_msg("Stream "+str(stream.id)+" has Circuit "+str(stream.circuit.id)+" with no treeRow?", 0) else: #can justput at the end of the list, top level: shouldUpdate = True #remove old row and insert new row if necessary: if shouldUpdate: oldIter = self.mdl[stream.treeRow.get_path()].iter n_columns = self.mdl.get_n_columns() values = self.mdl.get(oldIter, *range(n_columns)) self.mdl.remove(oldIter) newIter = self.mdl.append(parent, values) stream.treeRow = gtk.TreeRowReference(self.mdl, self.mdl.get_string_from_iter(newIter)) #update the information in the row self.update_object(stream, "stream") updateObjects.add(stream) #remove any of our rows that were NOT updated: toRemove = [] for obj in self.objects: if obj not in updateObjects: toRemove.append(obj) for obj in toRemove: self.remove_object(obj) self.objects.remove(obj)