mirror of
https://github.com/ankitects/anki.git
synced 2025-11-10 22:57:11 -05:00
catch corrupt media db, fix it in 'check media'
This commit is contained in:
parent
e8cc960da3
commit
3ad9261c8c
4 changed files with 19 additions and 5 deletions
|
|
@ -7,7 +7,7 @@ import time
|
|||
|
||||
from sqlite3 import dbapi2 as sqlite
|
||||
|
||||
Error = sqlite.Error
|
||||
DBError = sqlite.Error
|
||||
|
||||
class DB:
|
||||
def __init__(self, path, timeout=0):
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import zipfile
|
|||
from io import StringIO
|
||||
|
||||
from anki.utils import checksum, isWin, isMac, json
|
||||
from anki.db import DB
|
||||
from anki.db import DB, DBError
|
||||
from anki.consts import *
|
||||
from anki.latex import mungeQA
|
||||
|
||||
|
|
@ -112,6 +112,12 @@ create table meta (dirMod int, lastUsn int); insert into meta values (0, 0);
|
|||
# may have been deleted
|
||||
pass
|
||||
|
||||
def _deleteDB(self):
|
||||
path = self.db._path
|
||||
self.close()
|
||||
os.unlink(path)
|
||||
self.connect()
|
||||
|
||||
def dir(self):
|
||||
return self._dir
|
||||
|
||||
|
|
@ -290,6 +296,11 @@ create table meta (dirMod int, lastUsn int); insert into meta values (0, 0);
|
|||
if renamedFiles:
|
||||
return self.check(local=local)
|
||||
nohave = [x for x in allRefs if not x.startswith("_")]
|
||||
# make sure the media DB is valid
|
||||
try:
|
||||
self.findChanges()
|
||||
except DBError:
|
||||
self._deleteDB()
|
||||
return (nohave, unused, invalid)
|
||||
|
||||
def _normalizeNoteRefs(self, nid):
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import gzip
|
|||
import random
|
||||
import requests
|
||||
|
||||
from anki.db import DB
|
||||
from anki.db import DB, DBError
|
||||
from anki.utils import ids2str, intTime, json, platDesc, checksum, devMode
|
||||
from anki.consts import *
|
||||
from .hooks import runHook
|
||||
|
|
@ -701,7 +701,10 @@ class MediaSyncer:
|
|||
# check if there have been any changes
|
||||
runHook("sync", "findMedia")
|
||||
self.col.log("findChanges")
|
||||
self.col.media.findChanges()
|
||||
try:
|
||||
self.col.media.findChanges()
|
||||
except DBError:
|
||||
return "corruptMediaDB"
|
||||
|
||||
# begin session and check if in sync
|
||||
lastUsn = self.col.media.lastUsn()
|
||||
|
|
|
|||
|
|
@ -447,7 +447,7 @@ class SyncThread(QThread):
|
|||
raise
|
||||
if ret == "noChanges":
|
||||
self.fireEvent("noMediaChanges")
|
||||
elif ret == "sanityCheckFailed":
|
||||
elif ret == "sanityCheckFailed" or ret == "corruptMediaDB":
|
||||
self.fireEvent("mediaSanity")
|
||||
else:
|
||||
self.fireEvent("mediaSuccess")
|
||||
|
|
|
|||
Loading…
Reference in a new issue