diff --git a/spa/ajax.py b/spa/ajax.py
index e97315f..fe534e7 100644
--- a/spa/ajax.py
+++ b/spa/ajax.py
@@ -129,13 +129,18 @@ def like(request):
mix = Mix.objects.get(pk=request.POST['dataId'])
if mix is not None:
if mix.likes.count() == 0:
- mix.likes.add(MixLike(mix=mix, user=request.user))
+ uid = social.post_like(request, mix)
+ mix.likes.add(MixLike(mix=mix, user=request.user, uid=uid))
response = _get_json('Liked')
else:
+ for like in mix.likes.all():
+ uid = like.uid
+ if uid is not None and uid <> '':
+ social.delete_like(request, uid)
+
mix.likes.all().delete()
response = _get_json('Unliked')
mix.save()
- social.post_like(request, mix)
return HttpResponse(response)
@login_required()
diff --git a/spa/models/_Activity.py b/spa/models/_Activity.py
index d6250dc..b7b163d 100644
--- a/spa/models/_Activity.py
+++ b/spa/models/_Activity.py
@@ -4,4 +4,5 @@ from spa.models._BaseModel import _BaseModel
class _Activity(_BaseModel):
date = models.DateTimeField(auto_now=True)
- user = models.ForeignKey(User, null=True)
\ No newline at end of file
+ user = models.ForeignKey(User, null=True)
+ uid = models.CharField(max_length=50, blank=True, null = True)
\ No newline at end of file
diff --git a/spa/social.py b/spa/social.py
index 4d7bc1f..9044884 100644
--- a/spa/social.py
+++ b/spa/social.py
@@ -1,18 +1,23 @@
-import urllib
import urllib2
from django.conf.urls import url
+from django.contrib import messages
from django.contrib.sites.models import Site
from django.core.urlresolvers import resolve
from django.http import Http404
-from django.shortcuts import render_to_response, redirect
+from django.shortcuts import render_to_response
from django.template.context import RequestContext
+from django_facebook.api import get_persistent_graph
+from django_facebook.decorators import facebook_required
+from django_facebook.models import OpenGraphShare
+from django_facebook.utils import get_profile_class
+import requests
from dss import settings
from spa.models.Mix import Mix
from allauth.socialaccount.models import SocialToken
-import pdb
class SocialHandler(object):
import logging
+
logger = logging.getLogger(__name__)
def __init__(self, api_name="v1"):
@@ -28,13 +33,15 @@ class SocialHandler(object):
]
return pattern_list
+
def _getPayload(request):
return {
- "app_id" : settings.FACEBOOK_APP_ID,
- "site_url" : 'http://%s:%s' % (Site.objects.get_current().domain, request.META['SERVER_PORT']),
+ "app_id": settings.FACEBOOK_APP_ID,
+ "site_url": 'http://%s:%s' % (Site.objects.get_current().domain, request.META['SERVER_PORT']),
"site_image_url": '%s/img/dss-large.png' % settings.STATIC_URL,
}
+
def mix(request, args):
try:
mix = Mix.objects.get(pk=args['mix_id'])
@@ -46,26 +53,28 @@ def mix(request, args):
mix_url = mix.get_absolute_url()
default = _getPayload(request)
extras = {
- "description" : mix.title,
- "image_url" : image,
- "audio_url" : 'http://%s:%s%s' % (Site.objects.get_current().domain, request.META['SERVER_PORT'], audio_url),
- "mix_url" : 'http://%s:%s%s' % (Site.objects.get_current().domain, request.META['SERVER_PORT'], mix_url)
+ "description": mix.title,
+ "image_url": image,
+ "audio_url": 'http://%s:%s%s' % (Site.objects.get_current().domain, request.META['SERVER_PORT'], audio_url),
+ "mix_url": 'http://%s:%s%s' % (Site.objects.get_current().domain, request.META['SERVER_PORT'], mix_url)
}
payload = dict(default.items() + extras.items())
response = render_to_response(
'inc/facebook/mix.html',
payload,
- context_instance = RequestContext(request)
+ context_instance=RequestContext(request)
)
return response
+
def index(request):
- response = render_to_response(
+ response = render_to_response(
"inc/facebook/index.html",
_getPayload(request),
context_instance=RequestContext(request))
return response
+
def social_redirect(request):
try:
resolver = resolve('/social' + request.path)
@@ -82,13 +91,29 @@ def post_like(request, mix):
for token in tokens:
url = 'https://graph.facebook.com/%s/og.likes' % token.account.uid
values = {
- 'access_token' : token.token,
- 'object' : mix.get_full_url(),
+ 'access_token': token.token,
+ 'object': mix.get_full_url(),
}
- data = urllib.urlencode(values)
- u = urllib2.urlopen(url, data)
- print "Sending like for token: %s" % token.token
+ response = requests.post(url, data=values)
+ if response.status_code == 200:
+ return response.json['id']
except urllib2.HTTPError, httpEx:
print httpEx.message
except Exception, ex:
print ex.message
+ return ""
+
+
+def delete_like(request, uid):
+ try:
+ tokens = SocialToken.objects.filter(account__user=request.user, account__provider='facebook')
+ for token in tokens:
+ url = "https://graph.facebook.com/%s" % uid
+ values = {
+ 'access_token': token.token,
+ }
+ response = requests.delete(url, data=values)
+ return response
+ except Exception, ex:
+ print "Error talking with facebook: %s" % ex.message
+
diff --git a/static/js/app/views/mix.js b/static/js/app/views/mix.js
index 4d9ad2b..5f3a8a5 100644
--- a/static/js/app/views/mix.js
+++ b/static/js/app/views/mix.js
@@ -42,8 +42,11 @@ window.MixListItemView = Backbone.View.extend({
setLikeButton:function (id, liked) {
if (liked) {
$('#like-' + id, this.el).html(' Unlike');
- } else
+ $('#like-' + id, this.el).data('loading-text', 'Unliking');
+ } else{
$('#like-' + id, this.el).html(' Like');
+ $('#like-' + id, this.el).data('loading-text', 'Liking');
+ }
},
setFavouriteButton:function (id, liked) {
if (liked) {
@@ -68,14 +71,25 @@ window.MixListItemView = Backbone.View.extend({
$(e.currentTarget).popover('hide');
},
likeMix:function (e) {
- var id = $(e.currentTarget).data("id");
- var mode = $(e.currentTarget).data("mode");
+ var parent = this;
+ var button = $(e.currentTarget);
+ var id = button.data("id");
+ var mode = button.data("mode");
var self = this;
+ button.button('loading');
$.post(
"/ajax/like/",
{ dataId:id, dataMode:mode },
function (data) {
- com.podnoms.utils.showAlert("Success", "Thanks for liking!!", "alert-success", true);
+ button.button('reset');
+ var result = JSON.parse(data);
+ if (result.value == "Liked"){
+ parent.setLikeButton(id, true);
+ com.podnoms.utils.showAlert("Success", "Thanks for liking!!", "alert-success", true);
+ }else if (result.value == "Unliked"){
+ parent.setLikeButton(id, false);
+ com.podnoms.utils.showAlert("Success", "Mix unliked!!", "alert-success", true);
+ }
}
);
},