From 8e3d8b5f8e219be167a682d9be0c93fd08562bb6 Mon Sep 17 00:00:00 2001 From: j Date: Thu, 14 Jan 2016 19:06:07 +0530 Subject: [PATCH] cleanup in progress apply_changes on peer removal --- oml/changelog.py | 4 ++++ oml/state.py | 1 + oml/user/models.py | 22 ++++++++++++++-------- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/oml/changelog.py b/oml/changelog.py index eb763f7..562f609 100644 --- a/oml/changelog.py +++ b/oml/changelog.py @@ -82,6 +82,10 @@ class Changelog(db.Model): def apply_changes(cls, user, changes): trigger = changes for change in changes: + if user.id in state.removepeer: + user.cleanup() + del state.removepeer[user.id] + return False if not cls.apply_change(user, change, trigger=False): logger.debug('FAIL %s', change) trigger = False diff --git a/oml/state.py b/oml/state.py index 48e485b..bf7aa40 100644 --- a/oml/state.py +++ b/oml/state.py @@ -12,6 +12,7 @@ update = False websockets = [] activity = {} +removepeer = {} def user(): import settings diff --git a/oml/user/models.py b/oml/user/models.py index 8af4d35..c6d0d3e 100644 --- a/oml/user/models.py +++ b/oml/user/models.py @@ -113,25 +113,31 @@ class User(db.Model): Changelog.record(state.user(), 'addpeer', self.id, self.nickname) self.peered = True self.save() + if self.id in state.removepeer: + del state.removepeer[self.id] else: self.pending = '' self.peered = False self.queued = False self.update_name() self.save() - List.query.filter_by(user_id=self.id).delete() - for i in self.items: - i.users.remove(self) - if not i.users: - i.delete() - Changelog.query.filter_by(user_id=self.id).delete() - Metadata.query.filter_by(user_id=self.id).delete() if self.name in settings.ui['showFolder']: del settings.ui['showFolder'][self.name] settings.ui._save() - self.save() + self.cleanup() if was_peering: Changelog.record(state.user(), 'removepeer', self.id) + state.removepeer[self.id] = True + self.save() + + def cleanup(self): + List.query.filter_by(user_id=self.id).delete() + for i in self.items: + i.users.remove(self) + if not i.users: + i.delete() + Changelog.query.filter_by(user_id=self.id).delete() + Metadata.query.filter_by(user_id=self.id).delete() self.save() def update_name(self):