mrDoctorWho/vk4xmpp

View on GitHub
extensions/forwarded_messages.py

Summary

Maintainability
A
35 mins
Test Coverage
# coding: utf-8
# This file is a part of VK4XMPP transport
# © simpleApps, 2013 — 2015.

from datetime import datetime, timedelta, tzinfo, date

if not require("attachments"):
    raise AssertionError("'forwardMessages' requires 'attachments'")

BASE_SPACER = chr(32) + unichr(183) + chr(32)


class TimezoneOffset(tzinfo):

    def __init__(self, offset=0):
        self.offset = timedelta(hours=offset)

    def utcoffset(self, dt):
        return self.offset

    def tzname(self, dt):
        return None

    def dst(self, dt):
        return timedelta(0)


def parseForwardedMessages(self, msg, depth=0):
    body = ""
    result = (MSG_APPEND, "")
    if msg.get("fwd_messages"):
        spacer = BASE_SPACER * depth
        body = "\n" + spacer
        body += _("Forwarded messages:")
        fwd_messages = sorted(msg["fwd_messages"], sortMsg)
        for fwd in fwd_messages:
            source = fwd["from_id"]
            fwdBody = escape("", uhtml(compile_eol.sub("\n" + spacer + BASE_SPACER, fwd["text"])))
            date = getUserDate(self, fwd["date"])
            name = self.vk.getName(source)
            body += "\n%s[%s] %s> %s" % (spacer + BASE_SPACER, date, name, fwdBody)
            body += parseAttachments(self, fwd, spacer + (BASE_SPACER * 2))[1]
            if depth < MAXIMUM_FORWARD_DEPTH: 
                body += parseForwardedMessages(self, fwd, (depth + 1))[1]
        result = (MSG_APPEND, body)
    return result


def getUserDate(user, timestamp):
    timezone = user.vk.getUserPreferences()[1]
    offset = TimezoneOffset(timezone)
    _date = datetime.fromtimestamp(timestamp, offset)
    today = datetime.fromtimestamp(time.time(), offset)
    _format = ""
    delta = today - _date
    if delta.days > 0:
        _format += "%d.%m"
    if delta.days > 300:
        _format += ".%Y"
    if _format:
        _format += " "
    _format += "%H.%M:%S"
    return _date.strftime(_format)


if not isdef("MAXIMUM_FORWARD_DEPTH"):
    MAXIMUM_FORWARD_DEPTH = 33

registerHandler("msg01", parseForwardedMessages)