2023-11-08 09:54:36 -05:00
|
|
|
from datetime import timedelta
|
|
|
|
|
|
|
|
from django.utils import timezone
|
|
|
|
from loguru import logger
|
|
|
|
|
|
|
|
from common.models import BaseJob, JobManager
|
2023-12-28 22:12:07 -05:00
|
|
|
from users.models import User
|
2023-11-08 09:54:36 -05:00
|
|
|
|
|
|
|
|
|
|
|
@JobManager.register
|
|
|
|
class MastodonUserSync(BaseJob):
|
2024-01-14 13:15:30 -05:00
|
|
|
batch = 16
|
2023-12-28 22:12:07 -05:00
|
|
|
interval_hours = 3
|
|
|
|
interval = timedelta(hours=interval_hours)
|
2023-11-08 09:54:36 -05:00
|
|
|
|
|
|
|
def run(self):
|
|
|
|
logger.info("Mastodon User Sync start.")
|
2024-02-10 23:39:49 -05:00
|
|
|
inactive_threshold = timezone.now() - timedelta(days=90)
|
2023-11-08 09:54:36 -05:00
|
|
|
qs = (
|
|
|
|
User.objects.exclude(
|
2023-11-11 00:52:16 -05:00
|
|
|
preference__mastodon_skip_userinfo=True,
|
|
|
|
preference__mastodon_skip_relationship=True,
|
2023-11-08 09:54:36 -05:00
|
|
|
)
|
|
|
|
.filter(
|
2023-12-28 22:12:07 -05:00
|
|
|
mastodon_last_refresh__lt=timezone.now()
|
|
|
|
- timedelta(hours=self.interval_hours * self.batch)
|
2023-11-08 09:54:36 -05:00
|
|
|
)
|
|
|
|
.filter(
|
2023-11-19 08:43:47 -05:00
|
|
|
username__isnull=False,
|
2023-11-08 09:54:36 -05:00
|
|
|
is_active=True,
|
|
|
|
)
|
|
|
|
.exclude(mastodon_token__isnull=True)
|
|
|
|
.exclude(mastodon_token="")
|
|
|
|
)
|
2023-12-28 22:12:07 -05:00
|
|
|
for user in qs.iterator():
|
2024-02-10 23:39:49 -05:00
|
|
|
skip_detail = False
|
2024-01-19 16:46:16 -05:00
|
|
|
if not user.last_login or user.last_login < inactive_threshold:
|
2024-01-14 13:15:30 -05:00
|
|
|
last_usage = user.last_usage
|
|
|
|
if not last_usage or last_usage < inactive_threshold:
|
2024-02-10 23:39:49 -05:00
|
|
|
logger.warning(f"Skip {user} detail because of inactivity.")
|
|
|
|
skip_detail = True
|
|
|
|
user.refresh_mastodon_data(skip_detail)
|
2024-04-06 00:13:50 -04:00
|
|
|
logger.info("Mastodon User Sync finished.")
|