Merge branch 'master' of git://ichi2.net/libanki

This commit is contained in:
Susanna Björverud 2009-06-15 17:37:03 +02:00
commit 7d34b35b75
6 changed files with 39 additions and 13 deletions

View file

@ -68,7 +68,7 @@ cardsTable = Table(
class Card(object): class Card(object):
"A card." "A card."
def __init__(self, fact=None, cardModel=None): def __init__(self, fact=None, cardModel=None, due=None):
self.tags = u"" self.tags = u""
self.id = genID() self.id = genID()
# new cards start as new & due # new cards start as new & due
@ -77,8 +77,11 @@ class Card(object):
self.timerStarted = False self.timerStarted = False
self.timerStopped = False self.timerStopped = False
self.modified = time.time() self.modified = time.time()
self.due = self.modified if due:
self.combinedDue = self.modified self.due = due
else:
self.due = self.modified
self.combinedDue = self.due
if fact: if fact:
self.fact = fact self.fact = fact
if cardModel: if cardModel:

View file

@ -471,7 +471,7 @@ where id != :id and factId = :factId""",
else: else:
due = self.delay0 due = self.delay0
else: else:
due = card.interval * 86400.0 due = card.interval * 86400.0
return due + time.time() return due + time.time()
def updateFactor(self, card, ease): def updateFactor(self, card, ease):
@ -515,6 +515,7 @@ where id in %s""" % ids2str(ids), now=time.time(), new=0)
if self.newCardOrder == NEW_CARDS_RANDOM: if self.newCardOrder == NEW_CARDS_RANDOM:
# we need to re-randomize now # we need to re-randomize now
self.randomizeNewCards(ids) self.randomizeNewCards(ids)
self.flushMod()
self.refresh() self.refresh()
def randomizeNewCards(self, cardIds=None): def randomizeNewCards(self, cardIds=None):
@ -1032,7 +1033,8 @@ where type = 2 and priority in (1,2,3,4)""") or 0
select count(id) from cards select count(id) from cards
where factId = :fid and cardModelId = :cmid""", where factId = :fid and cardModelId = :cmid""",
fid=fact.id, cmid=cardModel.id) == 0: fid=fact.id, cmid=cardModel.id) == 0:
card = anki.cards.Card(fact, cardModel) card = anki.cards.Card(
fact, cardModel, due=fact.created+cardModel.ordinal)
self.updateCardTags([card.id]) self.updateCardTags([card.id])
self.updatePriority(card) self.updatePriority(card)
self.cardCount += 1 self.cardCount += 1
@ -2651,6 +2653,7 @@ class DeckStorage(object):
DeckStorage._addIndices(deck) DeckStorage._addIndices(deck)
for m in deck.models: for m in deck.models:
deck.updateCardsFromModel(m) deck.updateCardsFromModel(m)
deck.created = time.time()
deck.finishProgress() deck.finishProgress()
# fix a bug with current model being unset # fix a bug with current model being unset
if not deck.currentModel and deck.models: if not deck.currentModel and deck.models:

View file

@ -25,11 +25,11 @@ def runHook(hook, *args):
for func in hook: for func in hook:
func(*args) func(*args)
def runFilter(hook, arg): def runFilter(hook, arg, *args):
hook = _hooks.get(hook, None) hook = _hooks.get(hook, None)
if hook: if hook:
for func in hook: for func in hook:
arg = func(arg) arg = func(arg, *args)
return arg return arg
def addHook(hook, func): def addHook(hook, func):

View file

@ -8,7 +8,7 @@ Sound support
""" """
__docformat__ = 'restructuredtext' __docformat__ = 'restructuredtext'
import re, sys, threading, time, subprocess, os, signal import re, sys, threading, time, subprocess, os, signal, atexit, errno
# Shared utils # Shared utils
########################################################################## ##########################################################################
@ -126,6 +126,9 @@ class MplayerMonitor(threading.Thread):
mplayerCond.wait() mplayerCond.wait()
if not self.mplayer: if not self.mplayer:
self.startProcess() self.startProcess()
if self.mplayer != -1 and self.mplayer.poll() is not None:
self.mplayer.wait()
self.startProcess()
nextClears = False nextClears = False
while mplayerQueue: while mplayerQueue:
item = mplayerQueue.pop(0) item = mplayerQueue.pop(0)
@ -144,7 +147,8 @@ class MplayerMonitor(threading.Thread):
def startProcess(self): def startProcess(self):
try: try:
self.mplayer = subprocess.Popen( self.mplayer = subprocess.Popen(
mplayerCmd, startupinfo=si, stdin=subprocess.PIPE) mplayerCmd, startupinfo=si, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
except OSError: except OSError:
raise Exception("Audio player not found") raise Exception("Audio player not found")
@ -160,8 +164,25 @@ def clearMplayerQueue():
mplayerQueue.append(None) mplayerQueue.append(None)
mplayerCond.release() mplayerCond.release()
def stopMplayer():
mplayerCond.acquire()
if mplayerManager.mplayer:
while 1:
try:
mplayerManager.mplayer.communicate("quit\n")
break
except OSError, e:
if e.errno != errno.EINTR:
# osx throws interrupt errors regularly, but we want to
# ignore other errors on shutdown
break
mplayerManager.mplayer = -1
mplayerCond.notify()
mplayerCond.release()
mplayerManager = MplayerMonitor() mplayerManager = MplayerMonitor()
mplayerManager.start() mplayerManager.start()
atexit.register(stopMplayer)
# PyAudio recording # PyAudio recording
########################################################################## ##########################################################################

View file

@ -1053,7 +1053,7 @@ class HttpSyncServerProxy(SyncServer):
self.deckName = None self.deckName = None
self.username = user self.username = user
self.password = passwd self.password = passwd
self.protocolVersion = 4 self.protocolVersion = 5
self.sourcesToCheck = [] self.sourcesToCheck = []
def connect(self, clientVersion=""): def connect(self, clientVersion=""):

View file

@ -24,9 +24,8 @@ setup(name='anki',
author_email='anki@ichi2.net', author_email='anki@ichi2.net',
url='http://ichi2.net/anki/index.html', url='http://ichi2.net/anki/index.html',
license='GPLv3', license='GPLv3',
packages=["anki", "anki.features", "anki.features.chinese", "anki.importing"], packages=["anki", "anki.importing"],
package_data={'anki': ['samples/*','locale/*/*/*'], package_data={'anki': ['locale/*/*/*'],},
'anki.features.chinese': ['unihan.db']},
include_package_data=True, include_package_data=True,
zip_safe=False, zip_safe=False,
install_requires=[ install_requires=[