more general solution to sync failures

This commit is contained in:
Damien Elmes 2010-12-08 16:36:57 +09:00
parent 90fed6bd45
commit f8d13106fb

View file

@ -109,7 +109,12 @@ sync was aborted. Please report this error.""")
def syncAllDecks(self): def syncAllDecks(self):
decks = self.parent.syncDecks decks = self.parent.syncDecks
for d in decks: for d in decks:
if not self.syncDeck(deck=d): ret = self.syncDeck(deck=d)
if not ret:
# failed but not cleaned up
break
elif ret == -1:
# failed and already cleaned up
return return
self.setStatus(_("Sync Finished."), 0) self.setStatus(_("Sync Finished."), 0)
time.sleep(1) time.sleep(1)
@ -141,16 +146,14 @@ sync was aborted. Please report this error.""")
if "locked" in unicode(e): if "locked" in unicode(e):
return return
# unknown error # unknown error
raise self.error(e)
return -1
# ensure deck mods cached # ensure deck mods cached
try: try:
proxy = self.connect() proxy = self.connect()
except SyncError, e: except SyncError, e:
self.error(e) self.error(e)
if deck: return -1
raise
else:
return
# exists on server? # exists on server?
deckCreated = False deckCreated = False
if not proxy.hasDeck(syncName): if not proxy.hasDeck(syncName):
@ -164,7 +167,7 @@ sync was aborted. Please report this error.""")
deckCreated = True deckCreated = True
except SyncError, e: except SyncError, e:
self.error(e) self.error(e)
return return -1
# check conflicts # check conflicts
proxy.deckName = syncName proxy.deckName = syncName
remoteMod = proxy.modified() remoteMod = proxy.modified()
@ -177,10 +180,9 @@ sync was aborted. Please report this error.""")
while not self.conflictResolution: while not self.conflictResolution:
time.sleep(0.2) time.sleep(0.2)
if self.conflictResolution == "cancel": if self.conflictResolution == "cancel":
if not deck: # alert we're finished early
# alert we're finished early self.emit(SIGNAL("syncFinished"))
self.emit(SIGNAL("syncFinished")) return -1
return
# reopen # reopen
self.setStatus(_("Syncing <b>%s</b>...") % syncName, 0) self.setStatus(_("Syncing <b>%s</b>...") % syncName, 0)
self.deck = None self.deck = None
@ -223,7 +225,7 @@ sync was aborted. Please report this error.""")
if not deck: if not deck:
# alert we're finished early # alert we're finished early
self.emit(SIGNAL("syncFinished")) self.emit(SIGNAL("syncFinished"))
return return True
self.setStatus(_("Uploading..."), 0) self.setStatus(_("Uploading..."), 0)
client.fullSyncFromLocal(ret[1], ret[2]) client.fullSyncFromLocal(ret[1], ret[2])
else: else:
@ -273,6 +275,7 @@ sync was aborted. Please report this error.""")
self.setStatus(_("Syncing failed: %(a)s") % { self.setStatus(_("Syncing failed: %(a)s") % {
'a': err}) 'a': err})
self.error(e) self.error(e)
return -1
# Downloading personal decks # Downloading personal decks
########################################################################## ##########################################################################