示例#1
0
def removeClientFromChannel(request, channelName, client):
    """
    Remove client from channel.

    @type request: C{django.http.HttpRequest}
    @param request: Django Request.
    @type channelName: C{string}
    @param channelName: Channel name.
    @type client: C{string}
    @param client: Unique Client ID.
    """
    
    import sputnik
    srem("sputnik:channel:%s:channel" % channelName, client)

    # get our username
    userName = sputnik.get("ses:%s:username" % client)

    # get all usernames
    users = smembers("sputnik:channel:%s:users" % channelName)

    try:
        # get all clients
        allClients = []
        for cl in smembers("sputnik:channel:%s:channel" % channelName):
            allClients.append(sputnik.get("ses:%s:username" % cl))

        for usr in users:
            if usr not in allClients:
                sputnik.srem("sputnik:channel:%s:users" % channelName, usr)
                addMessageToChannel(request, channelName, {"command": "user_remove", "username": usr}, myself = True)
    except:
        from booki.utils.log import printStack
        printStack(None)
示例#2
0
def addMessageToChannel2(clientID,
                         sputnikID,
                         channelName,
                         message,
                         myself=False):
    import sputnik
    import json

    try:
        clnts = sputnik.smembers("sputnik:channel:%s:channel" % channelName)
    except:
        from booki.utils.log import printStack
        printStack(None)
        return

    message["channel"] = channelName
    message["clientID"] = clientID

    for c in clnts:
        if not myself and c == sputnikID:
            continue

        if c.strip() != '':
            try:
                sputnik.push("ses:%s:messages" % c, json.dumps(message))
            except:
                logger.debug('*ERROR PUSH*')
示例#3
0
def smembers(key):
    import sputnik

    result = []

    if key and key.strip() != '':
        try:
            with sputnik.rcon.lock('com'):
                result =  [rdecode(el) for el in list(sputnik.rcon.smembers(key))]
        except:
            from booki.utils.log import printStack
            printStack(None)
            return []

    return result
示例#4
0
def smembers(key):
    import sputnik

    result = []

    if key and key.strip() != '':
        try:
            with sputnik.rcon.lock('com'):
                result = [
                    rdecode(el) for el in list(sputnik.rcon.smembers(key))
                ]
        except:
            from booki.utils.log import printStack
            printStack(None)
            return []

    return result
示例#5
0
def removeClientFromChannel(request, channelName, client):
    """
    Remove client from channel.

    @type request: C{django.http.HttpRequest}
    @param request: Django Request.
    @type channelName: C{string}
    @param channelName: Channel name.
    @type client: C{string}
    @param client: Unique Client ID.
    """

    import sputnik
    srem("sputnik:channel:%s:channel" % channelName, client)

    # get our username
    userName = sputnik.get("ses:%s:username" % client)

    # get all usernames
    users = smembers("sputnik:channel:%s:users" % channelName)

    try:
        # get all clients
        allClients = []
        for cl in smembers("sputnik:channel:%s:channel" % channelName):
            allClients.append(sputnik.get("ses:%s:username" % cl))

        for usr in users:
            if usr not in allClients:
                sputnik.srem("sputnik:channel:%s:users" % channelName, usr)
                addMessageToChannel(request,
                                    channelName, {
                                        "command": "user_remove",
                                        "username": usr
                                    },
                                    myself=True)
    except:
        from booki.utils.log import printStack
        printStack(None)
示例#6
0
def addMessageToChannel2(clientID, sputnikID, channelName, message, myself = False ):
    import sputnik
    import json

    try:
        clnts = sputnik.smembers("sputnik:channel:%s:channel" % channelName)
    except:
        from booki.utils.log import printStack
        printStack(None)
        return

    message["channel"] = channelName
    message["clientID"] = clientID

    for c in clnts:
        if not myself and c == sputnikID:
            continue

        if c.strip() != '':
            try:
                sputnik.push( "ses:%s:messages" % c, json.dumps(message))
            except:
                logger.debug('*ERROR PUSH*')
示例#7
0
def addMessageToChannel(request, channelName, message, myself = False ):
    """
    Add message to specific channel.

    @type request: C{django.http.HttpRequest}
    @param request: Django Request.
    @type channelName: C{string}
    @param channelName: Channel name.
    @type message: C{dict}
    @param message: Sputnik message.
    @type myself: C{bool}
    @keyword myself: Should client also recieve that message.
    """

    import sputnik

    # TODO
    # not iterable
    try:
        clnts = sputnik.smembers("sputnik:channel:%s:channel" % channelName)
    except:
        from booki.utils.log import printStack
        printStack(None)
        return

    message["channel"] = channelName
    message["clientID"] = request.clientID

    for c in clnts:
        if not myself and c == request.sputnikID:
            continue

        if c.strip() != '':
            try:
                sputnik.push( "ses:%s:messages" % c, simplejson.dumps(message))
            except:
                pass
示例#8
0
def addMessageToChannel(request, channelName, message, myself=False):
    """
    Add message to specific channel.

    @type request: C{django.http.HttpRequest}
    @param request: Django Request.
    @type channelName: C{string}
    @param channelName: Channel name.
    @type message: C{dict}
    @param message: Sputnik message.
    @type myself: C{bool}
    @keyword myself: Should client also recieve that message.
    """

    import sputnik

    # TODO
    # not iterable
    try:
        clnts = sputnik.smembers("sputnik:channel:%s:channel" % channelName)
    except:
        from booki.utils.log import printStack
        printStack(None)
        return

    message["channel"] = channelName
    message["clientID"] = request.clientID

    for c in clnts:
        if not myself and c == request.sputnikID:
            continue

        if c.strip() != '':
            try:
                sputnik.push("ses:%s:messages" % c, simplejson.dumps(message))
            except:
                pass
