def show_tag(tag): """Find all entries for a tag and call show_date_list.""" dates = [] for year, month in get_all_months(conf['data_dir']): m = Metadata.get(year, month) if tag in m.tags: for day in m.tags[tag]: dates.append(datetime.date(year, month, day)) if not dates: raise WLError('No entries for tag %s' % tag) else: show_date_list(tag, dates)
def show_tags(area_id=None, text_area=None): """Show all tags sorted by entries number as a scrollable list.""" screen = ScreenManager.screen screen.addstr(0, 0, 'loading...') screen.refresh() tags = {} for year, month in get_all_months(conf['data_dir']): m = Metadata.get(year, month) for tag, days in m.tags.items(): for day in days: date = datetime.date(year, month, day) try: tags[tag].append(date) except KeyError: tags[tag] = [date] if not tags: raise WLError('No tags found') items = sorted(sorted(tags.items(), key=lambda i: i[0]), key=lambda i: len(i[1]), reverse=True) tl = ['%s (%d)' % (item[0], len(item[1])) for item in items] sl = ScrollableList(tl, area_id=area_id) if text_area: text_area.set_title('Last entry:') else: text_area = TextArea() text_area.set_title('Last entry:') ScreenManager.draw_all() def tag_info(index): tag, dates = items[index] d = dates[-1] text_area.show_text(Metadata.get(d.year, d.month).text(d.day)) tag_info(sl.get_current_index()) while 1: try: kn = curses.keyname(sl.window.getch()) except KeyboardInterrupt: break except ValueError: continue if kn in Config.general_keys['quit']: raise WLQuit if kn in Config.general_keys['quit_mode']: break if kn == 'KEY_RESIZE': ScreenManager.resize() if sl.hidden: continue elif kn in Config.tags_keys['details']: tag, dates = items[sl.get_current_index()] show_date_list(tag, dates, sl.area_id, text_area) ScreenManager.restore_area(sl.area_id) sl.reinit() text_area.set_title('Last entry:') tag_info(sl.get_current_index()) else: sl.handle_keypress(kn) tag_info(sl.get_current_index()) Metadata.write_all()