Prevent infinite loop in client when first changed usn != lastUsn
Anki expects the last change in the list to have the server's lastUsn.
Reference: cca3fcb241/anki/sync.py (L720)
This commit is contained in:
parent
2bfccf7fa4
commit
3c440621d2
@ -327,6 +327,10 @@ class SyncMediaHandler:
|
||||
for fname,usn,csum, in self.col.media.db.execute("select fname,usn,csum from media order by usn desc limit ?", server_lastUsn - lastUsn):
|
||||
result.append([fname, usn, csum])
|
||||
|
||||
# anki assumes server_lastUsn == result[-1][1]
|
||||
# ref: anki/sync.py:720 (commit cca3fcb2418880d0430a5c5c2e6b81ba260065b7)
|
||||
result.reverse()
|
||||
|
||||
return {'data': result, 'err': ''}
|
||||
|
||||
def mediaSanity(self, local=None):
|
||||
|
||||
@ -42,3 +42,18 @@ class ServerMediaManagerTest(unittest.TestCase):
|
||||
)
|
||||
self.assertEqual(cm.lastUsn(), sm.lastUsn())
|
||||
self.assertEqual(list(sm.db.execute("SELECT usn FROM media")), [(161,), (161,)])
|
||||
|
||||
def test_mediaChanges_lastUsn_order(self):
|
||||
col = self.colutils.create_empty_col()
|
||||
col.media = ankisyncd.media.ServerMediaManager(col)
|
||||
mh = ankisyncd.sync_app.SyncMediaHandler(col)
|
||||
mh.col.media.db.execute("""
|
||||
INSERT INTO media (fname, usn, csum)
|
||||
VALUES
|
||||
('fileA', 101, '53059abba1a72c7aff34a3eaf7fef10ed65541ce'),
|
||||
('fileB', 100, 'a5ae546046d09559399c80fa7076fb10f1ce4bcd')
|
||||
""")
|
||||
|
||||
# anki assumes mh.col.media.lastUsn() == mh.mediaChanges()['data'][-1][1]
|
||||
# ref: anki/sync.py:720 (commit cca3fcb2418880d0430a5c5c2e6b81ba260065b7)
|
||||
self.assertEqual(mh.mediaChanges(lastUsn=99)['data'][-1][1], mh.col.media.lastUsn())
|
||||
|
||||
Loading…
Reference in New Issue
Block a user