mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 08:46:37 -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("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()
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue