Esempio n. 1
0
 def run_searches(self):
     while True:
         x = self.search_tasks.get()
         if x is None:
             break
         search_query, current_name = x
         try:
             manifest = get_manifest() or {}
             spine = manifest.get('spine', ())
             idx_map = {name: i for i, name in enumerate(spine)}
             spine_idx = idx_map.get(current_name, -1)
         except Exception:
             import traceback
             traceback.print_exc()
             spine_idx = -1
         if spine_idx < 0:
             self.results_found.emit(SearchFinished(search_query))
             continue
         num_in_spine = len(spine)
         result_num = 0
         for n in range(num_in_spine):
             idx = (spine_idx + n) % num_in_spine
             name = spine[idx]
             counter = Counter()
             try:
                 for i, result in enumerate(
                         search_in_name(name, search_query)):
                     before, text, after, offset = result
                     q = (before or '')[-5:] + text + (after or '')[:5]
                     result_num += 1
                     self.results_found.emit(
                         SearchResult(search_query, before, text, after, q,
                                      name, idx, counter[q], offset,
                                      result_num))
                     counter[q] += 1
             except Exception:
                 import traceback
                 traceback.print_exc()
         self.results_found.emit(SearchFinished(search_query))
Esempio n. 2
0
def get_toc_data():
    manifest = get_manifest() or {}
    spine = manifest.get('spine') or []
    spine_toc_map = {name: [] for name in spine}

    def process_node(node):
        items = spine_toc_map.get(node['dest'])
        if items is not None:
            items.append(node)
        children = node.get('children')
        if children:
            for child in children:
                process_node(child)

    toc = manifest.get('toc')
    if toc:
        process_node(toc)
    return {
        'spine': tuple(spine),
        'spine_toc_map': spine_toc_map,
        'spine_idx_map': {name: idx
                          for idx, name in enumerate(spine)}
    }