MarseyWorld/files/classes/views.py

62 lines
1.5 KiB
Python
Raw Normal View History

2022-02-26 13:31:49 +00:00
from sqlalchemy import *
from sqlalchemy.orm import relationship
from files.__main__ import Base
from files.helpers.lazy import *
2022-02-26 14:21:07 +00:00
import time
2022-02-26 13:31:49 +00:00
class ViewerRelationship(Base):
__tablename__ = "viewers"
user_id = Column(Integer, ForeignKey('users.id'), primary_key=True)
viewer_id = Column(Integer, ForeignKey('users.id'), primary_key=True)
last_view_utc = Column(Integer)
created_utc = Column(Integer)
2022-02-26 13:31:49 +00:00
viewer = relationship("User", primaryjoin="ViewerRelationship.viewer_id == User.id")
2022-02-26 13:31:49 +00:00
def __init__(self, **kwargs):
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
if 'last_view_utc' not in kwargs: kwargs['last_view_utc'] = int(time.time())
super().__init__(**kwargs)
def __repr__(self):
return f"<ViewerRelationship(user_id={self.user_id}, viewer_id={self.viewer_id})>"
2022-02-26 13:31:49 +00:00
@property
@lazy
def last_view_since(self):
return int(time.time()) - self.last_view_utc
@property
@lazy
def last_view_string(self):
age = self.last_view_since
if age < 60:
return "just now"
elif age < 3600:
minutes = int(age / 60)
return f"{minutes}m ago"
elif age < 86400:
hours = int(age / 3600)
return f"{hours}hr ago"
elif age < 2678400:
days = int(age / 86400)
return f"{days}d ago"
now = time.gmtime()
ctd = time.gmtime(self.last_view_utc)
2022-02-26 13:31:49 +00:00
months = now.tm_mon - ctd.tm_mon + 12 * (now.tm_year - ctd.tm_year)
if now.tm_mday < ctd.tm_mday:
months -= 1
if months < 12:
return f"{months}mo ago"
else:
years = int(months / 12)
return f"{years}yr ago"