add user.name, list fixes

This commit is contained in:
j 2014-05-25 14:16:04 +02:00
commit 98d1725d19
15 changed files with 180 additions and 203 deletions

View file

@ -240,6 +240,7 @@ class Changelog(db.Model):
def action_editusername(self, user, timestamp, username):
user.info['username'] = username
user.update_name()
user.save()
return True

View file

@ -7,6 +7,7 @@ from user.models import List, User
def create_default_lists(user_id=None):
user_id = user_id or settings.USER_ID
user = User.get_or_create(user_id)
user.update_name()
for list in settings.config['lists']:
l = List.get(user_id, list['title'])
if not l:

View file

@ -58,6 +58,10 @@ def setPreferences(data):
}
'''
update_dict(settings.preferences, data)
if 'username' in data:
u = state.user()
u.update_name()
u.save()
return settings.preferences
actions.register(setPreferences)
@ -102,7 +106,7 @@ def getLists(data):
'items': Item.query.count(),
'name': 'Libraries',
'type': 'libraries',
'user': '',
'user': None,
})
for u in models.User.query.filter((models.User.peered==True)|(models.User.id==settings.USER_ID)):
lists += u.lists_json()
@ -245,7 +249,11 @@ def editUser(data):
'''
if 'nickname' in data:
p = models.User.get_or_create(data['id'])
p.set_nickname(data['nickname'])
if data['nickname']:
p.info['nickname'] = data['nickname']
elif 'nickname' in p.info:
del p.info['nickname']
p.update_name()
p.save()
return {}
actions.register(editUser, cache=False)

View file

@ -50,6 +50,11 @@ class User(db.Model):
db.session.add(self)
db.session.commit()
@property
def name(self):
name = self.nickname if self.id != settings.USER_ID else ''
return name
def json(self):
j = {}
if self.info:
@ -59,7 +64,9 @@ class User(db.Model):
j['pending'] = self.pending
j['peered'] = self.peered
j['online'] = self.is_online()
j['nickname'] = self.nickname
j['nickname'] = self.info.get('nickname')
j['username'] = self.info.get('username') if self.id != settings.USER_ID else settings.preferences['username']
j['name'] = self.name
return j
def is_online(self):
@ -71,7 +78,7 @@ class User(db.Model):
'name': 'Library',
'type': 'library',
'items': self.items.count(),
'user': self.nickname if self.id != settings.USER_ID else settings.preferences['username'],
'user': self.name
}] + [l.json() for l in self.lists.order_by('index_')]
def update_peering(self, peered, username=None):
@ -80,11 +87,7 @@ class User(db.Model):
self.pending = ''
if username:
self.info['username'] = username
else:
username = self.info.get('username')
if not username:
username = 'anonymous'
self.set_nickname(username)
self.update_name()
# FIXME: need to set peered to False to not trigger changelog event
# before other side receives acceptPeering request
self.peered = False
@ -97,7 +100,7 @@ class User(db.Model):
else:
self.pending = ''
self.peered = False
self.nickname = None
self.update_name()
self.save()
List.query.filter_by(user_id=self.id).delete()
for i in self.items:
@ -112,11 +115,15 @@ class User(db.Model):
Changelog.record(state.user(), 'removepeer', self.id)
self.save()
def set_nickname(self, nickname):
username = nickname
def update_name(self):
if self.id == settings.USER_ID:
name = settings.preferences.get('username', 'anonymous')
else:
name = self.info.get('nickname') or self.info.get('username') or 'anonymous'
nickname = name
n = 2
while self.query.filter_by(nickname=nickname).filter(User.id!=self.id).first():
nickname = '%s [%d]' % (username, n)
nickname = '%s [%d]' % (name, n)
n += 1
self.nickname = nickname
@ -261,7 +268,7 @@ class List(db.Model):
def json(self):
r = {
'id': self.public_id,
'user': self.user.nickname if self.user_id != settings.USER_ID else settings.preferences['username'],
'user': self.user.name,
'name': self.name,
'index': self.index_,
'items': self.items_count(),