diff --git a/ankisyncd/sync_app.py b/ankisyncd/sync_app.py index f3db8be..7cce5ae 100644 --- a/ankisyncd/sync_app.py +++ b/ankisyncd/sync_app.py @@ -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): diff --git a/tests/test_media.py b/tests/test_media.py index d2cab7b..fc67dd4 100644 --- a/tests/test_media.py +++ b/tests/test_media.py @@ -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())