Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 def draw(self):
   if self.shouldDraw:
     if GTKUtils.is_visible(self):
       self.queue_draw()
   return True
Exemplo n.º 5
0
 def draw(self):
     if self.shouldDraw:
         if GTKUtils.is_visible(self):
             self.queue_draw()
     return True
Exemplo n.º 6
0
  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]
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
 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)