From 5ee1ee045052c88abf6f0cb1e390539cb88cff10 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Mon, 20 Nov 2017 14:22:53 +1000 Subject: [PATCH] restore media dir mod check https://anki.tenderapp.com/discussions/beta-testing/853-anki-210-beta-21/page/1#comment_44071381 --- anki/media.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/anki/media.py b/anki/media.py index d0c46f1b1..0e53c0478 100644 --- a/anki/media.py +++ b/anki/media.py @@ -121,6 +121,18 @@ create table meta (dirMod int, lastUsn int); insert into meta values (0, 0); def dir(self): return self._dir + def _isFAT32(self): + if not isWin: + return + import win32api, win32file + try: + name = win32file.GetVolumeNameForVolumeMountPoint(self._dir[:3]) + except: + # mapped & unmapped network drive; pray that it's not vfat + return + if win32api.GetVolumeInformation(name)[4].lower().startswith("fat"): + return True + # Adding media ########################################################################## # opath must be in unicode @@ -353,7 +365,8 @@ create table meta (dirMod int, lastUsn int); insert into meta values (0, 0); def findChanges(self): "Scan the media folder if it's changed, and note any changes." - self._logChanges() + if self._changed(): + self._logChanges() def haveDirty(self): return self.db.scalar("select 1 from media where dirty=1 limit 1") @@ -364,6 +377,15 @@ create table meta (dirMod int, lastUsn int); insert into meta values (0, 0); def _checksum(self, path): return checksum(open(path, "rb").read()) + def _changed(self): + "Return dir mtime if it has changed since the last findChanges()" + # doesn't track edits, but user can add or remove a file to update + mod = self.db.scalar("select dirMod from meta") + mtime = self._mtime(self.dir()) + if not self._isFAT32() and mod and mod == mtime: + return False + return mtime + def _logChanges(self): (added, removed) = self._changes() media = [] @@ -374,6 +396,7 @@ create table meta (dirMod int, lastUsn int); insert into meta values (0, 0); # update media db self.db.executemany("insert or replace into media values (?,?,?,?)", media) + self.db.execute("update meta set dirMod = ?", self._mtime(self.dir())) self.db.commit() def _changes(self):