示例#9
0
def upload_cover(request, bookid, version=None):
    """
    Uploades attachments. Used from Upload dialog.

    @param request: Django Request
    @param bookid: Book ID
    @param version: Book version or None
    """

    import datetime

    try:
        book = models.Book.objects.get(url_title__iexact=bookid)
    except models.Book.DoesNotExist:
        return pages.ErrorPage(request, "errors/book_does_not_exist.html", {"book_name": bookid})

    book_version = book.getVersion(version)

    stat = models.BookStatus.objects.filter(book = book)[0]
    
    operationResult = True

    # check this for transactions
    try:

        for name, fileData in request.FILES.items():
            if True:
                print '>> ', name
                print request.FILES[name].name
                import hashlib

                h = hashlib.sha1()
                h.update(name)
                h.update(request.POST.get('format', ''))
                h.update(request.POST.get('license', ''))
                h.update(str(datetime.datetime.now()))

                license = models.License.objects.get(name=request.POST.get('license', ''))

                frm = request.POST.get('format', '').split(',')

                try:
                    width = int(request.POST.get('width', '0'))
                except ValueError:
                    width = 0

                try:
                    height = int(request.POST.get('height', '0'))
                except ValueError:
                    height = 0

                try:
                    filename = request.FILES[name].name
                except:
                    filename = ''
                
                cov = models.BookCover(book = book,
                                       user = request.user,
                                       cid = h.hexdigest(),
                                       title = request.POST.get('title', '')[:250],
                                       filename = filename[:250],
                                       width = width,
                                       height = height,
                                       unit = request.POST.get('unit', 'mm'),
                                       booksize = request.POST.get('booksize', ''),
                                       cover_type = request.POST.get('type', ''),
                                       creator = request.POST.get('creator', '')[:40],
                                       license = license,
                                       notes = request.POST.get('notes', '')[:500],
                                       approved = False,
                                       is_book = 'book' in frm,
                                       is_ebook = 'ebook' in frm,
                                       is_pdf = 'pdf' in frm,
                                       created = datetime.datetime.now())
                cov.save()
                
                cov.attachment.save(request.FILES[name].name, fileData, save = False)
                cov.save()

        # TODO:
        # must write info about this to log!
    except IOError:
        operationResult = False
        transaction.rollback()
    except:
        from booki.utils import log
        log.printStack()
        oprerationResult = False
        transaction.rollback()
    else:
        # maybe check file name now and save with new name
        transaction.commit()

    return HttpResponse('<html><body><script> parent.jQuery.booki.editor.showCovers(); </script></body></html>')
示例#10
0
def upload_cover(request, bookid, version=None):
    """
    Uploades attachments. Used from Upload dialog.

    @param request: Django Request
    @param bookid: Book ID
    @param version: Book version or None
    """

    import datetime

    try:
        book = models.Book.objects.get(url_title__iexact=bookid)
    except models.Book.DoesNotExist:
        return pages.ErrorPage(request, "errors/book_does_not_exist.html",
                               {"book_name": bookid})

    book_version = book.getVersion(version)

    stat = models.BookStatus.objects.filter(book=book)[0]

    operationResult = True

    # check this for transactions
    try:

        for name, fileData in request.FILES.items():
            if True:
                print '>> ', name
                print request.FILES[name].name
                import hashlib

                h = hashlib.sha1()
                h.update(name)
                h.update(request.POST.get('format', ''))
                h.update(request.POST.get('license', ''))
                h.update(str(datetime.datetime.now()))

                license = models.License.objects.get(
                    name=request.POST.get('license', ''))

                frm = request.POST.get('format', '').split(',')

                try:
                    width = int(request.POST.get('width', '0'))
                except ValueError:
                    width = 0

                try:
                    height = int(request.POST.get('height', '0'))
                except ValueError:
                    height = 0

                try:
                    filename = request.FILES[name].name
                except:
                    filename = ''

                cov = models.BookCover(
                    book=book,
                    user=request.user,
                    cid=h.hexdigest(),
                    title=request.POST.get('title', '')[:250],
                    filename=filename[:250],
                    width=width,
                    height=height,
                    unit=request.POST.get('unit', 'mm'),
                    booksize=request.POST.get('booksize', ''),
                    cover_type=request.POST.get('type', ''),
                    creator=request.POST.get('creator', '')[:40],
                    license=license,
                    notes=request.POST.get('notes', '')[:500],
                    approved=False,
                    is_book='book' in frm,
                    is_ebook='ebook' in frm,
                    is_pdf='pdf' in frm,
                    created=datetime.datetime.now())
                cov.save()

                cov.attachment.save(request.FILES[name].name,
                                    fileData,
                                    save=False)
                cov.save()

        # TODO:
        # must write info about this to log!
    except IOError:
        operationResult = False
        transaction.rollback()
    except:
        from booki.utils import log
        log.printStack()
        oprerationResult = False
        transaction.rollback()
    else:
        # maybe check file name now and save with new name
        transaction.commit()

    return HttpResponse(
        '<html><body><script> parent.jQuery.booki.editor.showCovers(); </script></body></html>'
    )