mirror of
https://github.com/fergalmoran/dss.api.git
synced 2025-12-22 09:18:13 +00:00
287 lines
7.1 KiB
Python
Executable File
287 lines
7.1 KiB
Python
Executable File
import abc
|
|
from datetime import datetime
|
|
|
|
from allauth.socialaccount.models import SocialToken
|
|
from django.db import models
|
|
from model_utils.managers import InheritanceManager
|
|
from open_facebook import OpenFacebook
|
|
|
|
from core.realtime import activity as realtime
|
|
from core.utils.url import wrap_full
|
|
from dss import settings
|
|
from spa.models.notification import Notification
|
|
from spa.models.userprofile import UserProfile
|
|
from spa.models.basemodel import BaseModel
|
|
import json
|
|
|
|
ACTIVITYTYPES = (
|
|
('p', 'played'),
|
|
('d', 'downloaded'),
|
|
('l', 'liked'),
|
|
('f', 'favourited'),
|
|
('l', 'followed')
|
|
)
|
|
|
|
|
|
class Activity(BaseModel):
|
|
objects = InheritanceManager()
|
|
user = models.ForeignKey(UserProfile, null=True, blank=True)
|
|
date = models.DateTimeField(auto_now_add=True)
|
|
|
|
def __unicode__(self):
|
|
return "%s" % self.get_object_name()
|
|
|
|
def get_user(self):
|
|
return UserProfile.get_user(self.user)
|
|
|
|
def post_social(self):
|
|
if settings.DEBUG:
|
|
return
|
|
|
|
try:
|
|
verb = self.get_verb_past()
|
|
object = self.get_object_singular()
|
|
if verb == "favourited":
|
|
action_type = "deepsouthsounds:favourite"
|
|
if verb == "liked":
|
|
action_type = "like"
|
|
if verb == "followed":
|
|
action_type = "og.follows"
|
|
else:
|
|
action_type = "deepsouthsounds:play"
|
|
|
|
if False:
|
|
social_account = SocialToken.objects.filter(account__user=self.user.user, account__provider='facebook')[
|
|
0]
|
|
facebook = OpenFacebook(social_account.token)
|
|
notification_html = {
|
|
object: wrap_full(self.get_object_url())
|
|
}
|
|
result = facebook.set('me/%s' % action_type, notification_html)
|
|
print(result)
|
|
except Exception as ex:
|
|
print(ex)
|
|
pass
|
|
|
|
def post_broadcast(self):
|
|
try:
|
|
display_name = self.user.display_name if self.user is not None else 'Anonymous'
|
|
image = self.user.get_avatar_image() if self.user is not None else settings.DEFAULT_USER_IMAGE
|
|
notice = json.dumps({
|
|
'image': image,
|
|
'title': 'New Activity',
|
|
'body': "{} {} {}".format(
|
|
display_name,
|
|
self.get_verb_past(),
|
|
self.get_object_name())
|
|
})
|
|
target_user = self.get_target_user()
|
|
realtime.post_activity('user:broadcast', notice, target_user.get_session_id())
|
|
except Exception as ex:
|
|
pass
|
|
|
|
def create_notification(self, accept=False):
|
|
try:
|
|
notification = Notification()
|
|
notification.from_user = self.user
|
|
notification.to_user = self.get_target_user()
|
|
|
|
notification.verb = self.get_verb_past()
|
|
notification.type = self.get_object_type()
|
|
notification.target = self.get_object_slug()
|
|
notification.target_desc = self.get_object_name()
|
|
notification.date = self.date
|
|
|
|
if accept:
|
|
notification.accepted_date = datetime.now()
|
|
|
|
notification.save()
|
|
except Exception as ex:
|
|
print("Error creating activity notification: %s" % ex)
|
|
|
|
def get_activity_url(self):
|
|
return '/api/v1/activity/%s' % self.id
|
|
|
|
@abc.abstractmethod
|
|
def get_object_type(self):
|
|
return
|
|
|
|
@abc.abstractmethod
|
|
def get_object_slug(self):
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def get_target_user(self):
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def get_object_name(self):
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def get_object_url(self):
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def get_object_singular(self):
|
|
pass
|
|
|
|
def get_object_name_for_notification(self):
|
|
return self.get_object_name()
|
|
|
|
|
|
class ActivityLike(Activity):
|
|
mix = models.ForeignKey('spa.Mix', related_name='activity_likes')
|
|
|
|
class Meta:
|
|
app_label = 'spa'
|
|
|
|
def get_object_type(self):
|
|
return "mix"
|
|
|
|
def get_object_slug(self):
|
|
return self.mix.slug
|
|
|
|
def get_target_user(self):
|
|
return self.mix.user
|
|
|
|
def get_object_name(self):
|
|
return self.mix.title
|
|
|
|
def get_object_url(self):
|
|
return self.mix.get_absolute_url()
|
|
|
|
def get_object_singular(self):
|
|
return "mix"
|
|
|
|
def get_verb_past(self):
|
|
return "liked"
|
|
|
|
|
|
class ActivityFollow(Activity):
|
|
to_user = models.ForeignKey('spa.UserProfile', related_name='activity_follow')
|
|
|
|
def get_object_type(self):
|
|
return "user"
|
|
|
|
def get_object_slug(self):
|
|
return self.to_user.slug
|
|
|
|
def get_target_user(self):
|
|
return self.to_user
|
|
|
|
def get_object_name(self):
|
|
return self.to_user.get_nice_name()
|
|
|
|
def get_object_url(self):
|
|
return self.to_user.get_profile_url()
|
|
|
|
def get_object_singular(self):
|
|
return "user"
|
|
|
|
def get_verb_past(self):
|
|
return "followed"
|
|
|
|
def get_object_name_for_notification(self):
|
|
return "You"
|
|
|
|
|
|
class ActivityFavourite(Activity):
|
|
mix = models.ForeignKey('spa.Mix', related_name='activity_favourites')
|
|
|
|
def get_object_type(self):
|
|
return "mix"
|
|
|
|
def get_object_slug(self):
|
|
return self.mix.slug
|
|
|
|
def get_target_user(self):
|
|
return self.mix.user
|
|
|
|
def get_object_name(self):
|
|
return self.mix.title
|
|
|
|
def get_object_url(self):
|
|
return self.mix.get_absolute_url()
|
|
|
|
def get_object_singular(self):
|
|
return "mix"
|
|
|
|
def get_verb_past(self):
|
|
return "favourited"
|
|
|
|
|
|
class ActivityPlay(Activity):
|
|
mix = models.ForeignKey('spa.Mix', related_name='activity_plays')
|
|
|
|
def get_object_type(self):
|
|
return "mix"
|
|
|
|
def get_target_user(self):
|
|
return self.mix.user
|
|
|
|
def get_object_slug(self):
|
|
return self.mix.slug
|
|
|
|
def get_object_name(self):
|
|
return self.mix.title
|
|
|
|
def get_object_url(self):
|
|
return self.mix.get_absolute_url()
|
|
|
|
def get_object_singular(self):
|
|
return "mix"
|
|
|
|
def get_verb_past(self):
|
|
return "played"
|
|
|
|
|
|
class ActivityDownload(Activity):
|
|
mix = models.ForeignKey('spa.Mix', related_name='activity_downloads')
|
|
|
|
def get_object_type(self):
|
|
return "mix"
|
|
|
|
def get_object_slug(self):
|
|
return self.mix.slug
|
|
|
|
def get_target_user(self):
|
|
return self.mix.user
|
|
|
|
def get_object_name(self):
|
|
return self.mix.title
|
|
|
|
def get_object_url(self):
|
|
return self.mix.get_absolute_url()
|
|
|
|
def get_object_singular(self):
|
|
return "mix"
|
|
|
|
def get_verb_past(self):
|
|
return "downloaded"
|
|
|
|
|
|
class ActivityComment(Activity):
|
|
mix = models.ForeignKey('spa.Mix', related_name='activity_comments')
|
|
|
|
def get_object_type(self):
|
|
return "mix"
|
|
|
|
def get_object_slug(self):
|
|
return self.mix.slug
|
|
|
|
def get_target_user(self):
|
|
return self.mix.user
|
|
|
|
def get_object_name(self):
|
|
return self.mix.title
|
|
|
|
def get_object_url(self):
|
|
return self.mix.get_absolute_url()
|
|
|
|
def get_object_singular(self):
|
|
return "mix"
|
|
|
|
def get_verb_past(self):
|
|
return "commented on"
|