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:
Damien Elmes 2010-07-27 15:47:15 +09:00
parent 4eacbec78b
commit d9af6288e1
2 changed files with 30 additions and 12 deletions

View file

@ -2171,6 +2171,7 @@ it to your friends.
self.connect(self.syncThread, SIGNAL("fullSyncProgress"), self.fullSyncProgress)
self.connect(self.syncThread, SIGNAL("badUserPass"), self.badUserPass)
self.connect(self.syncThread, SIGNAL("syncConflicts"), self.onConflict)
self.connect(self.syncThread, SIGNAL("syncClobber"), self.onClobber)
self.syncThread.start()
self.switchToWelcomeScreen()
self.setEnabled(False)
@ -2205,6 +2206,21 @@ you want to do?""" % deckName),
else:
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):
"Reopen after sync finished."
self.mainWin.buttonStack.show()
@ -2231,18 +2247,6 @@ you want to do?""" % deckName),
def selectSyncDeck(self, decks, create=True):
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
if name:
# name chosen
@ -2250,6 +2254,7 @@ instead."""),
self.syncDeck(create=True, interactive=False, onlyMerge=onlyMerge)
else:
if not create:
self.syncFinished = True
self.cleanNewDeck()
else:
self.onSyncFinished()

View file

@ -177,8 +177,21 @@ class Sync(QThread):
client.remoteTime = 0
elif self.conflictResolution == "keepRemote":
client.localTime = 0
lastSync = self.deck.lastSync
ret = client.prepareFullSync()
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)
client.fullSyncFromLocal(ret[1], ret[2])
else: