/ exporter / exporter_txt.py
exporter_txt.py
 1  import os
 2  import traceback
 3  
 4  from wxManager import MessageType
 5  from wxManager.model import Message
 6  from exporter.exporter import ExporterBase, get_new_filename
 7  
 8  
 9  class TxtExporter(ExporterBase):
10      def title(self, message: Message):
11          str_time = message.str_time
12          if message.type == MessageType.System:
13              return f'{str_time}'
14          display_name = message.display_name
15          return f'{str_time} {display_name}'
16  
17      def export(self):
18          # 实现导出为txt的逻辑
19          print(f"【开始导出 TXT {self.contact.remark}】")
20          origin_path = self.origin_path
21          os.makedirs(origin_path, exist_ok=True)
22          filename = os.path.join(origin_path, self.contact.remark + '.txt')
23          filename = get_new_filename(filename)
24          messages = self.database.get_messages(self.contact.wxid, time_range=self.time_range)
25          total_steps = len(messages)
26          txt_res = []
27          for index, message in enumerate(messages):
28              if index and index % 1000 == 0:
29                  self.update_progress_callback(index / total_steps)
30              if not self.is_selected(message):
31                  continue
32              txt_res.append(f'{self.title(message)}\n{message.to_text()}')
33          with open(filename, mode='w', newline='', encoding='utf-8') as f:
34              f.write('\n\n'.join(txt_res))
35          self.update_progress_callback(1)
36          print(f"【完成导出 TXT {self.contact.remark}】")
37          self.finish_callback(self.exporter_id)