diff --git a/anki/__init__.py b/anki/__init__.py index f763d5d70..dde8776d9 100644 --- a/anki/__init__.py +++ b/anki/__init__.py @@ -53,6 +53,6 @@ try: except ImportError: pass -version = "0.9.9.7.5" +version = "0.9.9.7.6b" from anki.deck import DeckStorage diff --git a/anki/features/japanese.py b/anki/features/japanese.py index 8fce19b78..13d75a6c6 100644 --- a/anki/features/japanese.py +++ b/anki/features/japanese.py @@ -3,6 +3,7 @@ # License: GNU GPL, version 3 or later; http://www.gnu.org/copyleft/gpl.html import sys, os +from subprocess import Popen, PIPE from anki.utils import findTag, stripHTML from anki.hooks import addHook @@ -45,7 +46,9 @@ class KakasiController(object): from errno import ENOENT raise OSError(ENOENT, 'Kakasi not available') # don't convert kana to hiragana - (self.kin, self.kout) = os.popen2("kakasi -isjis -osjis -u -JH -p") + p = Popen("kakasi -isjis -osjis -u -JH -p", shell=True, + bufsize=-1, stdin=PIPE, stdout=PIPE) + (self.kin, self.kout) = (p.stdin, p.stdout) self._open = True def close(self): diff --git a/anki/importing/__init__.py b/anki/importing/__init__.py index eb61cfd96..3e13f967f 100644 --- a/anki/importing/__init__.py +++ b/anki/importing/__init__.py @@ -260,7 +260,7 @@ from anki.importing.wcu import WCUImporter Importers = ( (_("Text separated by tabs or semicolons (*)"), TextImporter), - (_("Anki 1.0 deck (*.anki)"), Anki10Importer), - (_("Mnemosyne 1.x deck (*.mem)"), Mnemosyne10Importer), - (_("CueCard deck (*.wcu)"), WCUImporter), + (_("Anki Deck (*.anki)"), Anki10Importer), + (_("Mnemosyne Deck (*.mem)"), Mnemosyne10Importer), + (_("CueCard Deck (*.wcu)"), WCUImporter), ) diff --git a/anki/sound.py b/anki/sound.py index e9919549b..1205654d9 100644 --- a/anki/sound.py +++ b/anki/sound.py @@ -53,12 +53,12 @@ queue = [] manager = None if sys.platform.startswith("win32"): - externalPlayer = ["mplayer.exe", "-ao", "win32", "-really-quiet"] + externalPlayer = ["mplayer.exe", "-ao", "win32", "-really-quiet", "-noconsolecontrols"] dir = os.path.dirname(os.path.abspath(sys.argv[0])) os.environ['PATH'] += ";" + dir os.environ['PATH'] += ";" + dir + "\\..\\dist" # for testing else: - externalPlayer = ["mplayer", "-really-quiet"] + externalPlayer = ["mplayer", "-really-quiet", "-noconsolecontrols"] # don't show box on windows if sys.platform == "win32": @@ -121,8 +121,11 @@ class QueueMonitor(threading.Thread): time.sleep(0.1) if queue: path = queue.pop(0) - retryWait(subprocess.Popen( - externalPlayer + [path], startupinfo=si)) + try: + retryWait(subprocess.Popen( + externalPlayer + [path], startupinfo=si)) + except OSError: + raise Exception("Audio player not found") else: return diff --git a/anki/tags.py b/anki/tags.py index dd72c7d91..aa68b6766 100644 --- a/anki/tags.py +++ b/anki/tags.py @@ -51,10 +51,8 @@ def tagIds(s, tags): ids = {} s.statements("insert or ignore into tags (tag) values (:tag)", [{'tag': t} for t in tags]) - tagsD = dict(s.all(""" -select lower(tag), id from tags + tagsD = dict([(x.lower(), y) for (x, y) in s.all(""" +select tag, id from tags where tag in (%s)""" % ",".join([ - "'%s'" % t.replace("'", "''") for t in tags]))) - for tag in tags: - ids[tag.lower()] = tagsD[tag.lower()] - return ids + "'%s'" % t.replace("'", "''") for t in tags]))]) + return tagsD