Created
March 10, 2019 01:10
-
-
Save ijgnd/cc71b1f6b5627754621c60cf2d7e1fa5 to your computer and use it in GitHub Desktop.
anki change ease siblings (unknown author)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# copyright unknown | |
# reuses some code from | |
# - anki/aqt/browser.py - Copyright: Damien Elmes <anki@ichi2.net> | |
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html | |
###BEGIN USER CONF### | |
Activate_for_main_window = True # if False disable shortcuts and menus | |
Shortcut_main_window_Ask = "Alt+Shift+E" | |
Shortcut_browser_Ask = "Alt+Shift+E" | |
Activate_for_Broswer_window = True # if False disable shortcuts and menus | |
Shortcut_browser_Siblings = "Alt+Shift+R" | |
Shortcut_main_window_Siblings = "Alt+Shift+R" | |
onlyForNotesWithThisTag = "" # if a tag is set ease is only increased for sibling cards that have this tag | |
onlyForTheseDecks = "" #if empty for all decks | |
onlyForTheseNoteTypes = "" # if empty for all | |
###END USER CONF### | |
from PyQt4.QtCore import * | |
from PyQt4.QtGui import * | |
from anki.hooks import addHook | |
from aqt import mw | |
from aqt.utils import getOnlyText | |
from anki.utils import ids2str | |
def adjustEaseCards(cids,adjEase): | |
mw.checkpoint("Adjust Ease Ask") | |
mw.progress.start() | |
Factor = 10*int(adjEase) | |
st = "update cards set factor = %s where id in " % Factor | |
mw.col.db.execute(st + ids2str(cids)) | |
# Reset collection and main window | |
mw.col.reset() | |
mw.reset() | |
def adjustEaseSelectedCardsBrowser(cids): | |
adjEase = getOnlyText("Enter new ease value: ") | |
if not adjEase: | |
return | |
adjustEaseCards(cids,adjEase) | |
def adjustEaseCardsMainMenu(): | |
adjEase = getOnlyText("Enter new ease value: ") | |
if not adjEase: | |
return | |
# cids = | |
# adjustEaseCards(cids,adjEase) | |
pass | |
def adjustEaseForSiblings(nids): | |
# note = mw.col.getNote(card.nid) | |
#if iTAG in note.tags: | |
# pass | |
pass | |
def adjustEaseSelectedNotesBrowser(nids): | |
adjustEaseForSiblings(nids) | |
def adjustEaseNotesFromMainWindow(): | |
pass | |
################# Main Menu Entry | |
if Activate_for_main_window: | |
EaseAsk = QAction("Adjust Ease - enter new value for cards", mw) | |
EaseAsk.setShortcut(QKeySequence(Shortcut_main_window_Ask)) | |
EaseAsk.triggered.connect(adjustEaseCardsMainMenu) | |
mw.form.menuTools.addAction(EaseAsk) | |
EaseSiblings = QAction("Adjust Ease - based on no of siblings", mw) | |
EaseSiblings.setShortcut(QKeySequence(Shortcut_main_window_Siblings)) | |
EaseSiblings.triggered.connect(adjustEaseForSiblings) | |
mw.form.menuTools.addAction(EaseSiblings) | |
################# Browser Menu Entry | |
if Activate_for_Broswer_window: | |
def setupMenu(browser): | |
a = QAction("Adjust Ease - enter new value for cards", browser) | |
a.setShortcut(QKeySequence(Shortcut_browser_Ask)) | |
browser.connect(a, SIGNAL("triggered()"), lambda e=browser: adjustEaseSelectedCardsBrowser(e)) | |
browser.form.menuEdit.addAction(a) | |
a = QAction("Adjust Ease - based on no of siblings", browser) | |
a.setShortcut(QKeySequence(Shortcut_browser_Siblings)) | |
browser.connect(a, SIGNAL("triggered()"), lambda e=browser: onEaseSiblings(e)) | |
browser.form.menuEdit.addAction(a) | |
browser.form.menuEdit.addSeparator() | |
def onEaseAsk(browser): | |
adjustEaseAsk(browser.selectedCards()) | |
def onEaseSiblings(browser): | |
adjustEaseSelectedNotesBrowser(browser.selectedNotes()) | |
addHook("browser.setupMenus", setupMenu) | |
""" | |
# -*- coding: utf-8 -*- | |
# - function _nextRevIvl (apart from the parts between "START OF MOD" | |
# and "END OF MOD" is from anki/reviewer.py - Copyright: Damien | |
# Elmes <anki@ichi2.net> | |
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html | |
# modify only reviews on desktop, doesn't work with AnkiMobile/AnkiDroid | |
###BEGIN USER CONF### | |
iTAG = | |
###END USER CONF### | |
from anki.sched import Scheduler | |
from aqt import mw | |
def _nextRevIvl(self, card, ease): | |
"Ideal next interval for CARD, given EASE." | |
delay = self._daysLate(card) | |
conf = self._revConf(card) | |
fct = card.factor / 1000 | |
ivl2 = self._constrainedIvl((card.ivl + delay // 4) * 1.2, conf, card.ivl) | |
ivl3 = self._constrainedIvl((card.ivl + delay // 2) * fct, conf, ivl2) | |
ivl4 = self._constrainedIvl( | |
(card.ivl + delay) * fct * conf['ease4'], conf, ivl3) | |
if ease == 2: | |
interval = ivl2 | |
elif ease == 3: | |
interval = ivl3 | |
elif ease == 4: | |
interval = ivl4 | |
####START OF MOD### | |
note = mw.col.getNote(card.nid) | |
UNFINISHED | |
if iTAG in note.tags: | |
... | |
mymod=1 | |
interval = interval + int(mymod * len(note.cards()) * interval) | |
####END OF MOD### | |
# interval capped? | |
return min(interval, conf['maxIvl']) | |
Scheduler._nextRevIvl = _nextRevIvl | |
""" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment