Skip to content

Instantly share code, notes, and snippets.

@ijgnd
Created March 10, 2019 01:10
Show Gist options
  • Save ijgnd/cc71b1f6b5627754621c60cf2d7e1fa5 to your computer and use it in GitHub Desktop.
Save ijgnd/cc71b1f6b5627754621c60cf2d7e1fa5 to your computer and use it in GitHub Desktop.
anki change ease siblings (unknown author)
# -*- 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