diff --git a/api/handlers.py b/api/handlers.py index 1caf470..87033f2 100644 --- a/api/handlers.py +++ b/api/handlers.py @@ -5,7 +5,7 @@ from django.conf import settings import appversion from minecraft.models import MinecraftProfile from local.models import Quote -from minecraft.models import MOTD, Server, PlayerSession +from minecraft.models import MOTD, Server, PlayerSession, Item from django.db.models import F from django.http import HttpResponse from urllib2 import urlopen @@ -160,10 +160,10 @@ class PollHandler(BaseHandler): elif settings.CAMINUS_USE_BEANSTALKD: eventQueue = web_queue(timestamp) event = eventQueue.reserve(timeout=30) - if event: - eventData = json.loads(event.body) - pollData['events'].append(eventData['event']) + while event: + pollData['events'].append(json.loads(event.body)) event.delete() + event = eventQueue.reserve(timeout=0) return pollData class VaultHandler(BaseHandler): @@ -173,9 +173,17 @@ class VaultHandler(BaseHandler): player = MinecraftProfile.objects.get(mc_username__exact=playername) items = [] for slot in player.vault_slots.all(): - items.append({'item': slot.item, 'quantity': - slot.quantity, 'damage': slot.damage, 'data': slot.data, - 'position': slot.position}) + data = {} + data['quantity'] = slot.quantity + data['position'] = slot.position + data['item'] = None + data['damage'] = 0 + data['data'] = 0 + if slot.item: + data['data'] = slot.item.data + data['item'] = slot.item.material + data['damage'] = slot.item.damage + items.append(data) return {'items': items} def update(self, request, playername): @@ -186,18 +194,13 @@ class VaultHandler(BaseHandler): updated = False slot,created = VaultSlot.objects.get_or_create(player=player, position=stack['position']) - if slot.item != stack['item']: - slot.item = stack['item'] + item = Item.get(stack['item'], stack['damage'], stack['data']) + if slot.item != item: + slot.item = item updated = True if slot.quantity != stack['quantity']: slot.quantity = stack['quantity'] updated = True - if slot.damage != stack['damage']: - slot.damage = stack['damage'] - updated = True - if slot.data != stack['data']: - slot.data = stack['data'] - updated = True if updated: slot.save() return {'success': True}