def get_reply_messages(self): for text, file in self._replies: if file: view_type = "file" else: view_type = "text" msg = Message.new_empty(self.account, view_type) if text is not None: msg.set_text(text) if file is not None: msg.set_file(file) yield msg
def _create_message( self, text: str = None, html: str = None, viewtype: str = None, filename: str = None, bytefile=None, sender: str = None, quote: Message = None, ) -> Message: if bytefile: assert filename is not None, "bytefile given but filename not provided" blobdir = self.incoming_message.account.get_blobdir() parts = filename.split(".", maxsplit=1) if len(parts) == 2: prefix, suffix = parts prefix += "-" suffix = "." + suffix else: prefix = filename + "-" suffix = None with NamedTemporaryFile( dir=blobdir, prefix=prefix, suffix=suffix, delete=False ) as fp: filename = fp.name with open(filename, "wb") as f: with bytefile: f.write(bytefile.read()) if not viewtype: if filename: viewtype = "file" else: viewtype = "text" msg = Message.new_empty(self.incoming_message.account, viewtype) if quote is not None: msg.quote = quote if text: msg.set_text(text) if html: msg.set_html(html) if filename: msg.set_file(filename) if sender: msg.set_override_sender_name(sender) return msg
def _send_replies_to_core(self, tempdir): for text, filename, bytefile, chat in self._replies: if bytefile: # XXX avoid double copy -- core will copy this file another time # XXX maybe also avoid loading the file into RAM but it's max 50MB filename = os.path.join(tempdir, filename) with open(filename, "wb") as f: f.write(bytefile.read()) if filename: view_type = "file" else: view_type = "text" msg = Message.new_empty(self.incoming_message.account, view_type) if text is not None: msg.set_text(text) if filename is not None: msg.set_file(filename) if chat is None: chat = self.incoming_message.chat msg = chat.send_msg(msg) yield msg self._replies[:] = []