mirror of
https://github.com/fergalmoran/dss.git
synced 2025-12-22 09:38:18 +00:00
Closes #2
This commit is contained in:
@@ -3,10 +3,13 @@ from core.serialisers import json
|
|||||||
from dss import localsettings, settings
|
from dss import localsettings, settings
|
||||||
|
|
||||||
|
|
||||||
def post_activity(activity_url):
|
def post_activity(session_id, activity_url):
|
||||||
payload = {'message': activity_url}
|
payload = {
|
||||||
|
'sessionid': session_id,
|
||||||
|
'message': activity_url
|
||||||
|
}
|
||||||
data = json.dumps(payload)
|
data = json.dumps(payload)
|
||||||
r = requests.post(localsettings.REALTIME_HOST + '/api/activity', data=data, headers=settings.REALTIME_HEADERS)
|
r = requests.post(localsettings.REALTIME_HOST + 'activity', data=data, headers=settings.REALTIME_HEADERS)
|
||||||
if r.status_code == 200:
|
if r.status_code == 200:
|
||||||
return ""
|
return ""
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -12,24 +12,17 @@ HEADERS = {
|
|||||||
logger = logging.getLogger('spa')
|
logger = logging.getLogger('spa')
|
||||||
|
|
||||||
|
|
||||||
def post_notification(user, message):
|
def post_notification(session_id, message):
|
||||||
pass
|
payload = {
|
||||||
try:
|
'sessionid': session_id,
|
||||||
r = redis.StrictRedis(host='localhost', port=6379, db=0)
|
'message': message
|
||||||
r.publish('realtime', user.username + ': ' + message)
|
}
|
||||||
except:
|
|
||||||
logger.exception("Error posting redis notification")
|
|
||||||
|
|
||||||
|
|
||||||
def _post_notification(notification_url, session=None):
|
|
||||||
payload = {'message': notification_url}
|
|
||||||
|
|
||||||
if session:
|
|
||||||
payload['session_id'] = session
|
|
||||||
|
|
||||||
data = json.dumps(payload)
|
data = json.dumps(payload)
|
||||||
r = requests.post(localsettings.REALTIME_HOST + '/api/notification',
|
r = requests.post(
|
||||||
data=data, headers=HEADERS)
|
localsettings.REALTIME_HOST + 'notification',
|
||||||
|
data=data,
|
||||||
|
headers=HEADERS
|
||||||
|
)
|
||||||
if r.status_code == 200:
|
if r.status_code == 200:
|
||||||
return ""
|
return ""
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ AUTHENTICATION_BACKENDS = global_settings.AUTHENTICATION_BACKENDS + (
|
|||||||
MIDDLEWARE_CLASSES = (
|
MIDDLEWARE_CLASSES = (
|
||||||
'django.middleware.gzip.GZipMiddleware',
|
'django.middleware.gzip.GZipMiddleware',
|
||||||
'django.middleware.common.CommonMiddleware',
|
'django.middleware.common.CommonMiddleware',
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
'user_sessions.middleware.SessionMiddleware',
|
||||||
'django.middleware.csrf.CsrfViewMiddleware',
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
@@ -106,7 +106,7 @@ INSTALLED_APPS = (
|
|||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
'django.contrib.contenttypes',
|
'django.contrib.contenttypes',
|
||||||
'django.contrib.sessions',
|
'user_sessions',
|
||||||
'django.contrib.sites',
|
'django.contrib.sites',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
@@ -175,6 +175,8 @@ TASTYPIE_ALLOW_MISSING_SLASH = True
|
|||||||
SENDFILE_ROOT = os.path.join(MEDIA_ROOT, 'mixes')
|
SENDFILE_ROOT = os.path.join(MEDIA_ROOT, 'mixes')
|
||||||
SENDFILE_URL = '/media/mixes'
|
SENDFILE_URL = '/media/mixes'
|
||||||
|
|
||||||
|
SESSION_ENGINE = 'user_sessions.backends.db'
|
||||||
|
|
||||||
mimetypes.add_type("text/xml", ".plist", False)
|
mimetypes.add_type("text/xml", ".plist", False)
|
||||||
|
|
||||||
HTML_MINIFY = not DEBUG
|
HTML_MINIFY = not DEBUG
|
||||||
@@ -183,6 +185,7 @@ HTML_MINIFY = not DEBUG
|
|||||||
DEFAULT_FROM_EMAIL = 'DSS ChatBot <chatbot@deepsouthsounds.com>'
|
DEFAULT_FROM_EMAIL = 'DSS ChatBot <chatbot@deepsouthsounds.com>'
|
||||||
DEFAULT_HTTP_PROTOCOL = 'http'
|
DEFAULT_HTTP_PROTOCOL = 'http'
|
||||||
|
|
||||||
|
|
||||||
EMAIL_BACKEND = 'djrill.mail.backends.djrill.DjrillBackend'
|
EMAIL_BACKEND = 'djrill.mail.backends.djrill.DjrillBackend'
|
||||||
|
|
||||||
if DEBUG:
|
if DEBUG:
|
||||||
@@ -199,7 +202,6 @@ REALTIME_HEADERS = {
|
|||||||
'content-type': 'application/json'
|
'content-type': 'application/json'
|
||||||
}
|
}
|
||||||
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
|
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
|
||||||
|
|
||||||
if 'test' in sys.argv:
|
if 'test' in sys.argv:
|
||||||
try:
|
try:
|
||||||
from test_settings import *
|
from test_settings import *
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ urlpatterns = patterns(
|
|||||||
'',
|
'',
|
||||||
url(r'^favicon\.ico$', RedirectView.as_view(url='/static/img/favicon.ico')),
|
url(r'^favicon\.ico$', RedirectView.as_view(url='/static/img/favicon.ico')),
|
||||||
url(r'^admin/', include(admin.site.urls)),
|
url(r'^admin/', include(admin.site.urls)),
|
||||||
|
url(r'', include('user_sessions.urls', 'user_sessions')),
|
||||||
(r'^channel\.html$', TemplateView.as_view(template_name='boiler/fb_channel.html')),
|
(r'^channel\.html$', TemplateView.as_view(template_name='boiler/fb_channel.html')),
|
||||||
(r'^privacy\.html$', TemplateView.as_view(template_name='boiler/privacy.html')),
|
(r'^privacy\.html$', TemplateView.as_view(template_name='boiler/privacy.html')),
|
||||||
(r'^robots\.txt', TemplateView.as_view(template_name='boiler/robots.txt')),
|
(r'^robots\.txt', TemplateView.as_view(template_name='boiler/robots.txt')),
|
||||||
|
|||||||
@@ -57,4 +57,5 @@ slimit
|
|||||||
djrill
|
djrill
|
||||||
python-shout
|
python-shout
|
||||||
django-dirtyfields
|
django-dirtyfields
|
||||||
django-storages
|
django-storages
|
||||||
|
django-user-sessions
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from django.contrib.auth.models import User
|
|
||||||
from django.core.management.base import NoArgsCommand
|
from django.core.management.base import NoArgsCommand
|
||||||
from django.utils import unittest
|
from django.utils import unittest
|
||||||
from core.realtime.activity import post_activity
|
from core.realtime.activity import post_activity
|
||||||
@@ -23,10 +22,18 @@ class TestRealtime(TestCase):
|
|||||||
def test_post_activity(self):
|
def test_post_activity(self):
|
||||||
try:
|
try:
|
||||||
mix = Mix.objects.order_by('?')[0]
|
mix = Mix.objects.order_by('?')[0]
|
||||||
user = User.objects.get(pk=1)
|
user = UserProfile.objects.get(slug='fergalmoran')
|
||||||
activity = ActivityDownload(user=user.get_profile(), mix=mix)
|
activity = ActivityDownload(user=user, mix=mix)
|
||||||
activity.save()
|
activity.save()
|
||||||
result = post_activity(activity.get_activity_url())
|
|
||||||
|
"""
|
||||||
|
Try to find an active session for this user
|
||||||
|
If it exists, post to the realtime controller
|
||||||
|
"""
|
||||||
|
sessions = user.user.session_set.all()
|
||||||
|
for session in sessions:
|
||||||
|
result = post_activity(session.session_key, activity.get_activity_url())
|
||||||
|
|
||||||
self.assertTrue(result == "", msg=result)
|
self.assertTrue(result == "", msg=result)
|
||||||
|
|
||||||
except Exception, ex:
|
except Exception, ex:
|
||||||
|
|||||||
@@ -19,7 +19,9 @@ class NotificationThread(threading.Thread):
|
|||||||
#Check if target of notification has an active session
|
#Check if target of notification has an active session
|
||||||
session = self._instance.last_known_session
|
session = self._instance.last_known_session
|
||||||
if session:
|
if session:
|
||||||
post_notification(notification_url=self._instance.get_notification_url(), session=session)
|
post_notification(
|
||||||
|
session.session_key,
|
||||||
|
self._instance.notification_html)
|
||||||
|
|
||||||
|
|
||||||
class Notification(BaseModel):
|
class Notification(BaseModel):
|
||||||
@@ -43,7 +45,13 @@ class Notification(BaseModel):
|
|||||||
update_fields=None):
|
update_fields=None):
|
||||||
|
|
||||||
self.send_notification_email()
|
self.send_notification_email()
|
||||||
post_notification(self.to_user, self.notification_text)
|
|
||||||
|
sessions = self.to_user.user.session_set.all()
|
||||||
|
for session in sessions:
|
||||||
|
post_notification(
|
||||||
|
session.session_key,
|
||||||
|
self.notification_html)
|
||||||
|
|
||||||
return super(Notification, self).save(force_insert, force_update, using, update_fields)
|
return super(Notification, self).save(force_insert, force_update, using, update_fields)
|
||||||
|
|
||||||
def send_notification_email(self):
|
def send_notification_email(self):
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from django.template import loader, Context
|
|||||||
from django.template.context import RequestContext
|
from django.template.context import RequestContext
|
||||||
import sys
|
import sys
|
||||||
from core.utils.string import lreplace, rreplace
|
from core.utils.string import lreplace, rreplace
|
||||||
|
from dss import settings
|
||||||
from spa.social.views import social_redirect
|
from spa.social.views import social_redirect
|
||||||
|
|
||||||
|
|
||||||
@@ -25,6 +26,7 @@ def app(request):
|
|||||||
|
|
||||||
context = {
|
context = {
|
||||||
'is_bot': request.user_agent.is_bot,
|
'is_bot': request.user_agent.is_bot,
|
||||||
|
'socket_io': settings.SOCKET_IO_JS_URL,
|
||||||
'bust': uuid.uuid1()
|
'bust': uuid.uuid1()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,11 +17,14 @@
|
|||||||
@audioController = new App.Lib.AudioController()
|
@audioController = new App.Lib.AudioController()
|
||||||
App.Router = new App.Lib.Router()
|
App.Router = new App.Lib.Router()
|
||||||
|
|
||||||
|
App.addInitializer ->
|
||||||
|
App.realtimeController = new App.Lib.RealtimeController();
|
||||||
|
App.realtimeController.startSocketIO();
|
||||||
|
|
||||||
App.addInitializer ->
|
App.addInitializer ->
|
||||||
@headerRegion.show(new App.HeaderApp.Views.Header())
|
@headerRegion.show(new App.HeaderApp.Views.Header())
|
||||||
@sidebarLeftRegion.show(new App.SidebarApp.Views.SidebarLeftNav())
|
@sidebarLeftRegion.show(new App.SidebarApp.Views.SidebarLeftNav())
|
||||||
|
|
||||||
|
|
||||||
App.addInitializer ->
|
App.addInitializer ->
|
||||||
$(document).on("click", "a[href]:not([data-bypass])", (evt) ->
|
$(document).on("click", "a[href]:not([data-bypass])", (evt) ->
|
||||||
href = { prop: $(this).prop("href"), attr: $(this).attr("href") }
|
href = { prop: $(this).prop("href"), attr: $(this).attr("href") }
|
||||||
|
|||||||
38
static/js/dss/lib/realtimeController.coffee
Normal file
38
static/js/dss/lib/realtimeController.coffee
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
@Dss.module "Lib", (Lib, App, Backbone, Marionette, $ ) ->
|
||||||
|
class Lib.RealtimeController
|
||||||
|
startSocketIO: ->
|
||||||
|
console.log("RealtimeController: SocketIO starting on " + com.podnoms.settings.REALTIME_HOST)
|
||||||
|
if (io?)
|
||||||
|
@socket = io.connect(com.podnoms.settings.REALTIME_HOST);
|
||||||
|
|
||||||
|
@socket.on "connect", ->
|
||||||
|
console.log("RealtimeController: Socket connected")
|
||||||
|
|
||||||
|
@socket.on "message", (message) ->
|
||||||
|
alert(message)
|
||||||
|
|
||||||
|
@socket.on "server-session", (session) =>
|
||||||
|
if session
|
||||||
|
console.log("RealtimeController: Connected " + sessionId)
|
||||||
|
sessionId = session['sessionId']
|
||||||
|
@registerSessionWithServer sessionId
|
||||||
|
else
|
||||||
|
console.log("RealtimeController: Can't read sessionId from socket")
|
||||||
|
|
||||||
|
@socket.on "activity", (data) =>
|
||||||
|
console.log("RealtimeController: activity " + data['message'])
|
||||||
|
utils.showMessage("New activity", data['message'])
|
||||||
|
vent.trigger("model:activity:new", data['message'])
|
||||||
|
|
||||||
|
@socket.on "notification", (data) =>
|
||||||
|
console.log("RealtimeController: notification " + data['message'])
|
||||||
|
vent.trigger("model:notification:new", data['message'])
|
||||||
|
else
|
||||||
|
console.log("Realtime server unavailable")
|
||||||
|
|
||||||
|
registerSessionWithServer: (sessionId) ->
|
||||||
|
console.log("Registering session: " + sessionId)
|
||||||
|
|
||||||
|
sendMessage: (message) ->
|
||||||
|
console.log("RealtimeController: sendMessage")
|
||||||
|
console.log(message)
|
||||||
@@ -49,6 +49,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="footer"></div>
|
<div id="footer"></div>
|
||||||
|
<script src="{{ socket_io }}"></script>
|
||||||
|
|
||||||
<script src="/js/settings/"></script>
|
<script src="/js/settings/"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|||||||
Reference in New Issue
Block a user