user per peer library (sqlitedict)

This commit is contained in:
j 2016-02-10 19:32:32 +05:30
commit 0ca89db3cd
11 changed files with 472 additions and 60 deletions

View file

@ -93,6 +93,11 @@ class User(db.Model):
if self.id == settings.USER_ID:
j['username'] = settings.preferences['username']
j['contact'] = settings.preferences['contact']
elif self.id in state.peers:
peer = state.peers[self.id]
for key in ('username', 'contact'):
if key in peer.info:
j[key] = peer.info[key]
if keys:
for k in set(j) - set(keys):
del j[k]
@ -161,6 +166,9 @@ class User(db.Model):
Changelog.query.filter_by(user_id=self.id).delete()
Metadata.query.filter_by(user_id=self.id).delete()
self.save()
if self.id in state.peers:
state.peers[self.id].remove()
del state.peers[self.id]
def update_name(self):
if self.id == settings.USER_ID:
@ -297,7 +305,7 @@ class List(db.Model):
if update_conditions(l._query.get('conditions', [])):
l.save()
def add_items(self, items):
def add_items(self, items, commit=True):
from item.models import Item
for item_id in items:
i = Item.get(item_id)
@ -305,9 +313,10 @@ class List(db.Model):
self.items.append(i)
if self.user_id == settings.USER_ID:
i.queue_download()
i.update()
i.update(commit=commit)
state.db.session.add(self)
state.db.session.commit()
if commit:
state.db.session.commit()
if self.user_id == settings.USER_ID and self.name != '':
Changelog.record(self.user, 'addlistitems', self.name, items)
@ -318,28 +327,30 @@ class List(db.Model):
else:
return self.user.items.join(Item.lists, aliased=True).filter(List.id == self.id)
def remove_items(self, items):
def remove_items(self, items, commit=True):
from item.models import Item
for item_id in items:
i = Item.get(item_id)
if i:
if i in self.items:
self.items.remove(i)
i.update()
i.update(commit=commit)
state.db.session.add(self)
state.db.session.commit()
if commit:
state.db.session.commit()
if self.user_id == settings.USER_ID and self.name != '':
Changelog.record(self.user, 'removelistitems', self.name, items)
def remove(self):
def remove(self, commit=True):
if not self._query:
for i in self.items:
self.items.remove(i)
q = list_items.delete().where(list_items.columns['list_id'].is_(self.id))
state.db.session.execute(q)
if not self._query:
if self.user_id == settings.USER_ID and self.name != '':
Changelog.record(self.user, 'removelist', self.name)
state.db.session.delete(self)
state.db.session.commit()
if commit:
state.db.session.commit()
@property
def public_id(self):
@ -445,7 +456,7 @@ class Metadata(db.Model):
return m
def get_hash(self):
return utils.get_meta_hash(self.data.copy())
return utils.get_meta_hash(self.data)
def save(self, commit=True, modified=None):
if modified is None: