From 06e496bc8fbd0ef72263b1e92b1e53cd8ece937c Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Feb 2022 15:31:49 +0200 Subject: [PATCH] annoying --- files/classes/__init__.py | 5 ++- files/classes/comment.py | 21 +----------- files/classes/follows.py | 20 ++++++++++++ files/classes/notifications.py | 23 +++++++++++++ files/classes/subscriptions.py | 20 +----------- files/classes/user.py | 60 ++-------------------------------- files/classes/views.py | 58 ++++++++++++++++++++++++++++++++ files/routes/front.py | 6 ++-- files/routes/users.py | 2 +- 9 files changed, 115 insertions(+), 100 deletions(-) create mode 100644 files/classes/follows.py create mode 100644 files/classes/notifications.py create mode 100644 files/classes/views.py diff --git a/files/classes/__init__.py b/files/classes/__init__.py index dabc3c0e0..15c93d1ea 100644 --- a/files/classes/__init__.py +++ b/files/classes/__init__.py @@ -15,4 +15,7 @@ from .mod_logs import * from .award import * from .marsey import * from .sub_block import * -from .saves import * \ No newline at end of file +from .saves import * +from .views import * +from .notifications import * +from .follows import * \ No newline at end of file diff --git a/files/classes/comment.py b/files/classes/comment.py index 0fa052e91..6e6cca65e 100644 --- a/files/classes/comment.py +++ b/files/classes/comment.py @@ -440,23 +440,4 @@ class Comment(Base): @property @lazy - def active_flags(self): return self.flags.count() - -class Notification(Base): - - __tablename__ = "notifications" - - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - comment_id = Column(Integer, ForeignKey("comments.id"), primary_key=True) - read = Column(Boolean, default=False) - created_utc = Column(Integer) - - comment = relationship("Comment", viewonly=True) - user = relationship("User", viewonly=True) - - def __init__(self, *args, **kwargs): - if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) - super().__init__(*args, **kwargs) - - def __repr__(self): - return f"" \ No newline at end of file + def active_flags(self): return self.flags.count() \ No newline at end of file diff --git a/files/classes/follows.py b/files/classes/follows.py new file mode 100644 index 000000000..52a3311bc --- /dev/null +++ b/files/classes/follows.py @@ -0,0 +1,20 @@ +from sqlalchemy import * +from sqlalchemy.orm import relationship +from files.__main__ import Base +import time + +class Follow(Base): + __tablename__ = "follows" + target_id = Column(Integer, ForeignKey("users.id"), primary_key=True) + user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) + created_utc = Column(Integer) + + user = relationship("User", uselist=False, primaryjoin="User.id==Follow.user_id", viewonly=True) + target = relationship("User", primaryjoin="User.id==Follow.target_id", viewonly=True) + + def __init__(self, *args, **kwargs): + if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) + super().__init__(*args, **kwargs) + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/files/classes/notifications.py b/files/classes/notifications.py new file mode 100644 index 000000000..a0f3a5c48 --- /dev/null +++ b/files/classes/notifications.py @@ -0,0 +1,23 @@ +from sqlalchemy import * +from sqlalchemy.orm import relationship +from files.__main__ import Base +import time + +class Notification(Base): + + __tablename__ = "notifications" + + user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) + comment_id = Column(Integer, ForeignKey("comments.id"), primary_key=True) + read = Column(Boolean, default=False) + created_utc = Column(Integer) + + comment = relationship("Comment", viewonly=True) + user = relationship("User", viewonly=True) + + def __init__(self, *args, **kwargs): + if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) + super().__init__(*args, **kwargs) + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/files/classes/subscriptions.py b/files/classes/subscriptions.py index 5193e7740..2d81c9ee6 100644 --- a/files/classes/subscriptions.py +++ b/files/classes/subscriptions.py @@ -1,7 +1,6 @@ from sqlalchemy import * from sqlalchemy.orm import relationship from files.__main__ import Base -import time class Subscription(Base): __tablename__ = "subscriptions" @@ -14,21 +13,4 @@ class Subscription(Base): super().__init__(*args, **kwargs) def __repr__(self): - return f"" - - -class Follow(Base): - __tablename__ = "follows" - target_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) - created_utc = Column(Integer) - - user = relationship("User", uselist=False, primaryjoin="User.id==Follow.user_id", viewonly=True) - target = relationship("User", primaryjoin="User.id==Follow.target_id", viewonly=True) - - def __init__(self, *args, **kwargs): - if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time()) - super().__init__(*args, **kwargs) - - def __repr__(self): - return f"" \ No newline at end of file + return f"" \ No newline at end of file diff --git a/files/classes/user.py b/files/classes/user.py index 9874a1631..a094f248c 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -6,8 +6,9 @@ from files.helpers.images import * from files.helpers.const import * from .alts import Alt from .saves import * -from .comment import Notification +from .notifications import Notification from .award import AwardRelationship +from .follows import * from .subscriptions import * from .userblock import * from .badges import * @@ -641,59 +642,4 @@ class User(Base): def filter_words(self): l = [i.strip() for i in self.custom_filter_list.split('\n')] if self.custom_filter_list else [] l = [i for i in l if i] - return l - - -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) - - viewer = relationship("User", primaryjoin="ViewerRelationship.viewer_id == User.id", viewonly=True) - - def __init__(self, **kwargs): - - if 'last_view_utc' not in kwargs: - kwargs['last_view_utc'] = int(time.time()) - - super().__init__(**kwargs) - - @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.created_utc) - - 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" + return l \ No newline at end of file diff --git a/files/classes/views.py b/files/classes/views.py new file mode 100644 index 000000000..229410a07 --- /dev/null +++ b/files/classes/views.py @@ -0,0 +1,58 @@ +from sqlalchemy import * +from sqlalchemy.orm import relationship +from files.__main__ import Base +from files.helpers.lazy import * + +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) + + viewer = relationship("User", primaryjoin="ViewerRelationship.viewer_id == User.id", viewonly=True) + + def __init__(self, **kwargs): + + if 'last_view_utc' not in kwargs: + kwargs['last_view_utc'] = int(time.time()) + + super().__init__(**kwargs) + + @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.created_utc) + + 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" diff --git a/files/routes/front.py b/files/routes/front.py index d88943053..f1a981aa8 100644 --- a/files/routes/front.py +++ b/files/routes/front.py @@ -60,6 +60,7 @@ def notifications(v): elif not x.read: x.read = True c.unread = True + if not c.created_utc: c.created_utc = x.created_utc g.db.add(x) listing.append(c) @@ -81,9 +82,10 @@ def notifications(v): i = 0 for x in notifications: - try: - if not x.read: comments[i].unread = True + try: c = comments[i] except: continue + if not x.read: c.unread = True + if not c.created_utc: c.created_utc = x.created_utc x.read = True g.db.add(x) i += 1 diff --git a/files/routes/users.py b/files/routes/users.py index efbc430cf..17303d313 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -2,7 +2,7 @@ import qrcode import io import time import math -from files.classes.user import ViewerRelationship +from files.classes.views import ViewerRelationship from files.helpers.alerts import * from files.helpers.sanitize import * from files.helpers.const import *