class GeneralAudiosWorker: def __init__(self, report_bundle): self.report_bundle = report_bundle self.renderizer = Renderizer(self.report_bundle.report_folder) def run(self): try: self.engine, self.dbsession = db_connect() print("Renderizando audios gerais") query = self.dbsession.query(File).filter(File.type_ == 'audio') query = self.report_bundle.filter(File, query) n_pages = get_page( query, only_count=True, per_page=config_manager.report_config['per_page']['audio']) for i in range(n_pages): page = i + 1 pagination = get_page( query, page=page, per_page=config_manager.report_config['per_page']['audio']) # Adiciona informação nos anexos se o chat foi incluido ou não add_chat_included(pagination['items']) context = {'pagination': pagination} dest_file = os.path.join(self.report_bundle.report_folder, 'html_files', f"general-audios_page_{page}.html") self.renderizer.render_template('general-audios.html', dest_file, context) finally: self.engine.dispose()
def generate_html_files(self): start_time = datetime.now() self.renderizer = Renderizer(self.report_bundle.report_folder) # self.copy_files() self.copy_needed_files() print("Renderizando arquivos HTML...") old_unknow_avatar = settings.unknow_avatar settings.unknow_avatar = "assets\\desconhecido.html" items_available = self.get_items_available() if 'chat' in items_available: self.render_chats() if 'call' in items_available: self.render_calls() if 'sms' in items_available: self.render_smss() if 'contact' in items_available: self.render_contacts() processes = [] data = {'report_bundle': self.report_bundle} if 'image' in items_available: p = Process(target=general_images_worker, args=(data,)) p.start() processes.append(p) if 'video' in items_available: p = Process(target=general_videos_worker, args=(data,)) p.start() processes.append(p) if 'audio' in items_available: p = Process(target=general_audios_worker, args=(data,)) p.start() processes.append(p) if 'document' in items_available: p = Process(target=general_documents_worker, args=(data,)) p.start() processes.append(p) for p in processes: p.join() self.render_highlights() self.render_home_page() self.render_main_page(items_available) settings.unknow_avatar = old_unknow_avatar delta = datetime.now() - start_time print(f"\nProcessamento finalizado. Tempo gasto: {delta}")
def render_chat_message_word(self, tags, per_figure=5): renderizer = Renderizer(".") query = db_session.query(Message).filter( Message.tags.any(Tag.id.in_(tags))).order_by( Message.chat_id.asc(), Message.timestamp.asc()) n_messages = query.count() n_parts = int(n_messages / per_figure) rest = n_messages % per_figure generated_files = [] for i in range(n_parts): first = i * per_figure messages = query.offset(first).limit(per_figure).all() for message in messages: for attachment in message.attachments: if attachment.type_ == "video" and attachment.thumb_path: path = os.path.join(os.getcwd(), attachment.thumb_path) else: path = os.path.join(os.getcwd(), attachment.extracted_path) attachment.temp_link = pathlib.Path(path).as_uri() context = {"messages": messages, 'assets_url': self.assets_url} filename = f"{self.temp_folder}\\chat_messages_word_{i+1}.html" renderizer.render_template("chat_messages_word.html", filename, context) generated_files.append(filename) if rest > 0: first = n_parts * per_figure context = { "items": query.offset(first).limit(first + rest).all(), 'assets_url': self.assets_url } filename = f"{self.temp_folder}\\chat_messages_word_{n_parts + rest}.html" renderizer.render_template("chat_messages_word.html", filename, context) generated_files.append(filename) return generated_files
def __init__(self, report_bundle): self.report_bundle = report_bundle self.renderizer = Renderizer(self.report_bundle.report_folder)
class ChatWorker: def __init__(self, report_bundle): self.report_bundle = report_bundle self.renderizer = Renderizer(self.report_bundle.report_folder) def run(self, chat_id): self.engine, self.dbsession = db_connect() chat = self.dbsession.query(Chat).get(chat_id) print(f"Renderizando chat {chat.friendly_identifier} ({chat.source})") query = self.dbsession.query(Message).filter( Message.analise_attachment_types.like("%image%"), Message.chat == chat) total_images = self.report_bundle.filter(Message, query).count() query = self.dbsession.query(Message).filter( Message.analise_attachment_types.like("%audio%"), Message.chat == chat) total_audios = self.report_bundle.filter(Message, query).count() query = self.dbsession.query(Message).filter( Message.analise_attachment_types.like("%video%"), Message.chat == chat) total_videos = self.report_bundle.filter(Message, query).count() query = self.dbsession.query(Message).filter_by( chat_id=chat.id).order_by(Message.timestamp.asc()) query = self.report_bundle.filter(Message, query) n_pages = get_page( query, only_count=True, per_page=config_manager.report_config['per_page']['chat']) for i in range(n_pages): page = i + 1 pagination = get_page( query, page=page, per_page=config_manager.report_config['per_page']['chat']) context = { "pagination": pagination, 'chat': chat, 'total_images': total_images, 'total_videos': total_videos, 'total_audios': total_audios } dest_file = os.path.join(self.report_bundle.report_folder, 'html_files', f"chat{chat.id}_page_{page}.html") self.renderizer.render_template('chat.html', dest_file, context) for message in pagination['items']: message.page_renderized = page self.dbsession.add(message) self.dbsession.commit() # Audio pages query = self.dbsession.query(Message).filter( Message.analise_attachment_types.like("%audio%"), Message.chat == chat) query = self.report_bundle.filter(Message, query) n_pages = get_page( query, only_count=True, per_page=config_manager.report_config['per_page']['audio']) for i in range(n_pages): page = i + 1 pagination = get_page( query, page=page, per_page=config_manager.report_config['per_page']['audio']) context = {'pagination': pagination, 'chat': chat} dest_file = os.path.join(self.report_bundle.report_folder, 'html_files', f"audios{chat.id}_page_{page}.html") self.renderizer.render_template('audios.html', dest_file, context) # Image pages query = self.dbsession.query(Message).filter( Message.analise_attachment_types.like("%image%"), Message.chat == chat) query = self.report_bundle.filter(Message, query) n_pages = get_page( query, only_count=True, per_page=config_manager.report_config['per_page']['image']) for i in range(n_pages): page = i + 1 pagination = get_page( query, page=page, per_page=config_manager.report_config['per_page']['image']) context = {'pagination': pagination, 'chat': chat} dest_file = os.path.join(self.report_bundle.report_folder, 'html_files', f"images{chat.id}_page_{page}.html") self.renderizer.render_template('images.html', dest_file, context) # Video pages query = self.dbsession.query(Message).filter( Message.analise_attachment_types.like("%video%"), Message.chat == chat) query = self.report_bundle.filter(Message, query) n_pages = get_page( query, only_count=True, per_page=config_manager.report_config['per_page']['video']) for i in range(n_pages): page = i + 1 pagination = get_page( query, page=page, per_page=config_manager.report_config['per_page']['video']) context = {'pagination': pagination, 'chat': chat} dest_file = os.path.join(self.report_bundle.report_folder, 'html_files', f"videos{chat.id}_page_{page}.html") self.renderizer.render_template('videos.html', dest_file, context) # Participants context = {'participants': chat.participants, 'chat': chat} dest_file = os.path.join(self.report_bundle.report_folder, 'html_files', f"participants{chat.id}.html") self.renderizer.render_template('participants.html', dest_file, context) sources = get_chat_sources(self.report_bundle.filter(Chat)) for source in sources: print( f"Renderizando todos os áudios de bate-papo do aplicativo {source}" ) # All Audios query = self.dbsession.query(Message).join(Chat).filter( Message.analise_attachment_types.like("%audio%"), Chat.source == source) query = self.report_bundle.filter(Message, query) n_pages = get_page( query, only_count=True, per_page=config_manager.report_config['per_page']['audio']) for i in range(n_pages): page = i + 1 pagination = get_page( query, page=page, per_page=config_manager.report_config['per_page']['audio']) context = {'pagination': pagination, 'source': source} dest_file = os.path.join( self.report_bundle.report_folder, 'html_files', f"all-audios{source}_page_{page}.html") self.renderizer.render_template('all-audios.html', dest_file, context) # All Images print( f"Renderizando todas as imagens de bate-papo do aplicativo {source}" ) query = self.dbsession.query(Message).join(Chat).filter( Message.analise_attachment_types.like("%image%"), Chat.source == source) query = self.report_bundle.filter(Message, query) n_pages = get_page( query, only_count=True, per_page=config_manager.report_config['per_page']['image']) for i in range(n_pages): page = i + 1 pagination = get_page( query, page=page, per_page=config_manager.report_config['per_page']['image']) context = {'pagination': pagination, 'source': source} dest_file = os.path.join( self.report_bundle.report_folder, 'html_files', f"all-images{source}_page_{page}.html") self.renderizer.render_template('all-images.html', dest_file, context) # All Videos print( f"Renderizando todos os videos de bate-papo do aplicativo {source}" ) query = self.dbsession.query(Message).join(Chat).filter( Message.analise_attachment_types.like("%video%"), Chat.source == source) query = self.report_bundle.filter(Message, query) n_pages = get_page( query, only_count=True, per_page=config_manager.report_config['per_page']['video']) for i in range(n_pages): page = i + 1 pagination = get_page( query, page=page, per_page=config_manager.report_config['per_page']['video']) context = {'pagination': pagination, 'source': source} dest_file = os.path.join( self.report_bundle.report_folder, 'html_files', f"all-videos{source}_page_{page}.html") self.renderizer.render_template('all-videos.html', dest_file, context) context = {} query = self.report_bundle.filter( Chat, self.dbsession.query(Chat).filter(Chat.source == source)) context['chats'] = query.all() query = self.dbsession.query(Message).join(Chat).filter( Message.analise_attachment_types.like("%audio%"), Chat.source == source) query = self.report_bundle.filter(Message, query) context['total_audios'] = query.count() query = self.dbsession.query(Message).join(Chat).filter( Message.analise_attachment_types.like("%video%"), Chat.source == source) query = self.report_bundle.filter(Message, query) context['total_videos'] = query.count() query = self.dbsession.query(Message).join(Chat).filter( Message.analise_attachment_types.like("%image%"), Chat.source == source) query = self.report_bundle.filter(Message, query) context['total_images'] = query.count() context['source'] = source dest_file = os.path.join(self.report_bundle.report_folder, 'html_files', f"chats_{source}.html") self.renderizer.render_template('chats.html', dest_file, context) self.engine.dispose()
def render(self): self.copy_files() self.renderizer = Renderizer(os.path.join(script_dir, 'templates'))