From c82efdaff16321be93b3335d23764df2949cf92e Mon Sep 17 00:00:00 2001 From: j Date: Mon, 8 Feb 2016 14:33:21 +0530 Subject: [PATCH] pull changes in peer sort order, fixes #228 --- oml/item/models.py | 6 +----- oml/nodes.py | 21 ++++++++++++++++----- oml/user/api.py | 4 ++-- oml/utils.py | 3 +++ 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/oml/item/models.py b/oml/item/models.py index 434587c..a28c64c 100644 --- a/oml/item/models.py +++ b/oml/item/models.py @@ -339,11 +339,7 @@ class Item(db.Model): if self.meta.get('sharemetadata'): return peers = [u for u in self.users if u.id != settings.USER_ID] - def peer_sort(u): - info = u.json() - return ox.sort_string(str(info.get('index', '')) - + 'Z' + (info.get('name') or '')) - peers.sort(key=peer_sort) + peers.sort(key=lambda u: utils.user_sort_key(u.json())) sync_from = None first_peer = None # get first peer with sharemetadata set diff --git a/oml/nodes.py b/oml/nodes.py index 640908d..3474e0b 100644 --- a/oml/nodes.py +++ b/oml/nodes.py @@ -22,6 +22,7 @@ from changelog import Changelog from websocket import trigger_event from localnodes import LocalNodes from tor_request import get_opener +from utils import user_sort_key import state import db @@ -474,11 +475,21 @@ class Nodes(Thread): if state.activity and state.activity.get('activity') == 'import': return self._pulling = True - for node in list(self._nodes.values()): - if not state.shutdown: - node.online = node.can_connect() - if not state.shutdown and node.online: - node.pullChanges() + users = [] + with db.session(): + from user.models import User + for u in User.query.filter(User.id!=settings.USER_ID).filter_by(peered=True).all(): + users.append(u.json()) + users.sort(key=user_sort_key) + for u in users: + if state.shutdown: + break + node = self._nodes.get(u['id']) + if node: + if not state.shutdown: + node.online = node.can_connect() + if not state.shutdown and node.online: + node.pullChanges() self._pulling = False def run(self): diff --git a/oml/user/api.py b/oml/user/api.py index bd8f0c1..72d0cad 100644 --- a/oml/user/api.py +++ b/oml/user/api.py @@ -10,7 +10,7 @@ import ox from changelog import Changelog from oxtornado import actions -from utils import update_dict +from utils import update_dict, user_sort_key from . import models import settings import state @@ -132,7 +132,7 @@ def getUsers(data): for n in users: n['local'] = n['id'] in local - users.sort(key=lambda u: ox.sort_string(str(u.get('index', '')) + 'Z' + (u.get('name') or ''))) + users.sort(key=user_sort_key) return { "users": users } diff --git a/oml/utils.py b/oml/utils.py index b29a909..d4d134d 100644 --- a/oml/utils.py +++ b/oml/utils.py @@ -466,3 +466,6 @@ def ctl(*args): else: subprocess.Popen([os.path.join(settings.base_dir, 'ctl')] + list(args), close_fds=True, start_new_session=True) + +def user_sort_key(u): + return ox.sort_string(str(u.get('index', '')) + 'Z' + (u.get('name') or ''))