def get_user_stats(self, msg): if msg.user in self.users: tab = self.users[msg.user] tab.speed.set_text(_("Speed: %s") % human_speed(msg.avgspeed)) tab.filesshared.set_text(_("Files: %s") % humanize(msg.files)) tab.dirsshared.set_text(_("Directories: %s") % humanize(msg.dirs))
def get_user_stats(self, msg): if msg.user not in self.recommendation_users: return self.recommendation_users_model.set( self.recommendation_users[msg.user], 2, human_speed(msg.avgspeed), 3, humanize(msg.files), 5, msg.avgspeed, 6, msg.files)
def get_user_stats(self, msg): user = msg.user iterator = self.get_iter(user) if iterator is None: return hspeed = human_speed(msg.avgspeed) hfiles = humanize(msg.files) self.usersmodel.set_value(iterator, 3, hspeed) self.usersmodel.set_value(iterator, 4, hfiles) self.usersmodel.set_value( iterator, 11, GObject.Value(GObject.TYPE_UINT64, msg.avgspeed)) self.usersmodel.set_value( iterator, 12, GObject.Value(GObject.TYPE_UINT64, msg.files))
def get_user_stats(self, msg): user = msg.user iterator = self.get_iter(user) if iterator is None: return country = msg.country hspeed = human_speed(msg.avgspeed) hfiles = humanize(msg.files) self.usersmodel.set(iterator, 3, hspeed, 4, hfiles, 11, msg.avgspeed, 12, msg.files) if country is not None and country != "": country = "flag_" + country self.set_user_flag(user, country)
def selected_results_all_data(self, model, path, iterator, data): if iterator in self.selected_users: return user = model.get_value(iterator, 0) filename = model.get_value(iterator, 2) fullname = model.get_value(iterator, 10) size = speed = "0" length = None queue = immediate = num = country = bitratestr = "" for transfer in self.frame.np.transfers.downloads: if transfer.user == user and fullname == transfer.filename: size = human_size(transfer.size) try: speed = human_speed(transfer.speed) except Exception: pass bitratestr = str(transfer.bitrate) length = str(transfer.length) break else: return directory = fullname.rsplit("\\", 1)[0] data[len(data)] = { "user": user, "fn": fullname, "position": num, "filename": filename, "directory": directory, "size": size, "speed": speed, "queue": queue, "immediate": immediate, "bitrate": bitratestr, "length": length, "country": country }
def add_user_results(self, msg, user, country): if user in self.users: return self.users.add(user) counter = len(self.all_data) + 1 inqueue = msg.inqueue ulspeed = msg.ulspeed h_speed = human_speed(ulspeed) if msg.freeulslots: imdl = "Y" inqueue = 0 else: imdl = "N" h_queue = humanize(inqueue) append = False maxstoredresults = self.searches.maxstoredresults for result in msg.list: if counter > maxstoredresults: break fullpath = result[1] fullpath_lower = fullpath.lower() if any(word in fullpath_lower for word in self.searchterm_words_ignore): """ Filter out results with filtered words (e.g. nicotine -music) """ log.add_search(_("Filtered out excluded search result " + fullpath + " from user " + user)) continue if not any(word in fullpath_lower for word in self.searchterm_words_include): """ Some users may send us wrong results, filter out such ones """ log.add_search(_("Filtered out inexact or incorrect search result " + fullpath + " from user " + user)) continue fullpath_split = reversed(fullpath.split('\\')) name = next(fullpath_split) directory = '\\'.join(fullpath_split) size = result[2] h_size = human_size(size) h_bitrate, bitrate, h_length = get_result_bitrate_length(size, result[4]) self.append([counter, user, self.get_flag(user, country), imdl, h_speed, h_queue, directory, name, h_size, h_bitrate, h_length, bitrate, fullpath, country, size, ulspeed, inqueue]) append = True counter += 1 if append: # If this search wasn't initiated by us (e.g. wishlist), and the results aren't spoofed, show tab if not self.showtab: self.searches.show_tab(self, self.id, self.text, self.mode) self.showtab = True # Update counter self.Counter.set_text("Results: %d/%d" % (self.numvisibleresults, len(self.all_data))) # Update tab notification self.frame.searches.request_changed(self.Main) if self.frame.MainNotebook.get_current_page() != self.frame.MainNotebook.page_num(self.frame.searchvbox): self.frame.SearchTabLabel.get_child().set_image(self.frame.images["online"])
def update_specific(self, transfer=None): currentbytes = transfer.currentbytes place = transfer.place hspeed = helapsed = "" if currentbytes is None: currentbytes = 0 status = transfer.status or "" hstatus = self.translate_status(status) try: size = int(transfer.size) if size < 0 or size > maxsize: size = 0 except TypeError: size = 0 hsize = "%s / %s" % (human_size(currentbytes), human_size(size)) if transfer.modifier: hsize += " (%s)" % transfer.modifier speed = transfer.speed or 0 elapsed = transfer.timeelapsed or 0 left = transfer.timeleft or "" if speed > 0: speed = float(speed) hspeed = human_speed(speed) if elapsed > 0: helapsed = self.frame.np.transfers.get_time(elapsed) try: icurrentbytes = int(currentbytes) percent = min(((100 * icurrentbytes) / int(size)), 100) except Exception: icurrentbytes = 0 percent = 100 # Modify old transfer if transfer.iter is not None: initer = transfer.iter self.transfersmodel.set_value(initer, 3, hstatus) self.transfersmodel.set_value(initer, 4, str(place)) self.transfersmodel.set_value( initer, 5, GObject.Value(GObject.TYPE_UINT64, percent)) self.transfersmodel.set_value(initer, 6, hsize) self.transfersmodel.set_value(initer, 7, hspeed) self.transfersmodel.set_value(initer, 8, helapsed) self.transfersmodel.set_value(initer, 9, left) self.transfersmodel.set_value(initer, 11, status) self.transfersmodel.set_value( initer, 12, GObject.Value(GObject.TYPE_UINT64, size)) self.transfersmodel.set_value( initer, 13, GObject.Value(GObject.TYPE_UINT64, currentbytes)) self.transfersmodel.set_value( initer, 14, GObject.Value(GObject.TYPE_UINT64, speed)) self.transfersmodel.set_value( initer, 15, GObject.Value(GObject.TYPE_UINT64, elapsed)) self.transfersmodel.set_value( initer, 17, GObject.Value(GObject.TYPE_UINT64, place)) else: fn = transfer.filename user = transfer.user shortfn = fn.split("\\")[-1] filecount = 1 if self.tree_users != "ungrouped": # Group by folder or user empty_int = 0 empty_str = "" if user not in self.users: # Create Parent if it doesn't exist # ProgressRender not visible (last column sets 4th column) self.users[user] = self.transfersmodel.insert_with_values( None, -1, self.column_numbers, [ user, empty_str, empty_str, empty_str, empty_str, empty_int, empty_str, empty_str, empty_str, empty_str, empty_str, empty_str, empty_int, empty_int, empty_int, empty_int, filecount, empty_int ]) parent = self.users[user] if self.tree_users == "folder_grouping": # Group by folder """ Paths can be empty if files are downloaded individually, make sure we don't add files to the wrong user in the TreeView """ path = transfer.path user_path = user + path reverse_path = '/'.join(reversed(path.split('/'))) if user_path not in self.paths: self.paths[ user_path] = self.transfersmodel.insert_with_values( self.users[user], -1, self.column_numbers, [ user, reverse_path, empty_str, empty_str, empty_str, empty_int, empty_str, empty_str, empty_str, empty_str, empty_str, empty_str, empty_int, empty_int, empty_int, empty_int, filecount, empty_int ]) parent = self.paths[user_path] else: # No grouping if user not in self.users: # Insert dummy value. We use this list to get the total number of users self.users[user] = 0 parent = None # Add a new transfer if self.tree_users == "folder_grouping": # Group by folder, path not visible path = "" else: path = '/'.join(reversed(transfer.path.split('/'))) iterator = self.transfersmodel.insert_with_values( parent, -1, self.column_numbers, (user, path, shortfn, hstatus, str(place), GObject.Value(GObject.TYPE_UINT64, percent), hsize, hspeed, helapsed, left, fn, status, GObject.Value(GObject.TYPE_UINT64, size), GObject.Value(GObject.TYPE_UINT64, icurrentbytes), GObject.Value(GObject.TYPE_UINT64, speed), GObject.Value(GObject.TYPE_UINT64, elapsed), GObject.Value(GObject.TYPE_UINT64, filecount), GObject.Value(GObject.TYPE_UINT64, place))) transfer.iter = iterator # Expand path if parent is not None: transfer_path = self.transfersmodel.get_path(iterator) if self.tree_users == "folder_grouping": # Group by folder, we need the user path to expand it user_path = self.transfersmodel.get_path(self.users[user]) else: user_path = None self.expand(transfer_path, user_path)
def update_parent_row(self, initer): speed = 0.0 percent = totalsize = position = 0 hspeed = helapsed = left = "" elapsed = 0 filecount = 0 salientstatus = "" extensions = {} iterator = self.transfersmodel.iter_children(initer) while iterator is not None: status = self.transfersmodel.get_value(iterator, 11) if salientstatus in ( '', "Finished", "Filtered"): # we prefer anything over ''/finished salientstatus = status filename = self.transfersmodel.get_value(iterator, 10) parts = filename.rsplit('.', 1) if len(parts) == 2: ext = parts[1] try: extensions[ext.lower()] += 1 except KeyError: extensions[ext.lower()] = 1 if status == "Filtered": # We don't want to count filtered files when calculating the progress iterator = self.transfersmodel.iter_next(iterator) continue elapsed += self.transfersmodel.get_value(iterator, 15) totalsize += self.transfersmodel.get_value(iterator, 12) position += self.transfersmodel.get_value(iterator, 13) filecount += self.transfersmodel.get_value(iterator, 16) if status == "Transferring": speed += float(self.transfersmodel.get_value(iterator, 14)) left = self.transfersmodel.get_value(iterator, 9) if status in ("Transferring", "Banned", "Getting address", "Establishing connection"): salientstatus = status iterator = self.transfersmodel.iter_next(iterator) if totalsize > 0: percent = min(((100 * position) / totalsize), 100) else: percent = 100 if speed > 0: hspeed = human_speed(speed) left = self.frame.np.transfers.get_time( (totalsize - position) / speed) if elapsed > 0: helapsed = self.frame.np.transfers.get_time(elapsed) if len(extensions) == 0: extensions = "" elif len(extensions) == 1: extensions = " (" + self.extension_list_template % { 'ext': list(extensions.keys())[0] } + ")" else: extensionlst = [(extensions[key], key) for key in extensions] extensionlst.sort(reverse=True) extensions = " (" + ", ".join( [str(count) + " " + ext for (count, ext) in extensionlst]) + ")" self.transfersmodel.set_value( initer, 2, self.files_template % {'number': filecount} + extensions) self.transfersmodel.set_value(initer, 3, self.translate_status(salientstatus)) self.transfersmodel.set_value( initer, 5, GObject.Value(GObject.TYPE_UINT64, percent)) self.transfersmodel.set_value( initer, 6, "%s / %s" % (human_size(position), human_size(totalsize))) self.transfersmodel.set_value(initer, 7, hspeed) self.transfersmodel.set_value(initer, 8, helapsed) self.transfersmodel.set_value(initer, 9, left) self.transfersmodel.set_value(initer, 11, salientstatus) self.transfersmodel.set_value( initer, 12, GObject.Value(GObject.TYPE_UINT64, totalsize)) self.transfersmodel.set_value( initer, 13, GObject.Value(GObject.TYPE_UINT64, position)) self.transfersmodel.set_value( initer, 14, GObject.Value(GObject.TYPE_UINT64, speed)) self.transfersmodel.set_value( initer, 15, GObject.Value(GObject.TYPE_UINT64, elapsed)) self.transfersmodel.set_value( initer, 16, GObject.Value(GObject.TYPE_UINT64, filecount))
def add_user_results(self, msg, user, country): if user in self.users: return self.users.add(user) counter = len(self.all_data) + 1 inqueue = msg.inqueue ulspeed = msg.ulspeed h_speed = human_speed(ulspeed) if msg.freeulslots: imdl = "Y" inqueue = 0 else: imdl = "N" color_id = (imdl == "Y" and "search" or "searchq") color = self.frame.np.config.sections["ui"][color_id] or None h_queue = humanize(inqueue) append = False maxstoredresults = self.searches.maxstoredresults for result in msg.list: if counter > maxstoredresults: break fullpath = result[1] fullpath_lower = fullpath.lower() if any(word in fullpath_lower for word in self.searchterm_words_ignore): """ Filter out results with filtered words (e.g. nicotine -music) """ log.add_search(_("Filtered out excluded search result " + fullpath + " from user " + user)) continue if not any(word in fullpath_lower for word in self.searchterm_words_include): """ Some users may send us wrong results, filter out such ones """ log.add_search(_("Filtered out inexact or incorrect search result " + fullpath + " from user " + user)) continue fullpath_split = reversed(fullpath.split('\\')) name = next(fullpath_split) directory = '\\'.join(fullpath_split) size = result[2] h_size = human_size(size) h_bitrate, bitrate, h_length, length = get_result_bitrate_length(size, result[4]) self.append( [ GObject.Value(GObject.TYPE_UINT64, counter), user, GObject.Value(GObject.TYPE_OBJECT, self.frame.get_flag_image(country)), imdl, h_speed, h_queue, directory, name, h_size, h_bitrate, h_length, GObject.Value(GObject.TYPE_UINT64, bitrate), fullpath, country, GObject.Value(GObject.TYPE_UINT64, size), GObject.Value(GObject.TYPE_UINT64, ulspeed), GObject.Value(GObject.TYPE_UINT64, inqueue), GObject.Value(GObject.TYPE_UINT64, length), GObject.Value(GObject.TYPE_STRING, color) ] ) append = True counter += 1 if append: # If this search wasn't initiated by us (e.g. wishlist), and the results aren't spoofed, show tab if not self.showtab: self.searches.show_tab(self, self.id, self.text, self.mode) self.showtab = True # Update number of results self.update_result_counter() # Update tab notification self.frame.searches.request_changed(self.Main) self.frame.request_tab_icon(self.frame.SearchTabLabel)
def update_specific(self, transfer=None): currentbytes = transfer.currentbytes place = transfer.place hspeed = helapsed = "" if currentbytes is None: currentbytes = 0 status = transfer.status hstatus = self.translate_status(status) try: size = int(transfer.size) if size < 0 or size > maxsize: size = 0 except TypeError: size = 0 hsize = "%s / %s" % (human_size(currentbytes), human_size(size)) if transfer.modifier: hsize += " (%s)" % transfer.modifier speed = transfer.speed or 0 elapsed = transfer.timeelapsed or 0 left = transfer.timeleft if speed > 0: speed = float(speed) hspeed = human_speed(speed) if elapsed > 0: helapsed = self.frame.np.transfers.get_time(elapsed) try: icurrentbytes = int(currentbytes) if icurrentbytes == int(transfer.size): percent = 100 else: percent = ((100 * icurrentbytes) / int(size)) except Exception: icurrentbytes = 0 percent = 0 # Modify old transfer if transfer.iter is not None: self.transfersmodel.set(transfer.iter, 3, hstatus, 4, str(place), 5, percent, 6, str(hsize), 7, hspeed, 8, helapsed, 9, left, 11, status, 12, size, 13, currentbytes, 14, speed, 15, elapsed, 17, place) else: fn = transfer.filename user = transfer.user shortfn = fn.split("\\")[-1] filecount = 1 if self.tree_users > 0: # Group by folder or user if user not in self.users: # Create Parent if it doesn't exist # ProgressRender not visible (last column sets 4th column) self.users[user] = self.transfersmodel.append( None, [ user, "", "", "", "", 0, "", "", "", "", "", "", 0, 0, 0, 0, filecount, 0 ]) parent = self.users[user] if self.tree_users == 1: # Group by folder """ Paths can be empty if files are downloaded individually, make sure we don't add files to the wrong user in the TreeView """ path = transfer.path user_path = user + path reverse_path = '/'.join(reversed(path.split('/'))) if user_path not in self.paths: self.paths[user_path] = self.transfersmodel.append( self.users[user], [ user, reverse_path, "", "", "", 0, "", "", "", "", "", "", 0, 0, 0, 0, filecount, 0 ]) parent = self.paths[user_path] else: # No grouping if user not in self.users: # Insert dummy value. We use this list to get the total number of users self.users[user] = 0 parent = None # Add a new transfer if self.tree_users == 1: # Group by folder, path not visible path = None else: path = '/'.join(reversed(transfer.path.split('/'))) iterator = self.transfersmodel.append( parent, (user, path, shortfn, status, str(place), percent, str(hsize), hspeed, helapsed, left, fn, transfer.status, size, icurrentbytes, speed, elapsed, filecount, place)) transfer.iter = iterator # Expand path if parent is not None: path = self.transfersmodel.get_path(iterator) self.expand(path)