Пример #1
0
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()
Пример #2
0
    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}")
Пример #3
0
 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
Пример #4
0
 def __init__(self, report_bundle):
     self.report_bundle = report_bundle
     self.renderizer = Renderizer(self.report_bundle.report_folder)
Пример #5
0
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()
Пример #6
0
 def render(self):
     self.copy_files()
     self.renderizer = Renderizer(os.path.join(script_dir, 'templates'))