mirror of
https://github.com/ankitects/anki.git
synced 2025-09-25 01:06:35 -04:00
remove old fmtTimeSpan() and associated strings
This commit is contained in:
parent
22bb4607c9
commit
e73157285e
5 changed files with 19 additions and 99 deletions
|
@ -12,7 +12,7 @@ import anki
|
||||||
from anki.consts import *
|
from anki.consts import *
|
||||||
from anki.lang import _, ngettext
|
from anki.lang import _, ngettext
|
||||||
from anki.rsbackend import FString
|
from anki.rsbackend import FString
|
||||||
from anki.utils import fmtTimeSpan, ids2str
|
from anki.utils import ids2str
|
||||||
|
|
||||||
# Card stats
|
# Card stats
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
@ -631,8 +631,12 @@ group by day order by day)"""
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
i: List[str] = []
|
i: List[str] = []
|
||||||
self._line(i, _("Average interval"), fmtTimeSpan(avg * 86400))
|
self._line(
|
||||||
self._line(i, _("Longest interval"), fmtTimeSpan(max_ * 86400))
|
i, _("Average interval"), self.col.backend.format_time_span(avg * 86400)
|
||||||
|
)
|
||||||
|
self._line(
|
||||||
|
i, _("Longest interval"), self.col.backend.format_time_span(max_ * 86400)
|
||||||
|
)
|
||||||
return txt + self._lineTbl(i)
|
return txt + self._lineTbl(i)
|
||||||
|
|
||||||
def _ivls(self) -> Tuple[list, int]:
|
def _ivls(self) -> Tuple[list, int]:
|
||||||
|
|
|
@ -6,7 +6,6 @@ from __future__ import annotations
|
||||||
# some add-ons expect json to be in the utils module
|
# some add-ons expect json to be in the utils module
|
||||||
import json # pylint: disable=unused-import
|
import json # pylint: disable=unused-import
|
||||||
import locale
|
import locale
|
||||||
import math
|
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
import random
|
import random
|
||||||
|
@ -21,10 +20,9 @@ import traceback
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from hashlib import sha1
|
from hashlib import sha1
|
||||||
from html.entities import name2codepoint
|
from html.entities import name2codepoint
|
||||||
from typing import Iterable, Iterator, List, Optional, Tuple, Union
|
from typing import Iterable, Iterator, List, Optional, Union
|
||||||
|
|
||||||
from anki.db import DB
|
from anki.db import DB
|
||||||
from anki.lang import ngettext
|
|
||||||
|
|
||||||
_tmpdir: Optional[str]
|
_tmpdir: Optional[str]
|
||||||
|
|
||||||
|
@ -37,86 +35,6 @@ def intTime(scale: int = 1) -> int:
|
||||||
return int(time.time() * scale)
|
return int(time.time() * scale)
|
||||||
|
|
||||||
|
|
||||||
timeTable = {
|
|
||||||
"years": lambda n: ngettext("%s year", "%s years", n),
|
|
||||||
"months": lambda n: ngettext("%s month", "%s months", n),
|
|
||||||
"days": lambda n: ngettext("%s day", "%s days", n),
|
|
||||||
"hours": lambda n: ngettext("%s hour", "%s hours", n),
|
|
||||||
"minutes": lambda n: ngettext("%s minute", "%s minutes", n),
|
|
||||||
"seconds": lambda n: ngettext("%s second", "%s seconds", n),
|
|
||||||
}
|
|
||||||
|
|
||||||
inTimeTable = {
|
|
||||||
"years": lambda n: ngettext("in %s year", "in %s years", n),
|
|
||||||
"months": lambda n: ngettext("in %s month", "in %s months", n),
|
|
||||||
"days": lambda n: ngettext("in %s day", "in %s days", n),
|
|
||||||
"hours": lambda n: ngettext("in %s hour", "in %s hours", n),
|
|
||||||
"minutes": lambda n: ngettext("in %s minute", "in %s minutes", n),
|
|
||||||
"seconds": lambda n: ngettext("in %s second", "in %s seconds", n),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def fmtTimeSpan(
|
|
||||||
time: Union[int, float],
|
|
||||||
pad: int = 0,
|
|
||||||
point: int = 0,
|
|
||||||
inTime: bool = False,
|
|
||||||
unit: int = 99,
|
|
||||||
) -> str:
|
|
||||||
"Return a string representing a time span (eg '2 days')."
|
|
||||||
(type, point) = optimalPeriod(time, point, unit)
|
|
||||||
time = convertSecondsTo(time, type)
|
|
||||||
if not point:
|
|
||||||
time = int(round(time))
|
|
||||||
if inTime:
|
|
||||||
fmt = inTimeTable[type](_pluralCount(time, point))
|
|
||||||
else:
|
|
||||||
fmt = timeTable[type](_pluralCount(time, point))
|
|
||||||
timestr = "%%%(a)d.%(b)df" % {"a": pad, "b": point}
|
|
||||||
return locale.format_string(fmt % timestr, time)
|
|
||||||
|
|
||||||
|
|
||||||
def optimalPeriod(time: Union[int, float], point: int, unit: int) -> Tuple[str, int]:
|
|
||||||
if abs(time) < 60 or unit < 1:
|
|
||||||
type = "seconds"
|
|
||||||
point -= 1
|
|
||||||
elif abs(time) < 3600 or unit < 2:
|
|
||||||
type = "minutes"
|
|
||||||
elif abs(time) < 60 * 60 * 24 or unit < 3:
|
|
||||||
type = "hours"
|
|
||||||
elif abs(time) < 60 * 60 * 24 * 30 or unit < 4:
|
|
||||||
type = "days"
|
|
||||||
elif abs(time) < 60 * 60 * 24 * 365 or unit < 5:
|
|
||||||
type = "months"
|
|
||||||
point += 1
|
|
||||||
else:
|
|
||||||
type = "years"
|
|
||||||
point += 1
|
|
||||||
return (type, max(point, 0))
|
|
||||||
|
|
||||||
|
|
||||||
def convertSecondsTo(seconds: Union[int, float], type: str) -> float:
|
|
||||||
if type == "seconds":
|
|
||||||
return seconds
|
|
||||||
elif type == "minutes":
|
|
||||||
return seconds / 60
|
|
||||||
elif type == "hours":
|
|
||||||
return seconds / 3600
|
|
||||||
elif type == "days":
|
|
||||||
return seconds / 86400
|
|
||||||
elif type == "months":
|
|
||||||
return seconds / 2592000
|
|
||||||
elif type == "years":
|
|
||||||
return seconds / 31536000
|
|
||||||
assert False
|
|
||||||
|
|
||||||
|
|
||||||
def _pluralCount(time: Union[int, float], point: int) -> int:
|
|
||||||
if point:
|
|
||||||
return 2
|
|
||||||
return math.floor(time)
|
|
||||||
|
|
||||||
|
|
||||||
# Locale
|
# Locale
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
# coding: utf-8
|
|
||||||
|
|
||||||
from anki.utils import fmtTimeSpan
|
|
||||||
|
|
||||||
|
|
||||||
def test_fmtTimeSpan():
|
|
||||||
assert fmtTimeSpan(5) == "5 seconds"
|
|
||||||
assert fmtTimeSpan(5, inTime=True) == "in 5 seconds"
|
|
|
@ -25,7 +25,7 @@ from anki.lang import _, ngettext
|
||||||
from anki.models import NoteType
|
from anki.models import NoteType
|
||||||
from anki.notes import Note
|
from anki.notes import Note
|
||||||
from anki.rsbackend import FString
|
from anki.rsbackend import FString
|
||||||
from anki.utils import fmtTimeSpan, htmlToTextLine, ids2str, intTime, isMac, isWin
|
from anki.utils import htmlToTextLine, ids2str, intTime, isMac, isWin
|
||||||
from aqt import AnkiQt, gui_hooks
|
from aqt import AnkiQt, gui_hooks
|
||||||
from aqt.editor import Editor
|
from aqt.editor import Editor
|
||||||
from aqt.exporting import ExportDialog
|
from aqt.exporting import ExportDialog
|
||||||
|
@ -74,7 +74,7 @@ class FindDupesDialog:
|
||||||
|
|
||||||
|
|
||||||
class DataModel(QAbstractTableModel):
|
class DataModel(QAbstractTableModel):
|
||||||
def __init__(self, browser):
|
def __init__(self, browser: Browser):
|
||||||
QAbstractTableModel.__init__(self)
|
QAbstractTableModel.__init__(self)
|
||||||
self.browser = browser
|
self.browser = browser
|
||||||
self.col = browser.col
|
self.col = browser.col
|
||||||
|
@ -82,8 +82,8 @@ class DataModel(QAbstractTableModel):
|
||||||
self.activeCols = self.col.conf.get(
|
self.activeCols = self.col.conf.get(
|
||||||
"activeCols", ["noteFld", "template", "cardDue", "deck"]
|
"activeCols", ["noteFld", "template", "cardDue", "deck"]
|
||||||
)
|
)
|
||||||
self.cards = []
|
self.cards: List[int] = []
|
||||||
self.cardObjs = {}
|
self.cardObjs: Dict[int, Card] = {}
|
||||||
|
|
||||||
def getCard(self, index):
|
def getCard(self, index):
|
||||||
id = self.cards[index.row()]
|
id = self.cards[index.row()]
|
||||||
|
@ -320,7 +320,7 @@ class DataModel(QAbstractTableModel):
|
||||||
return _("(new)")
|
return _("(new)")
|
||||||
elif c.type == 1:
|
elif c.type == 1:
|
||||||
return _("(learning)")
|
return _("(learning)")
|
||||||
return fmtTimeSpan(c.ivl * 86400)
|
return self.col.backend.format_time_span(c.ivl * 86400)
|
||||||
elif type == "cardEase":
|
elif type == "cardEase":
|
||||||
if c.type == 0:
|
if c.type == 0:
|
||||||
return _("(new)")
|
return _("(new)")
|
||||||
|
|
|
@ -33,8 +33,14 @@ def stripSounds(text) -> str:
|
||||||
return aqt.mw.col.backend.strip_av_tags(text)
|
return aqt.mw.col.backend.strip_av_tags(text)
|
||||||
|
|
||||||
|
|
||||||
|
def fmtTimeSpan(time, pad=0, point=0, inTime=False, unit=99):
|
||||||
|
print("fmtTimeSpan() has become col.backend.format_time_span()")
|
||||||
|
return aqt.mw.col.backend.format_time_span(time)
|
||||||
|
|
||||||
|
|
||||||
def install_pylib_legacy():
|
def install_pylib_legacy():
|
||||||
anki.utils.bodyClass = bodyClass
|
anki.utils.bodyClass = bodyClass
|
||||||
|
anki.utils.fmtTimeSpan = fmtTimeSpan
|
||||||
anki.sound._soundReg = r"\[sound:(.*?)\]"
|
anki.sound._soundReg = r"\[sound:(.*?)\]"
|
||||||
anki.sound.allSounds = allSounds
|
anki.sound.allSounds = allSounds
|
||||||
anki.sound.stripSounds = stripSounds
|
anki.sound.stripSounds = stripSounds
|
||||||
|
|
Loading…
Reference in a new issue