mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 16:56:36 -04:00
do clobber detection at sync time, fix sync bugs
- don't get stuck in event loop if user cancels deck selection - prompt for any full sync upload with no last sync time, so this also warns about syncs after a DB check too - fixes erroneous warning with file>download>personal deck
This commit is contained in:
parent
4eacbec78b
commit
d9af6288e1
2 changed files with 30 additions and 12 deletions
|
@ -2171,6 +2171,7 @@ it to your friends.
|
||||||
self.connect(self.syncThread, SIGNAL("fullSyncProgress"), self.fullSyncProgress)
|
self.connect(self.syncThread, SIGNAL("fullSyncProgress"), self.fullSyncProgress)
|
||||||
self.connect(self.syncThread, SIGNAL("badUserPass"), self.badUserPass)
|
self.connect(self.syncThread, SIGNAL("badUserPass"), self.badUserPass)
|
||||||
self.connect(self.syncThread, SIGNAL("syncConflicts"), self.onConflict)
|
self.connect(self.syncThread, SIGNAL("syncConflicts"), self.onConflict)
|
||||||
|
self.connect(self.syncThread, SIGNAL("syncClobber"), self.onClobber)
|
||||||
self.syncThread.start()
|
self.syncThread.start()
|
||||||
self.switchToWelcomeScreen()
|
self.switchToWelcomeScreen()
|
||||||
self.setEnabled(False)
|
self.setEnabled(False)
|
||||||
|
@ -2205,6 +2206,21 @@ you want to do?""" % deckName),
|
||||||
else:
|
else:
|
||||||
self.syncThread.conflictResolution = "cancel"
|
self.syncThread.conflictResolution = "cancel"
|
||||||
|
|
||||||
|
def onClobber(self, deckName):
|
||||||
|
diag = ui.utils.askUserDialog(_("""\
|
||||||
|
You are about to upload <b>%s</b>
|
||||||
|
to AnkiOnline. This will overwrite
|
||||||
|
the online version if one exists.
|
||||||
|
Are you sure?""" % deckName),
|
||||||
|
[_("Overwrite"),
|
||||||
|
_("Cancel")])
|
||||||
|
diag.setDefault(1)
|
||||||
|
ret = diag.run()
|
||||||
|
if ret == _("Overwrite"):
|
||||||
|
self.syncThread.clobberChoice = "overwrite"
|
||||||
|
else:
|
||||||
|
self.syncThread.clobberChoice = "cancel"
|
||||||
|
|
||||||
def onSyncFinished(self):
|
def onSyncFinished(self):
|
||||||
"Reopen after sync finished."
|
"Reopen after sync finished."
|
||||||
self.mainWin.buttonStack.show()
|
self.mainWin.buttonStack.show()
|
||||||
|
@ -2231,18 +2247,6 @@ you want to do?""" % deckName),
|
||||||
|
|
||||||
def selectSyncDeck(self, decks, create=True):
|
def selectSyncDeck(self, decks, create=True):
|
||||||
name = ui.sync.DeckChooser(self, decks, create).getName()
|
name = ui.sync.DeckChooser(self, decks, create).getName()
|
||||||
if self.syncName != name:
|
|
||||||
diag = ui.utils.askUserDialog(_("""\
|
|
||||||
Really <b>overwrite</b> the online version?<br>
|
|
||||||
There is no way to undo this.<p>
|
|
||||||
|
|
||||||
If you want to download an online deck to<br>
|
|
||||||
your computer, use File>Download>Personal Deck<br>
|
|
||||||
instead."""),
|
|
||||||
["Overwrite", "Cancel"])
|
|
||||||
diag.setDefault(1)
|
|
||||||
if diag.run() == "Cancel":
|
|
||||||
name = None
|
|
||||||
self.syncName = name
|
self.syncName = name
|
||||||
if name:
|
if name:
|
||||||
# name chosen
|
# name chosen
|
||||||
|
@ -2250,6 +2254,7 @@ instead."""),
|
||||||
self.syncDeck(create=True, interactive=False, onlyMerge=onlyMerge)
|
self.syncDeck(create=True, interactive=False, onlyMerge=onlyMerge)
|
||||||
else:
|
else:
|
||||||
if not create:
|
if not create:
|
||||||
|
self.syncFinished = True
|
||||||
self.cleanNewDeck()
|
self.cleanNewDeck()
|
||||||
else:
|
else:
|
||||||
self.onSyncFinished()
|
self.onSyncFinished()
|
||||||
|
|
|
@ -177,8 +177,21 @@ class Sync(QThread):
|
||||||
client.remoteTime = 0
|
client.remoteTime = 0
|
||||||
elif self.conflictResolution == "keepRemote":
|
elif self.conflictResolution == "keepRemote":
|
||||||
client.localTime = 0
|
client.localTime = 0
|
||||||
|
lastSync = self.deck.lastSync
|
||||||
ret = client.prepareFullSync()
|
ret = client.prepareFullSync()
|
||||||
if ret[0] == "fromLocal":
|
if ret[0] == "fromLocal":
|
||||||
|
if not self.conflictResolution:
|
||||||
|
if lastSync <= 0:
|
||||||
|
self.clobberChoice = None
|
||||||
|
self.emit(SIGNAL("syncClobber"), syncName)
|
||||||
|
while not self.clobberChoice:
|
||||||
|
time.sleep(0.2)
|
||||||
|
if self.clobberChoice == "cancel":
|
||||||
|
self.deck.close()
|
||||||
|
if not deck:
|
||||||
|
# alert we're finished early
|
||||||
|
self.emit(SIGNAL("syncFinished"))
|
||||||
|
return
|
||||||
self.setStatus(_("Uploading..."), 0)
|
self.setStatus(_("Uploading..."), 0)
|
||||||
client.fullSyncFromLocal(ret[1], ret[2])
|
client.fullSyncFromLocal(ret[1], ret[2])
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in a new issue