Exemplo n.º 1
0
 def doImport(self):
     "Import."
     src = DeckStorage.Deck(self.file)
     client = SyncClient(self.deck)
     server = SyncServer(src)
     # if there is a conflict, sync local -> src
     client.localTime = self.deck.modified
     client.remoteTime = 0
     src.s.execute("update facts set modified = 1")
     src.s.execute("update models set modified = 1")
     src.s.execute("update cards set modified = 1")
     self.deck.s.flush()
     # set up a custom change list and sync
     lsum = client.summary(0)
     rsum = server.summary(0)
     payload = client.genPayload(lsum, rsum)
     # no need to add anything to src
     payload["added-models"] = []
     payload["added-cards"] = []
     payload["added-facts"] = {"facts": [], "fields": []}
     payload["deleted-facts"] = []
     payload["deleted-cards"] = []
     payload["deleted-models"] = []
     res = server.applyPayload(payload)
     client.applyPayloadReply(res)
     # add tags
     fids = [f[0] for f in res["added-facts"]["facts"]]
     self.deck.addFactTags(fids, self.tagsToAdd)
     self.total = len(res["added-facts"]["facts"])
     src.s.rollback()
     self.deck.flushMod()
Exemplo n.º 2
0
 def exportInto(self, path):
     n = 3
     if not self.includeSchedulingInfo:
         n += 1
     try:
         os.unlink(path)
     except (IOError, OSError):
         pass
     self.newDeck = DeckStorage.Deck(path)
     client = SyncClient(self.deck)
     server = SyncServer(self.newDeck)
     client.setServer(server)
     client.localTime = self.deck.modified
     client.remoteTime = 0
     self.deck.db.flush()
     # set up a custom change list and sync
     lsum = self.localSummary()
     rsum = server.summary(0)
     payload = client.genPayload((lsum, rsum))
     res = server.applyPayload(payload)
     if not self.includeSchedulingInfo:
         self.newDeck.resetCards()
     # media
     if self.includeMedia:
         server.deck.mediaPrefix = ""
         copyLocalMedia(client.deck, server.deck)
     # need to save manually
     self.newDeck.rebuildCounts()
     # FIXME
     #self.exportedCards = self.newDeck.cardCount
     self.newDeck.crt = 0
     self.newDeck.db.commit()
     self.newDeck.close()
Exemplo n.º 3
0
 def exportInto(self, path):
     n = 3
     if not self.includeSchedulingInfo:
         n += 1
     try:
         os.unlink(path)
     except (IOError, OSError):
         pass
     self.newCol = DeckStorage.Deck(path)
     client = SyncClient(self.deck)
     server = SyncServer(self.newDeck)
     client.setServer(server)
     client.localTime = self.deck.modified
     client.remoteTime = 0
     self.deck.db.flush()
     # set up a custom change list and sync
     lsum = self.localSummary()
     rsum = server.summary(0)
     payload = client.genPayload((lsum, rsum))
     res = server.applyPayload(payload)
     if not self.includeSchedulingInfo:
         self.newDeck.resetCards()
     # media
     if self.includeMedia:
         server.deck.mediaPrefix = ""
         copyLocalMedia(client.deck, server.deck)
     # need to save manually
     self.newDeck.rebuildCounts()
     # FIXME
     #self.exportedCards = self.newDeck.cardCount
     self.newDeck.crt = 0
     self.newDeck.db.commit()
     self.newDeck.close()
Exemplo n.º 4
0
 def doImport(self):
     "Import."
     random = self.deck.newCardOrder == NEW_CARDS_RANDOM
     num = 4
     if random:
         num += 1
     src = DeckStorage.Deck(self.file, backup=False)
     client = SyncClient(self.deck)
     server = SyncServer(src)
     client.setServer(server)
     # if there is a conflict, sync local -> src
     client.localTime = self.deck.modified
     client.remoteTime = 0
     src.s.execute("update facts set modified = 1")
     src.s.execute("update models set modified = 1")
     src.s.execute("update cards set modified = 1")
     src.s.execute("update media set created = 1")
     self.deck.db.flush()
     # set up a custom change list and sync
     lsum = client.summary(0)
     self._clearDeleted(lsum)
     rsum = server.summary(0)
     self._clearDeleted(rsum)
     payload = client.genPayload((lsum, rsum))
     # no need to add anything to src
     payload['added-models'] = []
     payload['added-cards'] = []
     payload['added-facts'] = {'facts': [], 'fields': []}
     assert payload['deleted-facts'] == []
     assert payload['deleted-cards'] == []
     assert payload['deleted-models'] == []
     res = server.applyPayload(payload)
     client.applyPayloadReply(res)
     copyLocalMedia(server.deck, client.deck)
     # add tags
     fids = [f[0] for f in res['added-facts']['facts']]
     self.deck.addTags(fids, self.tagsToAdd)
     # mark import material as newly added
     self.deck.db.execute("update cards set modified = :t where id in %s" %
                          ids2str([x[0] for x in res['added-cards']]),
                          t=time.time())
     self.deck.db.execute(
         "update facts set modified = :t where id in %s" %
         ids2str([x[0] for x in res['added-facts']['facts']]),
         t=time.time())
     self.deck.db.execute("update models set modified = :t where id in %s" %
                          ids2str([x['id'] for x in res['added-models']]),
                          t=time.time())
     # update total and refresh
     self.total = len(res['added-facts']['facts'])
     src.s.rollback()
     src.engine.dispose()
     # randomize?
     if random:
         self.deck.randomizeNewCards([x[0] for x in res['added-cards']])
     self.deck.flushMod()
Exemplo n.º 5
0
 def doImport(self):
     "Import."
     random = self.deck.newCardOrder == NEW_CARDS_RANDOM
     num = 4
     if random:
         num += 1
     src = DeckStorage.Deck(self.file, backup=False)
     client = SyncClient(self.deck)
     server = SyncServer(src)
     client.setServer(server)
     # if there is a conflict, sync local -> src
     client.localTime = self.deck.modified
     client.remoteTime = 0
     src.s.execute("update facts set modified = 1")
     src.s.execute("update models set modified = 1")
     src.s.execute("update cards set modified = 1")
     src.s.execute("update media set created = 1")
     self.deck.db.flush()
     # set up a custom change list and sync
     lsum = client.summary(0)
     self._clearDeleted(lsum)
     rsum = server.summary(0)
     self._clearDeleted(rsum)
     payload = client.genPayload((lsum, rsum))
     # no need to add anything to src
     payload['added-models'] = []
     payload['added-cards'] = []
     payload['added-facts'] = {'facts': [], 'fields': []}
     assert payload['deleted-facts'] == []
     assert payload['deleted-cards'] == []
     assert payload['deleted-models'] == []
     res = server.applyPayload(payload)
     client.applyPayloadReply(res)
     copyLocalMedia(server.deck, client.deck)
     # add tags
     fids = [f[0] for f in res['added-facts']['facts']]
     self.deck.addTags(fids, self.tagsToAdd)
     # mark import material as newly added
     self.deck.db.execute(
         "update cards set modified = :t where id in %s" %
         ids2str([x[0] for x in res['added-cards']]), t=time.time())
     self.deck.db.execute(
         "update facts set modified = :t where id in %s" %
         ids2str([x[0] for x in res['added-facts']['facts']]), t=time.time())
     self.deck.db.execute(
         "update models set modified = :t where id in %s" %
         ids2str([x['id'] for x in res['added-models']]), t=time.time())
     # update total and refresh
     self.total = len(res['added-facts']['facts'])
     src.s.rollback()
     src.engine.dispose()
     # randomize?
     if random:
         self.deck.randomizeNewCards([x[0] for x in res['added-cards']])
     self.deck.flushMod()
Exemplo n.º 6
0
    def exportInto(self, path):
        self.newDeck = DeckStorage.Deck(path)
        client = SyncClient(self.deck)
        server = SyncServer(self.newDeck)
        client.localTime = self.deck.modified
        client.remoteTime = 0
        self.deck.s.flush()
        # set up a custom change list and sync
        lsum = self.localSummary()
        rsum = server.summary(0)
        payload = client.genPayload(lsum, rsum)
        res = server.applyPayload(payload)
        client.applyPayloadReply(res)
        if not self.includeSchedulingInfo:
            self.newDeck.s.statement("""
update cards set
interval = 0,
lastInterval = 0,
due = 0,
lastDue = 0,
factor = 2.5,
firstAnswered = 0,
reps = 0,
successive = 0,
averageTime = 0,
reviewTime = 0,
youngEase0 = 0,
youngEase1 = 0,
youngEase2 = 0,
youngEase3 = 0,
youngEase4 = 0,
matureEase0 = 0,
matureEase1 = 0,
matureEase2 = 0,
matureEase3 = 0,
matureEase4 = 0,
yesCount = 0,
noCount = 0,
modified = :now
""", now=time.time())
            # update spacing
            self.newDeck.s.statement("""
update facts set
lastCardId = null,
spaceUntil = 0,
modified = :now""", now=time.time())
        # need to save manually
        self.newDeck.s.commit()
        self.newDeck.close()
Exemplo n.º 7
0
     if client.remoteTime > client.localTime:
         self.conflictResolution = "keepRemote"
     else:
         self.conflictResolution = "keepLocal"
 changes = True
 # summary
 if not self.conflictResolution and not self.onlyMerge:
     self.setStatus(_("Fetching summary from server..."), 0)
     sums = client.summaries()
 if (self.conflictResolution or
     self.onlyMerge or client.needFullSync(sums)):
     self.setStatus(_("Preparing full sync..."), 0)
     if self.conflictResolution == "keepLocal":
         client.remoteTime = 0
     elif self.conflictResolution == "keepRemote" or self.onlyMerge:
         client.localTime = 0
     lastSync = self.deck.lastSync
     ret = client.prepareFullSync()
     if ret[0] == "fromLocal":
         if not self.conflictResolution:
             if lastSync <= 0 and not deckCreated:
                 self.clobberChoice = None
                 self.emit(SIGNAL("syncClobber"), syncName)
                 while not self.clobberChoice:
                     time.sleep(0.2)
                 if self.clobberChoice == "cancel":
                     # disable syncing on this deck
                     c = sqlite.connect(sqlpath)
                     c.execute(
                         "update decks set syncName = null, "
                         "lastSync = 0")
Exemplo n.º 8
0
    def exportInto(self, path):
        n = 3
        if not self.includeSchedulingInfo:
            n += 1
        self.deck.startProgress(n)
        self.deck.updateProgress(_("Exporting..."))
        self.newDeck = DeckStorage.Deck(path)
        client = SyncClient(self.deck)
        server = SyncServer(self.newDeck)
        server._mediaSupported = self.includeMedia
        client.setServer(server)
        client.localTime = self.deck.modified
        client.remoteTime = 0
        self.deck.s.flush()
        # set up a custom change list and sync
        lsum = self.localSummary()
        rsum = server.summary(0)
        self.deck.updateProgress()
        payload = client.genPayload((lsum, rsum))
        self.deck.updateProgress()
        res = server.applyPayload(payload)
        if not self.includeSchedulingInfo:
            self.deck.updateProgress()
            self.newDeck.s.statement("""
delete from reviewHistory""")
            self.newDeck.s.statement("""
update cards set
interval = 0,
lastInterval = 0,
due = created,
lastDue = 0,
factor = 2.5,
firstAnswered = 0,
reps = 0,
successive = 0,
averageTime = 0,
reviewTime = 0,
youngEase0 = 0,
youngEase1 = 0,
youngEase2 = 0,
youngEase3 = 0,
youngEase4 = 0,
matureEase0 = 0,
matureEase1 = 0,
matureEase2 = 0,
matureEase3 = 0,
matureEase4 = 0,
yesCount = 0,
noCount = 0,
spaceUntil = 0,
isDue = 1,
type = 2,
combinedDue = created,
modified = :now
""", now=time.time())
            self.newDeck.s.statement("""
delete from stats""")
        # media
        if client.mediaSyncPending:
            bulkClient = BulkMediaSyncer(client.deck)
            bulkServer = BulkMediaSyncer(server.deck)
            bulkClient.server = bulkServer
            bulkClient.sync()
        # need to save manually
        self.newDeck.rebuildCounts()
        self.newDeck.updateAllPriorities()
        self.exportedCards = self.newDeck.cardCount
        self.newDeck.utcOffset = -1
        self.newDeck.s.commit()
        self.newDeck.close()
        self.deck.finishProgress()
Exemplo n.º 9
0
    def exportInto(self, path):
        n = 3
        if not self.includeSchedulingInfo:
            n += 1
        self.deck.startProgress(n)
        self.deck.updateProgress(_("Exporting..."))
        try:
            os.unlink(path)
        except (IOError, OSError):
            pass
        self.newDeck = DeckStorage.Deck(path)
        client = SyncClient(self.deck)
        server = SyncServer(self.newDeck)
        client.setServer(server)
        client.localTime = self.deck.modified
        client.remoteTime = 0
        self.deck.s.flush()
        # set up a custom change list and sync
        lsum = self.localSummary()
        rsum = server.summary(0)
        self.deck.updateProgress()
        payload = client.genPayload((lsum, rsum))
        self.deck.updateProgress()
        res = server.applyPayload(payload)
        if not self.includeSchedulingInfo:
            self.deck.updateProgress()
            self.newDeck.s.statement("""
delete from reviewHistory""")
            self.newDeck.s.statement("""
update cards set
interval = 0,
lastInterval = 0,
due = created,
lastDue = 0,
factor = 2.5,
firstAnswered = 0,
reps = 0,
successive = 0,
averageTime = 0,
reviewTime = 0,
youngEase0 = 0,
youngEase1 = 0,
youngEase2 = 0,
youngEase3 = 0,
youngEase4 = 0,
matureEase0 = 0,
matureEase1 = 0,
matureEase2 = 0,
matureEase3 = 0,
matureEase4 = 0,
yesCount = 0,
noCount = 0,
spaceUntil = 0,
type = 2,
relativeDelay = 2,
combinedDue = created,
modified = :now
""", now=time.time())
            self.newDeck.s.statement("""
delete from stats""")
        # media
        if self.includeMedia:
            server.deck.mediaPrefix = ""
            copyLocalMedia(client.deck, server.deck)
        # need to save manually
        self.newDeck.rebuildCounts()
        self.newDeck.updateAllPriorities()
        self.exportedCards = self.newDeck.cardCount
        self.newDeck.utcOffset = -1
        self.newDeck.s.commit()
        self.newDeck.close()
        self.deck.finishProgress()