def remote_init_profile(request, message, profileid): """ Initializes data. @type request: C{django.http.HttpRequest} @param request: Client Request object @type message: C{dict} @param message: Message object @type profileid: C{string} @param profile: Unique Profile id """ import sputnik ## get online users try: _onlineUsers = sputnik.smembers("sputnik:channel:%s:users" % message["channel"]) except: _onlineUsers = [] if request.user.username not in _onlineUsers: try: sputnik.sadd("sputnik:channel:%s:users" % message["channel"], request.user.username) except: pass return {}
def remote_init_group(request, message, groupid): import sputnik ## get online users try: _onlineUsers = sputnik.smembers("sputnik:channel:%s:users" % message["channel"]) except: _onlineUsers = [] if request.user.username not in _onlineUsers: try: sputnik.sadd("sputnik:channel:%s:users" % message["channel"], request.user.username) except: pass return {}
def remote_init_editor(request, message, bookid, version): book = models.Book.objects.get(id=bookid) book_version = getVersion(book, version) ## get chapters chapters = getTOCForBook(book_version) holdChapters = getHoldChapters(book_version) ## get users def _getUserName(a): if a == request.sputnikID: return "<b>%s</b>" % a return a try: users = [_getUserName(m) for m in list(sputnik.smembers("sputnik:channel:%s:channel" % message["channel"]))] except: users = [] ## get workflow statuses statuses = [(status.id, status.name) for status in models.BookStatus.objects.filter(book=book).order_by("-weight")] ## get attachments try: attachments = getAttachments(book_version) except: attachments = [] ## get metadata metadata = [{'name': v.name, 'value': v.getValue()} for v in models.Info.objects.filter(book=book)] ## notify others sputnik.addMessageToChannel(request, "/chat/%s/" % bookid, {"command": "user_joined", "user_joined": request.user.username}, myself = False) ## get licenses licenses = [(elem.abbrevation, elem.name) for elem in models.License.objects.all().order_by("name")] ## get online users try: _onlineUsers = sputnik.smembers("sputnik:channel:%s:users" % message["channel"]) except: _onlineUsers = [] if request.user.username not in _onlineUsers: try: sputnik.sadd("sputnik:channel:%s:users" % message["channel"], request.user.username) _onlineUsers.append(request.user.username) except: pass ## get mood message for current user ## send mood as seperate message ## set notifications to other clients profile = request.user.get_profile() if profile: moodMessage = profile.mood; else: moodMessage = '' sputnik.addMessageToChannel(request, "/booki/book/%s/%s/" % (bookid, version), {"command": "user_add", "username": request.user.username, "mood": moodMessage} ) ## get online users and their mood messages from django.contrib.auth.models import User def _getUser(_user): try: _u = User.objects.get(username=_user) return (_user, _u.get_profile().mood) except: return None onlineUsers = [x for x in [_getUser(x) for x in _onlineUsers] if x] # for now, this is one big temp here import time, decimal, re _now = time.time() locks = {} try: for key in sputnik.rkeys("booki:*:locks:*"): lastAccess = sputnik.get(key) if type(lastAccess) in [type(' '), type(u' ')]: try: lastAccess = decimal.Decimal(lastAccess) except: continue if lastAccess and decimal.Decimal("%f" % _now) - lastAccess <= 30: m = re.match("booki:(\d+):locks:(\d+):(\w+)", key) if m: if m.group(1) == bookid: locks[m.group(2)] = m.group(3) except: pass return {"licenses": licenses, "chapters": chapters, "metadata": metadata, "hold": holdChapters, "users": users, "locks": locks, "statuses": statuses, "attachments": attachments, "onlineUsers": list(onlineUsers)}