mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 08:46:37 -04:00
update hooks to use libanki, warn about plugin errors differently
This commit is contained in:
parent
8ea3117d67
commit
881a3c2468
4 changed files with 33 additions and 43 deletions
|
@ -16,6 +16,7 @@ from ankiqt.ui.utils import saveGeom, restoreGeom, saveSplitter, restoreSplitter
|
|||
from anki.errors import *
|
||||
from anki.db import *
|
||||
from anki.stats import CardStats
|
||||
from anki.hooks import runHook
|
||||
|
||||
# Deck editor
|
||||
##########################################################################
|
||||
|
@ -396,7 +397,7 @@ class EditDeck(QMainWindow):
|
|||
self.connect(self.dialog.actionSelectFacts, SIGNAL("triggered()"), self.selectFacts)
|
||||
self.connect(self.dialog.actionUndo, SIGNAL("triggered()"), self.onUndo)
|
||||
self.connect(self.dialog.actionRedo, SIGNAL("triggered()"), self.onRedo)
|
||||
self.parent.runHook('editor.setupMenus', self)
|
||||
runHook('editor.setupMenus', self)
|
||||
|
||||
def onClose(self):
|
||||
saveSplitter(self.dialog.splitter, "editor")
|
||||
|
|
|
@ -5,6 +5,7 @@ import sys
|
|||
from PyQt4.QtGui import *
|
||||
from PyQt4.QtCore import *
|
||||
import ankiqt.forms
|
||||
from anki.hooks import runHook
|
||||
|
||||
# Hideable help area widget
|
||||
##########################################################################
|
||||
|
@ -33,7 +34,7 @@ class HelpArea(object):
|
|||
self.helpFrame.hide()
|
||||
self.widget.hide()
|
||||
if self.mainWindow:
|
||||
self.mainWindow.runHook("helpChanged")
|
||||
runHook("helpChanged")
|
||||
|
||||
def showText(self, text, py={}):
|
||||
self.show()
|
||||
|
@ -42,7 +43,7 @@ class HelpArea(object):
|
|||
self.handlers = py
|
||||
self.flush()
|
||||
if self.mainWindow:
|
||||
self.mainWindow.runHook("helpChanged")
|
||||
runHook("helpChanged")
|
||||
|
||||
def flush(self):
|
||||
if sys.platform.startswith("darwin"):
|
||||
|
|
|
@ -18,6 +18,7 @@ from anki.utils import addTags, deleteTags, parseTags
|
|||
from anki.media import rebuildMediaDir
|
||||
from anki.db import OperationalError
|
||||
from anki.stdmodels import BasicModel
|
||||
from anki.hooks import runHook, addHook, removeHook, _hooks
|
||||
import anki.latex
|
||||
import anki.lang
|
||||
import ankiqt
|
||||
|
@ -39,10 +40,7 @@ class AnkiQt(QMainWindow):
|
|||
self.setLang()
|
||||
self.setupFonts()
|
||||
self.setupBackupDir()
|
||||
self.setupHooks()
|
||||
self.loadPlugins()
|
||||
self.setupMainWindow()
|
||||
self.rebuildPluginsMenu()
|
||||
self.alterShortcuts()
|
||||
self.setupTray()
|
||||
self.connectMenuActions()
|
||||
|
@ -61,15 +59,17 @@ class AnkiQt(QMainWindow):
|
|||
if not self.maybeLoadLastDeck(args):
|
||||
self.setEnabled(True)
|
||||
self.moveToState("auto")
|
||||
# run after-init hook
|
||||
try:
|
||||
self.runHook('init')
|
||||
except:
|
||||
ui.utils.showWarning(_("Broken plugin:\n\n%s") %
|
||||
traceback.format_exc())
|
||||
# check for updates
|
||||
self.setupAutoUpdate()
|
||||
self.setupErrorHandler()
|
||||
self.loadPlugins()
|
||||
self.rebuildPluginsMenu()
|
||||
# run after-init hook
|
||||
try:
|
||||
runHook('init')
|
||||
except:
|
||||
ui.utils.showWarning(_("Broken plugin:\n\n%s") %
|
||||
traceback.format_exc())
|
||||
|
||||
def setupMainWindow(self):
|
||||
self.mainWin = ankiqt.forms.main.Ui_MainWindow()
|
||||
|
@ -117,9 +117,17 @@ class AnkiQt(QMainWindow):
|
|||
self.timer.setInterval(interval)
|
||||
|
||||
def onTimeout(self):
|
||||
stdText = _("""\
|
||||
An error occurred. Please copy the following into a bug report.\n\n""")
|
||||
pluginText = _("""\
|
||||
An error occurred in a plugin. Please contact the plugin author.
|
||||
Please do not file a bug report with Anki.\n\n""")
|
||||
print self.pool
|
||||
ui.utils.showText(_("""\
|
||||
An error occurred. Please copy the following message into a bug report.\n\n""" + self.pool[0:10000]))
|
||||
if "plugin" in self.pool:
|
||||
txt = pluginText
|
||||
else:
|
||||
txt = stdText
|
||||
ui.utils.showText(txt + self.pool[0:10000])
|
||||
self.pool = ""
|
||||
self.timer = None
|
||||
pipe = ErrorPipe(self)
|
||||
|
@ -222,7 +230,7 @@ An error occurred. Please copy the following message into a bug report.\n\n""" +
|
|||
os.chdir(self.deck.mediaDir())
|
||||
self.showAnswerButton()
|
||||
self.updateMarkAction()
|
||||
self.runHook('showQuestion')
|
||||
runHook('showQuestion')
|
||||
elif state == "showAnswer":
|
||||
self.showEaseButtons()
|
||||
self.enableCardMenuItems()
|
||||
|
@ -404,29 +412,6 @@ getCard() returns:
|
|||
text = css + '<span class="interface">' + text + "</span>"
|
||||
return text
|
||||
|
||||
# Hooks
|
||||
##########################################################################
|
||||
|
||||
def setupHooks(self):
|
||||
self.hooks = {}
|
||||
|
||||
def addHook(self, hookName, func):
|
||||
if not self.hooks.get(hookName, None):
|
||||
self.hooks[hookName] = []
|
||||
if func not in self.hooks[hookName]:
|
||||
self.hooks[hookName].append(func)
|
||||
|
||||
def removeHook(self, hookName, func):
|
||||
hook = self.hooks.get(hookName, [])
|
||||
if func in hook:
|
||||
hook.remove(func)
|
||||
|
||||
def runHook(self, hookName, *args):
|
||||
hook = self.hooks.get(hookName, None)
|
||||
if hook:
|
||||
for func in hook:
|
||||
func(*args)
|
||||
|
||||
# Deck loading & saving: backend
|
||||
##########################################################################
|
||||
|
||||
|
@ -761,7 +746,7 @@ Error was:\n%(f1)s\n...\n%(f2)s""") % {'f1': fmt1, 'f2': fmt2})
|
|||
|
||||
def prepareForExit(self):
|
||||
"Save config and window geometry."
|
||||
self.runHook('quit')
|
||||
runHook("quit")
|
||||
self.help.hide()
|
||||
self.config['mainWindowGeom'] = self.saveGeometry()
|
||||
# save config
|
||||
|
@ -925,7 +910,7 @@ Error was:\n%(f1)s\n...\n%(f2)s""") % {'f1': fmt1, 'f2': fmt2})
|
|||
self.help.showText(txt)
|
||||
|
||||
def onCardStats(self):
|
||||
self.addHook("showQuestion", self.onCardStats)
|
||||
addHook("showQuestion", self.onCardStats)
|
||||
txt = ""
|
||||
if self.currentCard:
|
||||
txt += _("<h1>Current card</h1>")
|
||||
|
@ -939,8 +924,7 @@ Error was:\n%(f1)s\n...\n%(f2)s""") % {'f1': fmt1, 'f2': fmt2})
|
|||
|
||||
def removeCardStatsHook(self):
|
||||
"Remove the update hook if the help menu was changed."
|
||||
print "rem"
|
||||
self.removeHook("showQuestion", self.onCardStats)
|
||||
removeHook("showQuestion", self.onCardStats)
|
||||
|
||||
def onShowGraph(self):
|
||||
self.setStatus(_("Loading graphs (may take time)..."))
|
||||
|
@ -1669,3 +1653,6 @@ tag or delete references to missing files?"""))
|
|||
"%(b)d unused files removed.") % {
|
||||
'a': missing,
|
||||
'b': unused})
|
||||
|
||||
def addHook(self, *args):
|
||||
addHook(*args)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# License: GNU GPL, version 3 or later; http://www.gnu.org/copyleft/gpl.html
|
||||
|
||||
from PyQt4 import QtGui, QtCore
|
||||
from anki.hooks import addHook
|
||||
Qt = QtCore.Qt
|
||||
|
||||
class AnkiTrayIcon(QtCore.QObject):
|
||||
|
@ -21,7 +22,7 @@ class AnkiTrayIcon(QtCore.QObject):
|
|||
self.ti.setObjectName("trayIcon")
|
||||
if self.ti:
|
||||
QtGui.QApplication.setQuitOnLastWindowClosed(False)
|
||||
self.mw.addHook("quit", self.onQuit)
|
||||
addHook("quit", self.onQuit)
|
||||
self.ti.setIcon(QtGui.QIcon(":/icons/anki.png"))
|
||||
self.ti.setToolTip("Anki")
|
||||
# hook signls, and Anki state changes
|
||||
|
|
Loading…
Reference in a new issue