def generate(self): colors = Config.color.table title_bar = style( '|', fg=colors.bar.fg, bg=colors.header.bg,) bar = style( '|', fg=colors.bar.fg, ) # TITLE -------------------------------------------- title = ' %s' % self.table.title.text title = title.ljust(Config.console_columns) title = style(title, bold=True, fg=colors.title.fg, bg=colors.title.bg) click.echo(title) # HEADER ROW --------------------------------------- header = self.table.header header_row = [style(' ', bg=colors.header.bg, fg=colors.header.fg)] NUMBER_SPACE = 1 BAR_COUNT = len(header.widths) flex_width = (Config.console_columns - sum(header.widths) - NUMBER_SPACE - BAR_COUNT) for title, width in zip(header.titles, header.widths): if width == 0: width = flex_width title = title[:width].ljust(width) header_row.append( style(title, bg=colors.header.bg, fg=colors.header.fg, ) ) header_row = title_bar.join(header_row) click.echo(header_row) # BODY ROWS ----------------------------------------- key = """abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW""" key += """XYZ0123456789!#$%&()*+-./:;<=>?@[\\]^_`|}{"'~""" if self.table_type == 'download': options = '\nLetter, [s]kip, skip [r]est of show, [q]uit or [m]ark as downloaded: ' key = re.sub('[srqm]', '', key) elif self.table_type == 'nondb': options = '\nLetter or [q]uit: ' key = re.sub('[q]', '', key) elif self.table_type == 'copy': options = '\nLetter, [a]ll or [q]uit: ' key = re.sub('[aq]', '', key) elif self.table_type == 'redownload': options = '\nLetter or [q]uit: ' key = re.sub('[q]', '', key) self.table.body = self.table.body[:self.display_count] for row, counter in zip(self.table.body, key): # look through the title cell to see if any have 720 or # 1080 in the string and mark this row as high def. is_hidef = False if '720p' in row[0] or '1080p' in row[0]: is_hidef = True row_arr = [counter] for i, width, align in zip(row, header.widths, header.alignments): i = str(i) if width == 0: width = flex_width row_item = i row_item = U.snip(row_item, width) row_item = row_item.strip() if align == '<': row_item = row_item.ljust(width) if align == '>': row_item = row_item.rjust(width) if align == '=': row_item = row_item.center(width) else: row_item = row_item.ljust(width) # if hi def, set the foreground to green if is_hidef: row_item = style(row_item, fg=colors.hidef.fg) row_arr.append(row_item) click.echo(bar.join(row_arr)) # USER INPUT --------------------------------------- choice = False while not choice: choice = self.ask(options, key) return choice
def generate(self): colors = Config.color.table title_bar = style( '|', fg=colors.bar.fg, bg=colors.header.bg, ) bar = style( '|', fg=colors.bar.fg, ) # TITLE -------------------------------------------- title = ' %s' % self.table.title.text title = title.ljust(Config.console_columns) title = style(title, bold=True, fg=colors.title.fg, bg=colors.title.bg) click.echo(title) # HEADER ROW --------------------------------------- header = self.table.header header_row = [style(' ', bg=colors.header.bg, fg=colors.header.fg)] NUMBER_SPACE = 1 BAR_COUNT = len(header.widths) flex_width = (Config.console_columns - sum(header.widths) - NUMBER_SPACE - BAR_COUNT) for title, width, alignment in zip(header.titles, header.widths, header.alignments): if width == 0: width = flex_width if alignment == '<': title = title[:width].ljust(width) elif alignment == '>': title = title[:width].rjust(width) elif alignment == '=': title = title[:width].center(width) else: title = title[:width].ljust(width) header_row.append( style( title, bg=colors.header.bg, fg=colors.header.fg, )) header_row = title_bar.join(header_row) click.echo(header_row) # BODY ROWS ----------------------------------------- # key has the s, r, q, m removed to not interfere with the # ask_user options. This list can have anything, as long as # they are single characters. This is aprox 90 characters. key = """abcdefghijklnoptuvwxyzABCDEFGHIJKLMNOPQRSTUVW""" key += """XYZ0123456789!#$%&()*+-./:;<=>?@[\\]^_`{|}"'~""" key = list(key) self.table.body = self.table.body[:self.display_count] for row, counter in zip(self.table.body, key): # look through the title cell to see if any have 720 or # 1080 in the string and mark this row as high def. is_hidef = False if '720p' in row[0] or '1080p' in row[0]: is_hidef = True row_arr = [counter] for i, width, align in zip(row, header.widths, header.alignments): i = str(i) if width == 0: width = flex_width row_item = i row_item = U.snip(row_item, width) row_item = row_item.strip() if align == '<': row_item = row_item.ljust(width) if align == '>': row_item = row_item.rjust(width) if align == '=': row_item = row_item.center(width) else: row_item = row_item.ljust(width) # if hi def, set the foreground to green if is_hidef: row_item = style(row_item, fg=colors.hidef.fg) row_arr.append(row_item) click.echo(bar.join(row_arr)) # USER INPUT --------------------------------------- choice = False while not choice: if self.is_postdownload: choice = self.ask_simple(key) else: if self.nondb: choice = self.ask_simple(key) else: choice = self.ask(key) return choice