mirror of
https://github.com/laurent22/joplin.git
synced 2024-11-27 08:21:03 +02:00
Make sure synchronizer returns list of modified fields
This commit is contained in:
parent
8973668957
commit
35e2fb8c6e
@ -30,6 +30,7 @@ class Change extends BaseModel {
|
||||
if ($hasMore) array_pop($changes);
|
||||
|
||||
$itemIdToChange = array();
|
||||
$itemIdToChangedFields = array();
|
||||
$createdItems = array();
|
||||
$deletedItems = array();
|
||||
foreach ($changes as $change) {
|
||||
@ -37,6 +38,9 @@ class Change extends BaseModel {
|
||||
$createdItems[] = $change->item_id;
|
||||
} else if ($change->type == Change::enumId('type', 'delete')) {
|
||||
$deletedItems[] = $change->item_id;
|
||||
} else { // Update
|
||||
if (!isset($itemIdToChangedFields[$change->item_id])) $itemIdToChangedFields[$change->item_id] = array();
|
||||
$itemIdToChangedFields[$change->item_id][] = $change->item_field;
|
||||
}
|
||||
|
||||
$itemIdToChange[$change->item_id] = $change;
|
||||
@ -49,15 +53,19 @@ class Change extends BaseModel {
|
||||
continue;
|
||||
}
|
||||
|
||||
$syncItem = $change->toSyncItem();
|
||||
|
||||
if (in_array($itemId, $deletedItems)) {
|
||||
// Item was deleted at some point - just return one 'delete' event
|
||||
$change->type = Change::enumId('type', 'delete');
|
||||
} else if (in_array($itemId, $createdItems)) {
|
||||
// Item was created then updated - just return one 'create' event with the latest changes
|
||||
$change->type = Change::enumId('type', 'create');
|
||||
} else {
|
||||
$syncItem['item_fields'] = $itemIdToChangedFields[$change->item_id];
|
||||
}
|
||||
|
||||
$output[] = $change->toSyncItem();
|
||||
$output[] = $syncItem;
|
||||
}
|
||||
|
||||
// This is important so that the client knows that the last item in the list
|
||||
@ -73,13 +81,13 @@ class Change extends BaseModel {
|
||||
);
|
||||
}
|
||||
|
||||
public function toSyncItem() {
|
||||
private function toSyncItem() {
|
||||
return array(
|
||||
'id' => (string)$this->id,
|
||||
'type' => self::enumName('type', $this->type),
|
||||
'item_id' => self::hex($this->item_id),
|
||||
'item_type' => FolderItem::enumName('type', $this->item_type),
|
||||
'item_field' => $this->item_field,
|
||||
'item_fields' => array(), // This is populated by changesDoneAfterId()
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -230,4 +230,26 @@ class ChangeTest extends BaseTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public function testChangedFields() {
|
||||
$n1 = new Note();
|
||||
$n1->fromPublicArray(array('body' => 'test'));
|
||||
$n1->owner_id = $this->userId();
|
||||
$n1->save();
|
||||
|
||||
$r = Change::changesDoneAfterId($this->userId(), $this->clientId(2), 0);
|
||||
$lastId = $r['items'][0]['id'];
|
||||
|
||||
$n1->latitude = 1;
|
||||
$n1->save();
|
||||
|
||||
$n1->longitude = 1;
|
||||
$n1->save();
|
||||
|
||||
$r = Change::changesDoneAfterId($this->userId(), $this->clientId(2), $lastId);
|
||||
$change = $r['items'][0];
|
||||
$this->assertEquals(2, count($change['item_fields']));
|
||||
$this->assertContains('latitude', $change['item_fields']);
|
||||
$this->assertContains('longitude', $change['item_fields']);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user