prototype subdeck from Kanji
This commit is contained in:
1 parent
1c362c0c1c
commit
f427a8e148
2 files changed
+53
-15
No files matched your search
+27
-11
@@ -63,23 +63,39 @@ async function makeWaniKaniKanjiLevels(opts: { cache?: boolean } = {}) {
|
|||||||
|
|
||||||
export async function makeKanjiLevels() {
|
export async function makeKanjiLevels() {
|
||||||
const wk = await makeWaniKaniKanjiLevels({ cache: true });
|
const wk = await makeWaniKaniKanjiLevels({ cache: true });
|
||||||
const wkKanji = new Set(
|
|
||||||
Object.values(wk).flatMap((v) => Object.values(v).flat()),
|
|
||||||
);
|
|
||||||
|
|
||||||
const beyond = yaml.load(
|
const beyond = yaml.load(
|
||||||
readFileSync('assets/beyond.yaml', 'utf-8'),
|
readFileSync('assets/beyond.yaml', 'utf-8'),
|
||||||
) as ILevelMap;
|
) as ILevelMap;
|
||||||
|
|
||||||
for (const [cat, map] of Object.entries(beyond)) {
|
const kanjiToLevel = new Map<
|
||||||
const catMap = wk[cat] || {};
|
string,
|
||||||
Object.entries(map).map(([levelString, ks]) => {
|
{
|
||||||
catMap[levelString] = ks.filter((k) => !wkKanji.has(k));
|
level: number;
|
||||||
});
|
deckName: string;
|
||||||
wk[cat] = catMap;
|
|
||||||
}
|
}
|
||||||
|
>();
|
||||||
|
|
||||||
return wk;
|
const setKanjiToLevel = (lvMap: ILevelMap) => {
|
||||||
|
Object.entries(lvMap).map(([cat, map]) => {
|
||||||
|
Object.entries(map).map(([levelString, ks]) => {
|
||||||
|
const level = Number(levelString);
|
||||||
|
ks.map((k) => {
|
||||||
|
let prev = kanjiToLevel.get(k);
|
||||||
|
if (!prev || prev.level > level) {
|
||||||
|
prev = {
|
||||||
|
level,
|
||||||
|
deckName: cat + '::' + levelString,
|
||||||
|
};
|
||||||
|
kanjiToLevel.set(k, prev);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
setKanjiToLevel(wk);
|
||||||
|
setKanjiToLevel(beyond);
|
||||||
|
|
||||||
|
return kanjiToLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function repairBeyond() {
|
export async function repairBeyond() {
|
||||||
|
|||||||
+26
-4
@@ -1,6 +1,9 @@
|
|||||||
import { AnkiConnect } from '@/ankiconnect';
|
import { AnkiConnect } from '@/ankiconnect';
|
||||||
|
|
||||||
|
import { makeKanjiLevels } from './get-kanji-level';
|
||||||
|
|
||||||
const DECK = 'Takoboto';
|
const DECK = 'Takoboto';
|
||||||
|
const KANJI_FIELD = 'Japanese';
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const anki = new AnkiConnect();
|
const anki = new AnkiConnect();
|
||||||
@@ -11,7 +14,9 @@ async function main() {
|
|||||||
query: `deck:${DECK}`,
|
query: `deck:${DECK}`,
|
||||||
})
|
})
|
||||||
.then((cards) => anki.api('cardsInfo', { cards }))
|
.then((cards) => anki.api('cardsInfo', { cards }))
|
||||||
.then((rs) => {
|
.then(async (rs) => {
|
||||||
|
const kanjiLevels = await makeKanjiLevels();
|
||||||
|
|
||||||
const modelToSubdecks = new Map<
|
const modelToSubdecks = new Map<
|
||||||
string,
|
string,
|
||||||
{
|
{
|
||||||
@@ -20,11 +25,28 @@ async function main() {
|
|||||||
>();
|
>();
|
||||||
rs.map((r) => {
|
rs.map((r) => {
|
||||||
const vs = modelToSubdecks.get(r.modelName) || {};
|
const vs = modelToSubdecks.get(r.modelName) || {};
|
||||||
|
const { value } = r.fields[KANJI_FIELD] || {};
|
||||||
|
if (value) {
|
||||||
// Get the subdeck names from Kanji
|
// Get the subdeck names from Kanji
|
||||||
const subdeck = '???';
|
let subdeck = '';
|
||||||
vs[subdeck] = vs[subdeck] || [];
|
let level = 0;
|
||||||
vs[subdeck]!.push(r.cardId);
|
|
||||||
|
Array.from(value).map((k) => {
|
||||||
|
const m = kanjiLevels.get(k);
|
||||||
|
if (m && m.level > level) {
|
||||||
|
level = m.level;
|
||||||
|
subdeck = m.deckName;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (subdeck) {
|
||||||
|
const cardIds = vs[subdeck] || [];
|
||||||
|
cardIds.push(r.cardId);
|
||||||
|
vs[subdeck] = cardIds;
|
||||||
|
|
||||||
modelToSubdecks.set(r.modelName, vs);
|
modelToSubdecks.set(r.modelName, vs);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
|
|||||||
Reference in new issue
Block a user