diff --git a/src/lib/components/Reader/Reader.svelte b/src/lib/components/Reader/Reader.svelte index 666c7c0..335053a 100644 --- a/src/lib/components/Reader/Reader.svelte +++ b/src/lib/components/Reader/Reader.svelte @@ -66,7 +66,7 @@ return; } const pageClamped = clamp(newPage, 1, pages?.length); - const charCount = getCharCount(pages, pageClamped) || 0; + const { charCount } = getCharCount(pages, pageClamped); updateProgress( volume.mokuroData.volume_uuid, @@ -144,8 +144,9 @@ } } - $: charCount = $settings.charCount ? getCharCount(pages, page) : 0; - $: maxCharCount = getCharCount(pages); + $: charCount = $settings.charCount ? getCharCount(pages, page).charCount : 0; + $: maxCharCount = getCharCount(pages).charCount; + $: totalLineCount = getCharCount(pages).lineCount; let startX = 0; let startY = 0; @@ -204,26 +205,34 @@ $: { if (volume) { + const { charCount, lineCount } = getCharCount(pages, page); + fireExstaticEvent('mokuro-reader:page.change', { title: volume.mokuroData.title, volumeName: volume.mokuroData.volume, - currentCharCount: getCharCount(pages, page) || 0, + currentCharCount: charCount, currentPage: page, totalPages: pages.length, - totalCharCount: maxCharCount || 0 + totalCharCount: maxCharCount || 0, + currentlineCount: lineCount, + totalLineCount }); } } beforeNavigate(() => { if (volume) { + const { charCount, lineCount } = getCharCount(pages, page); + fireExstaticEvent('mokuro-reader:reader.closed', { title: volume.mokuroData.title, volumeName: volume.mokuroData.volume, - currentCharCount: getCharCount(pages, page) || 0, + currentCharCount: charCount, currentPage: page, totalPages: pages.length, - totalCharCount: maxCharCount || 0 + totalCharCount: maxCharCount || 0, + currentlineCount: lineCount, + totalLineCount }); } }); diff --git a/src/lib/util/count-chars.ts b/src/lib/util/count-chars.ts index 388203d..73c78ef 100644 --- a/src/lib/util/count-chars.ts +++ b/src/lib/util/count-chars.ts @@ -17,20 +17,23 @@ export function countChars(line: string) { } export function getCharCount(pages: Page[], currentPage?: number) { + let charCount = 0; + let lineCount = 0; + if (pages && pages.length > 0) { const max = currentPage || pages.length - let charCount = 0; for (let i = 0; i < max; i++) { const blocks = pages[i].blocks; blocks.forEach((block) => { + lineCount += block.lines.length; block.lines.forEach((line) => { charCount += countChars(line); }); }); } - - return charCount; } + + return { charCount, lineCount }; } \ No newline at end of file diff --git a/src/lib/util/misc.ts b/src/lib/util/misc.ts index e054da9..8e7f293 100644 --- a/src/lib/util/misc.ts +++ b/src/lib/util/misc.ts @@ -39,7 +39,9 @@ type ExtaticPayload = { currentCharCount: number; totalCharCount: number; currentPage: number; - totalPages: number + totalPages: number; + currentlineCount: number; + totalLineCount: number; } type ExtaticEvent = 'mokuro-reader:page.change' | 'mokuro-reader:reader.closed'