mirror of
https://github.com/fergalmoran/dss.api.git
synced 2025-12-22 09:18:13 +00:00
140 lines
4.2 KiB
Python
140 lines
4.2 KiB
Python
from django.contrib.auth.models import User
|
|
from django.contrib.sessions.models import Session
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
from django.db.models.signals import post_save, pre_save, m2m_changed
|
|
from django.dispatch import Signal, receiver
|
|
|
|
from spa.models import SocialAccountLink
|
|
from spa.models.activity import ActivityFollow
|
|
from spa.models.mix import Mix
|
|
from spa.models.userprofile import UserProfile
|
|
|
|
waveform_generated_signal = Signal()
|
|
|
|
|
|
def _waveform_generated_callback(sender, **kwargs):
|
|
print("Updating model with waveform")
|
|
try:
|
|
uid = kwargs['uid']
|
|
path = kwargs['path']
|
|
if uid is not None:
|
|
mix = Mix.objects.get(uid=uid)
|
|
if mix is not None:
|
|
mix.set_cdn_details(path)
|
|
except ObjectDoesNotExist:
|
|
print("Mix has still not been uploaded")
|
|
pass
|
|
|
|
|
|
waveform_generated_signal.connect(_waveform_generated_callback)
|
|
|
|
mix_sent_to_cdn_signal = Signal()
|
|
|
|
|
|
def _mix_sent_to_cdn_callback(sender, **kwargs):
|
|
print("Updating model with archive bit")
|
|
try:
|
|
uid = kwargs['uid']
|
|
if uid is not None:
|
|
mix = Mix.objects.get(uid=uid)
|
|
if mix is not None:
|
|
mix.archive_updated = True
|
|
mix.save(update_fields=["waveform_generated", "duration"])
|
|
except ObjectDoesNotExist:
|
|
print("Mix has still not been uploaded")
|
|
pass
|
|
|
|
|
|
mix_sent_to_cdn_signal.connect(_mix_sent_to_cdn_callback)
|
|
|
|
update_user_geoip_signal = Signal()
|
|
|
|
|
|
def _update_user_geoip_callback(sender, **kwargs):
|
|
try:
|
|
user = UserProfile.objects.get(pk=kwargs['profile_id'])
|
|
user.city = kwargs['city']
|
|
user.country = kwargs['country']
|
|
user.save()
|
|
except ObjectDoesNotExist:
|
|
pass
|
|
|
|
|
|
update_user_geoip_signal.connect(_update_user_geoip_callback)
|
|
|
|
|
|
def create_profile(sender, **kw):
|
|
user = kw["instance"]
|
|
if kw["created"]:
|
|
up = UserProfile(user=user)
|
|
up.save()
|
|
|
|
|
|
post_save.connect(create_profile, sender=User)
|
|
|
|
|
|
def post_save_handler(**kwargs):
|
|
"""
|
|
Doing signals for notifications here.
|
|
I like this method because I have a single signal
|
|
and just check for a hook method on the sender
|
|
"""
|
|
instance = kwargs['instance']
|
|
# should save generate a notification to a target user
|
|
if hasattr(instance, 'post_social'):
|
|
instance.post_social()
|
|
if hasattr(instance, 'create_notification'):
|
|
instance.create_notification()
|
|
# should save post to the activity feed
|
|
if hasattr(instance, 'create_activity'):
|
|
instance.create_activity()
|
|
if hasattr(instance, 'post_broadcast'):
|
|
instance.post_broadcast()
|
|
|
|
# try to get the user's geo profile
|
|
if hasattr(instance, 'update_geo_info'):
|
|
instance.update_geo_info()
|
|
|
|
|
|
post_save.connect(post_save_handler)
|
|
|
|
"""
|
|
Setting up a post save handler for sessions here
|
|
So that I can store the session id against the user
|
|
"""
|
|
|
|
|
|
@receiver(pre_save, sender=Session, dispatch_uid='session_pre_save')
|
|
def session_pre_save(sender, **kwargs):
|
|
s = kwargs['instance']
|
|
if s is not None:
|
|
uid = s.get_decoded().get('_auth_user_id')
|
|
if uid is not None:
|
|
try:
|
|
user = UserProfile.objects.get(pk=uid)
|
|
user.last_known_session = s.session_key
|
|
user.save()
|
|
except ObjectDoesNotExist:
|
|
pass
|
|
|
|
|
|
@receiver(m2m_changed, sender=UserProfile.following.through, dispatch_uid='user_followers_changed')
|
|
def user_followers_changed(sender, **kwargs):
|
|
print("Followers changed")
|
|
|
|
try:
|
|
if kwargs['action'] == 'post_add':
|
|
source_user = kwargs['instance']
|
|
if source_user:
|
|
for i in kwargs['pk_set']:
|
|
target_user = UserProfile.objects.get(pk=i)
|
|
if target_user:
|
|
ActivityFollow(user=source_user, to_user=target_user).save()
|
|
except Exception as ex:
|
|
print("Error sending new follower: %s" % ex)
|
|
|
|
@receiver(post_save, sender=SocialAccountLink, dispatch_uid='socialaccountlink_pre_save')
|
|
def socialaccountlink_pre_save(sender, **kwargs):
|
|
# update image url
|
|
kwargs['instance'].update_image_url()
|