Example #1
0
 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
Example #2
0
    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
Example #3
0
    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[:] = []