Index: channels/_generic.py ================================================================== --- channels/_generic.py +++ channels/_generic.py @@ -183,16 +183,26 @@ # update treeview content def load(self, category, force=False): # get data from cache or download if (force or not category in self.streams): + __print__(dbg.PROC, "load", "update_streams") new_streams = self.update_streams(category) if new_streams: - - # modify - [self.postprocess(row) for row in new_streams] + + # check and modify entry; + # assert that title and url are present + modified = [] + for row in new_streams: + if None in [row.get("title"), row.get("url")]: + next + try: + modified.append( self.postprocess(row) ) + except Exception as e: + __print__(e, dbg.ERR, row) + new_streams = modified # don't lose forgotten streams if conf.retain_deleted: self.streams[category] = new_streams + self.deleted_streams(new_streams, self.streams.get(category,[])) else: @@ -243,11 +253,17 @@ diff.append(row) return diff # prepare data for display + # + # - favourite icon + # - or deleted icon + # def prepare(self, streams): + __print__(dbg.PROC, "prepare", streams) + for i,row in enumerate(streams): # oh my, at least it's working # at start the bookmarks module isn't fully registered at instantiation in parent.channels{} - might want to do that step by step rather # then display() is called too early to take effect - load() & co should actually be postponed to when a notebook tab gets selected first # => might be fixed now, 1.9.8 @@ -273,11 +289,15 @@ streams[i]["favicon"] = favicon.file(homepage_url) return streams - # data preparations directly after reload + # data preparations directly after reload + # + # - drop shoutcast homepage links + # - or find homepage name in title + # def postprocess(self, row): # remove non-homepages from shoutcast if row.get("homepage") and row["homepage"].find("//yp.shoutcast.")>0: row["homepage"] = ""