Fixed a lacking implementation in the Msg API. You need to re-sync the database since Msg now relies on three fields that where commented out before.

This commit is contained in:
Griatch 2010-09-04 12:18:00 +00:00
parent 72bb8ac667
commit d90c2909a2
6 changed files with 33 additions and 27 deletions

View file

@ -763,7 +763,6 @@ class CmdPage(MuxCommand):
caller.msg(string) caller.msg(string)
return return
# Build a list of targets # Build a list of targets
if not self.lhs: if not self.lhs:
@ -775,10 +774,10 @@ class CmdPage(MuxCommand):
recobjs = [] recobjs = []
for receiver in receivers: for receiver in receivers:
obj = caller.search("*%s" % (receiver.lstrip('*')), global_search=True) pobj = caller.search("*%s" % (receiver.lstrip('*')), global_search=True)
if not obj: if not pobj:
return return
recobjs.append(obj) recobjs.append(pobj)
header = "{wPlayer{n {c%s{n {wpages:{n" % caller.key header = "{wPlayer{n {c%s{n {wpages:{n" % caller.key
message = self.rhs message = self.rhs
@ -786,7 +785,7 @@ class CmdPage(MuxCommand):
msg = create.create_message(caller, message, msg = create.create_message(caller, message,
receivers=recobjs) receivers=recobjs)
# tell the players they got a message. # tell the players they got a message.
for obj in recobjs: for pobj in recobjs:
obj.msg("%s %s" % (header, message)) pobj.msg("%s %s" % (header, message))
caller.msg("You paged %s with '%s'." % (recobjs, message)) target_names = "{n,{c ".join([pobj.name for pobj in recobjs])
caller.msg("You paged {c%s{n with: '%s'." % (target_names, message))

View file

@ -66,8 +66,7 @@ class MsgManager(models.Manager):
sender = to_object(sender) sender = to_object(sender)
if not sender: if not sender:
return None return None
return [msg for msg in sender.sender_set.all() return self.filter(db_sender=sender).exclude(db_hide_from_sender=False)
if sender not in msg.hide_from_senders.all()]
def get_messages_by_receiver(self, receiver): def get_messages_by_receiver(self, receiver):
""" """
@ -76,8 +75,9 @@ class MsgManager(models.Manager):
receiver = to_object(receiver) receiver = to_object(receiver)
if not receiver: if not receiver:
return None return None
return [msg for msg in receiver.receiver_set.all() return [msg for msg in self.all()
if receiver not in msg.hide_from_receivers.all()] if receiver in msg.recivers
and receiver not in msg.hide_from_receivers]
def get_messages_by_channel(self, channel): def get_messages_by_channel(self, channel):
""" """
@ -86,9 +86,9 @@ class MsgManager(models.Manager):
channel = to_object(channel, objtype='channel') channel = to_object(channel, objtype='channel')
if not channel: if not channel:
return None return None
return [msg for msg in channel.channel_set.all() return [msg for msg in self.all()
if channel not in msg.hide_from_channels.all()] if channel in msg.channels
and channel not in msg.hide_from_channels]
#TODO add search limited by send_times #TODO add search limited by send_times
def text_search(self, searchstring, filterdict=None): def text_search(self, searchstring, filterdict=None):

View file

@ -107,9 +107,9 @@ class Msg(SharedMemoryModel):
# Stored as a comma-separated string of dbrefs. Can be used by the # Stored as a comma-separated string of dbrefs. Can be used by the
# game to mask out messages from being visible in the archive (no # game to mask out messages from being visible in the archive (no
# messages are actually deleted) # messages are actually deleted)
#db_hide_from_sender = models.BooleanField(default=False) db_hide_from_sender = models.BooleanField(default=False)
#db_hide_from_receivers = models.CharField(max_length=255, null=True, blank=True) db_hide_from_receivers = models.CharField(max_length=255, null=True, blank=True)
#db_hide_from_channels = models.CharField(max_length=255, null=True, blank=True) db_hide_from_channels = models.CharField(max_length=255, null=True, blank=True)
# permission strings, separated by commas # permission strings, separated by commas
db_permissions = models.CharField(max_length=255, blank=True) db_permissions = models.CharField(max_length=255, blank=True)

View file

@ -4,7 +4,7 @@ Custom manager for Objects.
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from src.typeclasses.managers import TypedObjectManager from src.typeclasses.managers import TypedObjectManager
from src.typeclasses.managers import returns_typeclass_list from src.typeclasses.managers import returns_typeclass, returns_typeclass_list
from src.utils import create from src.utils import create
# Try to use a custom way to parse id-tagged multimatches. # Try to use a custom way to parse id-tagged multimatches.
@ -62,17 +62,23 @@ class ObjectManager(TypedObjectManager):
# ObjectManager Get methods # ObjectManager Get methods
# #
@returns_typeclass_list @returns_typeclass
def get_object_with_user(self, user): def get_object_with_user(self, user):
""" """
Matches objects with obj.player.user matching the argument. Matches objects with obj.player.user matching the argument.
Both an user object and a user id may be supplied. A player<->user is a one-to-relationship, so this always
returns just one result or None.
user - mayb be a user object or user id.
""" """
try: try:
uid = int(user) uid = int(user)
except TypeError: except TypeError:
uid = user.id uid = user.id
return self.filter(db_player__user__id=uid) try:
return self.get(db_player__user__id=uid)
except Exception:
return None
# This returns typeclass since get_object_with_user and get_dbref does. # This returns typeclass since get_object_with_user and get_dbref does.
def player_name_search(self, search_string): def player_name_search(self, search_string):
@ -273,7 +279,7 @@ class ObjectManager(TypedObjectManager):
player_string = ostring.lstrip("*") player_string = ostring.lstrip("*")
player_match = self.player_name_search(player_string) player_match = self.player_name_search(player_string)
if player_match is not None: if player_match is not None:
return [player_match] return [player_match]
if global_search or not location: if global_search or not location:
# search all objects # search all objects

View file

@ -450,6 +450,7 @@ class ObjectDB(TypedObject):
results = ObjectDB.objects.object_search(self, ostring, results = ObjectDB.objects.object_search(self, ostring,
global_search, global_search,
attribute_name) attribute_name)
if ignore_errors: if ignore_errors:
return results return results
return HANDLE_SEARCH_ERRORS(self, ostring, results, global_search) return HANDLE_SEARCH_ERRORS(self, ostring, results, global_search)

View file

@ -140,9 +140,9 @@ class SessionProtocol(StatefulTelnetProtocol):
character = ObjectDB.objects.get_object_with_user(self.uid) character = ObjectDB.objects.get_object_with_user(self.uid)
if not character: if not character:
string = "No character match for session uid: %s" % self.uid string = "No character match for session uid: %s" % self.uid
logger.log_errmsg(string) logger.log_errmsg(string)
return None else:
return character[0] return character
return None return None
def execute_cmd(self, raw_string): def execute_cmd(self, raw_string):