diff --git a/mycoserver/group.py b/mycoserver/group.py index ff3c7d6..38593ac 100644 --- a/mycoserver/group.py +++ b/mycoserver/group.py @@ -58,6 +58,7 @@ class Group(object): self.uuid=None self.name=None self.contributors={} + self.deletedContributors={} self.contributions={} self.deletedContributions={} @@ -68,6 +69,10 @@ class Group(object): for email in data['contributors']: self.contributors[email]=Contributor() self.contributors[email].load(data['contributors'][email]) + if 'deletedContributors' in data: + for email in data['deletedContributors']: + self.deletedContributors[email]=Contributor() + self.deletedContributors[email].load(data['deletedContributors'][email]) for uuid in data['contributions']: self.contributions[uuid]=Contribution() self.contributions[uuid].load(data['contributions'][uuid]) @@ -85,6 +90,10 @@ class Group(object): for email in self.contributors: contributors[email]=self.contributors[email].export() + deletedContributors={} + for email in self.deletedContributors: + deletedContributors[email]=self.deletedContributors[email].export() + contributions={} for uuid in self.contributions: contributions[uuid]=self.contributions[uuid].export() @@ -97,10 +106,38 @@ class Group(object): 'uuid': self.uuid, 'name': self.name, 'contributors': contributors, + 'deletedContributors': deletedContributors, 'contributions': contributions, 'deletedContributions': deletedContributions } + def restoreContributor(self, email): + contributor=Contributor() + contributor.load(self.deletedContributors[email]) + for uuid in self.deletedContributions: + if self.deletedContributions[uuid].contributor==contributor.email and self.deletedContributions[uuid].lastChange==contributor.deletionTime: + self.contributions[uuid]=Contribution() + self.contributions[uuid].load(self.deletedContributions[uuid].export()) + # Restored contribution must not be more up to date than other + self.contributions[uuid].lastChange=0 + del self.deletedContributions[uuid] + contributor.deletionTime=None + self.contributors[email]=contributor + del self.deletedContributors[email] + + def deleteContributor(self, email, time): + contributor=Contributor() + contributor.load(self.contributors[email]) + contributor.deletionTime=time + for uuid in self.contributions: + if self.contributions[uuid].contributor==email: + self.deletedContributions[uuid]=Contribution() + self.deletedContributions[uuid].load(self.contributions[uuid].export()) + self.deletedContributions[uuid].lastChange=time + del self.contributions[uuid] + self.deletedContributors[email]=contributor + del self.contributors[email] + def sync(self, group): ret=Group() ret.uuid=self.uuid @@ -108,6 +145,43 @@ class Group(object): # FIXME : Add lastChange on group to permit name choice between to object ret.name=group.name + ## Deleted Contributors + for email in self.deletedContributors: + if email not in group.deletedContributors: + logging.debug('Contributor %s not deleted on the other' % email) + lastChange=0 + for uuid in group.contributions: + if group.contributions[uuid].contributor==email and group.contributions[uuid].lastChange>lastChange: + lastChange=group.contributions[uuid].lastChange + if self.deletedContributors[email].deletionTimelastChange: + lastChange=ret.contributions[uuid].lastChange + if group.deletedContributors[email].deletionTime