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
|
||||
|
||||
|
||||
def post_activity(activity_url):
|
||||
payload = {'message': activity_url}
|
||||
def post_activity(session_id, activity_url):
|
||||
payload = {
|
||||
'sessionid': session_id,
|
||||
'message': activity_url
|
||||
}
|
||||
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:
|
||||
return ""
|
||||
else:
|
||||
|
||||
@@ -12,24 +12,17 @@ HEADERS = {
|
||||
logger = logging.getLogger('spa')
|
||||
|
||||
|
||||
def post_notification(user, message):
|
||||
pass
|
||||
try:
|
||||
r = redis.StrictRedis(host='localhost', port=6379, db=0)
|
||||
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
|
||||
|
||||
def post_notification(session_id, message):
|
||||
payload = {
|
||||
'sessionid': session_id,
|
||||
'message': message
|
||||
}
|
||||
data = json.dumps(payload)
|
||||
r = requests.post(localsettings.REALTIME_HOST + '/api/notification',
|
||||
data=data, headers=HEADERS)
|
||||
r = requests.post(
|
||||
localsettings.REALTIME_HOST + 'notification',
|
||||
data=data,
|
||||
headers=HEADERS
|
||||
)
|
||||
if r.status_code == 200:
|
||||
return ""
|
||||
else:
|
||||
|
||||
@@ -83,7 +83,7 @@ AUTHENTICATION_BACKENDS = global_settings.AUTHENTICATION_BACKENDS + (
|
||||
MIDDLEWARE_CLASSES = (
|
||||
'django.middleware.gzip.GZipMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'user_sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
@@ -106,7 +106,7 @@ INSTALLED_APPS = (
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'user_sessions',
|
||||
'django.contrib.sites',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
@@ -175,6 +175,8 @@ TASTYPIE_ALLOW_MISSING_SLASH = True
|
||||
SENDFILE_ROOT = os.path.join(MEDIA_ROOT, 'mixes')
|
||||
SENDFILE_URL = '/media/mixes'
|
||||
|
||||
SESSION_ENGINE = 'user_sessions.backends.db'
|
||||
|
||||
mimetypes.add_type("text/xml", ".plist", False)
|
||||
|
||||
HTML_MINIFY = not DEBUG
|
||||
@@ -183,6 +185,7 @@ HTML_MINIFY = not DEBUG
|
||||
DEFAULT_FROM_EMAIL = 'DSS ChatBot <chatbot@deepsouthsounds.com>'
|
||||
DEFAULT_HTTP_PROTOCOL = 'http'
|
||||
|
||||
|
||||
EMAIL_BACKEND = 'djrill.mail.backends.djrill.DjrillBackend'
|
||||
|
||||
if DEBUG:
|
||||
@@ -199,7 +202,6 @@ REALTIME_HEADERS = {
|
||||
'content-type': 'application/json'
|
||||
}
|
||||
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
|
||||
|
||||
if 'test' in sys.argv:
|
||||
try:
|
||||
from test_settings import *
|
||||
|
||||
@@ -14,6 +14,7 @@ urlpatterns = patterns(
|
||||
'',
|
||||
url(r'^favicon\.ico$', RedirectView.as_view(url='/static/img/favicon.ico')),
|
||||
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'^privacy\.html$', TemplateView.as_view(template_name='boiler/privacy.html')),
|
||||
(r'^robots\.txt', TemplateView.as_view(template_name='boiler/robots.txt')),
|
||||
|
||||
@@ -58,3 +58,4 @@ djrill
|
||||
python-shout
|
||||
django-dirtyfields
|
||||
django-storages
|
||||
django-user-sessions
|
||||
@@ -1,5 +1,4 @@
|
||||
from unittest import TestCase
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.management.base import NoArgsCommand
|
||||
from django.utils import unittest
|
||||
from core.realtime.activity import post_activity
|
||||
@@ -23,10 +22,18 @@ class TestRealtime(TestCase):
|
||||
def test_post_activity(self):
|
||||
try:
|
||||
mix = Mix.objects.order_by('?')[0]
|
||||
user = User.objects.get(pk=1)
|
||||
activity = ActivityDownload(user=user.get_profile(), mix=mix)
|
||||
user = UserProfile.objects.get(slug='fergalmoran')
|
||||
activity = ActivityDownload(user=user, mix=mix)
|
||||
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)
|
||||
|
||||
except Exception, ex:
|
||||
|
||||
@@ -19,7 +19,9 @@ class NotificationThread(threading.Thread):
|
||||
#Check if target of notification has an active session
|
||||
session = self._instance.last_known_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):
|
||||
@@ -43,7 +45,13 @@ class Notification(BaseModel):
|
||||
update_fields=None):
|
||||
|
||||
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)
|
||||
|
||||
def send_notification_email(self):
|
||||
|
||||
@@ -7,6 +7,7 @@ from django.template import loader, Context
|
||||
from django.template.context import RequestContext
|
||||
import sys
|
||||
from core.utils.string import lreplace, rreplace
|
||||
from dss import settings
|
||||
from spa.social.views import social_redirect
|
||||
|
||||
|
||||
@@ -25,6 +26,7 @@ def app(request):
|
||||
|
||||
context = {
|
||||
'is_bot': request.user_agent.is_bot,
|
||||
'socket_io': settings.SOCKET_IO_JS_URL,
|
||||
'bust': uuid.uuid1()
|
||||
}
|
||||
|
||||
|
||||
@@ -17,11 +17,14 @@
|
||||
@audioController = new App.Lib.AudioController()
|
||||
App.Router = new App.Lib.Router()
|
||||
|
||||
App.addInitializer ->
|
||||
App.realtimeController = new App.Lib.RealtimeController();
|
||||
App.realtimeController.startSocketIO();
|
||||
|
||||
App.addInitializer ->
|
||||
@headerRegion.show(new App.HeaderApp.Views.Header())
|
||||
@sidebarLeftRegion.show(new App.SidebarApp.Views.SidebarLeftNav())
|
||||
|
||||
|
||||
App.addInitializer ->
|
||||
$(document).on("click", "a[href]:not([data-bypass])", (evt) ->
|
||||
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 id="footer"></div>
|
||||
<script src="{{ socket_io }}"></script>
|
||||
|
||||
<script src="/js/settings/"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
Reference in New Issue
Block a user