Ticket #123: userlist.py.diff

File userlist.py.diff, 6.8 kB (added by gallows, 20 months ago)
  • userlist.py

    old new  
    1313                self.frame = frame 
    1414                self.userlist = [] 
    1515                 
    16                 self.usersmodel = gtk.ListStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_INT, gobject.TYPE_INT, gobject.TYPE_INT) 
     16                self.usersmodel = gtk.ListStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_INT, gobject.TYPE_INT, gobject.TYPE_INT) 
    1717                cols = InitialiseColumns(self.frame.UserList, 
    1818                        ["", 20, "pixbuf"], 
    19                         [_("User"), 100, "text", self.CellDataFunc], 
     19                        [_("User"), 120, "text", self.CellDataFunc], 
    2020                        [_("Speed"), 0, "text", self.CellDataFunc], 
    2121                        [_("Files"), 0, "text", self.CellDataFunc], 
    2222                        [_("Trusted"), 0, "toggle"], 
     23                        [_("Last seen"), 256, "text", self.CellDataFunc], 
    2324                        [_("Comments"), -1, "edit", self.CellDataFunc], 
    2425                ) 
    25                 cols[0].set_sort_column_id(6) 
     26                cols[0].set_sort_column_id(7) 
    2627                cols[1].set_sort_column_id(1) 
    27                 cols[2].set_sort_column_id(7) 
    28                 cols[3].set_sort_column_id(8) 
     28                cols[2].set_sort_column_id(8) 
     29                cols[3].set_sort_column_id(9) 
    2930                cols[4].set_sort_column_id(4) 
    3031                cols[5].set_sort_column_id(5) 
     32                cols[6].set_sort_column_id(6) 
    3133                renderers = cols[4].get_cell_renderers() 
    3234                for render in renderers: 
    3335                        render.connect('toggled', self.cell_toggle_callback, self.frame.UserList, 4) 
    34                 renderers = cols[5].get_cell_renderers() 
     36                renderers = cols[6].get_cell_renderers() 
    3537                for render in renderers: 
    36                         render.connect('edited', self.cell_edited_callback, self.frame.UserList, 5) 
     38                        render.connect('edited', self.cell_edited_callback, self.frame.UserList, 6) 
    3739                self.frame.UserList.set_model(self.usersmodel) 
    3840                self.frame.UserList.set_property("rules-hint", True) 
    3941                self.privileged = [] 
     
    4345                        if len(user) > 4: 
    4446                                trusted = user[4] 
    4547                        else: 
    46                                 trusted = 0 
    47                         row = [self.frame.GetStatusImage(0), user[0], "0", "0", trusted, user[1], 0, 0, 0] 
     48                                trusted = 0; 
     49 
     50                        if len(user) > 5: 
     51                                last_seen = user[5] 
     52                        else: 
     53                                last_seen = _("Never seen") 
     54 
     55                        row = [self.frame.GetStatusImage(0), user[0], "0", "0", trusted, last_seen, user[1], 0, 0, 0] 
    4856                        if len(user) > 2: 
    4957                                if user[2]: 
    5058                                        self.notify.append(user[0]) 
     
    5260                                        self.privileged.append(user[0]) 
    5361                                if trusted: 
    5462                                        self.trusted.append(user[0]) 
     63 
    5564                        iter = self.usersmodel.append(row) 
    56                         self.userlist.append([user[0], user[1], iter]) 
     65                        self.userlist.append([user[0], user[1], last_seen, iter]) 
    5766                self.usersmodel.set_sort_column_id(1, gtk.SORT_ASCENDING) 
    5867                self.popup_menu = popup = PopupMenu(frame) 
    5968                popup.setup( 
     
    98107                 
    99108                store = treeview.get_model() 
    100109                iter = store.get_iter(index) 
    101                 if pos == 5: 
     110                if pos == 6: 
    102111                        self.SetComment(iter, store, value) 
    103112                 
     113        def SetLastSeen(self, user, online =False): 
     114                import time 
     115 
     116                last_seen = ""  
     117 
     118                if not online: 
     119                        last_seen = time.strftime("%c") 
     120                 
     121                for i in self.userlist: 
     122                                if i[0] == user: 
     123                                        i[2] = last_seen 
     124                                        self.usersmodel.set(i[3], 5, last_seen) 
     125                                        break 
     126                                 
     127                if not online: 
     128                        self.SaveUserList() 
    104129                         
    105130        def SetComment(self, iter, store, comments=None): 
    106131                user = store.get_value(iter, 1) 
     
    108133                        for i in self.userlist: 
    109134                                if i[0] == user: 
    110135                                        i[1] = comments 
    111                                         self.usersmodel.set(i[2], 5, comments) 
     136                                        self.usersmodel.set(iter, 6, comments) 
    112137                                        break 
    113138                        self.SaveUserList() 
    114139                         
    115140        def ConnClose(self): 
    116141                for user in self.userlist: 
    117                         self.usersmodel.set(user[2], 0, self.frame.GetStatusImage(0), 2, "0", 3, "0", 6, 0, 7, 0, 8, 0) 
     142                        self.usersmodel.set(user[3], 0, self.frame.GetStatusImage(0), 2, "0", 3, "0", 7, 0, 8, 0, 9, 0) 
     143 
     144                for user in self.userlist: 
     145                        if self.usersmodel.get(user[3], 5)[0] is "": 
     146                                self.SetLastSeen(user[0]) 
    118147         
    119148        def OnPopupMenu(self, widget, event): 
    120149                items = self.popup_menu.get_children() 
     
    143172                        self.popup_menu.popup(None, None, None, event.button, event.time) 
    144173                 
    145174        def GetIter(self, user): 
    146                 iters = [i[2] for i in self.userlist if i[0] == user] 
     175                iters = [i[3] for i in self.userlist if i[0] == user] 
     176 
    147177                if iters: 
    148178                        return iters[0] 
    149179                else: 
     
    153183                iter = self.GetIter(msg.user) 
    154184                if iter is None: 
    155185                        return 
    156                 if msg.status == self.usersmodel.get_value(iter, 6): 
     186                if msg.status == self.usersmodel.get_value(iter, 7): 
    157187                        return 
    158188                if msg.user in self.notify: 
    159189                        status = [_("User %s is offline"), _("User %s is away"), _("User %s is online")][msg.status] 
    160190                        self.frame.logMessage(status % msg.user) 
    161191                img = self.frame.GetStatusImage(msg.status) 
    162                 self.usersmodel.set(iter, 0, img, 6, msg.status) 
     192                self.usersmodel.set(iter, 0, img, 7, msg.status) 
     193 
     194                if msg.status: # online 
     195                        self.SetLastSeen(msg.user, online=True) 
     196                elif self.usersmodel.get(iter, 5)[0] is "": # disconnected 
     197                        self.SetLastSeen(msg.user) 
    163198 
    164199        def GetUserStats(self, msg): 
    165200                iter = self.GetIter(msg.user) 
     
    167202                        return 
    168203                hspeed = Humanize(msg.avgspeed) 
    169204                hfiles = Humanize(msg.files) 
    170                 self.usersmodel.set(iter, 2, hspeed, 3, hfiles, 7, msg.avgspeed, 8, msg.files) 
     205                self.usersmodel.set(iter, 2, hspeed, 3, hfiles, 8, msg.avgspeed, 9, msg.files) 
    171206 
    172207        def AddToList(self, user): 
    173208                if user in [i[0] for i in self.userlist]: 
    174209                        return 
    175                  
    176                 row = [self.frame.GetStatusImage(0), user, "0", "0", False, "", 0, 0, 0] 
     210 
     211                row = [self.frame.GetStatusImage(0), user, "0", "0", False, _("Never seen"), "", 0, 0, 0] 
    177212                iter = self.usersmodel.append(row) 
    178                 self.userlist.append([user, "", iter]) 
     213                self.userlist.append([user, "", _("Never seen"), iter]) 
    179214                 
    180215                self.SaveUserList() 
    181216                self.frame.np.queue.put(slskmessages.AddUser(user)) 
     
    199234                        for i in self.userlist: 
    200235                                if i[0] == user: 
    201236                                        i[1] = comments 
    202                                         self.usersmodel.set(i[2], 5, comments) 
     237                                        self.usersmodel.set(i[3], 6, comments) 
    203238                                        break 
    204239                        self.SaveUserList() 
    205240 
    206241        def SaveUserList(self): 
    207242                l = [] 
     243 
    208244                for i in self.userlist: 
    209                         l.append([i[0], i[1], (i[0] in self.notify), (i[0] in self.privileged), (i[0] in self.trusted)]) 
     245                        l.append([i[0], i[1], (i[0] in self.notify), (i[0] in self.privileged), (i[0] in self.trusted), i[2]]) 
    210246                self.frame.np.config.sections["server"]["userlist"] = l 
    211247                self.frame.np.config.writeConfig() 
    212248 
     
    220256                for i in self.userlist: 
    221257                        if i[0] == user: 
    222258                                self.userlist.remove(i) 
    223                                 self.usersmodel.remove(i[2]) 
     259                                self.usersmodel.remove(i[3]) 
    224260                                break 
    225261                self.SaveUserList() 
    226262                for widget in self.frame.BuddiesComboEntries: 
     
    259295                                self.trusted.append(user) 
    260296                for i in self.userlist: 
    261297                        if i[0] == user: 
    262                                 self.usersmodel.set(i[2], 4, (user in self.trusted)) 
     298                                self.usersmodel.set(i[3], 4, (user in self.trusted)) 
    263299                self.SaveUserList() 
    264300