Skip to content

Commit 4fa9644

Browse files
committed
Return a meaningful boolean to indicate if server has changed.
1 parent 8a19606 commit 4fa9644

File tree

1 file changed

+52
-24
lines changed

1 file changed

+52
-24
lines changed

subdaap/synchronizer.py

+52-24
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ def update_server(self):
112112
"""
113113
"""
114114

115+
changed = False
116+
115117
# Helper methods
116118
def updated_ids(items):
117119
for value in items.itervalues():
@@ -123,38 +125,64 @@ def removed_ids(items):
123125
if "updated" not in value:
124126
yield value["id"]
125127

128+
def has_updated_ids(items):
129+
for _ in updated_ids(items):
130+
return True
131+
return False
132+
133+
def has_removed_ids(items):
134+
for _ in updated_ids(items):
135+
return True
136+
return False
137+
138+
def should_update(items):
139+
return has_updated_ids(items) or has_removed_ids(items)
140+
126141
# Update the server
127142
server = self.provider.server
128143

129-
# Databases
130-
server.databases.update_ids([self.database_id])
131-
132144
# Items
133-
database = server.databases[self.database_id]
134-
database.items.remove_ids(removed_ids(self.items_by_remote_id))
135-
database.items.update_ids(updated_ids(self.items_by_remote_id))
145+
if should_update(self.items_by_remote_id):
146+
database = server.databases[self.database_id]
147+
database.items.remove_ids(removed_ids(self.items_by_remote_id))
148+
database.items.update_ids(updated_ids(self.items_by_remote_id))
149+
150+
changed = True
136151

137152
# Base container and container items
138-
database.containers.update_ids([self.base_container_id])
139-
base_container = database.containers[self.base_container_id]
140-
base_container.container_items.remove_ids(
141-
removed_ids(self.base_container_items_by_item_id))
142-
base_container.container_items.update_ids(
143-
updated_ids(self.base_container_items_by_item_id))
153+
if should_update(self.base_container_items_by_item_id):
154+
database.containers.update_ids([self.base_container_id])
155+
base_container = database.containers[self.base_container_id]
156+
base_container.container_items.remove_ids(
157+
removed_ids(self.base_container_items_by_item_id))
158+
base_container.container_items.update_ids(
159+
updated_ids(self.base_container_items_by_item_id))
160+
161+
changed = True
144162

145163
# Other containers and container items
146-
database.containers.remove_ids(
147-
removed_ids(self.containers_by_remote_id))
148-
database.containers.update_ids(
149-
updated_ids(self.containers_by_remote_id))
150-
151-
for container in self.containers_by_remote_id.itervalues():
152-
if "updated" not in container:
153-
updated_ids = container["container_items"]
154-
container = database.containers[container["id"]]
155-
156-
container.container_items.remove_ids(container.container_items)
157-
container.container_items.update_ids(updated_ids)
164+
if should_update(self.containers_by_remote_id):
165+
database.containers.remove_ids(
166+
removed_ids(self.containers_by_remote_id))
167+
database.containers.update_ids(
168+
updated_ids(self.containers_by_remote_id))
169+
170+
for container in self.containers_by_remote_id.itervalues():
171+
if "updated" not in container:
172+
updated_ids = container["container_items"]
173+
container = database.containers[container["id"]]
174+
175+
container.container_items.remove_ids(
176+
container.container_items)
177+
container.container_items.update_ids(updated_ids)
178+
179+
changed = True
180+
181+
# Only update database if any of the above parts have changed.
182+
if changed:
183+
server.databases.update_ids([self.database_id])
184+
185+
return changed
158186

159187
def sync_versions(self):
160188
"""

0 commit comments

Comments
 (0)